高并发系统设计详解

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

常见面对高并发大流量的方法

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

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

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

Scale-out VS Scale-up

Scale-up:将类似于追逐摩尔定律不断提升CPU性能的方案, 通过购买更好的硬件来提升系统的并发能力,比方目前系统中4核4G每秒可以处理200请求,那么如果要达到每秒中处理400个请求,可能需要采用8核8G的设备来进行处理。

Scale-out:  将类似于于CPU多核方案称之为, 它通过多个低性能的机器组成一个分布式集群来共同抵御高并发的冲击。比方目前系统中4核4G每秒可以处理200请求,那么如果要达到每秒中处理400个请求,可以才去2台4核4G设备来进行处理。

一般我们在系统设计的时候, 优先考虑scale-up模式,这种方案足够简单,但是当系统并发超过单机极限的时候,我们就使用scale-out的方式。但是scale-out虽然突破了单机的限制,但是也引入了一些复杂的问题, 如某个节点出现故障如何保障整个系统可用性?当多个节点有状态需要同步,如何保证状态信息在不同节点的一致性?如果无感知的情况下增加和删除节点?

使用缓存来提升性能

我们使用缓存的主要作用是提升系统的访问性能, 在高并发的场景下可以支撑更多用户的同时访问。

普通磁盘数据由机械手臂、磁头、转轴、盘片组成,盘片又分为磁道、柱面和扇区。盘片为存储介质,每个盘片被划分为多个同心圆,信息被存储在同心圆中,这些同心圆也就是磁道。在磁盘工作时盘片是在高速旋转,机械手臂驱动磁头沿着径向移动,在磁道读取所需的数据。我们把磁头寻找信息花费的时间叫做寻道时间,有兴趣的可以参考: 存储基础篇之硬盘一(工作原理) - 沫仔 - 博客园

普通磁盘的寻道时间是10ms左右, 而相比于磁道寻道花费的时间,CPU执行指令和内存寻址时间都是在ns(纳秒)级别, 千M网卡读取的时间在微秒级别。磁盘相对于其他组件要慢几个级别,所以我们会以内存作为存储介质的缓存,以此提高性能。

可以将任何降低响应时间的中间存储都称作缓存。如CPU有多级缓存(CPU中的多级缓存_风物长宜放眼量-CSDN博客_cpu多级缓存), 文件有Page cache缓存(文件系统读写--page cache机制_abcdefg的专栏-CSDN博客)。

异步处理

同步调用异步调用的概念:同步调用代表调用方要阻塞等待被调用方法的逻辑执行完成,但是当调用方法响应时间比较长的时候,会造成调用方长久的阻塞,在高并发下会造成整体系统性能下降甚至发生雪崩。异步调用则为调用方不需要等待方法逻辑执行完成就可以返回执行其他逻辑,在被调用方法执行完毕后再通过回调,事件通知等方式将结果反馈给调用方。

 上图为12306异步处理订单操作示意图,避免了在高峰下单期间,同步处理永远无法处理完成这样大的并发请求。则当前为异步处理方式

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值