主要从三个方面:

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

2、缓存:使用缓存来提高系统的性能,就好比用“拓宽河道”的方式抵抗高并发大流量的冲击。

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

扩展:

Scale-out过程之前或是之中还有种 方案叫做 Scale-up(纵向扩展), 购买性能更好的硬件来提升系统的并发处理能力,比方说目前系统 4 核 4G 每秒可以处理 200 次请求,那么如果要处理 400 次,把机器的 硬件提升到 8 核 8G(硬件资源的提升可能不是线性的,这里仅为参考)。 把类似 CPU 多核心的方案叫做 Scale-out,这两种思路在实现方式上是完全不同的。 Scale-out,则是另外一个思路,它通过将多个低性能的机器组成一个分布式集群来共同 抵御高并发流量的冲击。沿用刚刚的例子,我们可以使用两台 4 核 4G 的机器来处理那 400 次请求。
那么什么时候选择 Scale-up,什么时候选择 Scale-out 呢? 一般来讲,在我们系统设计初期会考虑使用 Scale-up 的方式,因为这种方案足够简单,所谓能用堆砌硬件解决的问题就用硬件来解决,但是当系统并发超过了单机的极限时,我们就要使用 Scale-out 的方式。Scale-out 虽然能够突破单机的限制,但也会引入一些复杂问题。比如,如果某个节点出现 故障如何保证整体可用性?当多个节点有状态需要同步时,如何保证状态信息在不同节点的 一致性?如何做到使用方无感知的增加和删除节点?等等

缓存:

普通磁盘的寻道时间是 10ms 左右,而相比于磁盘寻道花费的时间,CPU 执行指令和内存 寻址的时间都在是 ns(纳秒)级别,从千兆网卡上读取数据的时间是在μs(微秒)级别。 所以在整个计算机体系中,磁盘是最慢的一环,甚至比其它的组件要慢几个数量级。因此,

我们通常使用以内存作为存储介质的缓存,以此提升性能。比如在操作系统中 CPU 有多级缓存,文件有 Page Cache 缓存。

1秒=1000毫秒(ms)

1秒=1,000,000 微秒(μs)

1秒=1,000,000,000 纳秒(ns)

异步

那么什么是同步,什么是异步呢?以方法调用为例,同步调用代表调用方要阻塞等待被调用方法中的逻辑执行完成。这种方式下,当被调用方法响应时间较长时,会造成调用方长久的阻塞,在高并发下会造成整体系统性能下降甚至发生雪崩。 罗马不是一天建成的,系统的设计也是如此。不同量级的系统有不同的痛点,也就有不同的 架构设计的侧重点。如果都按照百万、千万并发来设计系统,电商一律向淘宝看齐,IM 全 都学习微信和 QQ,那么这些系统的命运一定是灭亡。 高并发系统的演进应该是循序渐进,以解决系统中存在的问题为目的和驱 动力的。