云原生全景图之五:应用程序定义和开发层

作者 | Catherine Paganini、Jason Morgan

来源 | K8sMeetup

头图 | 下载于视觉中国

前文介绍了如何将所有应用程序组件作为整体来编排和管理(编排和管理层)。本文将介绍云原生全景图的最上层:应用程序定义和开发层。

现在我们来到了云原生全景图的最上层。应用程序定义和开发层,顾名思义,聚焦在帮助工程师构建应用程序并使其运行的工具上。本系列前面的文章都是关于构建可靠安全的环境以及提供所有必需的应用程序依赖,应用程序定义和开发层则是关于构建软件。

数据库

是什么

数据库管理系统是一个应用程序,可帮助其他应用程序高效地存储和检索数据。

数据库能保障数据存储,仅授权的用户能访问数据,并且允许用户通过专门的请求来检索数据。尽管数据库类型繁多,但它们的总体目标都是相同的。

解决的问题

大多数应用程序都需要有效的方式来存储和检索数据,并且保证数据安全。数据库使用成熟的技术以结构化的方式进行此操作。

如何解决

数据库提供存储和检索应用程序数据的通用接口。开发人员使用这些标准接口,并用一种简单的查询语言来存储、查询和检索信息。同时,数据库允许用户连续备份和保存数据以及加密和管理数据访问权限。

对应工具

我们已经了解了数据库管理系统是一种用于存储和检索数据的应用程序。它使用一种通用的语言和界面,并且可以被多种语言和框架轻松使用。

常见的两种数据库类型为:结构化查询语言(SQL)数据库和 NoSQL 数据库。应用程序该使用哪种数据库应该由其需求来驱动。

Kubernetes 支持有状态的应用程序,近年来使用 Kubernetes 的使用越来越广泛,我们已经看到了利用容器化技术的新一代数据库。这些新的云原生数据库旨在将 Kubernetes 的扩展性和可用性优势引入数据库。YugaByte 和 Couchbase 之类的工具是典型的云原生数据库,Vitess 和 TiKV 是该领域的 CNCF 项目。

注意:查看此类别时会发现以 DB 结尾的多个名称(例如 MongoDB、CockroachDB、FaunaDB),你可能会猜测它们代表数据库。还有以 SQL 结尾的各种名称(例如 MySQL 或 MemSQL)。一些是已经适应了云原生环境的“老派”数据库,还有一些是兼容 SQL 的 NoSQL 数据库,例如 YugaByte 和 Vitess。


数据流和消息传递

是什么

数据流和消息传递工具通过在系统之间传输消息(即事件)来实现服务到服务的通信。单个服务连接到消息传递服务以发布事件和(或)从其他服务读取消息。这种动态变化创造了一个环境,在这个环境中单个应用要么是发布者,即可编写事件;要么是订阅事件的订阅者,或者更可能是两者兼而有之。

解决的问题

随着服务激增,应用程序环境变得越来越复杂,应用程序之间的通信编排也更具挑战性。数据流或消息平台提供了一个中心位置来发布和读取系统中发生的所有事件,从而使应用程序可以一起工作,而不必相互了解。

如何解决

当一个服务执行其他服务应该知道的事情时,它会将事件“发布”到数据流或消息传递工具。需要了解这些事件类型的服务将订阅并监视数据流或消息传递工具。这就是“发布-订阅”的本质。

通过引入管理通信的“中间层”可以使服务彼此解耦。服务只是监视事件、采取行动并发布新事件,这样能建立高度分离的体系结构。在此体系结构中,服务可以协作而无需彼此了解。这种解耦使工程师能够添加新功能,而无需更新下游应用程序(消费者)或发送大量查询。系统的解耦程度越高,更改的灵活性和适应性就越高,而这正是工程师在系统中所追求的。

对应工具

