
大家好,我是人月聊IT。
今天来聊一个很多技术同学都在关注的问题——微服务和云原生架构之间究竟是什么样的关系?这两个概念在当前企业数字化转型中被频繁提及,但很多人对它们的关系理解得并不透彻。
要理解微服务和云原生的关系,首先需要理解云原生的核心内涵。
云原生(Cloud Native)是一系列云计算技术、企业管理方法的集合,涵盖了DevOps和持续交付、微服务(MicroServices)、敏捷基础设施(Agile Infrastructure)、康威定律(Conways Law)等内容。云原生既包含了技术层面的微服务、敏捷基础设施等,也包含管理层面的持续交付、DevOps等方面。
上图展示了云原生架构的核心演进逻辑。在传统的IaaS云阶段,主要是以服务器、存储、网络等基础设施形成虚拟化资源池,重点在于提供弹性计算和存储服务。到了云原生阶段,我们需要从以资源为中心转变为以应用为中心,将业务的通用能力下沉到平台侧,从而助力企业实现应用的自动化。
简单来说,云原生让应用从”长在云上”变到了”生在云上”的过程。应用面向云而生,在开发态就做好云能力的协同,到了运行态才能够更好地与云平台能力进行融合,做到灵活调度、自由扩展,充分享受云平台带来的安全、可靠、灵活扩展等优势。
理解了云原生的本质后,我们来看微服务在其中扮演的角色。
微服务是一种架构风格,它将一个大型的单体系统拆分成多个小型的、高度独立自治的服务模块。这里要注意,这个拆分不仅仅是在开发阶段,在运行阶段也是如此。这与传统单体架构有着关键的区别。传统单体架构是一个整体,就像一个大的整体建筑,各个部分紧密相连,难以单独进行维护和扩展。而微服务则像是由许多独立的小房子组成的社区,每个小房子都能独立存在并且功能完整。
对于微服务拆分要注意到开发态和运行态都需要拆分。在运行态每个微服务都独立部署和运行。由于拆分后每个微服务独立小,一般微服务部署包都在200M以内,因此就更加容易托管和部署到容器里面。再通过Kubernetes容器编排来实现微服务的灵活扩展调度。
这里体现了微服务和云原生的第一层关系:微服务是云原生架构的核心技术实现手段。 正是因为微服务将单体应用拆分为轻量化的独立模块,才使得容器化部署和弹性调度成为可能。拆分后的每个微服务模块都高度独立自治,每个微服务间只能通过轻量http rest API接口交互,这个拆分本身也包括数据库拆分,如果数据库没有拆分,那么仍然是单体架构。
微服务和云原生的关系不仅仅是”包含与被包含”,更是一种深度融合的协同关系。
我们可以用一个简单的公式来理解:云原生 = 微服务 + DevOps + 容器云
云原生应用程序开发通常包括DevOps、敏捷方法、微服务、云平台、Kubernetes和Docker等容器,以及持续交付。这三者的融合体现在以下几个层面:
首先是技术平台层面的融合。 底层的资源池从传统虚拟机变成了更加轻量化的容器,上层的单体已经拆分为多个独立松耦合的微服务,中间的PaaS层实现两个核心能力:一是类似K8s实现的容器资源编排和调度;二是实现共性的技术服务能力提供,包括数据库、消息、缓存等各种技术服务能力。
其次是过程管理层面的融合。 为了更好地衔接上层微服务和底层容器云资源,通过DevOps持续集成和交付最佳实践和工具集的整合,来完成整个从需求、开发、测试、集成、交付过程的全面自动化。到了云原生阶段,由于传统单体拆分为更小的微服务,微服务数量大、交付频度高、涉及到的底层容器数量也灵活多变,这就需要一个自动化的实现应用持续部署交付的能力。
微服务架构虽然带来了灵活性,但也增加了系统的复杂性。云原生架构恰好提供了解决这些复杂性的治理能力。
服务网格(Service Mesh)是云原生架构中的重要组成部分,它是一种专门为微服务架构设计的基础设施层,主要目标是在微服务架构下实现去中心化的微服务治理。
服务网格的核心逻辑在于它将微服务之间的通信和治理逻辑从微服务本身中分离出来,放到一个独立的代理层中进行处理。这样,微服务就不需要再关心诸如服务发现、负载均衡、熔断、限流等复杂的治理功能,只需要专注于自身的业务逻辑即可。
云原生对微服务治理的增强主要体现在以下几个方面:
控制流和数据流分离,既实现点对点网状连接,又实现基础的管控能力,是分布式技术发展过程中给出的一个重要启示。节点和节点之间的交互和协同并不会因为多了控制中心而变成多层级下的复杂信息协同链。
理解了微服务和云原生的关系后,我们来看企业如何实践这种架构转型。
整个演进过程可以分为三个阶段:
第一阶段是传统单体架构阶段。 往往只会使用到云平台提供的虚拟化资源池,提供弹性计算和弹性存储能力。应用自己申请虚拟机,然后安装环境,管理环境。同时应用在开发完成后也是人工来完成将测试通过的版本部署到虚拟机环境中去。
第二阶段是云原生PaaS平台阶段。 底层的资源池变成了更加轻量化的容器,上层的单体已经拆分为了多个独立松耦合的微服务。编译、构建、打包、部署的动作全部由DevOps过程自动完成。
第三阶段是Serverless阶段。 底层的容器变成无状态化容器,更加轻量,也更加容易快速创建和销毁;上层的微服务能力进一步拆分为各个独立、无状态的云函数或服务;PaaS层的技术服务能力进一步增强,构建完整的BaaS层。
在这个演进过程中,共性技术能力下沉是关键。传统的一个业务系统的开发模式不存在了,取而代之的是单独的业务组件或业务模块的开发,通过共性平台层服务能力的支撑,我们不再需要开发重复的类似流程引擎、4A、公共技术组件,而只需要将开发重心真正专注到业务功能和逻辑实现上。
总结来说,微服务和云原生是一种相互成就的关系:微服务为云原生提供了核心的架构模式和技术实现基础,而云原生则为微服务提供了完整的技术底座、治理能力和运维支撑。两者的结合,使得企业能够构建真正敏捷、弹性、可靠的现代化应用系统。对于正在进行数字化转型的企业来说,理解并正确应用这两者的关系,是成功的关键。
