浅谈基于静态分析的微服务划分

浅谈基于静态分析的微服务划分

作者:高邱雅

评阅人:李家琦、宋雪菲

一、背景

        随着互联网的发展,单体应用的功能逻辑交互越来越复杂,各个功能模块紧密耦合。这样庞大复杂的项目使得开发、测试、运维极度复杂,同时在保证弹性、扩展性、可维护性方面也困难重重[1]。为了能够有效的解决这样的问题,需要将这些单体应用迁移到微服务技术架构。在向微服务架构迁移的过程中,首先要面对的挑战就是对微服务的划分。由于单体系统功能结构复杂,使得我们获取微服务划分的特征信息变得更加的困难。因此本文提出了通过对单体应用代码的静态分析来获取应用的结构特征信息的方法,通过这种方法来为微服务迁移过程中的微服务划分提供决策依据。

二、微服务化

        微服务结构是一种轻量级、微型化的开发和运维方式。与单体架构相比,每个微服务模块具有专一功能,可单独部署和维护[2]。正因为每个微服务模块的独立性,将单体应用中的各个功能模块解耦,实现以模块为单位的多节点部署,从而达到对瓶颈模块的单独扩展并可以根据不同的功能灵活采用不同技术栈的效果。

        与单体应用的在同一个进程内进行功能模块交互相比,微服务化也带来了通信的复杂性。除了传输延迟,网络故障等因素外,微服务之间的交互频繁度也是重要的影响因素。因此,微服务边界合理的划分显得至关重要。我们应将耦合度高、通信频繁的模块划分到一个微服务中,来降低服务间的通信开销。

三、具体实现

        要想合理的对单体应用进行微服务划分,首先我们要全面的获取单体系统的结构特征,然后依据功能模块间的交互特征和领域知识将功能划分到不同的微服务中,最后根据微服务设计的单一功能、高内聚、松耦合、减少微服务之间交互的设计原则确定微服务的边界[2]。本文就获取单体系统的结构特征和对特征交互信息的分析做重点讨论,主要以静态分析的方式来获取结构特征。

1、静态分析

        静态分析也称为静态代码分析,静态分析是通过不执行程序只检查代码的方式来分析程序结构和方法之间的依赖关系。通过静态分析可以获得应用的功能函数和类之间的调用关系,包含了他们之间调用的次数,从而可以形成类层次关系、类间调用关系和函数间调用关系。

        进行静态分析时,用到的工具主要是ASM,它是一个全功能java字节码操作与分析框架。主要思路是读取项目的字节码文件,获取每个类的方法调用信息,将调用类与被调用类,调用方法与被调用方法存为节点,他们之前的调用关系存为有向边,并对调用次数进行统计,作为边的值。

2、JPetStore案例分析

        基于以上的静态分析方法,我们对于JPetstore项目进行了分析,得到其类调用图和函数调用图。下图为图1 类调用图:

图1 类调用图

        从图1 类调用图中我们可以看出项目的结构是通过action层调用service层再调用mapper层。通过横向的调用链分析,可以将系统分为用户模块、订单模块和商品分类模块,在这几个模块内部交互密集,而他们之间交互较少。

        由JPetstore的类调用图可见,JPetstore是结构规范的单体应用,我们从其包和类的特征就可以得到应用的结构特征,但是仍有一些早期的项目,将前端展示,数据操作和业务逻辑混杂在一起[2],此时我们就需要对其方法的调用关系进行研究。从方法的调用关系来确定各个功能模块。图2展示的是查询订单列表功能的方法调用图。通过方法调用图可以确定各个方法之间的耦合程度。

图2 方法调用图

四、总结与后续工作

        通过对单体应用使用静态分析技术,获取的相关特征信息给微服务的划分带来了一定的理论依据。这一课题值得我们进行深入研究,希望可以探索出科学全面的方法,为微服务的划分提供指导。

        本文的不足之处在于目前只进行了项目结构特征的提取,只对小型的单体应用的调用图进行了简单的分析,其分析过程仍然需要更科学合理的分析方法。

        接下来的工作我们将会对其分析方法进行更深入的研究,试图通过对调用图进行聚类分析,得到聚集的点的方式来获取微服务候选集。

参考:

[1] https://www.infoq.cn/article/2016%2F08%2FMonomer-architecture-Micro-servi?utm_source=infoq&utm_medium=popular_widget&utm_campaign=popular_content_list&utm_content=homepage

[2] 任仲山, 王伟, 高楚舒,吴国全,陈伟,魏峻,黄涛.遗留应用微服务化迁移方法研究. 软件学报.http://www.jos.org.cn/1000-9825/0000.htm

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容