数据流和消息传递工具早在云原生技术成为现实之前就已经存在了。为了集中管理关键业务事件,组织建立了大型的企业级服务总线。但是,当我们在云原生环境中谈论数据流和消息传递时,通常是指 NATS、RabbitMQ、Kafka 或云提供的消息队列之类的工具。

消息传递和数据流传输系统为编排系统进行通信提供了一个中心位置。消息总线提供了所有应用程序都可以访问的公共位置,应用程序都可以通过发布消息来告诉其服务它们在做什么,或者通过订阅消息来查看正在发生的事情。

NATS 和 Cloudevents 项目都是这个领域的孵化项目,NATS 提供了一个成熟的消息传递系统,而 Cloudevents 则致力于标准化系统之间的消息格式。Strimzi,Pravega 和 Tremor 是沙盒项目,每个项目都针对数据流和消息传递的独特用例进行了量身定制。

应用程序定义和镜像构建

是什么

应用程序定义和镜像构建是一个广泛的类别,可以分为两个主要的子类别:

  • 聚焦于开发的工具:可帮助将应用程序代码构建到容器和(或)Kubernetes 中;

  • 聚焦于运维的工具:以标准化的方式部署应用。

无论是加快或简化开发环境,提供标准化的方式来部署第三方应用程序,还是简化编写新的 Kubernetes 扩展的过程,此类别的工具都可以优化 Kubernetes 开发和运维人员的体验。

解决的问题

Kubernetes(或者容器化环境)非常灵活且功能强大。这种灵活性也带来了复杂性,主要体现在对于各种新用例有众多配置选项。开发人员必须将代码容器化,并在类生产环境中进行开发。在快速的发布计划周期下,运维人员需要以一种标准化的方法来将应用程序部署到容器环境中。

如何解决

该领域的工具旨在解决开发或运维人员面临的一些挑战。对于开发者,有一些工具可以简化扩展 Kubernetes 的过程以构建、部署和连接应用程序。许多项目和产品可以存储或部署预打包的应用程序,使运维人员可以快速部署 Kafka 之类的流服务或安装 Linkerd 之类的服务网格。

开发云原生应用程序带来了一系列全新的挑战,因此需要大量多样化的工具来简化应用程序的构建和部署。当你需要解决环境中的开发和运维问题时,可以看看此类别中的工具。

对应的工具

应用程序定义和构建工具涵盖了广泛的功能,比如使用 KubeVirt 将 Kubernetes 扩展到虚拟机,或使用 Telepresence 之类的工具将开发环境移植到 Kubernetes 中来加速应用程序开发等。从整体上讲,该领域中的工具可以解决开发人员面临的正确编写、打包、测试或运行自定义应用程序的问题,也可以解决运维人员面临的部署和管理应用程序的问题。

Helm 是该类别中唯一一个毕业的项目,为许多应用程序部署模式奠定了基础。Helm 允许 Kubernetes 用户部署和自定义一些流行的第三方应用程序,Artifact Hub(CNCF 沙箱项目)和 Bitnami 等项目已采用 Helm 来提供精选的应用程序目录。Helm 也足够灵活,允许用户自定义自己的应用程序部署。

Operator Framework 是一个孵化项目,旨在简化构建和部署 Operator 的过程。Operator 不在本文讨论范围之内,但请注意,它类似于 Helm,有助于部署和管理应用程序。Cloud Native Buildpacks 是另一个孵化项目,旨在简化将应用程序代码构建到容器中的过程。

持续集成和持续交付

是什么

持续集成(CI)和持续交付(CD)工具可通过嵌入式质量保证实现快速高效的开发过程。CI 通过立即构建和测试代码来自动化代码变更,确保生成可部署的制品。CD 则更进一步,推动该制品进入部署阶段。

成熟的 CI/CD 系统会监视源代码中的变更,自动构建和测试代码,然后将其从开发阶段转移到生产阶段。在此过程中,CI/CD 系统必须通过各种测试或验证来决定该过程是继续还是失败。

解决的问题

