云原生应用的十大核心特性

发表时间: 2018-08-09 14:15

云原生(Cloud native)是用于描述基于容器的云计算环境的专门用语,云原生技术是指开发使用容器打包的服务,部署成微服务形式,在工程方法上实现灵活的DevOps流程,在弹性的基础架构上对持续交付的工作流进行管理。

过去,运维团队是通过手动管理基础资源的分配,云原生应用则是部署在抽象底层计算、存储和原始网络的基础架构上。处理这种新型应用的开发人员和运维人员不会直接与基础架构的公开API打交道,相反,基于基础架构上的中间PaaS层会根据DevOps团队制定的策略进行自动分配资源,这个中间PaaS层相同于一个编排引擎,它是由控制器和调度器等基本组件组成,用来处理资源分配和应用程序的生命周期。

像Kubernetes这样的云原生平台暴露的是一个扁平网络,该网络覆盖在云提供商的现有网络拓扑和原始网络上,这如同原始存储层是通过暴露其逻辑卷和容器集成一样,网管可以分配开发人员和资源管理员访问的存储配额以及网络策略。这种基础架构的抽象不仅解决了跨云环境的可移植性需求,还让开发人员利用新兴模式来构建和部署应用程序。无论基于物理服务器或虚拟机、私有云或公共云的底层基础架构如何,业务流程管理器都将成为部署的目标。

Kubernetes是设计为运行云原生应用程序的理想平台。它已经成为云的事实上的操作系统,就像Linux是底层机器的操作系统一样。只要开发人员遵循微服务最佳实践的设计开发软件,DevOps团队就能够在Kubernetes中打包和部署它们,以下是针对开发人员在设计云原生应用程序时应牢记的云原生应用的10个关键属性。

1.打包为轻量级容器

云原生应用程序是打包为轻量级容器的独立自治服务的集合。与虚拟机不同,容器可以快速扩展和伸缩。由于扩展的单元转移到容器,因此优化了基础架构利用率。

2.使用最佳语言和框架开发

云原生应用程序的每项服务都是使用最适合的语言和框架开发的。云原生应用程序是多语言的; 服务可使用各种语言和框架。例如,开发人员可以构建基于在Node.js中开发的WebSockets的实时流服务,同时选择Python和Flask来暴露API。开发微服务的细粒度方法使他们能够为特定工作选择最佳语言和框架。

3.设计为松散耦合的微服务

属于同一应用程序的服务在应用运行时能够相互发现。它们独立于其他服务而存在。当正确集成时,弹性基础架构和应用程序架构可以通过高效和高性能进行扩展。

松散耦合的服务允许开发人员独立于另一个服务处理每个任务,通过这种分离,开发人员可以专注于每项服务的核心功能,以提供细粒度的功能。这种方法可以实现整个应用程序的有效生命周期管理,因为每个服务都是独立维护的,并且拥有明确的所有权

4.以API为中心进行交互和协作

云原生服务使用轻量级API,这些API基于代表性状态转移(REST),Google的开源远程过程调用(gRPC)或NATS等协议。REST是被用作通过超文本传输​​协议(HTTP)公开API的最终共识。为了提高性能,gRPC通常用于服务之间的内部通信。NATS具有发布/订阅功能,可在应用程序内实现异步通信。

5.以无状态和有状态服务的清晰分离为基础构建

无状态服务应该独立于有状态服务,有数据库持久操作的有态服务应遵循不同的模式,以确保更高的可用性和弹性。

6.与服务器和操作系统依赖关系隔离

云原生应用程序与任何特定操作系统或单个计算机没有关联,它们在更高的抽象级别上运行。唯一的例外是微服务需要某些功能,包括固态驱动器(SSD)和图形处理单元(GPU),这些功能可能由一部分机器专门提供。

7.部署在自助服务、弹性云基础架构上

云原生应用程序应部署在虚拟、共享和弹性基础架构上。它们可以与底层基础架构保持一致,以动态方式增长和缩小 - 根据不同的负载调整自身。

通过敏捷DevOps流程进行管理

云原生应用程序的每项服务都经历一个独立的生命周期,通过敏捷的DevOps流程进行管理。多个持续集成/连续交付(CI / CD)管道可以协同工作以部署和管理云原生应用程序。

9.自动化功能

云原生应用程序可以高度自动化。它们与将基础设施作为代码的概念相得益彰。实际上,仅需要一定程度的自动化可以简化管理大型和复杂的应用程序。

可定义的、能够实现策略驱动的资源分配

最后,云原生应用程序与通过一组策略定义的治理模型保持一致。它们遵循诸如中央处理单元(CPU)和存储配额以及将资源分配给服务的网络策略等策略。例如,在企业方案中,中央IT可以定义策略以为每个部门分配资源,每个部门的开发人员和DevOps团队都拥有对其资源共享的完全访问权和所有权。