Hi ! 我是小小,今天是本周的第六篇,本月的最后一篇,你还好吗?我是小小,咱们本周的内容是大话高并发架构
高并发常常会发生在有大量用户量,用户高汇集的业务场景,例如秒杀活动,定时领取红包。
为了让业务能够在高并发的时候可以至关好的运行,并给用户一个良好的交互体验,因此,考虑各类高并发的场景,设计高并发架构。css
业务从初期到成熟,从单一到集群,最后到分布式,须要有服务器的负载均衡,数据的主从复制,nosql的各类集群,静态文件上传cdn等等。
须要用到的服务器架构以下html
负载均衡,如阿里云的slb 或者是nginx
资源监控
分布式node
主从分离,集群
DBA表优化,索引优化
分布式mysql
redis:主从分离,集群
mongodb: 主从分离,集群
memcache:主从分离,集群nginx
html
css
js
imageweb
对于高并发业务,须要进行高并发的业务测试,经过大量的数据分析评估整个架构支撑的并发量。
测试并发使用的工具以下
阿里云性能测试
jmetter
visual studio 性能负载测试
Microsoft Web Application Stress Toolredis
日用户流量大,可是比较分散,偶尔会有用户聚合的状况sql
用户签到,用户中心,用户订单mongodb
这些场景,基本都是用户进入app后会操做,这些用户不会高汇集,同时这些表又是大的数据表,业务不少,因此须要减小DB的查询,优先查询缓存,若是缓存不存在,再命中DB。
因此须要使用缓存,为了下降缓存,因此使用分布式的缓存,对DB实现hash分组,把用户分布到不一样的缓存中,不会影响查询效率。数据库
以上的仅仅是一个相对于比较简单的并发架构
用于缓存秒杀,活动,用户在一瞬间涌入产生的高并发的请求
定时领取红包。
场景中的定时领取是一个高并发的业务,秒杀活动会在一瞬间涌入。
这种业务会直接命中DB,会致使数据的崩溃。
设计这种业务的时候,须要使用消息队列,能够把参与的用户信息添加到消息队列中,而后缓慢的消耗。
一级缓存就是使用站点服务器去缓存数据,只缓存部分请求量大的数据,而且数据量还须要控制,一级缓存须要设置秒为单位的过时时间,具体业务场景看业务场景而定,目的是有高并发的时候可让数据获取命中到一级缓存,减小nosql的压力。
APP首屏的数据接口
对于更新不频繁,而且数据容许短期内的延迟,能够经过数据静态化成json,xml,html等数据文件上传cdn,而后拉取数据的时候优先拉取cdn,而后再缓存,最后数据库,用于减轻db的压力。
大型网站须要很好的支撑高并发,这须要很长的规划设计,主要须要以下
对于用户访问集中的服务器,搭建集群,经过负载均衡共同对外提供服务,当有更多的用户访问的时候,只须要加机器便可。
在高并发业务场景中,若是涉及到数据库操做,主要压力是在数据库服务器上,当链接数量达到最大值的时候,有其余链接数据库的请求操做的时候,就须要有空闲的链接。
自动弹窗签到
双十一抢红包
双十一订单入库
使用消息队列,把入库的内容放入到消息队列中,业务接口直接返回提示,高峰期延迟到帐。
而后再写独立程序从消息队列中,读取进行入库操做,入库成功之后刷新缓存,若是入库失败,记录日志,方便查询反馈和从新持久化。
soa 面向服务架构设计
微服务更加细腻度的服务化。
用户行为跟踪记录统计
经过上报应用模块,操做事件,事件对象,等数据,记录用户操做行为。
例如用户在某个商品模块点击了某一件商品,或者看了某一件商品。
node.js web 应用负载均衡
redis主从集群
mysql主从复制
nodejs + express + ejs + redis + mysql
当高并发业务出现单击的时候,须要快速的有备用的替代,因此须要自动化执行这些操做
数据库备份
备份服务器
自动化监控
自动化报警
自动化降级
我是小小,一枚生于二线,活在一线城市的程序猿,我是小小,咱们下期再见。