一种单体应用微服务化的方法技术

技术编号:18444570 阅读:29 留言:0更新日期:2018-07-14 10:14
本发明专利技术公开了一种单体应用微服务化的方法,主要包括调用分析阶段、模块拆分阶段和框架适配阶段,通过分析打包文件的字节码,获取应用代码中类之间的方法调用关系,从而分析出应用中的调用链,生成调用图;对于调用图,将所有的入度为0的节点作为入口,依次以入口为起点进行有向图的广度优先遍历找到所有的下层节点,并将该起点与此次遍历结果一起作为一个将要拆分出去的微服务模块,按照此规则将一个完整的项目分为多个独立的微服务模块,每个模块都可以单独的进行开发和部署,单体应用也实现了快速的微服务化。本发明专利技术可减少单体架构到微服务架构转化过程中的投入,降低开发的学习成本,帮助项目平稳过渡到微服务架构。

A method of micro service for the application of monomers

The invention discloses a method of single application micro service, which includes the call analysis stage, the module split stage and the frame adaptation stage. By analyzing the bytecode of the packaged files, the method call relationship between the classes in the application code is obtained, and the call chain in the application is analyzed and the call graph is generated; and the call is called. Graph, all of the nodes entering 0 are taken as the entrance, and all the lower nodes are found by the breadth first traversal of the directed graph at the starting point, and the starting point and the ergodic result are used as a micro service module that will be split out. In accordance with this rule, a complete project is divided into multiple independent micro units. Service modules, each module can be developed and deployed separately, and the application of monomers has also achieved rapid micro service. The invention reduces the input of the monomer architecture to the transformation of the micro service architecture, reduces the learning cost of the development, and helps the project smooth transition to the micro service architecture.

