高并发系统:通用设计方法
洪水猛兽
通常如何治理洪水,方案如下:
- 分流:将水分流到多个支流中,以分担水流压力
- 提高流速: 拓宽河道,清除淤沙让流水更加顺畅
- 水库:将水引入水库先存储起来,然后再想办法把水库中的水缓缓地排出去,以此提高下游的抗洪能力
高并发
高并发就像洪水猛兽,处理方案类似:
- 横向扩展:分而治之是一种常见的高并发系统设计方法,采用分布式部署的方式把流量分流开,让每个服务器都承担一部分并发和流量。
- 缓存:使用缓存来提高系统的性能,就好比用“拓宽河道”的方式抵抗高并发大流量的冲击。
- 异步:在某些场景下,未处理完成之前我们可以让请求先返回,在数据准备好之后再通知请求方,这样可以在单位时间内处理更多的请求。
方案一:Scale-out(横向扩展)
系统分布式设计,横向扩展,增加节点。
微服务:SpringCloud
方案二:缓存
为什么使用缓存?
普通磁盘的寻道时间是 10ms 左右,而相比于磁盘寻道花费的时间,CPU 执行指令和内存寻址的时间都是在 ns(纳秒)级别,从千兆网卡上读取数据的时间是在μs(微秒)级别。所以在整个计算机体系中磁盘是最慢的一环,甚至比其它的组件要慢几个数量级。因此我们通常使用以内存作为存储介质的缓存,以此提升性能。
Redis
方案三:异步
调用方不需要等待方法逻辑执行完成就可以返回执行其他的逻辑,在被调用方法执行完毕后再通过回调、事件通知等方式将结果反馈给调用方。
Reactive
三方消息:RabbitMQ,Kafka,RocketMQ,ActiveMQ等