随着云计算时代的来临,越来越多的企业正打算将业务迁移到云上进行,以提高其业务敏捷性和创新能力。随之而来的是组织结构、运维方式、系统架构等多方面的转变。比如,原有的功能型/矩阵型组织结构逐渐的演变为去中心化的组织结构,交付方式从运维手动部署到物理服务器,到运行在云平台的容器中并且可以自动部署、动态编排,而系统架构也在从臃肿的单体架构向更灵活自治的微服务架构方向演进。
而微服务架构和容器技术的出现也加速了业务向云上的迁移过程,让企业能够更好地利用到云平台的弹性、可扩展、自恢复等特点。但是现实的情况是,大部分的公司缺乏微服务、容器化等演进的经验和指导,它们迫切需要一个经过考验的模型以及工具链来帮助自己降低向云上迁移的成本。
于是Pivotal的软件架构师Matt Stine首次提出了Cloud Native这个概念,认为Cloud Native是一个思想的集合,既包含技术(微服务,敏捷基础设施),也包含管理(DevOps,康威定律以及组织优化等),还涉及流程(持续交付)。企业采用基于Cloud Native的技术和管理方法,能够更平滑而快速地将业务迁移到云上,享受云的高效和按需伸缩资源的能力。
Cloud Native概念提出后在业界迅速传播,各种不同组织和个人对于Cloud Native都有自己的理解,但基本都是从架构、技术、工具等方面围绕微服务、云、容器等展开。
对于Cloud Native的定义,我们的理解是Cloud Native是构建、运行、管理基于云环境、利用云环境、适应云环境、受益云环境的软件而发展起来的新的系统实践范式,其中包括:
充分利用云基础设施与平台服务,具备微服务架构、弹性伸缩、分布式、高可用、多租户、自动化运维等关键特征的架构实践;
建立全功能团队、发展全栈工程师并高度协作的组织实践;
采用DevOps、自动化工具,实现微服务持续交付的工程实践;
Cloud Native的实施,需要通过架构、工程、组织面向云环境的协调实践,来实现Cloud Native系统对外体现的快速、规模、可靠、灵活、高效的价值收益。
云计算时代已来临
在过去的十几年中,互联网公司的IT组织结构、系统架构、交付方式、基础设施等都在逐渐朝着更好的扩展性、灵活性以及能够快速反馈的方向演进。比如原有的功能型/矩阵型组织结构逐渐的演变为了去中心化的组织结构,交付方式从运维手动部署到物理服务器,到运行在云计算平台的虚拟机的容器中并且可以自动部署、动态编排,而web应用的系统架构也逐渐的从大而全的单体架构向更灵活的微服务架构演进。
在基础设施方面,2001年VMware的出现标志着从物理到虚拟基础设施的转变,2006年亚马逊推出了迎来云计算时代的弹性计算云(EC2)加速了这个变化的过程。伴随着2006年AWS推出EC2/S3的公有云服务,越来越多的IT从业人员认识到云计算在存储增加、灵活性、可扩展性和降低成本方面的优势。到今天为止,大多数公司都被云说服了,已经迁移或者正在到像AWS这样的云计算平台上。从2008年开始,企业开始逐渐向云迁移。也就是从那个时候,Netflix就逐渐将系统从物理机房移植到AWS,并于2016年完成了向AWS的完整迁移。由于云的弹性,Netflix能够在130多个国家拓展业务,每3个月新增约600万订阅者。受益于采纳云平台,Netflix的系统具有超高的可用性和可靠性,保证了其业务的可用性。
亚马逊网络服务公司CIO杰夫·巴尔(Jeff Barr)在他关于AWS云计算十周年纪念的文章中所说:“十年前,人们讨论采用云计算的风险。……那个时代过去了。现在我听到更多的是谈论不上云的风险。”
当越来越多的企业选择迁移到云,随之而来的问题是如何调整企业原有的单块IT系统架构,让系统享受到云平台的弹性、可扩展性、自恢复等好处,保证交付过程的流畅性并且能够快速的部署应用到生产环境,尽快得到用户的反馈。解决这个问题的答案就是微服务,它通过将单体架构应用拆分成一组单一功能的服务,每个服务运行在独立的进程中,服务之间通过轻量的通信机制来交互,做到独立发布,并结合云平台的功能自治。
微服务解决了原有的单体IT系统的架构的扩展性问题,带来了极高的灵活性。但同时随着微服务拆分的粒度越来越小,将其直接部署在一台虚拟机上无疑是一种对资源的浪费。2013年Docker的出现解决了这个问题,在提高资源利用率的同时,Docker可以帮助快速开发和部署应用程序的工具。这就意味着原有的基于VM的调度粒度进化为了基于容器的调度,kubernetes、Mesos、Swarm应运而生,它们提供的容器动态编排、伸缩、自恢复性,进一步的降低了应用部署、维护的门槛。
人们对于微服务、容器化以及动态编排的工具的出现感到兴奋,因为它们有助于提供开发人员和生产环境之间的平衡,实现DevOps,简化运维。但是现实的情况是,大部分的公司缺乏微服务、容器化等演进的经验和指导,它们迫切需要一个经过考验的模型以及工具链来帮助自己降低过渡的成本和痛苦,达到最终的目标。
于是Pivotal的软件架构师Matt Stine,提出了Cloud Native这个概念,认为Cloud Native是一个思想的集合,既包含技术(微服务,敏捷基础设施),也包含管理(DevOps,康威定律以及组织优化等),还涉及流程(持续交付)。企业采用基于Cloud Native的技术和管理方法,能够更平滑而快速地将业务迁移到云上,享受云的高效和按需伸缩资源的能力。
虽然从系统架构、技术、工具上都是围绕微服务、云、容器等展开,业界对于Cloud Native的定义却各有不同。
Matt Stine 认为Cloud Native包括:
DevOps
持续交付(Continuous Delivery)
微服务(Microservices)
敏捷基础设施(Agile Infrastructure)
康威定律(Conways Law)
以及根据商业能力对公司进行重组等内容。
他认为符合Cloud Native的应用包含的主要特征为:
十二因子应用(Twelve-Factor)
微服务架构(Microservices)
自服务敏捷基础设施(Self-Service Agile Infrastructure)
基于API的协作(API-Based Collaboration)
反脆弱性(Anti-fragility)
针对Cloud Native的工具链、实践,Linux Foundation 建立了一个专门的组织Cloud Native Computing Foundation (CNCF)。CNCF(云原生计算基金会)是一个非营利组织,它诞生于2015年7月,受到互联网规模计算的启发,期望通过技术优点和最终用户价值创造出一系列新的通用容器技术,致力于推动Cloud Native的技术和服务的发展。
CNCF对于Cloud Native应用的定义,是使用开源工具栈来实现如下特征:
容器化(Containerized):每个部分(应用程序,进程等)都封装在自己的容器中。这有助于重复性,透明度和资源隔离。
动态编排(Dynamically orchestrated):动态的调度和管理容器以优化资源利用。
面向微服务(Microservices oriented):应用程序基于微服务架构,显著提高架构演进的灵活性和可维护性。
CNCF更偏向于工具以及合理的系统架构的使用,而没有涉及组织结构以及流程、管理等方面的内容。
Gartner认为Cloud Native应用的关键特征为:
按需( on-demand )
自服务( self-service )
快速、弹性伸缩( scales rapidly and elastically )
可计量的消费( meters consumption )
这个描述更加贴近与云平台本身的特性,比较笼统。
Adrian Cockcroft(AWS Cloud Architecture Strategy VP,前 Netflix Cloud Architect)认为,Cloud Native是:
基于不可靠、易失效的基础设施(ephemeral and assumed broken components)来构建高度敏捷(highly agile)、高可用(highly available)服务
其目的是为了达到伸缩性(Scalability)、可用性(Availability)、敏捷(Agility)、效率(Efficiency)
实现的原则为关注点分离(Separation of Concerns)、反脆弱性(Anti-Fragility)、高度信任的组织(High trust organization)
特点在于基于公有云(Public cloud)、微服务(Micro-services)、反范式化数据(De-normalized data)、混沌引擎(Chaos Engines)、持续部署(Continuous Deployment)、DevOps等。
Adrian Cockcroft对于Cloud Native的定义囊括了基础设施、系统架构、数据以及组织等各个方面,比较全面,是一份比较好的参考模型。
除了CNCF外,业界的其他组织及个人也给出了他们对Cloud Native的理解。比如Paul Fremantle(Co-founder of WSO2)认为Cloud Native应用的关键特征包括:
分布式/动态连接( Distributed / dynamically wired )
弹性( Elastic ):根据系统的负载进行伸缩( scale down as well as up, based on load )
多租户( Multi-tenant )
自服务( Self-service )
粒度合适的计量计费,按使用量计费(Pay-per-use)
增量的部署和测试(Incrementally deployed and tested)
和Gartner的定义类似,其最终要达到的效果是更好的资源利用率以及更快的配置。
从业界对Cloud Native的定义我们可以看到,内容基本大同小异,总的来说,Cloud Native是期望企业在IT系统架构、工程、组织等方面协同运作,达到一定的目标,利用在云上的基础设施,应用、架构的弹性、灵活、可伸缩、自恢复等,在容器中运行无状态的微服务,同时在组织层面做出对应的改变和适应。