架构设计需要进行【服务隔离】

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

什么是【服务隔离】呢?

    服务隔离是指:将系统按照一定的原则划分为若干个服务模块,各模块之间相互独立,无强依赖。

                             当故障发生时,能将问题和影响隔离在某个模块内部,而不扩散风险,不涉及其他模块,不影响整体的系统服务。

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

      任何软件系统,故障是不可避免的,并且大多数还是不可预测的,因此,只能在设计之初就充分考虑好应对措施,如何在故障发生时,尽最大可能的止损和减少故障范围。

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

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

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

       实际项目中,一般通过什么方法去做服务隔离呢?

       主要有以下两种:

           按服务/功能做隔离

           按用户分类隔离

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

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

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

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

1、当某个功能操作需要关联多个服务模块或者同时查询多个模块数据的时候,代码写起来就会相对麻烦一些;

      其中涉及到多模块调用的性能问题、数据一致性问题、事物问题等。

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

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

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

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

怎么给用户分类?

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

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

多租户模式有3种形式:
1、完全的隔离,即服务和数据都是完全独立的。

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

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

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

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

三、服务隔离的注意事项

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

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

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

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

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

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

服务隔离的设计模式能降低依赖服务对整个系统的影响,保护有限的资源不被耗尽,提高了整个系统的可用性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值