构建和部署应用程序是一个困难重重且容易出错的过程,特别是当过程中涉及很多人为干预和手动步骤时。如果不将代码集成到代码库中,开发人员在软件上花的时间越长,识别错误所花费的时间就越长,问题修复也就越困难。通过定期集成代码,可以及早发现错误并更轻松地排除故障。毕竟,在几行代码中查找错误比在几百行代码中查找错误要容易得多。

尽管 Kubernetes 之类的工具为运行和管理应用程序提供了极大的灵活性,它们也为 CI/CD 工具带来了新的挑战和机遇。云原生 CI/CD 系统能够利用 Kubernetes 本身来构建、运行和管理 CI/CD 流程(通常称为流水线)。Kubernetes 还提供应用程序运行状况的信息,从而使云原生 CI/CD 工具能够更轻松地确定给定的变更是否成功,是否需要回滚。

如何解决

CI 工具可确保开发人员引入的任何代码更改或更新都能自动、连续地与其他更改进行构建、验证并集成。开发人员每次添加更新时都会触发自动测试,确保只有良好的代码才能将其导入系统。CD 扩展了 CI,能将 CI 流程的结果推送到类生产和生产环境中。

假设开发人员更改了 Web 应用的代码。CI 系统会看到代码更改,然后构建并测试该 Web 应用的新版本。CD 系统获取该新版本,并将其部署到开发、测试、预生产以及最终生产环境中。在流程的每个步骤之后测试已部署的应用程序时,它会执行此操作。这些系统一起构成了该 Web 应用的 CI/CD 管道。

对应工具

随着时间的流逝,市面上已经有了许多工具来帮助将代码从存储库移至运行最终应用程序的生产环境。像大多数其他计算领域一样,云原生开发的到来改变了 CI/CD 系统。类似 Jenkins (可能是市场上使用最广泛的 CI 工具)的传统工具已经通过完善迭代,以更好地适应 Kubernetes 生态系统。Flux 和 Argo 等公司率先开发了一种称为 GitOps 的持续交付的新方法。

通常,该领域的项目和产品是:

  • CI 系统;

  • CD 系统;

  • 帮助 CD 系统确定代码是否准备好投入生产的工具;和(或)

  • 前三者的合集(Spinnaker 和 Argo 就是如此)。

Argo 和 Brigade 是该领域中仅有的 CNCF 项目,但是你可以找到由持续交付基金会(Continuous Delivery Foundation)托管的更多项目。在此空间中寻找工具,可以帮助组织自动化生产路径。

总结

应用程序定义和开发层中的工具使工程师能够构建云原生应用程序。该层的工具包括:

  • 数据库:存储和检索数据;

  • 数据流和消息传递工具:实现相互分离、精心设计的架构;

  • 应用程序定义和镜像构建工具:包含可改善开发人员和操作员体验的多种技术;

  • CI/CD 工具:确保代码处于可部署状态,并帮助工程师及早发现错误,从而确保代码质量。


CSDN协同行业大佬
打造13长热门知识图谱及IT成长路线
助力千万IT人成长,快速实现职场进阶!
更多精彩推荐
☞经典永不过时!重温设计模式☞PassMark 更新排行,苹果 M1 杀疯了☞干货!Redis集群工作原理解析
点分享点收藏点点赞点在看

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/515279.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flink 1.11 SQL 十余项革新大揭秘,哪些演变在便捷你的使用体验?

简介: SQL 作为 Flink 中公认的核心模块之一,对推动 Flink 流批一体功能的完善至关重要。在 1.11 中,Flink SQL 也进行了大量的增强与完善,开发大功能 10 余项,不仅扩大了应用场景,还简化了流程&#xff0c…

uniapp 小于1000 按原数字显示 超过1000 数字换算成10w+ 1.3k+ 显示

