王亚军
摘要:近年来,随着微服务架构和容器技术的不断成熟,在企业信息化建设过程中应用越来越广泛。其中微服务架构解决了单体应用架构复杂度高、系统紧耦合、演化困难等痛点问题,容器技术提供了虚拟化的运行环境,为服务提供了理想的运行载体。两者结合以后,能显著提升企业信息化应用的水平。
关键词:微服务;容器化;云平台
中图分类号:TP311 文献标识码:A 文章编号:1007-9416(2020)01-0075-02
0 引言
很多企业发展初期,核心业务非常简单,使用传统的MVC三层架构,往往更能提高开发效率。随着时间的推移,上线需求越来越多,应用程序的体积变得非常庞大,俨然成为一个超级应用,但随之而来的问题是开发、测试、部署和扩展变得越来越困难。
(1)系统复杂度高,开发效率低。以某通信运营商省公司的CRM系统为例,该系统工程庞大,存在模块间相互依赖,职责不清、代码混乱、程序难以理解等问题,造成改造代码风险高和开发、上线编译困难,开发效率低和上线周期长。(2)系统可靠性低,扩展困难。系统模块耦合度高,部署结构无序可依,服务层均匀分布,不能对频繁调用的服务模块弹性伸缩及有针对性的部署,系统部署和扩展能力较差。(3)硬件资源利用率低,投资居高不下。各业务子系统竖井式建设,独占资源,系统资源经常处于紧缺状态,也造成资源投入黑洞。
最近几年,随着计算机、互联网等技术的高速发展,微服务和容器化等技术发展迅速,为企业解决上述问题提供了一种全新的模式。在构建支持海量请求以及多变业务的软件平台时,微服务架构和容器化成为大多数企业的首选。
1 微服务架构及容器化概述
1.1 微服务概述
微服务是近年来业界实现云化软件架构过程中总结出来的一种架构模式,其核心是将大型单一应用划分成多个不重叠的獨立服务,服务之间通过轻量级通信机制实现互联互通,通过服务之间的协调,实现复杂应用功能。在实现过程中,要求每个微服务粒度小,功能独立,能够独立开发、测试和部署。业界对微服务架构的特性总结如下:(1)使大型的复杂的应用程序可以持续交付和持续部署。(2)每个服务都相对较小并容易维护。(3)服务可以独立部署。(4)服务可以独立扩展。(5)可以实现团队的自治。(6)更容易实验和采纳新的技术。
1.2 容器化概述
容器是一种更先进、更轻量级的部署机制,也是一种操作系统级的虚拟化机制。容器运行时使用操作系统机制将容器彼此隔离;将作为容器镜像打包的服务部署到生产环境中,每个服务实例都是一个容器,将服务部署为容器。容器化具有以下优点:(1)封装技术栈,可以用容器的API实现对服务的管理。(2)服务实例是隔离的,在同一宿主机上运行的两个容器应用互不干扰。(3)服务实例的资源受到限制,在创建容器时,预先分配内存和CPU等资源。
2 微服务架构在容器中的应用实践
模块化是开发大型、复杂应用程序的基础。微服务架构作为模块化的一种形式,大型、复杂的单体应用在向微服务架构转型的过程中,首先要对已有系统按照一定策略进行拆分,将功能内敛,并将相互耦合的业务功能独立出来,作为一个微服务子系统对外提供服务,如图1所示。
企业在采用微服务架构之后,原有系统往往被拆分成数十个微服务子系统。微服务架构在给企业开发人员带来便利的同时,由于每个微服务子系统都需要单独构建、部署和维护,增加了部署及维护的复杂度;同时每个微服子系统部署在单独的硬件资源上,造成了主机资源的浪费。
近几年,随着容器技术的发展和应用不断成熟,容器技术提供的虚拟化运行环境为微服务提供了理想的载体,同时使得微服务创建、集成、部署和运维更简单易行。
下面以某通信运营商省公司的容器云平台为例,说明CRM系统微服务应用与容器云平台结合的实践。
该容器云平台是基于K8S框架的容器云平台,向微服务应用系统提供统一运营运维能力,支持应用的统一编排、调度和运维。
(1)资源编排管理:建设分布式应用的编排与托管平台能力,以应用为中心进行统一资源管理和调度,图形化设计、开发、测试、发布流水线管理,实现一键式部署。支持容器、虚机、物理机多种运行环境混合编排。(2)应用服务生命周期管理:提供第三方应用托管功能,提供从部署到运维全生命周期的管理,以及自动弹性伸缩、应用灰度升级等功能。(3)应用改造迁移:所有新增应用必须基于容器云平台集群部署。
2.1 实现主机资源的统一管理和调度
通过容器云平台实现资源整合后,业务系统与服务器资源实现解绑,各系统和模块混合部署在集群内相互隔离的租户环境下,充分共享和错峰利用容器集群整体资源服务能力,资源需求呈几何级下降。解决了微服务应用子系统独占硬件资源,业务忙时资源紧张,而其余绝大部分时间内资源处于闲置浪费状态问题,如图2所示。
2.2 实现应用与底层资源的联动,应用服务自动扩缩容
基于统一的容器基础设施环境,实现容器云平台与底层资源平台的联动调度;实现应用/服务对资源的按需分配和动态调整,能够支持服务实例快速复制部署;实现应用服务能力随流量压力弹性伸缩。服务弹性伸缩模块,根据标量采集结果(或健康检查结果),可实时触发事件处理规则,在资源配额范围内控制服务实例数量,实现应用服务能力的弹性伸缩,如图3所示。
在主机资源统一调度之后,利用容器云平台提供的自动扩缩能力,流量达到一定阈值,自动对微服务应用进行扩容,轻松应对并发高峰,实现业务支撑能力的快速提升。
2.3 应用组件仓库,建立标准化的软件环境
大型分布式软件系统,系统运行环境十分复杂。本文中提到CRM系统,在系统开发与发布的生命周期中,开发环境、测试环境和生产环境有细微的不同,这些差异可能是由于不同安装包的版本和依赖关系引起的。将基础技术组件以容器镜像的封装形式,通过容器云平台制作标准化的镜像文件和相关配置,通过组件仓库进行管理,保持容器内部所有的配置和依赖关系保持不变,确保从开发到产品发布整个过程环境的一致性,减少因软件环境不一致出现的各种问题。
2.4 建立发布流水线,提高系统部署效率
容器云平台提供自助式的Docker镜像生成功能,三个域的应用可以通过界面一键发布,实现了应用开发、测试、发布端到端的持续集成管理能力,为应用的持续迭代奠定了基础,如图4所示。
3 结语
大型单体应用系统在向微服务化架构转型的过程,不是一蹴而就的,需要按照一定策略和方法进行。比如将新功能作为服务开发,阻止单体的无序发展;表现层和后端分离,将后端业务抽象出粗粒度的API供前端调用,实现后端业务的独立部署;将独立出来的微服务应用与容器技术结合,提升系统资源利用率和服务的标准化程度,实现服务横向扩展及故障隔离等特性,充分发挥微服务架构敏捷灵活的优点。
参考文献
[1] [美]克里斯·理查森.微服务架构设计模式[M].机械工业出版社,2019.
[2] 杨鸥,张羿耿,贞伟.微服务架构在容器云中的应用实践[J].应用技术与研究,2017(07):79.
[3] 张辉,朱祺.微服务架构在容器云中的应用实践研究[J].计算机工程应用技术,2018(19):57-58.