大话 | 大话程序猿眼里最全的高并发,快收藏!
“
Hi !我是小小,今天是本周的第六篇,本月的最后一篇,你还好吗?我是小小,我们本周的内容是大话高并发架构
前言
高并发经常会发生在有大量用户量,用户高聚集的业务场景,例如秒杀活动,定时领取红包。为了让业务可以在高并发的时候能够相当好的运行,并给用户一个良好的交互体验,所以,考虑各种高并发的场景,设计高并发架构。
服务器架构
业务从初期到成熟,从单一到集群,最后到分布式,需要有服务器的负载均衡,数据的主从复制,nosql的各种集群,静态文件上传cdn等等。需要用到的服务器架构如下
服务器
负载均衡,如阿里云的slb 或者是nginx 资源监控 分布式
数据库
主从分离,集群 DBA表优化,索引优化 分布式
nosql
redis:主从分离,集群 mongodb:主从分离,集群 memcache:主从分离,集群
cdn
html css js image
并发测试
对于高并发业务,需要进行高并发的业务测试,通过大量的数据分析评估整个架构支撑的并发量。测试并发使用的工具如下 阿里云性能测试 jmetter visual studio 性能负载测试 Microsoft Web Application Stress Tool
实现方案
通用方案
日用户流量大,但是比较分散,偶尔会有用户聚合的情况
场景
用户签到,用户中心,用户订单
服务器架构
说明
这些场景,基本都是用户进入app后会操作,这些用户不会高聚集,同时这些表又是大的数据表,业务很多,所以需要减少DB的查询,优先查询缓存,如果缓存不存在,再命中DB。所以需要使用缓存,为了降低缓存,所以使用分布式的缓存,对DB实现hash分组,把用户分布到不同的缓存中,不会影响查询效率。
方案
用户签到
计算用户分布的key,redis hash中查找用户今日签到的消息
能查询到,返回查询的信息
如果没有查询到,DB查询今日是否抢到过,如果抢到过,信息同步redis
如果db也没有查询到,进行签到逻辑,db添加今日签到记录。这是一个事物
缓存签到信息到redis,返回签到信息
用户订单
这里只缓存第一页订单信息
用户访问订单列表,如果是第一页读缓存,如果不是读DB
计算出用户分布的key,redis hash中查找用户订单信息
如果能查询到用户订单信息,返回订单信息
如果不存在用户信息,就直接db查询第一页 订单数据,然后缓存redis,返回订单信息
用户中心
计算用户key,redis hash 中查找出用户订单信息
能查找到,返回用户信息
如果未找到,缓存redis,返回用户信息
“
以上的仅仅是一个相对于比较简单的并发架构
消息队列
“
用于缓存秒杀,活动,用户在一瞬间涌入产生的高并发的请求
场景:
定时领取红包。
架构
说明
场景中的定时领取是一个高并发的业务,秒杀活动会在一瞬间涌入。这种业务会直接命中DB,会导致数据的崩溃。设计这种业务的时候,需要使用消息队列,可以把参与的用户信息添加到消息队列中,然后缓慢的消耗。
方案
定时领取红包:使用redis的list 当用户参与活动,用户信息push到队列中 书写多个线程去pop数据,进行发放红包的业务。
一级缓存
一级缓存就是使用站点服务器去缓存数据,只缓存部分请求量大的数据,并且数据量还需要控制,一级缓存需要设置秒为单位的过期时间,具体业务场景看业务场景而定,目的是有高并发的时候可以让数据获取命中到一级缓存,减少nosql的压力。
架构图
场景
APP首屏的数据接口
静态化数据
对于更新不频繁,并且数据允许短时间内的延迟,可以通过数据静态化成json,xml,html等数据文件上传cdn,然后拉取数据的时候优先拉取cdn,然后再缓存,最后数据库,用于减轻db的压力。
分层,分割,分布式
大型网站需要很好的支撑高并发,这需要很长的规划设计,主要需要如下
分层:系统在横向维度切分成几个部分,每个部门负责一部分相对简单并且单一的职责,然后通过上层,对下层的完整依赖形成一个完整的系统。例如把一个电商分为,应用层,服务层,数据层。应用层:网站首页,用户中心 服务层:订单服务,用户管理服务 数据层:关系型数据库,nosql数据库。
分割 在纵向对业务进行切分 例如,用户中心可以分割成为账户信息模块,订单模块,充值模块,提现模块,优惠券模块
分布式 分布式应用和服务,把应用进行分布式部署。当业务达到一定用户量的时候,需要对服务器进行负载均衡,数据库,缓存主从集群 分布式静态资源,静态资源上传cdn 分布式计算,使用hadoop进行大数据分布式计算
集群
对于用户访问集中的服务器,搭建集群,通过负载均衡共同对外提供服务,当有更多的用户访问的时候,只需要加机器即可。
ngixn反向代理 slb 数据库的主从分离
异步
在高并发业务场景中,如果涉及到数据库操作,主要压力是在数据库服务器上,当连接数量达到最大值的时候,有其他连接数据库的请求操作的时候,就需要有空闲的连接。
场景
自动弹窗签到 双十一抢红包 双十一订单入库
设计
使用消息队列,把入库的内容放入到消息队列中,业务接口直接返回提示,高峰期延迟到账。然后再写独立程序从消息队列中,读取进行入库操作,入库成功以后刷新缓存,如果入库失败,记录日志,方便查询反馈和重新持久化。
补充
其他场景,例如短信发送
面向服务
soa 面向服务架构设计 微服务更加细腻度的服务化。
例子
用户行为跟踪记录统计
说明
通过上报应用模块,操作事件,事件对象,等数据,记录用户操作行为。例如用户在某个商品模块点击了某一件商品,或者看了某一件商品。
架构
node.js web 应用负载均衡 redis主从集群 mysql主从复制 nodejs + express + ejs + redis + mysql
冗余自动化
当高并发业务出现单击的时候,需要快速的有备用的替代,所以需要自动化执行这些操作
冗余
数据库备份 备份服务器
自动化
自动化监控 自动化报警 自动化降级
关于作者
我是小小,一枚生于二线,活在一线城市的程序猿,我是小小,我们下期再见。
小明菜市场
推荐阅读
● 送书 | 拿到就是赚到!
● 惊呆了! | Spring Boot 使用 @Value 读取配置还能这样用
● 神奇 | 神奇,原来 Linux 终端下还有这两种下载文件方式
● 重量级 | 重量级!Maven史上最全教程,看了必懂
● 缓冲区 | 没吃透Netty 缓冲区,还能算得上Java老司机?
给我个好看再走好吗?
大话 | 大话程序猿眼里最全的高并发,快收藏!相关推荐
- 大话程序猿眼里最全的高并发,快收藏!
前言 高并发经常会发生在有大活跃用户量,用户高聚集的业务场景中,如:秒杀活动,定时领取红包等. 为了让业务可以流畅的运行并且给用户一个好的交互体验,我们需要根据业务场景预估达到的并发量等因素,来设计适 ...
- 【转】大话程序猿眼里的高并发
原文: http://blog.thankbabe.com/2016/04/01/high-concurrency/ 大话程序猿眼里的高并发 2016-04-01 YYQ 高并发 高并发 负载均 ...
- 程序员修神之路--高并发系统设计负载均衡架构
点击上方"蓝字"关注,酷爽一夏 菜菜哥,上次你给我讲的分库分表策略对我帮助很大 有帮助就好,上次请我的咖啡也很好喝~ 呵呵,不过随着访问量的不断加大,网站我又加了nginx做负载均 ...
- 程序猿眼里的高并发架构
来源:http://mp.weixin.qq.com/s?__biz=MzI4OTU3ODk3NQ==&mid=2247483793&idx=1&sn=b91f162a2428 ...
- 程序员们的三高:高并发、高性能、高可用
你们知道淘宝,京东这些购物商场吗?他们到了双11,双12为什么能支持全国14亿人口同时购物下单呢,因为他们的程序做到了高并发.高性能.高可用.那么你对程序员的三高了解多少呢? 高并发 一. 高并发 高 ...
- 服务器不知别内存_程序优化浅谈服务器实现高并发的原理
我们每天刷手机都会接收到各种各样的信息,看到这篇文章时,不知大家有没有思考过,这些信息是如何组织,然后通过服务器发送给我们的呢? 其实也很简单,不就是一条一条请求嘛,服务器根据不同的请求分别去不同的数 ...
- 干货|这可能是最全的高并发、高性能、高可用解决方案总结
在互联网公司,经常面临一个"三高"问题: 高并发 高性能 高可用 这篇文章将总结一下后台服务器开发中有哪些常用的解决"三高"问题的方法和思想. 希望这些知识,能 ...
- 程序猿必备工具或者技术论坛推荐(收藏)
一 搜索引擎 1.秘迹搜索:https://mijisou.com(比度娘好用,该搜索引擎不会收集私人信息) 2.DogeDoge(多吉搜索):https://www.dogedoge.com/(国内 ...
- 【分享】身为一个资深的“收藏程序猿”必须知道的一些网址(建议收藏)
一.自学视频类 1.[B站] 2.[尚硅谷] 3.[慕课网] 4.[我要自学网] 5.[大学生自学网] 6.[中国大学MOOC] 二.音效类 1.[爱给网] 三.画图类 1.[迅捷画图] 2.[Pro ...
最新文章
- oracle改表结构,Oracle修改表结构
- 关于a标签的 href 与 onlick
- php fpm error,关于启动php-fpm失败的解决办法
- Linux疑难杂症解决方案100篇(八)-文本处理工具与bash的特性
- 【转载】zookeeper学习
- 读取SSDT表和原函数地址
- String.format()方法的使用
- cif是目的港交货吗_刚接手出口业务,搞不懂FOB? CIF? 为你科普→
- 软件构架实践_阅读笔记01(1-3)
- 2019.7.17东湖大数据页面三
- freecplus框架-文件操作
- 数据可视化的优势有哪些
- 机器学习——LBP特征
- SPSS23第二版课后习题答案_全新版大学进阶英语综合教程3 Unit1unit3课后习题答案...
- ubuntu安装nvidia驱动
- 产品经理的素质能力模型
- mysql中+desc用法,数据库desc的用法有哪些用法
- Google Dapper,大规模分布式系统的跟踪系统
- html新浪短域名api,推荐几个最最新的新浪短网址官方api接口
- 一、科里奥利质量流量计
热门文章
- Linux Ubuntu jdk(环境变量)配置
- centos系统时间不准
- ini_set的用法介绍
- Oracle dataGuard专题:Rman通过duplicate创建standby
- 团队项目:过山车游戏的设想
- linq学习笔记(1):c#3.0新特性(2)
- Spring Boot系列教程七:Spring boot集成MyBatis
- 解决 Python fake_useragent 报错 fake-useragent Maximum amount of retries reached问题
- Java,C实现约瑟夫环,一元多项式运算器
- mysql锁的基本类型_Mysql的锁