这样的事情经常在各个互联网公司发生,我以电商系统举一个简单的例子,A系统是一个活动运营页面,给用户抽取优惠券,B系统是用户的订单系统,我们常常遇到这样的场景,当进行一场运营活动的时候,A系统的流量非常的大,最后把整个系统都拖垮了,造成用户无法正常下单购买。
可能有人就会问,我们通常不是把活动系统跟订单系统分开部署了么?怎么还会引起服务雪崩呢?
这是我们常见的系统部署的例子,虽然我们把不同的系统进行分开部署,但却把流量入口跟数据库部署在同一个模块,所以,但数据库过载或者Proxy过载的时候,仍然无法有效的保护系统。
每一位架构师、程序员、运维工程师都必须懂得隔离设计,隔离设置,源于轮船的设计,在轮船设计中,我们常常会设计多个船舱,每个船舱都是独立的空间,这样子,当轮船在行驶过程中,即便某个船舱遭受破坏进水,也有船舱能够正常工作。从而保证整个轮船不会沉没。
在分布式系统中,隔离设计的实现有两种不同的方式,一是系统隔离,二是用户隔离。
在分布式系统中,我们常常把不同的模块部署到不同的机器上面,避免不同的模块彼此之间受到影响。(每台计算机的资源都是有限的,特别是IO密集型、CPU密集型的模块,容易拖垮其他业务)。除此之外,我们还要对底层的存储与上层的接入层进行分离。在实际的应用中,我们通常会对不同的不同业务的存储进行数据库拆分,而在接入层,常常为了节约成本,而使用限流设计。
另外一种方式,我们常常根据用户进行隔离,不同的用户访问不同的运行实例。这种在大型互联网公司也是非常常见的。例如阿里巴巴有北京、上海、杭州、深圳等多个不同的数据中心,不同的用户访问不同的系统实例。
不同的用户群访问不同的实力群,可以让隔离做的更加彻底,但同时也是伴随着非常大的挑战。我们会面临着存储、不同实例间的通信等多种问题,我们后面会再次进行分析跟学习,欢迎大家关注我。
好了,今天我们介绍到这里,隔离设计,可以让我们的系统更加稳定,无论是程序员、架构师、还是运维,都是必备的计算机专业知识。欢迎大家关注我,整理后会和大家继续分享。大家的支持是我继续唠嗑的动力。同名公众号(沙茶敏碎碎念)