高并发系统的通用设计方案
高并发系统的通用设计:
Scale-out(横向扩展):采用分布式部署的方式把流量分流开,让每个服务器都承担一部分并发和流量。
缓存:使用缓存来提高系统的性能,就好比用“拓宽河道”的方式抵抗高并发大流量的冲击。
异步:在某些场景下,未处理完成之前我们可以让请求先返回,在数据准备好之后再通知请求方,这样可以在单位时间内处理更多的请求。
Scale-out
这里牵扯到一个横向扩展(Scale-out)与纵向扩展(Scale-up)。其中纵向扩展是不断的提高单个cpu的处理能力,来处理更多的请求。而横向扩展则是指利用多个cpu资源来并行处理,来处理更多请求。
一般来说,在项目初期,我们可以采用纵向扩展,当单机无法承受时,再使用横向扩展。
缓存
我们的数据都是存储在磁盘上的,而磁盘的读取速度特别的慢,会给处理请求带来很大的压力。所以产生了缓存。在现代的设计中,从操作系统到浏览器,从数据库到消息队列都可以看到缓存的影子。
由于缓存是基于内存读写的,所以速度要比磁盘读取快很多。如果能够能快的读写数据,那么每个请求的处理时间都会变短,那么就会提高系统的并发度。
异步处理
异步处理相对应的就是同步。
同步是指调用一个方法,需要等到该方法返回之后,才可以继续执行后续的操作。这种情况下,如果调用的方法响应时间太长的话,会导致后续的业务阻塞。
异步处理是指调用方法后,并不需要等待方法处理完,可以直接执行后续的请求。比如说,我们可以将请求放入队列当中,然后响应用户一个信息,等处理完结果后,再给用户反馈一下,这样可以处理更多的请求。
参考
《高并发系统设计40问》