【技术实现步骤摘要】
一种单体应用微服务化的方法
本专利技术提供了一种简单快速的微服务化方法,主要涉及微服务化和单体应用的微服务化改造,可以帮助非微服务的单体项目快速平稳地微服务化。
技术介绍
传统代码的框架将所有功能(例如对于一个电商系统的商品展示、商品下单、商品支付等业务)都打包在一个WAR包里,基本没有外部依赖,部署在一个J2EE容器(Tomcat,JBoss,WebLogic)里,包含了DO/DAO,Service,UI等所有逻辑。这种单块架构实现的软件系统随着业务规模的扩大,技术选型越来越困难,维护成本陡然增加,可扩展性和持续交付能力也变得更差,任何一个模块的失效都可能导致系统的整体崩溃,任何一个模块负载过重,都可能影响系统的整体稳定性。为了解决这一系列弊端,微服务架构被提出。微服务不需要像普通服务那样成为一种独立的功能或者资源,他需要与业务能力相匹配,按照可重用的维度划分,将一组相关的功能组织在一起给消费者提供服务,每一个服务都以独立的进程运行,不同服务之间通过轻量的协议进行通信。微服务带来的优势有:(1)规模小:微服务架构中,服务的规模较小,通常而言如果一个服务过大,就应当被拆解成两个或多个服务,这使得业务开发专注于保证单一服务的能力,这给服务的可维护性和可扩展性带来了好处。(2)有界限:相关的功能会被整合到一个单独的业务单元中,以一个服务的形式实现。(3)独立性:每个微服务独立运行,互不干扰。服务间仅能通过它们公开的接口进行通信。(4)扩展性:基于微服务的系统可以持续跟进多变的业务环境,支持任何形式的修改。(5)模块性:基于微服务的系统由独立的组件组成,各个组件共同为整个系统的行为提供支持,而不是由单个组件提供全部的功能。(6)演进性:基于微服务的系统能够持续不断的演进,添加新的功能,保持可维护性。虽然微服务带来了巨大的好处,但是由传统的的单体架构过渡到微服务架构绝非易事。首先我们需要对业务有非常清晰的了解,能够按照业务的维度将相关的一组功能划分到一起,然后要学习微服务框架并按照微服务架构的要求按照业务的划分维度完全重组代码,这个过程伴随着巨大的投入,而如何减少投入实现微服务化成为亟待解决的问题。
技术实现思路
本专利技术的目的在于针对现有技术的不足,提供一种单体应用微服务化的方法。本专利技术的目的是通过以下技术方案实现的,一种单体应用微服务化的方法,包括以下步骤:(1)调用分析:通过分析打包文件的字节码,获取应用代码中类之间的方法调用关系,从而分析出应用中的调用链,生成以球表示类节点,箭头表示调用关系的调用图;(2)模块拆分:对于步骤(1)生成的调用图,将所有的入度为0的节点作为入口,然后依次以入口为起点进行有向图的广度优先遍历找到所有的下层节点,并将该起点与此次遍历结果一起作为一个将要拆分出去的微服务模块,按照此规则将一个完整的项目分为多个微服务模块;如果同一个节点被不同的微服务模块共用则做出标识;(3)框架适配:让微服务模块适配不同的微服务框架,每个微服务模块单独进行开发和部署,实现单体应用的微服务化。进一步地,在模块拆分阶段后,进入人工修正阶段:用户根据调用图再结合自己对业务的理解对模块拆分的结果做出适当的修正,如果某个微服务模块拆分的过于分散,可以选择将相同和相近业务的几个微服务模块合并到一起,生成一个微服务模块;如果某个微服务模块过于庞大,则对该微服务模块进行二次拆分,生成多个微服务模块,保证每个微服务模块负责一个单一的业务。进一步地,调用分析阶段中,利用类加载器的动态加载和开源的Javassist类库获取应用代码中类之间的方法调用关系,从而分析出应用中的调用链。进一步地,调用分析阶段是通过代码的调用逻辑来做分析的,完全不涉及系统业务。进一步地,模块拆分阶段中,给拆分的每一个微服务模块设置不同的颜色,通过调用图可以直观看出将要拆分为多少个模块以及每个模块包含哪些内容。进一步地,如果要将一个传统的Spring开发的单体应用利用SpringCloud实现微服务化,将单体应用拆分为多个微服务模块后,将每个微服务模块转换为基于SpringBoot框架的子模块,避免人工二次开发的巨大成本。经过上述四个步骤,一个单体应用就可以被拆分多个独立的微服务模块,每个模块都可以单独的进行开发和部署,单体应用也实现了快速的微服务化。本专利技术可减少单体架构到微服务架构转化过程中的投入,降低开发的学习成本,帮助项目平稳过渡到微服务架构。附图说明图1是为调用分析阶段生成的调用图示意图,其中每一个球代表项目中的一个类节点,箭头代表不同类节点之间的调用逻辑,虚线框表示其中所有的内容都在同一个应用中;图2是模块拆分后的示意图,其中每一个球代表项目中的一个类节点,箭头代表不同类节点之间的调用逻辑,三个虚线框表示原单体应用被拆分为三个微服务模块;图3是人工修正后的拆分结果,其中每一个球代表项目中的一个类节点,箭头代表不同类节点之间的调用逻辑,两个虚线框表示原单体应用被拆分为两个微服务模块。具体实施方式本实施例提供的一种单体应用微服务化的方法,主要包括调用分析,模块拆分,人工修正,框架适配四个步骤:调用分析:本专利技术方法在调用分析阶段通过分析提供的打包文件的字节码,利用类加载器的动态加载和开源的Javassist类库获取应用代码中类之间的方法调用关系,从而分析出应用中的调用链,生成以球表示类节点,箭头表示调用关系的调用图。调用分析阶段是通过代码的调用逻辑来做分析的,完全不涉及系统业务。模块拆分:对于调用分析阶段生成的调用图,将所有的入度为0的节点作为入口,然后依次以入口为起点进行有向图的广度优先遍历找到所有的下层节点,并将该起点与此次遍历结果一起作为一个将要拆分出去的微服务模块,按照此规则将一个完整的项目分为多个微服务模块,给每一个微服务模块设置不同的颜色,如果同一个节点被不同的微服务模块共用,则做出特殊的标识。人工修正:在模块拆分步骤中,通过入口的广度优先遍历将整个项目划分为多个微服务模块,并给不同的模块设置不同的颜色,这时候的调用图就可以直观看出将要拆分为多少个模块以及每个模块包含哪些内容;人工修正阶段,用户可以根据调用图再结合自己对业务的理解对模块拆分显示的拆分结果做出适当的修正,如果某个微服务模块拆分的过于分散,可以选择将相同和相近业务的几个微服务模块合并到一起,生成一个微服务模块;如果某个微服务模块过于庞大,则对该微服务模块进行二次拆分,生成多个微服务模块。框架适配:经过上面三个步骤后,就已经确定了单体项目微服务化的拆分结果,框架适配可以让微服务模块适配不同的微服务框架;比如要将一个传统的Spring开发的单体应用利用SpringCloud实现微服务化,传统的微服务化方法需要我们学习SpringBoot框架并在此基础上实现二次开发,而本专利技术方法在经过调用分析,模块拆分,人工修正三个步骤拆分为多个微服务模块后,可以将每个微服务模块转换为基于SpringBoot框架的子模块,避免了人工二次开发的巨大成本。经过上述四个步骤,一个单体应用就可以被拆分多个独立的微服务模块,每个模块都可以单独的进行开发和部署,单体应用也实现了快速的微服务化。本专利技术可减少单体架构到微服务架构转化过程中的投入,降低开发的学习成本,帮助项目平稳过渡到微服务架构。以下本文档来自技高网
...

