面向资源和服务的「隔离」设计

隔离的作用

隔离是指将系统或资源分割开,是为了在系统发生故障时,能限定传播范围和影响范围,即发生故障后不会出现滚雪球效应,从而保证只有出问题的服务不可用,其他服务还是可用的

常见隔离手段

1、进程/线程隔离:nodejs 没有多线程,所以考虑进程隔离。可以通过 pm2(进程管理器)来启动多个进程,从而提高可用性。

2、服务分组+集群隔离:某个服务单独部署集群,防止故障相互影响。某个服务也可以搞多集群,出问题时候,dns/负载均衡切换流量。

3、机房隔离:nodejs 开发基本接触不到(毕竟都上云了)。机房内的服务只调用本机房服务,跨机房不同 VPC,调用太慢。

4、读写隔离:大流量的时候,用缓存抗高并发读;用缓存+队列削峰抗高并发写。其中涉及的中间件(redis、mq)都单独部署。

5、动静分离:老生常谈,静态资源上 cdn。

6、热点隔离:涉及读写热点的系统,进行单独部署。

7、资源隔离:隔离资源主要为了防止资源竞争带来的消耗,例如 CPU、磁盘、网络。CPU 可以绑定,避免切换 CPU 切换;磁盘可以搞个专用盘给业务使用;网络也只给服务使用,没有其它服务消耗。