基于微服务架构和方法的项目管理系统设计
2020-11-30丰建春苑学贺吴嘉生
丰建春 苑学贺 吴嘉生
摘 要 基于单体架构的传统应用随着业务的增长和需求的增加,存在代码逻辑复杂、耦合度高、迭代周期长、持续交付能力弱、维护困难、无法及时响应业务的持续发展变化等不足。而微服务(microservices)作为一种新的软件架构模式,是把系统业务功能开发或者拆分为一组小型服务的方法。每个服务运行在自己的进程之中,服务间的通信常采用HTTP或RPC等轻量级通信机制。这些服务可以用不同的语言来开发,并使用不同的数据存储技术,满足服务的独立性、无状态、功能职责单一化,并可以通过多个微服务的组合实现复杂业务,通过服务的替换和升级实现对业务系统的动态和灵活支持,从而成为一种应用日趋广泛的软件开发和架构模式。
关键词 单体应用;微服务;微服务拆分原则
Design of Project Management System Based on Microservice Architecture and Methodology
Feng Jianchun, Yuan Xuehe, Wu Jiasheng
Beijing China-Power Informaiton Technology Co. LTD,Beijing 100192,China
Abstract With the growth of business and the increase of requirement, traditional applications based on monolithic architecture have some shortcomings such as complex code logic, high coupling, long iteration cycle, weak continuous delivery capability, difficult maintenance, and unable to respond to the continuous change of business in time. Microservices, as a new software architecture model, is a way to develop or split the business functions of the system into a group of small services. Each service runs in its own process, and lightweight communication mechanisms such as HTTP or RPC are often used for inter-service communication. These services can be developed in different languages and use different data storage technologies to satisfy the independence, statelessness and simplification of functions and responsibilities of services. They can also realize complex business through the combination of multiple micro services, and realize dynamic and flexible support for business systems through service replacement and upgrading. As a result, it has become an increasingly widely used software development and architecture model.
Keywords Monolith application;Microservice;Microservice splitting rule
引言
傳统的应用软件开发和部署都采用单体应用(monolith application)的方式完成,早期的C/S结构或者B/S结构的应用,无论使用的开发语言是c/c++、java、Node.js、python、PHP等,软件的开发方式都是以不同组件或者模块的组合集成完成所需要的功能,对于有并发要求的任务通过多线程或者多进程来实现。软件开发人员的构成通常是一个小组负责一个或者几个功能模块,采用相对比较统一的技术完成开发和交付,交付的形式往往是一个包含所有功能的归档包,具体形式可能是一组exe程序加上lib文件的安装包,或者war格式的web应用部署包。这种单体应用的模式适用于软件开发的初期,软件规模不大的情况,用户的开发和维护相对简单。随着软件技术,尤其是互联网技术的发展,软件向大数据、云计算、物联网、移动互联等新的技术潮流演进,用户的业务越来越多样化,这种情况下的单体应用的结构会变得过度复杂和臃肿,扩展性和维护性降低,持续交付周期变长,从而维护成本逐渐升高。
微服务(microservices)是一种新型的软件设计和开发模式。和传统的单体应用架构不同,微服务架构是把一个相对复杂庞大的应用拆分为一组功能独立的小型或者微型服务的设计方法。每个服务可以由小的团队甚至个人独立开发,使用不同的开发语言,根据业务需要有自己的数据存储实现。微服务架构下每个服务的部署也是独立的,运行在单独的进程当中,一个微服务的状态正常与否不会影响其他微服务的运行。通常由于需要部署的微服务数量较多,因此会采用某种自动部署机制。微服务之间采用HTTP或则RPC调用的方式通信。微服务架构下每个微服务具有部署独立、服务无状态、功能职责单一无耦合的特点。通过多个微服务的组合和协作,可以实现较为复杂的业务功能,并可以通过对单个服务的替换和升级实现对业务系统功能的灵活动态调整。
2微服务设计示例
2.1 系统背景
项目名称:国网上海电力公司一体化业务应用项目管理域设计
项目现状:
目前上海市电力公司项目管理域主要涉及13个专业、11个业务系统,均为公司统推系统,其中ERP、财务管控、PMS2.0为二级部署,其余均为一级部署。
各个专业系统通过集成接口或线下手工录入的方式,在系统之间共享收据,如项目基本信息、预算信息、采购信息以及合同信息等。
因历史原因,公司项目管理相关系统的建设,各业务领域、不同的项目管理阶段以各专业自行建设为主,存在管理的项目源头不唯一、数据重复录入、数据不能有效共享、不同的管理口径数据差异等问题,严重影响公司整体的项目管理水平。
以上海市电力公司为例,上海市电力公司公司项目管理涉及多专业、多阶段、多系统,业务操作繁杂,同一套业务,需要多次登陆,穿越多个系统才能完成。
2.2 系统设计目标
本项目涉及13条业务线11个业务系统的重建,根据国网项目管理域系统建设的现状和技术发展需求,选取部分核心功能进行微应用微服务重构并逐步拓展到全范围。
遵循公司一体化业务应用建设思路,对13个专业,11个业务应用进行重构,项目管理域系统的现状是每个系统有一个独立的数据库,业务数据分散而且冗余。为此需要基于微服务的理念对系统进行改造,使其成为数据融合统一,业务清晰而且没有重合的一体化项目管理应用。数据方面“一套数据”,实现“一次录入、统一标准、有效共享”;操作方面“一个系统”,实现“一次登录、灵活配置、按需应用” 。
针对项目管理域多专业、多阶段、多系统等问题,项目建设策略是围绕项目储备、计划、预算等阶段中共性应用进行处理,后逐步拓展到其他业务个性应用的形式,通过微应用微服务的形式,实现功能的灵活配置,最终实现项目管理域一体化业务应用。
总体思路是基于微服务架构,对现有的多个专业(基建、科技、信息、人資等13各专业)的项目管理系统进行重新设计和整合,实现一个一体化的管理域业务系统,从而实现统一的操作流程和统一的数据管理。
2.3 总体架构设计
一体化业务应用项目管理域系统微应用总体架构基于一体化“国网云”平台,分为接入层、应用层、服务层、数据层和资源层。其中接入层门户2.0用于实现用户交互。应用层包括一体化业务应用项目管理域系统所涉及的七个阶段的微应用,具体为:项目规划微应用、项目储备微应用、项目计划微应用、项目预算微应用、项目执行微应用、项目完工微应用、项目评价微应用。服务层包括各阶段应用层各应用需要调用的微服务集合。微应用和微服务之间通过部署的分布式服务总线组件实现服务注册和发布、服务调用、服务监控等。数据层包括各应用需要用到的数据库,具体为:规划库、储备库、计划库、预算库、执行库、完工库和评价库。资源层包括由云操作系统提供的虚拟计算、存储和网络资源,以及系统运行所需要依赖的其他组件,包括负载均衡、及时消息总线等。另外通过云服务中心实现应用和服务的一键部署、弹性伸缩、灰度发布、故障自愈和监控调度等。
在国网云环境下的系统总体架构如下图:
对以上根据业务功能列表拆分的微应用和微服务,基于spring cloud框架选择几个典型的微应用和微服务进行原型验证,以Eureka作为服务注册中心,Zuul作为服务网关,通过RESTful接口完成功能调用。结果证明采用微服务架构实现业务功能时,各个微应用和微服务可以由不同的团队独立开发,互不影响,每个微服务业务功能和职责相互独立,可通过容器化的方式单独部署在对立的运行环境之中,并且可以通过多实例部署来保证高可用,公共的功能可以通过设计独立的微服务为其他微服务和微应用提供统一功能。
3结束语
本文分析比较了软件传统的单体架构和新出现的微服务架构的特点以及开发设计模式、应用场景的不同。随着软件规模的扩大,单体架构会面临结构过度复杂,扩展性和维护性降低,持续交付周期长,维护成本逐渐升高的问题。微服务架构由于对业务功能进行拆分,并且通过容器化技术运行在独立的进程之中,所以每个服务具有功能职责单一、规模微小、运行部署独立、易于扩展迭代的特点,这样可以通过多个微服务的组合实现复杂的系统功能。
基于微服务架构的特点,本文提出了对单体应用进行微服务改造或者建立新的微服务系统时微服务的设计和拆分原则。每个微服务应该完成单一功能,重用性高或者访问量大的功能也应该用独立微服务实现,但是系统中微服务的数量也不应太多,否则也会带来维护的困难。根据这样的原则,对一个项目管理域的系统进行微服务设计,通过对系统所要完成功能的梳理,把原来由单体应用完成的系统重构成由前端的微应用和后端的微服务实现,根据功能列表设计对应的微应用和微服务支持自动部署列表,设计和开发好的微服务部署在PaaS平台上,满足弹性伸缩、扩展性和高可用性的要求。通过对微服务设计原则的验证实现,为今后更多系统采用微服务的理念进行设计奠定基础。
参考文献
[1] 李春阳,刘迪,崔蔚,等.基于微服务架构的统一应用开发平台[J].计算机系统应用,2017,26(4):43-48.
[2] 郭栋,王伟,曾国荪.一种基于微服务架构的新型云件PaaS平台[J].信息网络安全,2015(11):15-20.
[3] 周立.Spring Cloud与Docker微服务架构实战[M].电子工业出版社,2017,5.
作者简介
丰建春,男,山西朔州人;毕业院校:北京航空航天大学,专业:信息与信号处理;现就职单位:北京中电普华信息技术有限公司,研究方向:云计算、大数据和微服务微应用迁移改造上云等。