容器技术在电信支撑系统的应用研究
2020-11-25朱明英刘智琼池炜成
朱明英,刘智琼,池炜成
(中国电信股份有限公司广东研究院,广州510630)
0 引言
随着虚拟技术的发展,Docker 容器技术的出现给传统的虚拟化带来了很大的影响。不同于虚拟机的硬件虚拟化,容器采用的是基于操作系统层的虚拟化技术。由于Docker 容器使用公用的宿主OS 而不需要虚拟完整的GuestOS,使得容器的资源利用率远高于虚拟机。除了资源利用性能上的优势之外,容器最大的特点是可快速启动。容器启动速度在秒级,而虚拟机的启动速度在分钟级别。
容器技术和虚拟机技术的比较如表1 所示。
1 电信支撑系统容器化改造分析
1.1 电信支撑系统存在问题分析
为顺应用户规模与使用量剧增的趋势和业务转型的要求,传统的电信支撑系统的架构已经不能满足要求。
当前电信支撑系统的架构面临的挑战主要有:
(1)敏捷思想带来新的业务交付模式导致版本变更迭代加快
随着互联网业务不断发展,要求业务需求以最快速度响应,迭代开发、向用户交互高质量的软件产品成为IT 软件行业的必然选择。
电信支撑系统需要采用分布式架构和容器化等技术,实现应用和服务的自动伸缩能力;基于微服务架构,构建统一、可重用的业务能力,实现对业务需求的快速响应。
(2)单体应用向微服务转变,系统架构云化对运营理念带来了新的要求
系统架构云化之后更加复杂,设备数量成倍数增长,给运维带来很大的压力和挑战。在云化环境下IT资源高度虚拟化,加大整个架构的复杂度,各种业务应用、组件、虚拟机存在复杂的依赖关系,对系统监控全面性要求更高,当业务应用出现故障时,问题的定位变得更加复杂,这些方面成为云化架构下运营管理面临的挑战。
(3)互联网带来各种新技术和基础框架导致组网复杂度剧变
在随着云架构,云部署的实施,尤其是应用软件SOA 化的转型,应用集群化、冗余部署、应急、容灾等应用组网越来越复杂。
而应用容器化后带来的环境一致性和标准化、容器轻量化、基于容器的快速交付、弹性伸缩正好可以解决这类挑战。
为应对上述挑战,电信支撑系统需要采用“平台+应用”的模式,基于容器化技术,按业务聚合特征构建云化的支撑系统,实现系统灵活可配置,应用水平弹性可扩展。
1.2 电信支撑系统容器化的优势
应用容器化后,有以下几个方面的优势:
(1)标准化
容器的运行时引擎是标准化的,目前使用的都是基于OCI(Open Container Initiative,开放容器组织)的技术规范实现的运行时引擎。
容器的镜像也是标准化的,目前已有符合标准化的大量基础镜像,大大简化了从零构建应用镜像的难度。应用最终就是按镜像标准制作成应用镜像,运行在标准化的运行时引擎上。
开发流程是标准化的,采用容器技术可以给所有项目成员快速复制出一套完全一致的开发环境,从而消除因开发环境不同导致的不一致性,降低软件缺陷出现的概率。
部署流程是标准化的。传统的部署模式下,为了保证发布的软件包在其他机器上可正常安装且运行,一般需要在打包之前创建个干净的环境,在这个干净的环境下安装各种依赖包,然后执行打包脚本。测试软件包时,又需要再创建一个干净的环境安装、运行这个软件包,非常繁琐,并且容易漏掉依赖关系。容器化部署则从基础镜像开始(相当于干净的环境),添加应用程序构建应用镜像并部署,这个部署过程是自动化的,所以,通过容器化部署可以快速完成应用交付。
(2)版本控制
每一个容器的镜像都有版本控制,这样就可以追踪不同版本的容器,监控版本之间的差异。
传统模式下应用的升级,往往不仅仅是应用软件本身的升级,通常还会包含依赖项的升级。但新旧软件的依赖项可能是不同的,甚至是有冲突的,所以在传统的环境下做回滚一般比较困难。
如果使用容器技术,容器镜像的版本内集成了应用的软件环境的全部信息,这些复杂的环境集成后,标记仅为一个版本,升级时先部署一个新的容器,看是否正常运行。需要回滚时,把新的容器停掉,启动旧的容器即可完成回滚,整个过程在秒级完成,相对简单,版本切换也变得快捷,版本升级和灰度发布,在容器镜像简单版本控制机制下,也变得较容易实现了。
(3)资源利用率高
容器与底层共享操作系统,性能优良,系统负载低,在同等条件下可以运行更多的应用实例,更充分地利用系统资源。同时,容器拥有资源隔离与限制能力,可以精确地对应用分配CPU、内存等资源,保证了应用间不会相互影响。
在传统的基础设施环境下,各业务需要的资源分配是分散管理的,各分散的业务部门通常按照规划的最大额度申请物理机、虚拟机资源,这些资源即使空闲,也不能被别的业务部门使用,不能很好地解决资源共享和资源利用率的问题。
容器化方式下则是将业务应用集中管理,所有应用共享资源,各业务应用原来独占的资源都共享出来形成资源池,利用Linux 内核的cgroup 机制,设置某个容器的资源配额,可以加大应用在宿主机上的部署密度,提升资源利用率。
(4)应用自动化运维
容器化应用具有的高可用能力降低了运维负担,容器管理的集群架构,多节点资源冗余设计,保证应用在单节点出现故障时仍然可用。
应用容器化后,支持弹性伸缩,避免了传统的扩容、部署、测试等繁琐流程,减少了大量运维的工作量。
容器化后完善的日志和监控简化了运维的工作,大量的自动告警技术和简单易用的运维界面,实现了传统模式难于实现的自动化运维。
(5)持续部署与测试
在传统模式下,上线之前要把代码提交到版本仓库,进行构建,再发布到测试环境测试,之后发布到生产环境预测试,才能上线。这是典型的一个版本上线流程,其中的测试环境、预生产环境、生产环境之间有一定的差异,也存在一定的兼容性问题。
容器化后,依赖环境都集成到镜像中,测试环境和生产环境保持一致,通过容器化后的持续部署与测试流程,能全流程管控产品,达到快速开发、集成和发布的目标,提高了产品的快速交付能力。
2 电信支撑系统容器化改造实施方案
2.1 容器化改造的适用范围
电信支撑系统通过云化改造后,绝大多数应用都适合部署成容器应用。这些应用可以分为有状态应用和无状态应用。应用的有状态和无状态是根据应用是否有持久化保存数据的需求而言的,即持久化保存数据的应用为有状态的应用,反之则为无状态的应用。
(1)有状态应用
有状态应用需要持久化保存数据;一般是数据类服务,如集群协调服务、日志分析等。Kubernetes 提供了持久化数据卷(Persistent Volume)的功能,可以实现数据的持久化保存,从而支持有状态应用容器化。
容器化的有状态应用由于其应用特性,所以不可随意启动、停止实例,不可随意增加、删除实例;服务实例发生故障后,需要立即进行维护以防止数据丢失和损坏。
虽然有状态应用有这些限制,但仍然可以发挥容器化的下列优势:
●容器方式部署和管理应用的能力
●利用容器一致性交付优势
●实现快速部署和统一管理
(2)无状态应用
无状态应用对单次请求的处理不依赖其他请求,服务本身不存储任何信息。无状态容器化应用有以下特点:数据不落盘,或者只有临时数据落盘;可以随意启动、停止和增加、删除实例;应用实例发生故障后,可以立即删除并通过模板创建新实例取而代之。
无状态应用可以发挥容器的以下优势:
●发挥容器方式部署和管理应用的能力
●利用容器一致性交付优势
●实现快速部署和统一管理
●可运行在Kubernetes 提供的容器集群上
●由Kubernetes 提供高可靠、故障容忍、弹性伸缩、资源调度等功能
(3)不适合容器化改造的应用
如果应用有如下特点,不适合直接容器化,需要进行改造。
①使用大型中间件的应用
大型中间件主要是指如WebLogic、WebSphere、IBM MQ 等,这些中间件功能丰富,但是安装配置复杂,资源占用率高,代码不开源,进行容器化改造困难较大(因为闭源产品需要依赖闭源厂商对中间件进行容器化改造),这些都与容器轻量化的理念不符合。
②需要部署在一个操作系统中的多个强耦合应用
容器适用于运行单个应用,如果一个容器中运行多个应用,管理每个应用进程、存取日志、升级应用的时候就会很复杂。
③涉及内核操作的应用
容器本身是一个受到诸多管控的进程,隔离并不完全彻底,如果应用涉及到内核的操作,如自定义了驱动、内核模块,可能导致宿主系统异常进而影响到其他容器应用异常。
④存储了海量数据的数据库
存储了海量数据的数据库对I/O 的要求高、网络吞吐量高,这些要求容器还不能很好满足。而容器的优势如易于构建、弹性伸缩、维护环境一致性对于海量数据库意义不大。
2.2 容器化改造的关键点
电信支撑系统容器化改造的关键点,主要包括如下方面:
(1)引入分布式框架
分布式服务治理框架可以加速系统微服务化的改造,并标准化开发过程,便于测试、部署。通过引入Dubbo 或Spring Cloud 等分布式服务治理框架,将应用微服务化,提升系统可扩展性和持续交付能力,实现系统的高可用。
(2)组件云化
推进“去IOE”,促进IT 系统x86 化,引入分布式数据库、分布式缓存、分布式消息中间件等组件,极大提升系统弹性伸缩能力,降低系统负载压力。
(3)应用与数据分离
通过将业务实现和业务数据进行分离,将业务数据实现无状态化,前端业务通过统一的数据访问引擎进行路由,可以极大的降低业务数据的安全风险;
(4)应用容器化改造
应用在容器化改造前,需要了解应用的运行环境、依赖包等,并且熟悉应用的部署形态。
①执行项目迁移:将应用工程迁移到容器化工程中进行管理。
②构建容器化环境:按运行环境和依赖包选择基础镜像,按标准编写Dockerfile。
③容器镜像生成:在容器化工程中执行自动构建生产容器镜像,完成容器化改造,统一交付镜像。
④配置与应用分离:将应用的配置信息通过环境变量注入,或者通过从配置中心拉取配置的方式,来保障应用和配置分离。
3 结语
本文通过对容器技术的研究,结合目前电信支撑系统的现状,提出了利用容器技术解决电信支撑系统架构存在的问题,并对容器化改造后的优势进行了分析。最后,给出了电信支撑系统容器化改造的适用范围和改造关键点,为电信支撑系统架构的后续优化升级提供了借鉴意义。