文章目录1. 公共方法2. 使用1. 公共方法 methods: {// 数字换算graceNumber(number) {if (number 0) {return "0";} else if (number > 999 && number < 9999) {return (number / 1000).toFixed(1) k;} else if (number > 9999 && numbe…

我们为什么要做 SoloPi

SoloPi现状 去年&#xff08;2019年&#xff09;7月份&#xff0c;蚂蚁集团正式对外开源了客户端自动化测试工具 SoloPi &#xff0c;其主要包括三大模块&#xff1a;录制回放&#xff08;用于功能测试&#xff09;、性能工具&#xff08;用于性能测试&#xff09;以及一机多控…

华为发布2020年年报:收入8914亿元,华为云增速最高达168%

今天&#xff0c;华为发布了2020年度报告。2020年&#xff0c;华为实现销售收入8914亿元人民币&#xff0c;同比增长3.8%&#xff1b;净利润646亿元人民币&#xff0c;同比增长3.2%。其中&#xff0c;企业业务收入同比增长23%至1003亿元人民币。华为轮值董事长胡厚崑在年报发布…

从单体到混乱的微服务,阿里云托管式服务网格是如何诞生的?

作者 | 王夕宁 阿里巴巴高级技术专家 参与阿里巴巴云原生文末留言互动&#xff0c;即有机会获得赠书福利&#xff01; 在服务网格技术使用之前&#xff0c;为了更快更灵活地进行业务创新, 我们常常会把现有应用进行现代化改造, 把单体应用程序分拆为分布式的微服务架构。通常…

MongoDB数据日期显示相差8小时 原因和解决方案

文章目录一、透过现象看本质1. 背景调研2. 原因分析3. 影响评估二、解决方案2.1. 客户端显示问题2.2. 查询数据不正确2.3. 效果验证一、透过现象看本质 1. 背景调研 最近因为项目需要使用到了MongoDB&#xff0c;使用Navicat Premium 15 客户端可视化工具查询数据&#xff0c…

Kubernetes 和 Docker,到底什么关系?

来源 | 无敌码农责编 | 寇雪芹头图 | 下载于视觉中国作为一名容器时代的程序员相信你已经或多或少接触过Docker&#xff0c;但同时你也会发现Docker虽然流行了多年&#xff0c;但之前却很少有公司直接将线上应用通过Docker容器进行大规模地部署。但最近三年&#xff0c;你会发现…

SpringCloud 应用在 Kubernetes 上的最佳实践 — 线上发布(优雅上下线)

前言 上篇我们讲的是发布回滚过程&#xff0c;尤其是在 Kubernetes 的回滚过程中&#xff0c;原生有提供 Rollout 到上一个版本的能力&#xff0c;能保证我们在发布过程中遇到问题时快速回退的能力。然而在每一次上线的过程中&#xff0c;我们最难处理的就是正在运行中的流量&…

菜鸟+Hologres=智能物流

作者&#xff1a;阿里巴巴菜鸟物流团队&#xff08;弃疾&#xff0c;孝江&#xff0c;姜继忠&#xff09; 一、业务背景 菜鸟智能物流分析引擎是基于搜索架构建设的物流查询平台&#xff0c;日均处理包裹事件几十亿&#xff0c;承载了菜鸟物流数据的大部分处理任务。 智能物流…

这个宝藏工具,会给你一种黑客般的感觉

明天要交作业了&#xff0c;吴检正在宿舍熬夜爆肝拼命敲代码&#xff0c;劈里啪啦的键盘声和咔咔的鼠标声格外嘈杂&#xff0c;室友陈琛瞥了一眼&#xff0c;背过身&#xff0c;沉沉睡去&#xff0c;留下他一人在深夜无尽的黑暗中&#xff0c;断断续续却又没有尽头的咔咔声中凌…

全民加速节:解读CDN的应用场景与产品价值

8月12日&#xff0c;全民加速节第二次直播中&#xff0c;阿里云CDN产品专家寒丰进行了《阿里云CDN产品解读》的主题分享&#xff0c;从CDN的趋势、变迁、价值三个方面来阐述思考&#xff0c;并对阿里云CDN产品的业务架构和价值进行解读。 当下&#xff0c;互联网的应用服务已经…

抖音实战~评论数量同步更新

文章目录一、快速入门1. 子组件2. 父组件3. 子组件回调父页面4. 父组件接收回调5. 组件调用流程二、抖音评论数量2.1. 流程图2.2. 流程简述2.3. 流程图效果图鉴赏一、快速入门 1. 子组件 <view clickchildBackHome></view>2. 父组件 父组件说明&#xff1a; bac…

实时化或成必然趋势?新一代 Serverless 实时计算引擎

作者&#xff1a;高旸&#xff08;吾与&#xff09;&#xff0c;阿里巴巴高级产品专家 本文由阿里巴巴高级产品专家高旸&#xff08;吾与&#xff09;分享&#xff0c;主要介绍新一代Serverless实时计算引擎的产品特性及核心功能。 一&#xff0e;实时计算 Flink 版 – 产品定…

抢先看!Kubernetes v1.21 新特性一览

作者 | 倪朋飞来源 | 漫谈云原生头图 | 下载于视觉中国Kubernetes v1.21 下个月就要发布了&#xff08;v1.21.0 将于 4 月 8 日发布&#xff09;&#xff0c;本文梳理该版本带来的新特性&#xff0c;以便你为下个月的升级做好准备。PodSecurityPolicy 弃用PodSecurityPolicy&am…

阿里云ARMS助力「叫叫阅读」解锁系统定位分析技能包

叫叫阅读系列是成都书声科技有限公司&#xff08;铁皮人&#xff09;旗下的教育Apps。 主要针对3-12岁孩子&#xff0c;以儿童身心发展规律为依据&#xff0c;秉承叶圣陶先生的语文教育论&#xff0c;多读书&#xff0c;读好书&#xff0c;勤思考。由小学语文老师、幼小衔接专家…

开放下载!《AliOS Things快速开发指南》

简介&#xff1a; 《AliOS Things快速开发指南》手把手教你从环境准备到线上、线下开发调试&#xff0c;更有两大典型场景实践等你参与。你的物联网开发从这里开始&#xff01;快来get新技能吧~ AliOS Things致力于搭建云端一体化IoT基础设施&#xff0c;具备极致性能、极简开…

低代码,填补业务技术鸿沟 or 紧贴业务的开发时代?

作者 | 宋慧 出品 | CSDN云计算 头图 | 付费下载于视觉中国 低代码在技术界一波又一波的讨论中&#xff0c;仍在不断发展中。3 月 30 日&#xff0c;国内企业数字化服务商奥哲举行品牌全新升级暨新品发布&#xff0c;并推出面向业务人员的新产品&#xff1a;数字化管理工具“奥…

我在阿里写代码学会的六件事

简介&#xff1a; 从团队的角度来看&#xff0c;写好代码是一件非常有必要的事情。如何写出干净优雅的代码是个很困难的课题&#xff0c;我没有找到万能的 solution&#xff0c;更多的是一些 trade off&#xff0c;可以稍微讨论一下。 写了多年的代码&#xff0c;始终觉得如何写…

FLOWABLE 流程中的自动跳过

文章目录1. 背景2. 流程3. 实施方案1. 背景 在实际场景中&#xff0c;我们往往会有这样的需求&#xff0c;当流程到达某一个节点的时候&#xff0c;当某角色或岗位不存在时直接跳过当前节点&#xff0c;到下一个节点&#xff08;我们让其自动的跳过去&#xff0c;不做任何操作…

减少运维工作量,如何通过 ROS 轻松实现资源编排新方式

简介&#xff1a; 以“基础设施即代码”的理念代替“重复劳动”。 在日常工作中&#xff0c;我们一定遇到过需要快速构建系统的工作情形&#xff1a; 作为资源管理人员&#xff0c;需要接收一定数量以及配置的资源申请&#xff0c;这些申请要求网络、存储设备按需到位&#xf…