微服务架构在容器云中的应用实践
2017-09-06耿贞伟
杨 鸥 张 羿 耿贞伟
(云南电网有限责任公司,云南 昆明 650011)
微服务架构在容器云中的应用实践
杨 鸥 张 羿 耿贞伟
(云南电网有限责任公司,云南 昆明 650011)
随着信息化建设的迅速发展,电网传统业务应用面临资源不能高效动态伸缩、高效迁移部署等方面的问题,亟需在开发平台中引入微服务架构。以Docker为代表的容器技术则为微服务理念提供了匹配的实现机制,本文从什么是微服务切入,详细介绍了微服务架构的优势,从电网容器云平台自身实践出发,给出了微服务架构的云端应用实践。
微服务;容器持续集成;单体应用
1 引言
多年以来,电网公司的IT建设者门一直在寻找更好的方法来构建业务系统,从而提高资源的利用率和开发运维效率,从传统服务器管理模式、采用虚拟化搭建的云计算管理平台模式到基于容器构建云PaaS平台方式均取得了良好的经济效益。而随着这些基础平台的变化,使用传统整体式架构应用开发系统越来越难以满足企业不断变化的需求,难以满足快速开发、交互、运维的需要。
近年来,微服务和容器技术的不断发展,为企业解决这些问题提供了一种新的模式,很多组织发现细粒度的微服务架构可以帮助他们更快地交付软件,并且有更多机会尝试新技术。微服务在技术决策上给了我们极大的自由度,使我们能够更快地响应新的变化。
2 什么是微服务架构
微服务是一种架构风格,其概念源于Martin Fowler在2014年3月所写的一篇文章“Microservices”,微服务提倡将应用系统按照一定的原则将大系统拆分成一系列细小的服务,每个服务只需要专注于一个单一的业务功能即可,并且服务之间可以互相独立运行,采用轻量级API进行通信,来满足业务和用户的需求。
在传统经典分层架构模式下(例如表现层、业务层、数据层),业务虽然在逻辑划分有模块和组件,但常作为一个整体进行编译、打包、部署、运维,因此在物理部署层面依然是一个“单块”。围绕这种架构模式,我们可以看到很多常用的IDE集成开发环境和编程框架(如eclipse、spring等),它们为开发者提供便捷的开发、调试、测试、部署等体验,让开发人员可以通过工具、框架快速生成应用原型而不必花大量精力在服务分解和分布式设计上。但是伴随者业务和功能的累积扩张,应用体积也随机迅速扩大,单块架构难以适应这种快速变化的需求,并且面临开发效率低、交付周期长、技术转型难等一系列的挑战。
微服务架构则是从架构层面出发,将应用系统按照一定的边界分解成一系列的独立微服务,每个微服务与传统应用中的逻辑模块或组件相当,但是可以独立地进行编译、部署、运行,具有独立部署、复杂度可控、技术选型灵活和高扩展性的优点。
图1 微服务参考架构
微服务架构的特点为:
(1)业务粒度微小
由于体积小、复杂度低,每个微服务可由一个小规模开发团队完全掌控,易于保持高可维护性和开发效率。
(2)职责单一
每个服务只做一件事情,并通过定义良好的接口清晰表述服务边界。
(3)隔离性好
每个微服务都可以独立部署,互相隔离互不影响,一个服务宕机不会影响其它服务。
(4)管理容易
每个服务可以独立地进行开发部署,可以针对业务特点使用不同的开发语言。
当然像任何其它技术一样,微服务架构也有不足,带来的挑战包括:
(1)通信成本高:在单体应用中的一个函数或进程调用在微服务架构下可能变成了一个http远程调用,网络延迟会带来更长的耗时,造成更高的通信成本。
(2)数据一致性问题:在单体应用中数据通常存储在一个数据库中,保证数据的一致性很容易,而在微服务架构下,通常不同的微服务有不同的数据库,但往往一个操作可能会涉及多个微服务的互相调用,当服务很多时整个调用链路变长,调用失败的风险高,在这种分布式架构下更难保证数据的一致性和可靠性。
(3)服务依赖:不同服务之间的依赖问题,导致复杂度增加。
(4)部署复杂:微服务化后服务实例变多,造成更多需要部署、配置和监控的部分,此外一个应用的改变可能会波及多个服务,扩展和监控难度更大。
3 微服务架构在容器云中的实践
微服务架构虽然给企业开发者们带来了诸多优势,但同时也让构建、部署和维护这些分布式的微服务系统带来不少难题。近年来基于轻量级虚拟化技术、面向应用虚拟化运行环境的容器云为微服务提供了理想的载体,利用容器化技术简化微服务创建、集成、部署、运维的整个流程,推动微服务在云端的大规模实践,下面以电网容器云平台为例,说明各个流程的实践:
图2 容器云下开发运维流程
3.1 创建
在容器云平台,用户可以很方便地创建微服务项目,并在项目中与代码仓库进行关联,轻松选择代码项目进行构建。每当开发人员提交代码时,系统可以自动将存于代码仓库的微服务程序快速构建成新的容器镜像,经过持续集成自动化验证后转化为随时可以部署的容器镜像,用户可以将这个微服务一键部署到容器云平台上。
3.2 集成
在电网容器云平台的镜像仓库中,不仅汇集了来自Docker官方和社区的优质镜像,也支持加入平台以外的任意镜像源。用户可以根据自己的业务需要,像搭积木一样自由组合、复用各种容器化微服务,轻松集成应用。比如,用户需要一个通用的MySQL数据库或者tomcat web服务,他可以直接在镜像中选择适合的数据库服务镜像,并与其业务连接起来。
3.3 部署
在电网容器云平台中可以快速灵活地进行部署:您可以用项目镜像或第三方镜像进行部署。可以一次部署多个镜像并为每个镜像的容器设定cpu和内存占用。从配置部署到启动只需要几分钟。
此外,平台支持升级回滚:部署有完整的版本管理,每次升级会生成一个部署版本,可以随意选择一个旧版本进行回滚。部署出现异常时可以指定版本恢复。
3.4 运维
在微服务架构模式下,由于独立进程众多,服务在部署后如何进行运维、管理成为实践上的另一个难点。容器云通过主机管理、主机监控屏蔽用户来屏蔽底层云主机和基础架构运维,通过容器编排、自动修复、弹性扩展、监控日志等高级的应用服务,实现平台上微服务的智能托管,帮助用户降低运维成本和难度。
3.5 存储
微服务一般分为有状态和无状态的服务,无状态的服务他们通常是不用保存数据的,可以很方便地进行横向扩展,而有状态的服务则需要存储数据,如存储在数据库或缓存服务中。在微服务架构模式下,提倡每个微服务可根据实际需求选择最合适的数据存储服务。
在Docker容器中,持久化保存需要通过挂载Volume来实现,因此容器云平台将持主机上的云存储抽象成数据卷直接挂载在容器上,容器在重启、迁移时系统无需人工干预可以自动重新挂载。
4 从传统单体式架构迁移到微服务架构的策略
首先,一个基本的策略是:不要大规模重写代码,除非是重建一套全新基于微服务的应用。重写代码听起来很不错,但实际上充满了风险,最终可能会失败,相反,我们应该采取逐步迁移单体式应用的策略,通过逐步生成微服务新应用,与旧的单体式应用集成。随着时间的推移,单体式应用在整个架构中比例逐渐下降直到消失或者成为微服务架构的一部分。
第二要将前端和后端分离:减小单体式应用复杂度的策略是将表现层(响应RESTAPI请求或提供基于HTML的图形接口)和业务逻辑(完成业务逻辑的应用核心)、数据访问层(访问基础元素,例如数据库和消息代理)分开。
此外,要抽出服务:从单体应用中抽取出某些模块成为独立微服务。每当抽取一个模块变成微服务,单体应用就变得简单一些;一旦转换足够多的模块,单体应用本身已经不成为问题了,要么消失,要么简单到成为一个服务。
5 结语
构建复杂的应用确实非常困难,而微服务架构模式可以使构建复杂应用变得简单化。微服务架构的诞生和容器技术的流行几乎是同时发生的,是互联网时代倒逼传统技术和架构而产生的变革,基于容器技术的PaaS平台给开发者提供了一个部署和管理微服务的简单方法,它把所有这些问题都打包内置解决了。
[1]古明生,解文艳,崔焱.电网企业去系统化的IT架构研究[J].南方能源建设,2016,3(2):118-121.
[2]郭栋,王伟,曾国荪.一种基于微服务架构的新型云件PaaS平台[J].信息网络安全,2015(11):15-20.
[3]杨俊伟,纪鑫,胡强新.基于微服务架构酯电力云服务平台[J].电力信息与通信技术,2017(1):8-12.
[4]陈恺.Docker与微服务架构的最佳实践[EB/OL].http://www. infoq.com/cn/presentations/best-practice-of-micro-service-architecture
[5]王磊.微服务架构与实践[M].北京:电子工业出版社,2015.
[6]杨俊伟,纪鑫,胡强新.基于微服务架构的电力云服务平台[J].电力信息与通信技术,2017(1):8-12.
[7]李苏璇.基于微服务架构的SaaS应用构建方法研究[D].广州:华南理工大学,2016.
[8]崔蔚,李春阳,刘迪,等.面向微服务的统一应用开发平台[J].电力信息与通信技术,2016(9):12-17.
TheApplication of Micro ServiceArchitecture in Container Cloud
Yang Ou Zhang YiGeng Zhenwei
(Yunnan Power Grid Co.,Ltd.,Yunnan,Kunming 650011)
With the rapid development of information technology,the traditional business applications of power grid faces with many problems,such as inefficient resources,dynamic scalability,efficient migration and deployment.Therefore,it is urgent to introduce micro service architecture into the development platform.The container technology represented by Docker is a micro service concept providing the realization mechanism.From the definition of micro service,this paper introduces the advantages of micro service structure in detail,and introduces the application of micro service architecture in the cloud.
micro service;container continuous integration;single application
TP393.09;TP311.52
A
1008-6609(2017)07-0079-03
杨鸥(1987-),女,云南会泽人,本科,工程师,研究方向为信息化项目管理。