【技术保护点】
1.一种单体应用微服务化的方法,其特征在于,包括以下步骤:(1)调用分析:通过分析打包文件的字节码,获取应用代码中类之间的方法调用关系,从而分析出应用中的调用链,生成以球表示类节点,箭头表示调用关系的调用图;(2)模块拆分:对于步骤(1)生成的调用图,将所有的入度为0的节点作为入口,然后依次以入口为起点进行有向图的广度优先遍历找到所有的下层节点,并将该起点与此次遍历结果一起作为一个将要拆分出去的微服务模块,按照此规则将一个完整的项目分为多个微服务模块;如果同一个节点被不同的微服务模块共用则做出标识;(3)框架适配:让微服务模块适配不同的微服务框架,每个微服务模块单独进行开发和部署,实现单体应用的微服务化。

【技术特征摘要】
1.一种单体应用微服务化的方法,其特征在于,包括以下步骤:(1)调用分析:通过分析打包文件的字节码,获取应用代码中类之间的方法调用关系,从而分析出应用中的调用链,生成以球表示类节点,箭头表示调用关系的调用图;(2)模块拆分:对于步骤(1)生成的调用图,将所有的入度为0的节点作为入口,然后依次以入口为起点进行有向图的广度优先遍历找到所有的下层节点,并将该起点与此次遍历结果一起作为一个将要拆分出去的微服务模块,按照此规则将一个完整的项目分为多个微服务模块;如果同一个节点被不同的微服务模块共用则做出标识;(3)框架适配:让微服务模块适配不同的微服务框架,每个微服务模块单独进行开发和部署,实现单体应用的微服务化。2.根据权利要求1所述的一种单体应用微服务化的方法,其特征在于,在模块拆分阶段后,进入人工修正阶段:用户根据调用图再结合自己对业务的理解对模块拆分的结果做出适当的修正,如果某个微服务模块拆分的过于分散,可以选择将相同和相近业务的几个微服务模块合并到一起,生成一个微服务模块;如果...

【专利技术属性】
技术研发人员:周晓勇李善平李明华朱维阳
申请(专利权)人:浙江网新恒天软件有限公司
类型:发明
国别省市:浙江,33

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1