Neo's Blog

不抽象就无法深入思考
不还原就看不到本来面目!

0%

分布式系统-可扩展

一些概念

有合理的办法应对系统的增长(数据量、流量、复杂性)

一个良好适配应用的可扩展架构,是围绕着假设(assumption)建立的:哪些操作是常见的?哪些操作是罕见的?这就是所谓负载参数。如果假设最终是错误的,那么为扩展所做的工程投入就白费了,最糟糕的是适得其反。

数据库、缓存、依赖的第三方、复杂均衡、交换机带宽都是系统扩展时需要考虑的点

分层

首先要分层,分层是实现扩展的必要条件;分了层才能让系统有更好的可扩展能力;

架构分层

我们将系统分为如下几层:

接入层

主要负责负载均衡,要求负载均衡策略的时间复杂度要尽量简单,追求$O(lgn)$的时间复杂度,最坏不能超过$O(n)$。对于更坏时间复杂度的均衡策略,性能上会扛不住。

应用层

业务层:按照业务拆分、按照重要性拆分(轻重分离,核心、非核心)、按照请求来源(客户端、web、内网等)—这个跑偏了,这些点主要服务于可用性。

这里侧重点在于无状态,我们一定要确保我们的服务无状态。

存储层

存储层做扩展会更麻烦一些。

一般情况下,要求我们根据业务量提前估计好存储容量。根据计算出来的总的存储量,提前做足够的数据分片。

换言之,对于存储层,我们的一种思路是:早做扩展,以确保将来不做扩展;

另外一种思路是,添加必要的路由层(数据访问路由层)或者路由算法(数据表倍增法),来确保将来的扩展对上层不可见。

manager层

  1. 抽象service层可能提供的一些原子能力
  2. 封装对第三方接口的调用
你的支持是我坚持的最大动力!