都在说云原生,它的技术图谱你真的了解吗?

若是你研究过云原生应用程序和相关技术,大几率你遇到过 CNCF 的云原生全景图。这张全景图技术之多规模之大无疑会让人感到震惊,该如何去理解这张图呢?数据库

若是把它拆开来一次只分析一小块内容,你会发现整个全景图没有那么复杂。事实上,该全景图按照功能有序地组织在一块儿,一旦你了解了每一个类别表明的内容,你就能够轻松游走于全景图中。安全

云原生全景图的 4 层

首先,咱们剥离掉全部单个的技术,仅查看类别(以下图)。图中有不一样的“行”,像建筑的不一样层,每层都有本身的子类别。最底层提供了构建云原生基础设施的工具。往上,你能够开始添加运行和管理应用程序所需的工具,好比运行时和调度层。在最上层,有定义和开发应用程序的工具,好比数据库、镜像构建和 CI/CD 工具(咱们将在后文讨论)。网络

image

好了,如今你应该记住了云原生全景图始于基础设施,往上的每一层都更接近实际的应用程序。这就是每层表明的意思(后面咱们会讨论上图右边的两“列”)。下面咱们就从最底层开始,逐层进行解析。架构

供应层 (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,鸣谢)

相关文章
相关标签/搜索