Cloud Native
随着云计算时代的来临,越来越多的企业正打算将业务迁移到云上进行,以提高其业务敏捷性和创新能力。随之而来的是组织结构、运维方式、系统架构等多方面的转变。比如,原有的功能型/矩阵型组织结构逐渐的演变为去中心化的组织结构,交付方式从运维手动部署到物理服务器,到运行在云平台的容器中并且可以自动部署、动态编排,而系统架构也在从臃肿的单体架构向更灵活自治的微服务架构方向演进。
而微服务架构和容器技术的出现也加速了业务向云上的迁移过程,让企业能够更好地利用到云平台的弹性、可扩展、自恢复等特点。但是现实的情况是,大部分的公司缺乏微服务、容器化等演进的经验和指导,它们迫切需要一个经过考验的模型以及工具链来帮助自己降低向云上迁移的成本。
于是Pivotal的软件架构师Matt Stine首次提出了Cloud Native这个概念,认为Cloud Native是一个思想的集合,既包含技术(微服务,敏捷基础设施),也包含管理(DevOps,康威定律以及组织优化等),还涉及流程(持续交付)。企业采用基于Cloud Native的技术和管理方法,能够更平滑而快速地将业务迁移到云上,享受云的高效和按需伸缩资源的能力。
Cloud Native概念提出后在业界迅速传播,各种不同组织和个人对于Cloud Native都有自己的理解,但基本都是从架构、技术、工具等方面围绕微服务、云、容器等展开。
对于Cloud Native的定义,我们的理解是Cloud Native是构建、运行、管理基于云环境、利用云环境、适应云环境、受益云环境的软件而发展起来的新的系统实践范式,其中包括:
- 充分利用云基础设施与平台服务,具备微服务架构、弹性伸缩、分布式、高可用、多租户、自动化运维等关键特征的架构实践
- 建立全功能团队、发展全栈工程师并高度协作的组织实践
- 采用DevOps、自动化工具,实现微服务持续交付的工程实践
Cloud Native的实施,需要通过架构、工程、组织面向云环境的协调实践,来实现Cloud Native系统对外体现的快速、规模、可靠、灵活、高效的价值收益。
微服务与容器
当越来越多的企业选择迁移到云,随之而来的问题是如何调整企业原有的单块IT系统架构,让系统享受到云平台的弹性、可扩展性、自恢复等好处,保证交付过程的流畅性并且能够快速的部署应用到生产环境,尽快得到用户的反馈。解决这个问题的答案就是微服务,它通过将单体架构应用拆分成一组单一功能的服务,每个服务运行在独立的进程中,服务之间通过轻量的通信机制来交互,做到独立发布,并结合云平台的功能自治。
微服务解决了原有的单体IT系统的架构的扩展性问题,带来了极高的灵活性。但同时随着微服务拆分的粒度越来越小,将其直接部署在一台虚拟机上无疑是一种对资源的浪费。2013年Docker的出现解决了这个问题,在提高资源利用率的同时,Docker可以帮助快速开发和部署应用程序的工具。这就意味着原有的基于VM的调度粒度进化为了基于容器的调度,kubernetes、Mesos、Swarm应运而生,它们提供的容器动态编排、伸缩、自恢复性,进一步的降低了应用部署、维护的门槛。
人们对于微服务、容器化以及动态编排的工具的出现感到兴奋,因为它们有助于提供开发人员和生产环境之间的平衡,实现DevOps,简化运维。但是现实的情况是,大部分的公司缺乏微服务、容器化等演进的经验和指导,它们迫切需要一个经过考验的模型以及工具链来帮助自己降低过渡的成本和痛苦,达到最终的目标。