可扩展系统设计的要点
根据以往经验和网友的总结
纵向扩展
硬件方面可以更换更强劲的服务器,增加 CPU ,内存, 使用高速磁盘。
软件方面可以对现有代码的优化,重构。使用 Non-Blocking 非阻塞 IO 模式,或者异步 IO 模式,使用线程模式或者改用 事件驱动形模式。
目标是提高单机 qps ,连接数,来支持更多的连接,更多的用户,更多的业务量。
横向扩展
使用集群,更多的服务器代替单一服务器。
可扩展系统设计模式
负载均衡
这种模式将请求分发到并行的处理机上。要求程序 无状态 ,请求对于每个处理机都应该是相同的。比如常见的 REST 模式既是 无状态 模式。
分散聚集模式
这种模式将请求分发到多个处理机上,然后收集每个处理机返回的结果,得到整合的结果。比如Map-reduce也可以看做这种模式。
结果缓存
这种模式,首先查看请求是不是发生过,如果发生过则直接返回之前的结果,来节约处理时间。这种模式非常常见比如静态页面的 反向代理 ,各层级的 CACHE。
共享空间
所有的处理机监控共享空间中的未处理信息,处理完后将结果提交到共享空间,直到整个任务完成。
MAP REDUCE
这种模式通常用来解决 IO 密集型的业务,通过并行化的分布式系统来解决 IO 瓶颈。
队列模式
每个处理机从待处理队列提取任务进行处理然后将结果保存到已处理队列,多个处理机可以并行处理队列任务。
要点
1. 快速失效并返回错误
2. 将复杂的大的请求分解成多个小请求
3. 利用 超时
4. 利用 缓存
5. 用队列来做缓冲
6. 精确测量每个步骤,记录详细日志