服务拆分-变更孤岛

变更孤岛

1 定义

变更孤岛,是一种创建可演化的架构的模式。其主旨是将大型系统分割成多个独立可替换的部分,这些可替换的部分在之后的架构演化中逐步替代以适合的架构形态,针对可替代性而不是可重用性设计。

2 上下文和问题

在构建系统的时候,不一定从一开始就能设计出合适的架构。此时需要先构建一个初始的架构,并使其能随对系统理解的加深而逐步进行演化。

3 解决方案

对于上述可演化的架构,存在一种构建方法,使用此方法构建的架构具有适应性,能够在特定的时间点转换为合设的架构。这种构建方法需要遵循以下的原则:

  • 将大型的系统分割成“变更孤岛”

  • 针对可替代性进行设计,而不是可重用性

  • 最小化共享依赖,重点关注自治和冗余,而不是重用

先将系统按变更作用的范围进行大粒度的划分,划分出的各个部分的变更仅影响系统内部,而不会影响彼此。此时划分的部分称为“变更孤岛”。之后的架构演进,围绕替换这些变更孤岛,而不是重用或者重构这些变更孤岛来进行。即设计出提供某个孤岛相同能力的子系统时,对此孤岛进行替换。

而对于子系统,也可采用这种方式进一步进行变更孤岛的划分、替换,直到系统的架构全部清晰。

由于划分的孤岛彼此耦合很小,功能内聚,可到达最小化共享依赖的目的。因此对孤岛进行冗余、替代都非常容易。这样可方便的对某个孤岛的架构和实现进行实验,一旦失败也可以方便的回退到原架构。

比如,在服务的划分中,经常会划分成前端服务、业务逻辑服务和数据服务,它们之间的调用关系如下:

三层逻辑关系.png

前端服务、业务逻辑服务、数据服务都是功能内聚的部分,可作为变更孤岛,即他们内部的变更在内部消化,不影响到使用方。但如果直接按调用关系组织这些服务,是无法达到变更孤岛的架构目标的,因为前端服务使用了业务逻辑服务,会受业务逻辑服务变更的影响;而业务逻辑服务使用了数据服务,又会受数据服务变更的影响。这种架构是无法实现不同“孤岛”间的松耦合的。

从长期来看,业务逻辑的变化比数据存储技术和前端技术的变化慢得多,依赖应向着更稳定的方向,因此前端服务和数据服务依赖业务逻辑服务是合理的。而数据服务、前端服务应该是能随需求的变化或技术的迭代,快速变更的。这样,我们通过依赖反转方法,将业务逻辑服务对数据服务的依赖关系反向。如下图:

依赖反转.png

按这种方式进行调整之后,业务逻辑服务只依赖抽象的数据接口,而不再依赖具体的数据服务了。而数据服务只要实现数据接口,无论内部怎样变更,替换成哪种实现技术,都可以支撑业务逻辑服务,并且这种变化不会被业务逻辑服务感知。

而业务逻辑服务只要对前端服务提供的接口不变,也可以有效的对前端服务屏蔽变化。这样,前端服务、业务逻辑服务、数据服务就能达成变更孤岛的架构目标了。

下面扩展一下业务逻辑服务和数据服务之间的关系。在实际的系统设计中,经常出现多个业务逻辑服务都使用数据服务的情形,直接的调用关系如下图:

两个服务依赖数据服务.png

这种架构中,数据服务被业务服务A和B重用(共享),但却使业务服务A、业务服务B和数据服务产生了强耦合:不但让业务服务A、业务服务B都感知了数据服务的变化,而且从业务服务A出发产生的数据服务变更也会被业务服务B感知,业务服务B不得不因为业务服务A的变更而变更。

从架构层面来看,对服务的重用越多,服务间的耦合就会越重。重用并非服务间良好的组织方式。如果从变更孤岛的思路来思考,业务服务A和业务服务B看数据服务,都应该是可替换的。可以采用依赖反转将重用使用关系改变。如下图:

依赖反转2.png

在这种关系下,业务服务A和业务服务B都不再依赖数据服务,而是依赖彼此定义的抽象数据接口。数据服务的变更可封闭在数据服务内部。而且,可以为业务服务A和业务服务B使用不同的数据服务实现,增强了系统的扩展性。这就是针对替代性而不是可重用性进行设计的意义所在。如下图:

变更孤岛.png

4 优点

  • 架构中的部件功能内聚,彼此松耦合,可逐步演进;

  • 系统各个部分可方便的替换、回退,利于实验性特性的实现,比如A/B测试;

  • 复杂系统架构演进时,可划分成多个变更孤岛各自进行架构演进。由于孤岛之间互不干扰,因此系统演进可从容地分阶段、分层次地开展。

  • 由于孤岛可替代,而不是被依赖,这种架构符合依赖倒置原则(DIP),有利于将具体技术决策延后,增强架构对变化的适应性。

5 问题和注意事项

一开始的划分不宜粒度太细。孤岛的划分时,优先从现有功能可替代角度思考。避免一开始就被架构是否优美、部件如何共享如何重用等无关功能解耦的问题束缚住手脚。

6 应用场景

  • 对大型系统进行微服务划分,但初期无法完全理解系统,不能细粒度的划分微服务时;

  • 将现有大型系统迁移至微服务架构,存在某些因素无法判断微服务拆分是否合理时,可采用这种可演化的架构方式;

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

推荐阅读更多精彩内容

  • 技术中台、业务中台和数据中台对比 前言 随着大数据时代的发展,互联网人口红利的逐渐消失,流量焦虑和数据孤岛等问题日...
    言射手阅读 856评论 0 12
  • 从去年开始,好像就有一只无形的手一直将我与“微服务”、“平台化”、“中台化”撮合在一起,给我带来了很多的困扰和...
    宫若石阅读 676评论 0 1
  • 前言 航司PSS、E-Commerce、Customer Service等三大层级应用及系统群,在互联网+的冲击下...
    67fbeff17243阅读 831评论 1 1
  • 引言: 随着云计算、大数据、物联网等技术兴起,数据朝着多样性、高体量、高速度方向发展,如何将海量数据安全、稳定、高...
    曹元_阅读 1,397评论 0 5
  • 传统行业向互联网行业的转型 背景 2012年以后,因为移动互联网的兴起,随着网名数量的增多,需求变化大,用户群体大...
    哈喽沃德先生阅读 854评论 0 2