一些抗并发的措施

因为肺炎疫情的影响,从今天开始,很多公司就要开始在家办公了。 作为第一天上班,从早上起,到处都传来系统崩掉的消息。钉钉的日程,沟通都出了故障。我们自己公司的一些业务也出现了一段时间的不可用。 我们总结一下,一般的情况有以下情况:

  1. 流量激增,宽带不足
  2. 用户增多,队列消费延迟
  3. 数据增多,数据库装不下,查得慢
  4. 访问多,服务器资源(cpu,memory)紧张。

我们在设计一个系统的时候,一般讲究先实现,再优化,等量大了再堆机器。但是实际上,很多人低估了堆机器的难度。诚然,很多系统在整个生命周期内都难以到达所谓"量大"的阶段。而真正到了量大的时候,才发现根本就不可能堆机器,只能重构。堆机器对系统架构,数据库模型设计要求挺高,并不是想做就能做的。所以也建议技术人员一定要有一段大公司的经历,虽然大公司也不保证一定有大数据高增量,但是起码有机会获得相关经验。没经历过永远是想当然。

下面,说说主要的一些优化手段

拆分

任何的机器都是物理极限的,当负载达到极限的时候,我们的服务不是蹦,就是慢。所以处理的策略也很简单,就是一个字"分"。拆分的场景主要分两块:

  1. 机器的拆分,包括机房拆分,服务器拆分,进程的拆分。
  2. 数据的拆分,包括冷热数据拆分,新旧数据拆分,功能拆分,水平拆分。

缓存

很多情况下,数据库是最容易成为瓶颈的地方,虽然随着硬件的发展,现在利用SSD硬盘可以极大的提高文件的随机读取性能,但是数据库依然是最薄弱的环节。所以为了减少数据库的压力,提高数据查询速度,我们需要缓存,缓存按照数据分,有进程内缓存,公共内存缓存,文件缓存。

备份

随着数据的增多,场景的复杂,服务的可用性其实是递减的,为了保证服务的高可用,我们往往还需要进行服务的备份。当一个进程挂了,另一个进程可以继续提供服务;一台服务器挂了,有其他服务器支撑