Scalability 系统的可扩展性是指系统可以平稳的支持增长的业务量。

扩展性很容易理解,比如开发团队的扩展性:一个程序员扩展为 7 人团队,7 人团队扩展为 20 人团队。比如公司业务的扩展性,从几十万的交易额扩展多几百万几千万的交易额。大家都很推崇互联网商业项目的主要原因即是它有很强的扩展性,同样的业务可以从几万的营业额扩展到几亿的营业额,目标客户可以从一个城市扩展到全国或者全世界,这是传统商业无法快速实现的。

WEB 系统的扩展包括:

纵向扩展

硬件方面可以更换更强劲的服务器,增加 CPU ,内存, 使用高速磁盘。

软件方面可以对现有代码的优化,重构。使用 Non-Blocking 非阻塞 IO 模式,或者异步 IO 模式,使用线程模式或者改用 事件驱动形模式。

目标是提高单机 qps ,连接数,来支持更多的连接,更多的用户,更多的业务量。

横向扩展

使用集群,更多的服务器代替单一服务器。

可扩展系统设计模式

负载均衡

这种模式将请求分发到并行的处理机上。要求程序 无状态 ,请求对于每个处理机都应该是相同的。比如常见的 REST 模式既是 无状态 模式。

分散聚集模式

这种模式将请求分发到多个处理机上,然后收集每个处理机返回的结果,得到整合的结果。比如Map-reduce也可以看做这种模式。

结果缓存

这种模式,首先查看请求是不是发生过,如果发生过则直接返回之前的结果,来节约处理时间。这种模式非常常见比如静态页面的 反向代理 ,各层级的 CACHE。

共享空间

所有的处理机监控共享空间中的未处理信息,处理完后将结果提交到共享空间,直到整个任务完成。

MAP REDUCE

这种模式通常用来解决 IO 密集型的业务,通过并行化的分布式系统来解决 IO 瓶颈。

队列模式

每个处理机从待处理队列提取任务进行处理然后将结果保存到已处理队列,多个处理机可以并行处理队列任务。

可扩展系统设计的要点

1. 快速失效并返回错误

2. 将复杂的大的请求分解成多个小请求

3. 利用 超时

4. 利用 缓存

5. 用队列来做缓冲

6. 精确测量每个步骤,记录详细日志

推荐这些相关文章

订阅这个博客:

关注我的微博:

关注我的推特: