高并发系统的三大设计方案

听过太多有关高并发的技术,例如:消息队列,负载均衡,缓存中间件,数据库一主多从,降级,限流等。有关高并发的解决方案和知识也十分庞杂。

但本质上,高并发的通用设计方案一共就三类。横向扩展、缓存、异步。

1.Scale-out(横向扩展):分而治之是一种常见的高并发系统设计方法,采用分布式部署的方式把流量分流开,让每个服务器都承担一部分并发和流量。

我们在高并发系统设计上把类似追逐摩尔定律不断提升 CPU 性能的方案叫做 Scale-up(纵向扩展),把类似 CPU 多核心的方案叫做 Scale-out,这两种思路在实现方式上是完全不同的。         
Scale-up:通过购买性能更好的硬件来提升系统的并发处理能力,比方说目前系统 4 核 4G 每秒可以处理 200 次请求,那么如果要处理 400 次请求呢?很简单,我们把机器的硬件提升到 8 核 8G(硬件资源的提升可能不是线性的,这里仅为参考)。
Scale-out:则是另外一个思路,它通过将多个低性能的机器组成一个分布式集群来共同抵御高并发流量的冲击。沿用刚刚的例子,我们可以使用两台 4 核 4G 的机器来处理那 400个请求。

2.缓存:为什么使用缓存可以提高系统的访问性能,这是因为数据都是持久化存储的,我们一般都使用磁盘作为存储介质,而在计算机体系中,磁盘是最慢的一环,甚至相比其他存储介质要慢几个数量级,所以通常我们使用内存作为存储介质的缓存来大幅提高访问性能。

3.异步:在某些场景下,未处理完成之前,我们可以让请求先返回,在数据准备好之后再通知请求方,这样可以在单位时间内处理更多的请求。

同步:以方法调用为例,同步调用是指,调用方要阻塞等待被调用方逻辑执行完成,在这种方式下,当被调用方执行时间太长,会造成调用方长时间阻塞等待。在高并发的场景下容易发生系统整体性能下降,甚至血崩。
异步:与同步调用恰恰相反,调用方不需要阻塞等待被调用方的逻辑执行完成就可以返回执行其他逻辑,等被调用方执行完毕后再通过回调或事件通知等方式把结果反馈给调用方。

最后,我们要注意,不能为了技术而技术,应该遵循用最简单的系统设计去满足业务需求和流量现状的原则,随着流量的增加的业务的变化去不断的做技术改造和完善。

高并发系统的演进应该是循序渐进,以解决系统中存在的问题为目的和驱动力的。

你可能感兴趣的:(高并发系统的三大设计方案)