CN113961173B - 基于领域事件驱动的单体***微服务拆分方法 - Google Patents
基于领域事件驱动的单体***微服务拆分方法 Download PDFInfo
- Publication number
- CN113961173B CN113961173B CN202111190359.6A CN202111190359A CN113961173B CN 113961173 B CN113961173 B CN 113961173B CN 202111190359 A CN202111190359 A CN 202111190359A CN 113961173 B CN113961173 B CN 113961173B
- Authority
- CN
- China
- Prior art keywords
- service
- micro
- interface
- domain
- interfaces
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 72
- 239000000178 monomer Substances 0.000 title description 7
- 239000011159 matrix material Substances 0.000 claims abstract description 29
- 230000008569 process Effects 0.000 claims abstract description 26
- 238000013461 design Methods 0.000 claims abstract description 18
- 230000006870 function Effects 0.000 claims description 18
- 230000008878 coupling Effects 0.000 claims description 15
- 238000010168 coupling process Methods 0.000 claims description 15
- 238000005859 coupling reaction Methods 0.000 claims description 15
- 239000013598 vector Substances 0.000 claims description 11
- 238000012545 processing Methods 0.000 claims description 10
- 230000005540 biological transmission Effects 0.000 claims description 9
- 238000006243 chemical reaction Methods 0.000 claims description 9
- 230000006399 behavior Effects 0.000 claims description 4
- 238000011144 upstream manufacturing Methods 0.000 claims description 4
- 230000002776 aggregation Effects 0.000 claims description 3
- 238000004220 aggregation Methods 0.000 claims description 3
- 230000002085 persistent effect Effects 0.000 claims description 3
- 230000004931 aggregating effect Effects 0.000 claims description 2
- 230000001419 dependent effect Effects 0.000 claims description 2
- 238000013507 mapping Methods 0.000 claims description 2
- 238000005065 mining Methods 0.000 claims description 2
- 238000010586 diagram Methods 0.000 abstract description 14
- 238000011161 development Methods 0.000 abstract description 4
- 238000005516 engineering process Methods 0.000 abstract description 2
- 230000007246 mechanism Effects 0.000 description 7
- 238000004458 analytical method Methods 0.000 description 4
- 230000008901 benefit Effects 0.000 description 4
- 230000008859 change Effects 0.000 description 4
- 230000000694 effects Effects 0.000 description 4
- 230000009471 action Effects 0.000 description 3
- 238000011156 evaluation Methods 0.000 description 3
- 241000288113 Gallirallus australis Species 0.000 description 2
- 238000010276 construction Methods 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 230000005012 migration Effects 0.000 description 2
- 238000013508 migration Methods 0.000 description 2
- 230000008520 organization Effects 0.000 description 2
- 238000000638 solvent extraction Methods 0.000 description 2
- 230000006978 adaptation Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 238000012512 characterization method Methods 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 230000001808 coupling effect Effects 0.000 description 1
- 238000000354 decomposition reaction Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000012938 design process Methods 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 238000003064 k means clustering Methods 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 230000008092 positive effect Effects 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 238000003786 synthesis reaction Methods 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/20—Software design
- G06F8/24—Object-oriented
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/23—Clustering techniques
- G06F18/232—Non-hierarchical techniques
- G06F18/2321—Non-hierarchical techniques using statistics or function optimisation, e.g. modelling of probability density functions
- G06F18/23213—Non-hierarchical techniques using statistics or function optimisation, e.g. modelling of probability density functions with fixed number of clusters, e.g. K-means clustering
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/62—Protecting access to data via a platform, e.g. using keys or access control rules
- G06F21/6218—Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/35—Creation or generation of source code model driven
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/36—Software reuse
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4488—Object-oriented
- G06F9/449—Object-oriented method invocation or resolution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q50/00—Information and communication technology [ICT] specially adapted for implementation of business processes of specific business sectors, e.g. utilities or tourism
- G06Q50/10—Services
- G06Q50/26—Government or public services
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Business, Economics & Management (AREA)
- Mathematical Physics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- General Health & Medical Sciences (AREA)
- Tourism & Hospitality (AREA)
- Databases & Information Systems (AREA)
- Health & Medical Sciences (AREA)
- Computational Mathematics (AREA)
- Computer Hardware Design (AREA)
- Strategic Management (AREA)
- Computer Security & Cryptography (AREA)
- Algebra (AREA)
- Development Economics (AREA)
- Educational Administration (AREA)
- Computing Systems (AREA)
- Economics (AREA)
- Human Resources & Organizations (AREA)
- Marketing (AREA)
- Primary Health Care (AREA)
- Bioethics (AREA)
- General Business, Economics & Management (AREA)
- Probability & Statistics with Applications (AREA)
- Life Sciences & Earth Sciences (AREA)
- Artificial Intelligence (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Bioinformatics & Computational Biology (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Evolutionary Biology (AREA)
- Evolutionary Computation (AREA)
- Stored Programmes (AREA)
Abstract
本发明涉及一种基于领域事件驱动的单体***微服务拆分方法,其技术特点是:构建领域事件模型并生成多维度接口相关度综合矩阵;从多维度接口相关度综合矩阵中识别候选微服务;根据候选微服务构建微服务各层接口调用关系链并进行解耦处理,得到微服务化结果;将各个微服务化结果从三层架构模式演进到领域驱动设计分层架构模式。本发明结合领域驱动设计的理念,不依赖特定的软件构件,直接从单体应用中挖掘需要的相关信息,并将单体***刻画成领域事件图模型,在此过程中,本发明更关注于微服务拆分的本质,而非某种特定的软件技术,所以该拆分方法基本不受特定开发技术的约束,能很好地适用于绝大多数的应用程序。
Description
技术领域
本发明属于微服务技术领域,尤其是一种基于领域事件驱动的单体***微服务拆分方法。
背景技术
目前,微服务体系结构是企业创建和升级应用程序时最流行的体系结构,由于其具有可维护性、可重用性、可伸缩性、可用性和自动化部署等优点,因此在学术界和业界都被普遍接受,例如谷歌、eBay、亚马逊、Netflix等互联网行业巨头都已经将他们的应用程序从单体架构向微服务架构转型,并从它的许多优势中获益。
然而,微服务架构的出现也伴随着许多问题需要解决。其中,微服务拆分是从单体遗留***到微服务迁移过程中最复杂的任务之一,它需要架构设计师根据自己以往的开发经验,手工实现拆分过程。拆分微服务的关键在于需要找到合适的模块、合适的尺寸、合适的职责分配以及设计良好的接口,设计糟糕的边界会导致网络通信的增加,这种增加可能会产生一个由于糟糕的性能和不稳定性而不适合其预期任务的***。
面对微服务拆分困境,沉睡多年的领域驱动设计(DDD)思想开始火爆起来,微服务赋予了DDD新的生命力,让它迎来了自己的时代。软件设计者们在进行微服务设计时,发现可以利用DDD设计方法来建立领域模型,划分领域边界,再根据这些领域边界从业务视角来划分微服务边界。于是越来越多的大型互联网企业开始把DDD作为微服务拆分设计的指导思想。然而,从目前来看,还没有可以量化的领域以及限界上下文的划分标准。它主要依赖领域专家经验,以及项目团队在事件风暴过程中不断地权衡和分析。不恰当的领域边界划分可能代价高昂,并且,DDD缺乏指导性的架构迁移理论思想并且忽略了微服务架构模型的具体落地规范。
发明内容
本发明的目的在于克服现有技术的不足,提供一种设计合理、快速准确且应用广泛的基于领域事件驱动的单体***微服务拆分方法。
本发明解决现有的技术问题是采取以下技术方案实现的:
一种基于领域事件驱动的单体***微服务拆分方法,包括以下步骤:
步骤1、构建领域事件模型并生成多维度接口相关度综合矩阵;
步骤2、从多维度接口相关度综合矩阵中识别候选微服务;
步骤3、根据候选微服务构建微服务各层接口调用关系链并进行解耦处理,得到微服务化结果;
步骤4、将各个微服务化结果从三层架构模式演进到领域驱动设计分层架构模式。
进一步,所述步骤1构建领域事件模型的方法包括以下步骤:
⑴分析业务场景的逻辑流程,挖掘出业务场景中潜在的领域事件以及对应的实体对象,将领域事件模型定义为一个包括领域事件、命令、实体对象、值对象和上下文本体的5元组;
⑵按照一定功能流编排的事务流构成情景域,该情景域为:S=<TSet,FSet>;其中,TSet是事务集,FSet由一组功能序列构成,表示事务集上的功能流;所述事务流是构成情景域的基本功能单元,由按照一定控制流编排的请求指令块构成,事务流为T=<TID,Function>,其中,TID是事务名,Function是自然语言描述的该事务的功能;
⑶使用APM工具对事件状态转换过程进行动态链路追踪,解析出该过程中应用表现层接口调用细节,并将这些接口信息加入领域事件模型中;
⑷将构建出的领域事件模型在请求指令块、事务流、情景域三个维度上进行分析并归纳总结,构造出多维度接口调用信息版本的领域事件模型。
进一步,所述命令用如下二元组表示:
其中,Interface是Command中包含的***表现层接口调用细节,表现层位于三层构架的最上层,与用户直接接触,Invocation order是Interface之间的调用次序。
进一步,所述上下文本体采用如下二元组表示:
其中,Concept=Request CommandBlock∪Transaction Flow∪Scenario Field是领域上下文概念集,Relation是概念间关系的集合;
Request CommandBlock为触发条件,其内部由一组接口调用按次序排列组合而成,并与领域事件模型中的命令元素相对应;
Transaction flow为事务流,由一个或多个指令块和领域事件组成;
Scenario field为情景域,由一系列事务流按次序排列组合而成,是在一个封闭范围内相对独立的子领域;
Relation包括领域-情景关联、事务-情景关联、指令-事务关联、控制流关联、指令-实体关联、功能流关联、事务-功能关联、事务-名字关联。
进一步,所述生成多维度接口相关度综合矩阵的方法为:将领域事件模型作为输入,对于两个表现层接口Ia,Ib,从请求指令块、事务流、情景域三个维度定义它们之间的相关度:
⑴定义Com(Ii)为调用了表现层接口Ii的请求指令块集合,Ia,Ib两个接口在请求指令块维度上的相关度表示为CCom(Ia,Ib),等于同时调用Ia,Ib这两个接口的请求指令块类型总数:
CCom(Ia,Ib)=card(Com(Ia)∩Com(Ib))
⑵定义Tra(Ii)为调用了表现层接口Ii的事务流集合,Ia,Ib两个接口在事务流维度上的相关度表示为CTra(Ia,Ib),等于同时调用Ia,Ib这两个接口的事务流类型总数:
CTra(Ia,Ib)=card(Tra(Ia)∩Tra(Ib))
⑶定义Sce(Ii)为调用了表现层接口Ii的情景域集合,Ia,Ib两个接口在情景域维度上的相关度表示为CSce(Ia,Ib),等于同时调用Ia,Ib这两个接口的情景域类型总数:
CSce(Ia,Ib)=card(Sce(Ia)∩Sce(Ib))
⑷将三个维度上的接口相关度按下式进行加权累加,得到接口Ia,Ib的综合相关度CTotal(Ia,Ib):
CTotal(Ia,Ib)=α1·CCom(Ia,Ib)+α2·CTra(Ia,Ib)+α3·CSce(Ia,Ib)。
进一步,所述步骤2的具体实现方法为:
首先,将多维度接口相关度综合矩阵进行矩阵的向量化转换,将转换得到的这组高维向量映射到n维空间中一系列点,基于这些点的距离做聚类处理,经过数次迭代得出合适的聚类结果;
然后,将***表现层接口按照聚类结果分为大小不同的数个簇,每个簇对应一个微服务,由上至下依次设计出对应的业务逻辑层和数据访问层接口以及各服务独立的数据库,完成领域事件驱动的面向微服务拆分。
进一步,所述步骤3的具体实现方法为:
首先,将原***所有表现层接口的三层接口调用链进行刻画,找出每个表现层接口所有的Controller接口→Service接口→DAO接口调用链;结合表现层接口最佳聚类结果,将同一簇内的Controller接口聚集到一个微服务内,将不在同一簇内的Controller接口进行分离,Service接口和DAO接口分别划归到其对应的上游接口所在的微服务中,得到初步微服务化结果;
对初步微服务化结果中服务间的接口调用进行解耦处理,得到呈现服务间松耦合并且服务内高内聚特点的各个微服务化结果。
进一步,所述步骤4的具体实现方法为:
首先,将原先数据访问层的仓储接口和仓储实现分离,将仓储实现与原来三层架构通用的第三方工具包、驱动、常用公共工具、配置文件统一放到基础层,将仓储接口划分到领域层中,通过依赖倒置原则实现业务逻辑和数据库资源逻辑的解耦;
其次,将原来的业务逻辑层接口一分为二,一方面,将数据访问层中持久化对象转化为对应的实体对象,将原业务逻辑层与实体或实体方法组装和编排有关的服务接口划归到领域层中转化为领域服务接口,多个依赖紧密的实体对象和领域服务构成聚合,承载***的基础核心业务逻辑;另一方面,原来的业务逻辑层中用于组合和编排领域服务的接口被提取到应用层中,使其根据前端需求实现粗粒度的业务行为;
最后,将原先位于业务逻辑层的所有视图对象转化为数据传输对象,和原先的表现层接口共同构成用户接口层,用于前端应用与微服务或者微服务之间的数据组装和传输,充当数据传输的载体。
本发明的优点和积极效果是:
1、本发明结合领域驱动设计(DDD)的理念,不依赖特定的软件构件,直接从单体应用中挖掘需要的相关信息,并将单体***刻画成领域事件图模型,在此过程中,本发明更关注于微服务拆分的本质,而非某种特定的软件技术,所以该拆分方法基本不受特定开发技术的约束,能很好地适用于绝大多数的应用程序。
2、本发明采用半自动化拆分机制将微服务拆分粒度等重要的拆分因素考虑在内,并从多方面对拆分机制进行完善,设计出支持拆分方法中两阶段自动化的算法:(1)将DED的多维度接口调用信息版本抽象为多维度接口相关度综合矩阵;(2)从多维度接口相关度综合矩阵中识别候选微服务,并在评估环节考虑耦合、内聚等重要的微服务优势特征;通过具有内聚耦合特征相关指标的拆分结果表明,本发明可以有效地提供合理的、高质量的微服务候选方案。
附图说明
图1为本发明的处理流程图;
图2为本发明的领域事件模型(DED)原理图;
图3为本发明构建多维度接口相关度综合矩阵算法;
图4为本发明构建微服务算法;
图5为本发明的初步微服务化原理图;
图6为本发明的微服务间解耦合过程原理图;
图7为本发明的微服务架构模式演进过程原理图;
图8为本发明的微服务拆分结果评估指标;
图9为SSE随K值变化趋势图;
图10为本发明实施例(智慧养老服务平台)的核心业务用例图;
图11为发明实施例(智慧养老服务平台)十大粗粒度的情景领域;
图12为发明实施例(智慧养老服务平台)对应的DED图;
图13为发明实施例(智慧养老服务平台)在weka工具下的聚类结果示意图;
图14为发明实施例(智慧养老服务平台)的微服务化拆分结果。
具体实施方式
以下结合附图对本发明实施例做进一步详述。
一种基于领域事件驱动的单体***微服务拆分方法,如图1所示,包括以下步骤:
步骤1、构建领域事件模型(DED)并生成多维度接口相关度综合矩阵。
在本步骤中,首先根据产品愿景和用户的自然语言描述分析业务场景逻辑流程。产品愿景的主要目的是对产品顶层价值的设计,使产品目标用户、核心价值、差异化竞争点等信息达成一致,避免产品偏离方向。倾听用户的自然语言描述使我们站在用户的视角上归纳和总结不同类型***用户的行为表现,使接下来构建DED的过程更加自然。
通过分析业务场景的逻辑流程,挖掘出业务场景中潜在的领域事件以及对应的实体对象,以此为基础结合业务逻辑流程进行DED的建模工作。具体方法如下:
图2是DED原理图,我们将DED定义为一个5元组<Domain Event,Command,EntityObject,Value Object,Context Ontology>,每个参数的含义介绍如下。
(1)Domain Event(领域事件):领域事件是领域模型中非常重要的一部分,用来表示领域中发生的事件,一个领域事件可能导致进一步的业务操作。举例来说的话,领域事件可以是业务流程的一个步骤,比如投保业务缴费完成后,触发投保单转保单的动作;也可能是定时批处理过程中发生的事件,比如批处理生成季缴保费通知单,触发发送缴费邮件通知操作;或者一个事件发生后触发的后续动作,比如密码连续输错三次,触发锁定账户的动作。
(2)Command(命令):命令是指处理***数据状态变化的业务操作。在视图中,一个命令一般被描述为一个具有动词或动词短语的形式。Command可以表示为如下二元组:
Interface是Command中包含的***表现层接口调用细节,表现层位于三层构架的最上层,与用户直接接触,主要功能是实现***数据的传入与输出,在此过程中不需要借助逻辑判断操作就可以将数据传送到***中进行数据处理,应用***也会将处理结果再次反馈到表现层中。换句话说,表现层就是实现用户界面功能,将用户的需求传达和反馈。对领域事件状态转换过程进行动态链路追踪,可以解析出该过程中对应的相关命令对表现层的接口调用情况。使用应用性能管理(APM)工具将这些事件间命令所调用的表现层接口信息逐一捕捉并将其记录,将这些指令对应的接口信息加入Command中以完善DED。Invocationorder是Interface之间的调用次序,命令内部由一系列表现层接口有序组成,同一命令下接口的调用次序为从左至右依次调用,即串联调用,处于同一列的接口表明这些接口同时被其左侧相邻接口调用,即并联调用。值得说明的是,对于领域专家或架构师来说,通过具有相应程度接口细节的领域模型来识别不同粒度的微服务是很方便的。然而,这并不意味着将接口调用信息暴露得越详细越好。由于微服务之间的通信开销,过细粒度的微服务可能对整个***的性能产生负面影响。为了在有限的空间内不引入太多的复杂性而清晰地描述我们的方法,我们只分析和构建表现层上的DED模型,将关注的焦点放在接口适配相关的业务功能上,而暂时不去关心错综复杂的层与层之间的接口调用情况。
(3)Entity Object(实体对象):在原型视图中有这样一类对象,它们拥有唯一标识符,且标识符在历经各种状态变更后仍能保持一致。对这些对象而言,重要的不是其属性,而是其延续性和标识,对象的延续性和标识会跨越甚至超出软件的生命周期。我们把这样的对象称为实体。
(4)Value Object(值对象):通过对象属性值来识别的对象,它将多个相关属性组合为一个概念整体。值对象描述了领域中的一件东西,这个东西是不可变的,它将不同的相关属性组合成了一个概念整体。当度量和描述改变时,可以用另外一个值对象予以替换。它可以和其它值对象进行相等性比较,且不会对协作对象造成副作用。领域事件中可能同时包含值对象和实体,且值对象和实体在某些场景下可以互换,很多领域建模专家在这些场景下,其实也很难判断到底将领域对象设计成实体还是值对象。可以说,值对象在某些场景下有很好的价值,但是并不是所有的场景都适合值对象,我们需要具体实际情况选择最适合的方法。
(5)Context Ontology(上下文本体):上下文本体描述应用领域上下文的概念集以及它们之间的关系,并给出业务功能的划分细节。上下文本体可以表示为如下二元组:
其中:
Concept=Request CommandBlock∪Transaction Flow∪Scenario Field是领域上下文概念集。Relation是概念间关系的集合,上下文本体中的主要概念和主要关联分别如表1和表2所示。
表1 上下文本体的概念
表2 上下文本体的关联
情景域由按照一定功能流编排的事务流构成,根据以上概念和关联,情景域描述为S=<TSet,FSet>。TSet是事务集,FSet由一组功能序列构成,表示事务集上的功能流。事务流是构成情景域的基本功能单元,由按照一定控制流编排的请求指令块构成,根据以上概念和关联,事务流描述为T=<TID,Function>。其中TID是事务名,Function是自然语言描述的该事务的功能。
在构建DED基础上,我们使用应用性能管理(APM)工具对其中的事件状态转换过程进行动态链路追踪,解析出该过程中应用表现层接口调用细节,并将这些接口信息加入DED中,由此完善DED的构建工作。为了实现更有效的微服务拆分,我们进一步将构建出的DED在请求指令块、事务流、情景域三个维度上进行分析并归纳总结,最终构造出多维度接口调用信息版本的DED。DED的多维度接口调用信息版本在不同维度上对DED进行的进一步分解、分析和归纳,继承了DED的所有接口调用核心信息,移除了如实体、值对象等冗余信息。
最后,以DED作为输入,通过如图3所示的构建多维度接口相关度综合矩阵算法(算法1)自动构建多维度接口相关度综合矩阵。该算法从构造出的DED中提炼出所有参与业务流程的(表现层)接口集合,并进一步计算出不同维度下接口之间的关联程度。下面对该算法进行说明:
对于两个表现层接口Ia,Ib,下面从请求指令块、事务流、情景域三个维度定义它们之间的相关度。
(1)定义Com(Ii)为调用了表现层接口Ii的请求指令块集合,Ia,Ib两个接口在请求指令块维度上的相关度表示为CCom(Ia,Ib),等于同时调用Ia,Ib这两个接口的请求指令块类型总数:
CCom(Ia,Ib)=card(Com(Ia)∩Com(Ib)) (1)
(2)定义Tra(Ii)为调用了表现层接口Ii的事务流集合,Ia,Ib两个接口在事务流维度上的相关度表示为CTra(Ia,Ib),等于同时调用Ia,Ib这两个接口的事务流类型总数:
CTra(Ia,Ib)=card(Tra(Ia)∩Tra(Ib)) (2)
(3)定义Sce(Ii)为调用了表现层接口Ii的情景域集合,Ia,Ib两个接口在情景域维度上的相关度表示为CSce(Ia,Ib),等于同时调用Ia,Ib这两个接口的情景域类型总数:
CSce(Ia,Ib)=card(Sce(Ia)∩Sce(Ib)) (3)
将三个维度上的接口相关度按下式进行加权累加,得到接口Ia,Ib的综合相关度CTotal(Ia,Ib):
CTotal(Ia,Ib)=α1·CCom(Ia,Ib)+α2·CTra(Ia,Ib)+α3·CSce(Ia,Ib) (4)
步骤2、从多维度接口相关度综合矩阵中识别候选微服务。
在本步骤中,首先使用图4所示的构建微服务算法(算法2)将算法1中生成的接口相关度综合矩阵进行矩阵的向量化转换,将转换得到的这组高维向量映射到n维空间(n等于向量维度),这组向量被映射成n维空间中一系列点,基于这些点的距离做聚类处理(这里用的是基于距离的k-means聚类),经过数次迭代最终得出合适的聚类结果。算法2能够很好与之前构造的DED无缝衔接,并可以自主进行相应的微服务拆分操作,生成理论上合理的微服务候选项。
然后将***表现层接口按照最终的聚类结果分为大小不同的数个簇,一个簇对应一个微服务,完善各个微服务,由上至下依次设计出对应的业务逻辑层和数据访问层接口以及各服务独立的数据库。模块的分离最终完成,描绘了领域事件驱动的面向微服务拆分,而每个模块都表示软件架构师需要考虑的潜在微服务。
步骤3、构建微服务各层接口调用关系链并进行解耦处理,得到微服务化结果。
在本步骤中,针对得到理想的聚类结果,为了保证微服务架构设计过程中的“业务一致性”,结合表现层接口最佳聚类结果将微服务架构各层接口调用细节进行刻画,得到的初步微服务化结果。如图5所示,整个刻画过程如下:
将原***所有表现层接口(对应图中的Controller接口)的三层接口调用链进行刻画,即找出每个表现层接口所有的Controller(表现层)接口→Service(业务逻辑层)接口→DAO(数据访问层)接口调用链,注意辨明Service接口和DAO接口所属的上游接口(Service接口要注意辨明其主要依赖的Controller接口,DAO接口要注意辨明其主要依赖的Service接口)避免出现接口混淆的情况发生。原单体***的各层接口调用关系链刻画完毕后,再结合表现层接口最佳聚类结果,将同一簇内的Controller接口聚集到一个微服务内,将不在同一簇内的Controller接口进行分离,Service接口和DAO接口分别划归到其对应的上游接口所在的微服务中。
然而,初步微服务化结果中服务间的接口调用可能还存在较紧密的耦合度,这种接口调用耦合问题主要存在于一个微服务的表现层接口调用另一个微服务的业务逻辑层接口,分层架构中的表现层接口调用业务逻辑层接口的过程实质上是对业务逻辑层接口中的具体方法的调用。如果微服务化过程中存在如图6中出现的这种情况:定义一个微服务(微服务2)中某个或某些Controller接口调用的了另一个微服务(微服务1)中某个Service接口的一个或若干个方法,这些方法构成集合A,定义微服务1某个或某些Controller接口调用自己服务内部的同一Service接口的一个或若干个方法,这些方法构成集合B,如果集合A与集合B的交集为空集,则可以将该Service接口进行方法级别的分解操作,使集合A和集合B中的方法分别封装成两个相互独立的Service接口,然后放入对应的微服务中成为各自微服务中新的Service接口从而取代旧的Service接口,以此达到消除微服务间接口调用紧耦合的问题。
通过对服务间接口调用进行上述解耦操作,解决服务间接口调用的紧耦合问题,得到微服务化结果呈现服务间松耦合并且服务内高内聚的特点。图6展现了整个解耦过程。
步骤4、将各个微服务化结果从三层架构模式演进到DDD分层架构模式。
经过上一步处理的微服务架构还是传统三层架构模式,相比之下,DDD分层架构的核心设计思想是要做到核心业务逻辑和技术实现细节的分离和解耦,这正是微服务架构“高内聚,低耦合”设计原则的完美体现。DDD分层架构与微服务设计都强调从业务出发,其核心都是根据业务发展,合理划分领域边界,持续调整现有架构,优化现有代码,以保持架构和代码的生命力。因此,采用DDD分层架构实现微服务设计是一个不错的选择。
对微服务结果中的所有要素重新归类,重新划分层的范围,确定层与层之间的交互规则和职责边界,因此,需要逐步完成各微服务从三层架构模式到DDD分层架构模式的演进,如图7所示。具体演进过程如下:
首先,将原先数据访问层的仓储接口和仓储实现分离,将仓储实现与原来三层架构通用的第三方工具包、驱动、常用公共工具、配置文件等通用的公共资源统一放到基础层,将仓储接口划分到领域层中,通过依赖倒置原则实现业务逻辑和数据库资源逻辑的解耦。其次,将原来的业务逻辑层接口一分为二,一方面,将数据访问层中持久化对象转化为对应的实体对象,将原业务逻辑层与实体或实体方法组装和编排有关的服务接口划归到领域层中转化为领域服务接口,多个依赖紧密的实体对象和领域服务构成聚合,承载***的基础核心业务逻辑。另一方面,原来的业务逻辑层中用于组合和编排领域服务的接口被提取到应用层中,使其根据前端需求实现粗粒度的业务行为。最后,将原先位于业务逻辑层的所有视图对象转化为数据传输对象,和原先的表现层接口共同构成用户接口层,用于前端应用与微服务或者微服务之间的数据组装和传输,充当数据传输的载体。
经过上述处理后,上一步得出的传统分层架构模式下的微服务化结果演进为DDD分层架构模式下的微服务化结果。DDD分层架构模式中领域服务被应用服务调用,而应用服务被用户接口层调用,服务逐层对外封装或组合,这使得架构内部的依赖关系清晰。总体来说,从三层架构模式到DDD分层架构模式的演进使得微服务架构内部结构变得更加清晰,改善了分层架构核心业务逻辑混乱、代码改动相互影响大的问题,此外***的升级、维护以及部署也更加容易,用于微服务拆分的领域驱动机制的设计和实现方案最终完成。
为了对本发明的微服务拆分结果评估指标,本发明采用簇内误差平方和(SSE)、错误聚类率(Icr)、公共链路率(Plr)和模块度(M)来衡量高内聚和松耦合方面的适当指标,如图8所示,下面对这四个指标的详细说明:
簇内误差平方和(SSE)
考虑到微服务的拆分粒度,本发明通过调节算法2(如图4所示)中的聚类集群数参数k,观测不同聚类集群数下的聚类效果,由此确定合理的聚类个数。这里,本发明使用簇内误差平方和(Sum ofsquared errors within clusters,SSE)作为聚类效果的衡量标准,其定义如下式:
其中,d是n维空间中两向量间的欧式距离,k是簇的个数,x是簇内任意向量,Ci是第i个簇质心所对应的中心向量,Si表示第i个簇中包含向量的集合。
如图9所示,随着聚类集群数k逐渐增大,SSE值会逐渐变小,直到k值达到最大值时(即任意向量所对应的聚类点都是其所在的簇中心本身),SSE值取到最小值0。在这个SSE变化过程中,会出现一个拐点,这时候SSE值下降率突然变缓,我们认为此时所对应的k值为微服务的最佳拆分粒度。
错误聚类率(Icr)
确定合理的候选微服务粒度后,评估请求指令块、事务流、情景域三个维度权重值a1,2,3分配的合理性成为了能否生成令人满意的微服务表现层接口聚类结果的关键点,本发明采用对比实验的方式来获取期望的评估结果,具体而言,通过挑选数位具有微服务研究背景和资深项目开发经验的开发人员,安排参与者们对其日常开发和维护的应用项目进行人工分析,给出具体到各自维护的业务接口的微服务拆分建议。本发明以此作为评定聚类结果优良的依据,引入错误聚类率(Icr)作为不同维度权重值分配合理性的衡量标准。通过计算不符合人工拆分意见的业务接口数占项目总接口数的比例,定量评价聚类结果与人工拆分结果的相似度。特别的,当Icr=0时,表示使用本发明提出的拆分方法得出的拆分结果与手动版本完全一致。
公共链路率(Public linkrate,Plr)
本发明不仅采用簇内误差平方和(SSE)、错误聚类率(Icr)来衡量微服务内部的内聚特性,还加入了公共链路率(Public linkrate,Plr)和模块度(Modularity,M)等指标来衡量服务间的耦合特性。从单个微服务的角度出发,本发明引入公共链路率作为微服务集群之间的耦合程度的衡量标准。本发明通过分析并统计微服务拆分结果中各个微服务内部接口调用链路数和微服务之间的公共链路数,计算出各微服务的公共接口调用链与总链路的比例。特别的,当Plr=1时,表示集群中的业务逻辑完全独立于其他外部集群,即该微服务与其他微服务之间正真实现“无耦合”。
模块度(Modularity,M)
从整体微服务架构的角度出发,本发明借鉴Newman and Girvan提出的模块度概念作为衡量微服务划分质量的标准,以此来度量微服务拆分结果的好坏。模块度的定义见图8,本发明对此定义进行形式上的改造以适应微服务拆分结果的评估,具体如下:
假设把一个接口调用链路网络划分为k个集群,定义一个k*k的矩阵e。eij表示连接集群i和集群j的链路的数目占总链路数的比例。特别的,eii表示的是集群i和集群i之间的链路数占总链路数的比例,也就是社团i内部的链路数占总链路数的比例。这样,矩阵e的迹tr(e)=∑ieii,也就是矩阵对角元素的和,就表示了集群内部的链路的比例。这个值越大,代表社团内部联系越紧密。然而这样有一个缺陷,如果把整张图分成1个社团,这个值就是最大值1。因此本发明定义ai=∑jeij,它表示连接到集群i中的链路数占总链路数的比例。得到eii和ai值后,按照下面的公式计算出对应的模块度M:
模块度的取值范围为[-0.5,1),如果微服务拆分的质量和随机拆分的效果一致,将得到M=0。当M值接近最大值1时,表明拆分出的集群只存在极弱的耦合性。
下面以一个真实的企业级大型项目为例,说明利用本发明拆分一个单体应用平台的具体过程:
该应用平台为一款致力于为老年用户提供个性化养老服务的综合性智慧养老平台,平台核心理念为基于“互联网+”,从技术上打通医疗、保险、生活照料以及智能穿戴等多方面的养老需求,并通过整合社会中线上、线下各类碎片化的养老服务,形成以老人为中心的“居家-社区-旅居”相互结合联动的养老服务生态机制,最后通过网格化部署的养老服务中心,为老人提供居家、社区以及旅居养老等管理服务软硬件结合解决方案,从而为老年用户提供“居家-社区-旅居”等不同需求场景下的全方位、个性化、全覆盖的养老服务。智慧养老平台是一个真实的企业级大型项目,对于我们更接近现实的展示方法拆分的有效性和合理性无疑是一个很好的选择。
(1)业务场景分析
本发明提出的拆分方法首先分析业务场景,然后根据这些业务场景逻辑流程构建DED。场景分析确定***中的参与者和他们可能执行的操作。图10描述了通过和领域专家进行行业访谈后总结的智慧养老服务平台的核心业务,包括如下6个角色:
***管理员:***的超级管理员账户,拥有最高权限,默认可操作所有模块。
平台服务人员:平台方的服务人员,可操作除权限设置的所有业务模块。
商家:进驻平台的服务商,拥有商品管理的最高权限,可操作商户所有业务模块。
服务机构:进驻平台的组织机构,拥有服务管理的最高权限,可操作服务机构所有业务模块。
用户:平台服务对象,无后台操作权限。
财务专员:平台财务会计人员,可操作财务模块。
结合各类型用户对平台相关业务办理流程的自然语言描述,我们将图10中的用例进行扩展和完善,最终归纳总结出图11的十个粗粒度的情景领域并给出对应的描述信息,以便后续DED的进一步构建。
(2)构建DED并将其抽象为多维度接口相关度综合矩阵
根据上一步介绍的业务场景分析,将图11中的业务场景转换为DED,再根据业务场景的逻辑分析,将对应的命令操作添加到DED中,完成对DED的细节刻画。构建的智慧养老服务平台DED如图12所示,它显示了与图11相匹配的10个业务场景的业务逻辑细节刻画。通过将智慧养老服务平台DED数据集合作为输入导入图3所示的算法1中进行相应运算处理,算法1会分别识别并计算出请求指令块、事务流、情景域三个维度下的DED的全部接口细节和它们之间相互关联性,最终生成多维度接口相关度综合矩阵。
(3)从多维度接口相关度综合矩阵中识别候选微服务
在得到由DED生成的多维度接口相关度综合矩阵后,通过图4中的算法2自动将矩阵进行矩阵的向量化转换,对转换得到的这组高维向量做经典聚类处理,得出合理的聚类结果。这些聚类结果指出了可以独立开发的潜在微服务候选项。图13显示了weka工具下算法2执行后智慧养老服务平台表现层接口的聚类结果。算法2将智慧养老服务平台的多维度接口相关度综合矩阵自动拆分为8个微服务候选项,它们是综合搜索,平台入驻,业务服务,页面推荐,用户,可复用性通用业务,商品和登录。
(4)用于微服务拆分的领域驱动机制实现方案
识别出智慧养老服务平台的候选微服务后,首先完善各个微服务,由上至下依次设计出对应的业务逻辑层和数据访问层接口,生成智慧养老服务平台初步微服务化结果。然后,执行服务间接口调用的解耦合操作,得到服务间松耦合服务内高内聚的微服务化结果。最终,完成智慧养老服务平台各微服务从分层架构模式到DDD分层架构模式的演进,用于微服务拆分的领域驱动机制实现方案如图14所示。图中每个矩形代表一个微服务,图中一共展示了从智慧养老服务平台拆分出的8类微服务:综合搜索,平台入驻,业务服务,页面推荐,用户,可复用性通用业务,商品和登录。矩形内部描绘了服务内部的接口调用细节以及服务之间的交互关系。
需要强调的是,本发明所述的实施例是说明性的,而不是限定性的,因此本发明包括并不限于具体实施方式中所述的实施例,凡是由本领域技术人员根据本发明的技术方案得出的其他实施方式,同样属于本发明保护的范围。
Claims (7)
1.一种基于领域事件驱动的单体***微服务拆分方法,其特征在于:包括以下步骤:
步骤1、构建领域事件模型并生成多维度接口相关度综合矩阵;
步骤2、从多维度接口相关度综合矩阵中识别候选微服务;
步骤3、根据候选微服务构建微服务各层接口调用关系链并进行解耦处理,得到微服务化结果;
步骤4、将各个微服务化结果从三层架构模式演进到领域驱动设计分层架构模式;
所述生成多维度接口相关度综合矩阵的方法为:将领域事件模型作为输入,对于两个表现层接口Ia,Ib,从请求指令块、事务流、情景域三个维度定义之间的相关度:
⑴定义Com(Ii)为调用了表现层接口Ii的请求指令块集合,Ia,Ib两个接口在请求指令块维度上的相关度表示为CCom(Ia,Ib),等于同时调用Ia,Ib这两个接口的请求指令块类型总数:
CCom(Ia,Ib)=card(Com(Ia)∩Com(Ib))
⑵定义Tra(Ii)为调用了表现层接口Ii的事务流集合,Ia,Ib两个接口在事务流维度上的相关度表示为CTra(Ia,Ib),等于同时调用Ia,Ib这两个接口的事务流类型总数:
CTra(Ia,Ib)=card(Tra(Ia)∩Tra(Ib))
⑶定义Sce(Ii)为调用了表现层接口Ii的情景域集合,Ia,Ib两个接口在情景域维度上的相关度表示为CSce(Ia,Ib),等于同时调用Ia,Ib这两个接口的情景域类型总数:
CSce(Ia,Ib)=card(Sce(Ia)∩Sce(Ib))
⑷将三个维度上的接口相关度按下式进行加权累加,得到接口Ia,Ib的综合相关度CTotal(Ia,Ib):
CTotal(Ia,Ib)=α1·CCom(Ia,Ib)+α2·CTra(Ia,Ib)+α3·CSce(Ia,Ib)。
2.根据权利要求1所述的基于领域事件驱动的单体***微服务拆分方法,其特征在于:所述步骤1构建领域事件模型的方法包括以下步骤:
⑴分析业务场景的逻辑流程,挖掘出业务场景中潜在的领域事件以及对应的实体对象,将领域事件模型定义为一个包括领域事件、命令、实体对象、值对象和上下文本体的5元组;
⑵按照一定功能流编排的事务流构成情景域,该情景域为:S=<TSet,FSet>;其中,TSet是事务集,FSet由一组功能序列构成,表示事务集上的功能流;所述事务流是构成情景域的基本功能单元,由按照一定控制流编排的请求指令块构成,事务流为T=<TID,Function>,其中,TID是事务名,Function是自然语言描述的该事务的功能;
⑶使用APM工具对事件状态转换过程进行动态链路追踪,解析出该过程中应用表现层接口调用细节,并将这些接口信息加入领域事件模型中;
⑷将构建出的领域事件模型在请求指令块、事务流、情景域三个维度上进行分析并归纳总结,构造出多维度接口调用信息版本的领域事件模型。
3.根据权利要求2所述的基于领域事件驱动的单体***微服务拆分方法,其特征在于:所述命令用如下二元组表示:
其中,Interface是Command中包含的***表现层接口调用细节,表现层位于三层构架的最上层,与用户直接接触,Invocation order是Interface之间的调用次序。
4.根据权利要求2所述的基于领域事件驱动的单体***微服务拆分方法,其特征在于:所述上下文本体采用如下二元组表示:
其中,Concept=Request Command Block∪Transaction Flow∪Scenario Field是领域上下文概念集,Relation是概念间关系的集合;
Request Command Block为触发条件,其内部由一组接口调用按次序排列组合而成,并与领域事件模型中的命令元素相对应;
Transaction flow为事务流,由一个或多个指令块和领域事件组成;
Scenario field为情景域,由一系列事务流按次序排列组合而成,是在一个封闭范围内相对独立的子领域;
Relation包括领域-情景关联、事务-情景关联、指令-事务关联、控制流关联、指令-实体关联、功能流关联、事务-功能关联、事务-名字关联。
5.根据权利要求1所述的基于领域事件驱动的单体***微服务拆分方法,其特征在于:所述步骤2的具体实现方法为:
首先,将多维度接口相关度综合矩阵进行矩阵的向量化转换,将转换得到的这组高维向量映射到n维空间中一系列点,基于这些点的距离做聚类处理,经过数次迭代得出合适的聚类结果;
然后,将***表现层接口按照聚类结果分为大小不同的数个簇,每个簇对应一个微服务,由上至下依次设计出对应的业务逻辑层和数据访问层接口以及各服务独立的数据库,完成领域事件驱动的面向微服务拆分。
6.根据权利要求1所述的基于领域事件驱动的单体***微服务拆分方法,其特征在于:所述步骤3的具体实现方法为:
首先,将原***所有表现层接口的三层接口调用链进行刻画,找出每个表现层接口所有的Controller接口→Service接口→DAO接口调用链;结合表现层接口最佳聚类结果,将同一簇内的Controller接口聚集到一个微服务内,将不在同一簇内的Controller接口进行分离,Service接口和DAO接口分别划归到其对应的上游接口所在的微服务中,得到初步微服务化结果;
对初步微服务化结果中服务间的接口调用进行解耦处理,得到呈现服务间松耦合并且服务内高内聚特点的各个微服务化结果。
7.根据权利要求1所述的基于领域事件驱动的单体***微服务拆分方法,其特征在于:所述步骤4的具体实现方法为:
首先,将原先数据访问层的仓储接口和仓储实现分离,将仓储实现与原来三层架构通用的第三方工具包、驱动、常用公共工具、配置文件统一放到基础层,将仓储接口划分到领域层中,通过依赖倒置原则实现业务逻辑和数据库资源逻辑的解耦;
其次,将原来的业务逻辑层接口一分为二,一方面,将数据访问层中持久化对象转化为对应的实体对象,将原业务逻辑层与实体或实体方法组装和编排有关的服务接口划归到领域层中转化为领域服务接口,多个依赖紧密的实体对象和领域服务构成聚合,承载***的基础核心业务逻辑;另一方面,原来的业务逻辑层中用于组合和编排领域服务的接口被提取到应用层中,使其根据前端需求实现粗粒度的业务行为;
最后,将原先位于业务逻辑层的所有视图对象转化为数据传输对象,和原先的表现层接口共同构成用户接口层,用于前端应用与微服务或者微服务之间的数据组装和传输,充当数据传输的载体。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111190359.6A CN113961173B (zh) | 2021-10-13 | 2021-10-13 | 基于领域事件驱动的单体***微服务拆分方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111190359.6A CN113961173B (zh) | 2021-10-13 | 2021-10-13 | 基于领域事件驱动的单体***微服务拆分方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113961173A CN113961173A (zh) | 2022-01-21 |
CN113961173B true CN113961173B (zh) | 2024-04-30 |
Family
ID=79463693
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111190359.6A Active CN113961173B (zh) | 2021-10-13 | 2021-10-13 | 基于领域事件驱动的单体***微服务拆分方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113961173B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115061663B (zh) * | 2022-06-17 | 2024-06-21 | 中国兵器工业信息中心 | 基于客户需求的微服务划分方法、装置、电子设备及介质 |
CN115499421B (zh) * | 2022-09-19 | 2023-05-23 | 北京三维天地科技股份有限公司 | 一种基于三层架构的微服务架构模式*** |
CN115408055B (zh) * | 2022-11-01 | 2022-12-27 | 北京领雁科技股份有限公司 | 一种基于单体生成微服务项目的方法和*** |
CN117539433A (zh) * | 2023-11-02 | 2024-02-09 | 北京航空航天大学 | 一种基于模型驱动架构的微服务设计方法 |
CN117311801B (zh) * | 2023-11-27 | 2024-04-09 | 湖南科技大学 | 一种基于网络化结构特征的微服务拆分方法 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2012136233A1 (en) * | 2011-04-07 | 2012-10-11 | Telefonica, S.A. | Service broker system |
CN109948710A (zh) * | 2019-03-21 | 2019-06-28 | 杭州电子科技大学 | 基于api相似度的微服务识别方法 |
CN111178782A (zh) * | 2020-01-03 | 2020-05-19 | 广州博依特智能信息科技有限公司 | 一种流程工业数据化运营平台的微服务架构 |
CN111651451A (zh) * | 2020-04-25 | 2020-09-11 | 复旦大学 | 一种场景驱动的单体***微服务拆分方法 |
CN112486466A (zh) * | 2020-12-11 | 2021-03-12 | 光大兴陇信托有限责任公司 | 一种基于微服务架构的快速通用基础框架实现方法 |
CN112668968A (zh) * | 2020-12-24 | 2021-04-16 | 大唐互联科技(武汉)有限公司 | 一种基于领域驱动设计的仓储管理建模方法及*** |
CN113326028A (zh) * | 2021-05-12 | 2021-08-31 | 上海安畅网络科技股份有限公司 | 一种基于领域驱动设计与业务全景事件风暴的微服务化分解方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10756982B2 (en) * | 2018-05-17 | 2020-08-25 | Microsoft Technology Licensing, Llc | Machine learning microservice architecture design tools and methods |
-
2021
- 2021-10-13 CN CN202111190359.6A patent/CN113961173B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2012136233A1 (en) * | 2011-04-07 | 2012-10-11 | Telefonica, S.A. | Service broker system |
CN109948710A (zh) * | 2019-03-21 | 2019-06-28 | 杭州电子科技大学 | 基于api相似度的微服务识别方法 |
CN111178782A (zh) * | 2020-01-03 | 2020-05-19 | 广州博依特智能信息科技有限公司 | 一种流程工业数据化运营平台的微服务架构 |
CN111651451A (zh) * | 2020-04-25 | 2020-09-11 | 复旦大学 | 一种场景驱动的单体***微服务拆分方法 |
CN112486466A (zh) * | 2020-12-11 | 2021-03-12 | 光大兴陇信托有限责任公司 | 一种基于微服务架构的快速通用基础框架实现方法 |
CN112668968A (zh) * | 2020-12-24 | 2021-04-16 | 大唐互联科技(武汉)有限公司 | 一种基于领域驱动设计的仓储管理建模方法及*** |
CN113326028A (zh) * | 2021-05-12 | 2021-08-31 | 上海安畅网络科技股份有限公司 | 一种基于领域驱动设计与业务全景事件风暴的微服务化分解方法 |
Non-Patent Citations (2)
Title |
---|
场景驱动且自底向上的单体***微服务拆分方法;丁丹;彭鑫;郭晓峰;张健;吴毅坚;软件学报;20201231;31(011);全文 * |
牟林钢.微服务环境下在线教育平台的设计与实现.2020,全文. * |
Also Published As
Publication number | Publication date |
---|---|
CN113961173A (zh) | 2022-01-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113961173B (zh) | 基于领域事件驱动的单体***微服务拆分方法 | |
Cui et al. | A genetic algorithm based data replica placement strategy for scientific applications in clouds | |
Ramanathan | Data envelopment analysis for weight derivation and aggregation in the analytic hierarchy process | |
Lu | Improved K-means clustering algorithm for big data mining under Hadoop parallel framework | |
Zhao et al. | Clustering ensemble selection for categorical data based on internal validity indices | |
CN103793422B (zh) | 基于增强星型模型的立方体元数据及查询语句生成 | |
CN104951425A (zh) | 一种基于深度学习的云服务性能自适应动作类型选择方法 | |
CN110956273A (zh) | 融合多种机器学习模型的征信评分方法及*** | |
CN104750780B (zh) | 一种基于统计分析的Hadoop配置参数优化方法 | |
Chug et al. | Benchmarking framework for maintainability prediction of open source software using object oriented metrics | |
Feng et al. | Computational social indicators: a case study of chinese university ranking | |
Michnik | The WINGS method with multiple networks and its application to innovation projects selection | |
Chandra et al. | Web service selection using modified artificial bee colony algorithm | |
Studer | Divisive property-based and fuzzy clustering for sequence analysis | |
De Koninck et al. | Expert-driven trace clustering with instance-level constraints | |
CN112508726A (zh) | 一种基于信息传播特点的虚假舆论识别***及其处理方法 | |
Pang et al. | PUMA: Parallel subspace clustering of categorical data using multi-attribute weights | |
Zhao et al. | A unified framework for bug report assignment | |
Dong | Application of Big Data Mining Technology in Blockchain Computing | |
Dass et al. | Amelioration of Big Data analytics by employing Big Data tools and techniques | |
Chakravarthy et al. | RETRACTED ARTICLE: Mining interesting actionable patterns for web service composition | |
Du et al. | Application of Artificial Intelligence Sensors Based on Random Forest Algorithm in Financial Recognition Models | |
Paul et al. | Machine learning assisted HPC workload trace generation for leadership scale storage systems | |
Hickson | The Atlas of economic complexity: A review | |
Agarwal et al. | Semblance: An empirical similarity kernel on probability spaces |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |