面向云计算的微服务拆分提取框架
2023-11-14沈锡城
沈锡城,任 杰
(杭州市交通运输行政执法队,杭州 310014)
0 引言
随着云计算技术的不断发展,越来越多的行业正在加快推动上云,进行自身的数字化转型升级[1-2]。新形势下运营需求变化快,业务系统也从传统单体应用架构加快向轻量化、容器化、微服务化的互联网新架构转变[3-4]。越来越多的业务需要结合应用场景选择适当的微服务拆分策略,从而可以形成与业务应用访问匹配的微服务颗粒度[5-6]。
1 微服务理论基础
随着业务系统不断提出上云需求,如何发挥微服务单体灵活的特性,促进业务快速发布、迭代一直是业界研究的重点方向[7-8]。业务拆分并不是拆的越小越好,也不是颗粒度越大越好,在进行微服务拆分的时候,既要考虑业务的特点与资源的情况,又要综合加权形成业务拆分颗粒度,指导微服务拆分上云[9-10]。
2 微服务架构设计
2.1 总体架构
微服务架构主要包括服务网关API、注册中心RA、服务监控、配置中心、缓存、数据库等组件,以及相关的微服务。整体架构如图1所示。
图1 微服务整体架构
通过配置中心实现微服务的有效动态配置信息的存储,在不同的运行场景下通过订阅的模式将信息及时同步到微服务中。
2.2 拆分策略
业务系统拆分需要采用合理的粒度划分,并不是简单地将服务变小,要综合考虑服务本身的业务复杂度。在微服务的设计阶段,需要明确划分微服务的边界界面,微服务之间需要采取相对独立并保持松耦合的划分。服务拆分主要是为了增强横向扩展性,微服务拆分应该以横向拆分为主,而非纵向拆分成一串连续服务。
在信息提取阶段,提取源代码中结构信息,并利用结构信息和拟定的微服务列表来确定微服务之间的依赖关系。要识别微服务之间的依赖关系,有必要识别类之间的依赖关系,并将依赖关系与微服务建议关联起来。
在数据库重构阶段,利用结构信息和微服务之间的依赖关系来确定哪些关系需要重构,通过将数据库调用替换为微服务服务调用来实现对这些实体的重构,同时用外键维护了实体与实体之间的关系。
在代码重构阶段,利用结构信息和微服务之间的依赖关系来识别与其他微服务的类有依赖关系的实例变量,将这些实例变量对其他微服务的方法调用重构为微服务的服务调用。
2.3 拆分方法
微服务的拆分主要是基于业务复杂度,当业务复杂度高时基于领域驱动划分服务,当业务复杂度较低时可以选择基于数据驱动模式划分服务。所有数据模型、领域模型设计均应遵循模型规范。基于领域驱动划分服务流程如图2所示。
图2 基于领域驱动划分服务
单体程序源码和通过微服务拆分得到的拟定的微服务作为输入,通过信息提取、数据库重构和代码重构三个步骤将代码自动重构为微服务架构的应用程序。通用语言尽量以业务语言为主,而非技术语言,通用语言和代码都需要不断地重构,然后确定核心的业务流程逐步扩展到全部,内部讨论逐步细化。基于数据驱动划分服务如图3所示。
图3 基于数据驱动划分服务
通过领域专家分析业务场景和特点,确定核心的业务流程,然后从中提炼出相关的数据结构,接着分析数据结构,识别服务,服务应该满足高内聚、低耦合、单一职责等特征,确定服务调用关系,以服务为粒度实现时序图。
同时融合综合加权将词粒度和句特征提取思路,设计基于词句上下文的微服务特征提取方法,实现局部微服务拆分最优,基于词语上下文的局部最优微服务提取方法如图4所示。
图4 基于词语上下文的局部最优微服务提取方法
业务抽象提出词语上下文,将提取出来的词作为词粒度编码器的输入、句作为句粒度编码器的输入,结合业务上下文语境,可以推导出词粒度、句粒度向量,两者融合可以形成线性层,最后形成融合上下文语境的特征向量。
3 微服务的应用路径
结合微服务架构设计,应用到微服务拆分及微服务拓扑关联方面,初步实现微服务的快速故障诊断和便捷维护功能,提升用户对微服务体系运维的交付体验,提供基于微服务的探索和列表展示,展示接入到平台的微服务有多少个节点,以及节点运行情况,根据微服务调用链路形成微服务调用拓扑图,展示微服务的调用依赖。微服务拓扑架构如图5所示。
图5 微服务拓扑架构
根据微服务调用时序形成微服务接口调用链,并且根据每个调用链的调用轨迹判断服务调用异常点,在业务微服务不做任何改动的情况下可以方便接入,有助于后续大规模部署和实践应用,自动形成微服务调用链和跟踪链,方便在大型微服务应用场景下快速定位问题。
4 结语
综上所述,提出微应用、微服务拆分设计的原则,从多个维度给出了拆分需要遵循的技术要求,描绘了两种拆分模式,给出了信息系统向微应用、微服务转换过程中的拆分策略。