一种基于限界上下文的微服务划分方法
技术领域
本发明涉及一种基于限界上下文的微服务划分方法,属于软件系统重构
技术领域
。背景技术
在企业重构系统过程中,首要问题的就是将遗留系统划分为微服务。微服务划分技术是该领域当前面临的巨大挑战,也是学术界和工业界的研究热点。需求分析是软件开发的早期阶段,这一阶段决定软件开发的走向,是非常重要的一步。目前还没发现有专门针对软件微服务化早期阶段的微服务划分方法。
发明内容
本发明要解决的技术问题是:提供了一种基于限界上下文的微服务划分方法,解决了架构师在微服务划分过程中过度依赖直觉和经验的问题。
本发明采用的技术方案是:一种基于限界上下文的微服务划分方法,包括如下步骤:
1)分析业务场景;
2)用例图描述,通过统一建模语言用例图进行建模;
3)提炼上下文,通过语义和功能相关性分析,提炼出业务活动上下文;
4)提取候选微服务,确定上下文边界并命名,得到候选微服务。
具体地,所述步骤1)具体如下:
通过阅读遗留系统开发文档和通过与开发人员及领域专家充分交流,全面地收集遗留系统信息,理清参与角色(Who)、业务活动(What)和业务价值(Why),梳理出角色和事件交互的过程和完成的顺序,也就是系统的主要业务流程。在业务流程的基础上抽象出不同的业务场景,这些业务场景由多个业务活动组成。由于对遗留系统的结构缺乏了解,因此收集信息是非常关键的一步。
具体地,所述的步骤2)具体如下:
在获得业务场景的基础上,利用领域场景分析的用例分析方法剖析这些场景以识别业务活动,一个业务活动实则就是一个用例,用统一建模语言(Unified ModelingLanguage,UML)用例图对业务场景进行建模,并确定用例之间的关系,得到某个业务场景的用例图模型。由于功能相关性分析依赖用例之间的关系,先对其进行简单介绍。用例之间的基本关系包括泛化、包含和扩展,泛化关系(Generalization)代表一般和特殊的关系;包含关系(Include)是一个用例包含其他用例具有的行为并把这些行为作为自身用例的一部分;扩展关系(Extend)是基本用例的增量扩展。
具体地,所述的步骤3)包括两个方面的分析:
1)语义相关性分析
从语义角度去分析业务活动的用例描述,如果某些用例具有相同的语义,能作为归类的特征,语义相关性主要来自于描述业务活动的宾语。例如,若获得用例查询商品、收藏商品和分享商品,这些用例都具有“商品”的语义,基于语义相关性的特征,可以考虑将这些用例归为同一类。
2)功能相关性分析
功能相关性指的就是职责的内聚性,强相关就等于高内聚。功能相关使用高内聚低耦合设计原则,从功能的角度分析业务活动是否彼此关联和依赖,如果用例之间存在关联和依赖,可以作为归类的特征。如果两个功能必须同时存在,又或者缺少一个功能,另一个功能是不完整的,则二者功能强相关,反之则二者功能弱相关。本发明的方法通过用例之间的关系来判别功能相关性的强弱,若用例之间是包含关系,则功能相关性强;若用例之间是扩展关系,则功能相关性弱。
具体地,所述的步骤4)具体如下:
综合语义和功能相关分析结果,确定上下文边界并命名,得到候选微服务。界限上下文的划分是一个迭代的过程,因此这一步可以看作对提炼的上下文合适与否的检验过程。
本发明的有益效果是:提供了一种基于限界上下文的微服务划分方法,解决了架构师在微服务划分过程中过度依赖直觉和经验的问题,能为需要重构系统的公司提供客观的决策建议。
附图说明
图1为本发明整体的原理示意图;
图2为Jpetstore用例建模图;
图3为提取Jpetstore候选微服务图。
具体实施方式
下面结合附图和具体实施例,对本发明作进一步描述。
实施例:如图1-3所示,一种基于限界上下文的微服务划分方法,包括如下步骤:
1)分析业务场景;
2)用例图描述,通过统一建模语言用例图进行建模;
3)提炼上下文,通过语义和功能相关性分析,提炼出业务活动上下文;
4)提取候选微服务,确定上下文边界并命名,得到候选微服务。
具体实施过程如下:
本实施例选用Github上的开源项目Jpetstore对提出的方法进行案例研究,Jpetstore是一个为客户提供购买宠物服务的电子商务平台。该平台主要包括浏览宠物、加入购物车和下单购买等功能,该案例被研究者多次应用到服务拆分的研究中,具有较好的代表性。按照建议的拆分方法,逐步将MA系统Jpetstore拆分成微服务。
进一步地,所述步骤1)具体如下:
用户在Jpetstore平台上购买宠物,需要填写信息注册Jpetstore平台账户,注册账户可以登录系统、查询和修改账户信息、浏览和购买商品。通过上述分析,可以得到注册和登录、购买商品两个业务场景。
进一步地,所述的步骤2)具体如下:
根据业务场景的分析,并通过用例分析方法剖析这些场景,通过参与者(Actor)来驱动对用例的识别。可以得到用例注册账户、登录账户、查询账户信息、修改账户信息、搜索商品、浏览商品、加入购物车、移除购物车、更新购物车、下订单、查看订单。
进一步地,所述的步骤3)具体如下:
1)语义相关性分析
根据语义相关性分析规则,注册账户、登录账户、查询账户信息、修改账户信息都具有相同的“账户”语义,可以将这些用例归为一类;搜索商品、浏览商品都具有“商品”语义,可以将这些用例归为一类;加入购物车、移除购物车、更新购物车用例都具有相同的“购物车”语义,可以将这些用例归为一类;下订单、查看订单用例都具有相同的“订单”语义,可以将这些用例归为一类,查询账户信息、修改账户信息都具有相同的“信息”语义,可以将这两个用例归为一类。
2)功能相关性分析
根据功能相关性规则,登录账户用例包含注册账户、查询账户信息、修改账户信息用例,具有强相关性,可以归为一类;搜索商品用例包含浏览商品用例,具有强相关性,可以归为一类;下订单用例包含查看订单,具有强相关性,可以归为一类;加入购物车用例包含移除购物车和更新购物车,具有强相关性,可以归为一类。
进一步地,所述的步骤4)具体如下:
根据上述上下文提炼,可以得出注册账户、登录账户、查询账户信息、修改账户信息为一个限界上下文,将其命名为账户服务;搜索商品和浏览商品为一个限界上下文,将其命名为商品服务;加入购物车、移除购物车、更新购物车为一个限界上下文,将其命名为购物车服务;下订单、查看订单为一个限界上下文,将其命名为订单服务。图3用虚线将运用本发明方法提取到的账户、商品、购物车和订单四个微服务划分出来。
上面结合附图对本发明的具体实施方式作了详细说明,但是本发明并不限于上述实施方式,在本领域普通技术人员所具备的知识范围内,还可以在不脱离本发明宗旨的前提下作出各种变化。