如果你钻研过云原生应用程序和相干技术,大概率你遇到过 CNCF 的云原生全景图。这张全景图技术之多规模之大无疑会让人感到震惊,该如何去了解这张图呢?
如果把它拆开来一次只剖析一小块内容,你会发现整个全景图没有那么简单。事实上,该全景图依照性能有序地组织在一起,一旦你理解了每个类别代表的内容,你就能够轻松游走于全景图中。
云原生全景图的 4 层
首先,咱们剥离掉所有单个的技术,仅查看类别(如下图)。图中有不同的“行”,像修建的不同层,每层都有本人的子类别。最底层提供了构建云原生基础设施的工具。往上,你能够开始增加运行和管理应用程序所需的工具,比方运行时和调度层。在最上层,有定义和开发应用程序的工具,比方数据库、镜像构建和 CI/CD 工具(咱们将在后文探讨)。
好了,当初你应该记住了云原生全景图始于基础设施,往上的每一层都更靠近理论的应用程序。这就是每层代表的意思(前面咱们会探讨上图左边的两“列”)。上面咱们就从最底层开始,逐层进行解析。
供给层(Provisioning)
供给指的是为云原生利用筹备规范根底环境所波及的工具。它蕴含了基础设施的创立、治理、配置流程的自动化,以及容器镜像的扫描、签名和存储等。供给层通过提供设置和施行策略,在应用程序和平台中构建身份验证和受权,以及解决密钥散发等等的工具,也拓展到了平安畛域。
供给层包含:
- 自动化和部署工具:帮忙工程师在无需人工干预状况下即可构建计算环境;
- 容器注册表:存储应用程序的可执行文件;
- 不同平安畛域的平安和合规框架;
- 密钥治理解决方案:通过加密确保只有受权的用户能力拜访特定的应用程序。
- 这些工具使工程师能够编写基础设施参数,使零碎能够按需搭建新环境,确保了一致性和安全性。
运行时层(Runtime)
接下来是运行时层。这个词可能会让你感到蛊惑。像很多 IT 术语一样,运行时没有严格的定义,且能够依据语境有不同的用法。广义上讲,运行时是特定机器上筹备运行应用程序的沙盒——也就是保障应用程序失常运行所需的最低配置。狭义上讲,运行时是运行一个应用程序所需的所有工具。
在 CNCF 云原生全景图中,运行时保障了容器化应用程序组件的运行和通信,包含:
- 云原生存储:为容器化利用提供虚构磁盘或长久化存储;
- 容器运行时:为容器提供隔离、资源和平安;
- 云网络:分布式系统的节点(机器或过程)通过其连贯和通信。
编排和管理层(Orchestration and Management)
一旦依照平安和合规性规范(供给层)自动化基础设施供给,并装置了利用程序运行所需的工具(运行时层),工程师就须要弄清楚如何编排和管理应用程序。编排和管理层将所有容器化服务(应用程序组件)作为一个群组治理。这些容器化服务须要互相辨认和通信,并须要进行协调。这一层可为云原生利用提供自动化和弹性能力,使云原生利用人造具备可扩展性。
这一层蕴含:
- 编排和调度:部署和治理容器集群,确保它们具备弹性伸缩能力,相互之间低耦合,并且可扩大。事实上,编排工具(绝大多数状况下就是 Kubernetes)通过治理容器和操作环境形成了集群;
- 协调和服务发现:使得服务(应用程序组件)之间能够互相定位和通信;
- 近程过程调用(RPC):使跨节点服务间通信的技术;
- 服务代理:服务间通信的中介。服务代理的惟一目标就是对服务之间的通信进行更多管制,而不会对通信自身增加任何内容。服务代理对上面将提到的服务网格(service mesh)至关重要。
- API 网关:一个形象层,内部利用可通过 API 网关进行通信;
- Service Mesh:某种程度上相似于 API 网关,它是应用程序进行通信的专用基础架构层,提供基于策略的外部服务间通信。此外,它还可能蕴含流量加密、服务发现、应用程序监控等内容。
利用定义和开发层(Application Definition and Developement)
当初,咱们来到了最顶层。利用定义和开发层,顾名思义,汇集了让工程师构建和运行应用程序的工具。上述所有内容都是对于构建牢靠、平安的环境,以及提供全副所需的应用程序依赖。
这一层包含:
- 数据库:使应用程序能以有序的形式收集数据;
- 流和消息传递:使应用程序能发送和接管音讯(事件和流)。它不是网络层,而是让音讯成为队列并解决音讯的工具;
- 利用程序定义和镜像构建:用于配置、保护和运行容器镜像(应用程序的可执行文件)的服务;
- 继续集成和继续交付(CI/CD):使开发者可主动测试代码是否与代码库(应用程序的其余部分)兼容。如果团队足够成熟,甚至能够主动部署代码到生产环境。
贯通所有层的工具
接下来咱们将进入到云原生全景图右侧贯通所有层的两列。可察看性和剖析(Observability&analysis)是监控各层的工具,平台则将各层中不同的技术捆绑为一个解决方案。
可察看性和剖析(Observability and Analysis)
为了限度服务中断并升高解决问题的均匀工夫(MRRT),你须要监控和剖析应用层序的方方面面,以便在出现异常时可立刻发现并纠正。简单环境中容易呈现故障,这些工具可疾速辨认并解决故障,从而升高故障带来的影响。因为这一类别贯通并监控各层,因而它在侧面,而不是嵌入到某一层中。
这这一类别你将发现:
- 日志工具:收集事件日志(无关过程的信息);
- 监控计划:收集指标(以数字示意的零碎参数,例如 RAM 可用性);
- 追踪工具:追踪比监控更进了一步,它们监控用户申请的流传,与服务网格相干。
- 混沌工程(Chaos Engineering):在生产环境中测试软件的工具,可辨认缺点并进行修复,缩小其对服务交付的影响。
平台类(Platform)
能够看到,图中每一个模块解决一个特定的问题。但咱们晓得,仅有存储并不能提供应用程序所需的全副性能。你还须要编排工具,容器运行时,服务发现,网络,API 网关等等。平台笼罩多层,将不同的工具组合在一起,以解决更大的问题。
配置和微调不同的模块使其安全可靠,并确保它利用的技术都能及时更新、所有破绽都打了补丁,这并不是一件容易的事件。应用平台时,用户不必额定放心这些细节问题。
你可能会留神到,所有的类别都围绕着 Kubernetes 开展。这是因为 Kubernetes 尽管只是云原生景观图这张拼图中的一块,但它却是云原生技术栈的外围。顺便说一下,CNCF 刚创立时,Kubernetes 就是其中的第一个种子我的项目,起初才有了其余我的项目。
平台可分为四类:
- Kubernetes 发行版:采纳未经批改的凋谢源代码(只管有人对其进行了批改),并依据市场须要减少了其余性能;
- 托管的 Kubernetes:相似于 Kubernetes 发行版,然而由提供商托管;
- Kubernetes 安装程序:主动执行 Kubernetes 的装置和配置过程;
- PaaS/ 容器服务:相似于托管的 Kubernetes,然而蕴含了一套更宽泛的利用部署工具(通常是来自云原生景观图)。
总结
在每个类别中,针对雷同或类似的问题,都有不同的工具可抉择。有一些是实用于新事实的预云原生技术,还有一些则是全新的。区别在于它们的实现和设计办法。没有完满的技术合乎你的所有需要。大多数状况下,技术受设计和架构抉择的限度——始终须要衡量取舍。
在抉择技术栈时,工程师必须认真思考每种能力和须要衡量取舍的中央,以确定最合适的选项。尽管这样会让状况变得更简单,但在抉择应用程序所需的最适宜的数据存储、基础设施治理、音讯零碎等计划时,这样做是最可行的方法。当初,构建一个零碎比云原生之前的时代容易多了。如果构建失当,云原生技术将提供更弱小的灵活性。在现如今疾速变动的技术生态中,这可能是最重要的能力之一。(文章来自 CSDN,鸣谢)