架构设计之「服务隔离」

我们在做系统架构设计的时候,经常离不开的一个话题就是进行服务的隔离设计。

那什么是「服务隔离」呢?

顾名思义,它是指将系统按照一定的原则划分为若干个服务模块,各个模块之间相对独立,无强依赖。当有故障发生时,能将问题和影响隔离在某个模块内部,而不扩散风险,不波及其它模块,不影响整体的系统服务。

其实隔离设计并非软件行业独创,它是借鉴于造船行业。

如上图,造船行业有一个专业术语叫做「舱壁隔离」。利用舱壁将不同的船舱隔离起来,如果某一个船舱进了水,那么就可以立即封闭舱门,形成舱壁隔离,只损失那一个船舱,其他船舱不受影响,整个船只还是可以正常航行。

一、为什么要做服务隔离设计呢?

我们在做系统设计的时候,必须有一个清楚的认知是:任何软件系统,故障是不可避免的,并且大多数还是不可预测的,因此,我们只能在系统的设计之初就充分的考虑好应对措施,如何在故障发生时,去尽最大可能的止损和减少故障范围。

没有人敢说他的系统是百分百可用,我们能做的就是,使用一切方法去减少故障的影响面,尽可能的去提高系统的整体可用率。

而把系统分离成子服务,将子服务进行一定程度隔离的做法,能保证在有不可预测的故障发生时,缩小故障范围的最佳手段。

二、服务隔离应该怎么做?

那在实际项目中,一般通过什么方法去做服务隔离呢?主要有以下两种:

按服务/功能做隔离

按用户分类隔离

首先说一下按照服务进行隔离的做法。

网上找了一张图,虽然原图的作用不是用来表述这个的,但是也类似,将就看吧。

比如上图里面,微博项目可以把 Feed信息流、用户系统、评论系统 都分拆为独立业务模块,这些模块无论是对外的接口应用、还是到数据库、到底层硬件资源都是完全隔离的。其中任何一个模块的故障,理论上都不会影响到其它模块。

再举个例子,如果我们要设计个电商平台,可以将其中的 用户系统、订单系统、支付系统、仓储系统 都分别进行独立隔离,这样做就是从服务层面实现了故障的隔离效果。

那按照服务隔离有没有弊端呢?有,肯定有。

当我们某个功能操作需要关联多个服务模块或者同时查询所个模块数据的时候,代码写起来就会相对麻烦一些了,其中涉及到多模块调用的性能问题、数据一致性问题、事物问题等。

不同服务模块之间的交互也会比较复杂一些,因为要做服务隔离,避免服务强依赖,所以模块之间的交互调用最好是走异步模式,需要通过异步线程或消息中间件来传递实现。

在进行运营大数据分析的时候,由于数据是散落在不同服务模块的,因此需要做额外的汇聚操作,还得有唯一字段保证数据在不同模块产生的先后顺序。

接下来说一下按用户隔离的做法。

继续网上找图,虽然原图的作用不是用来表述这个的,但是也类似。粉丝又不多,我又懒得画图,将就看吧,多发挥一下想象力,哈哈。

简单一句话解释就是:我们先部署多套一模一样的业务服务,然后将用户根据一定的特征去做分类,让不同分类的用户去访问不同的业务实例,达到分流和隔离的效果。

怎么给用户分类?

可以用按照用户是否VIP、用户等级、用户IP等等,方法很多,要结合自己实际业务的特性来做。

其实这也是一种「多租户架构」,在SaaS服务中用得比较多。

多租户模式有三种形式:

完全的隔离,即服务和数据都是完全独立的。

公共服务、独立数据源,即多个租户是用的同一台服务程序,但是底层的数据源是独立的。

公用服务、公用数据源,即多个租户的服务程序与数据库源都是共享的,不同数据可能会做分区分表来独立。

上述三种方式,从下到上,独立性和安全性越来越高,资源利用率越来越低,根据业务特性去选择,一般选择折中方案。

另外,功能隔离和用户隔离 两种方式并非互斥的,是可以结合在一起使用的。

三、服务隔离的注意事项

我们在做服务隔离的时候,还是有一些原则和事项需要注意的:

不可越界:能在隔离模块内完成的逻辑,就尽量不要跨模块调用,减少依赖。

不可共享:数据和资源能独享的就尽量不要共享,不然很容易造成隔离失效。

考虑效率:设计隔离模块的时候,要根据业务情况而定,充分的考虑到未来的拓补结构,减少调用效率的损失。

考虑颗粒度:隔离模块设计的大小问题,过大和过小都不合适,需充分考虑。

服务的全面监控:既然服务或用户进行隔离了,那么系统的复杂度肯定是比之前要高了,那么针对多服务的全链路监控是必不可少的。

服务隔离的设计模式能降低依赖服务对整个系统的影响,保护有限的资源不被耗尽,提高了整个系统的可用性。本文参考了很多其它资料,属于抛砖引玉,希望大家能一起交流,提出更好的架构设计思路。

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

推荐阅读更多精彩内容