排行
数据库百科
核心案例
行业报告
月度解读
大事记
产业图谱
中国数据库
向量数据库
时序数据库
实时数据库
搜索引擎
空间数据库
图数据库
数据仓库
大调查
2021年报告
2022年报告
年度数据库
2020年openGauss
2021年TiDB
2022年PolarDB
2023年OceanBase
首页
资讯
活动
大会
学习
课程中心
推荐优质内容、热门课程
学习路径
预设学习计划、达成学习目标
知识图谱
综合了解技术体系知识点
课程库
快速筛选、搜索相关课程
视频学习
专业视频分享技术知识
电子文档
快速搜索阅览技术文档
文档
问答
服务
智能助手小墨
关于数据库相关的问题,您都可以问我
数据库巡检平台
脚本采集百余项,在线智能分析总结
SQLRUN
在线数据库即时SQL运行平台
数据库实训平台
实操环境、开箱即用、一键连接
数据库管理服务
汇聚顶级数据库专家,具备多数据库运维能力
数据库百科
核心案例
行业报告
月度解读
大事记
产业图谱
我的订单
登录后可立即获得以下权益
免费培训课程
收藏优质文章
疑难问题解答
下载专业文档
签到免费抽奖
提升成长等级
立即登录
登录
注册
登录
注册
首页
资讯
活动
大会
课程
文档
排行
问答
我的订单
首页
专家团队
智能助手
在线工具
SQLRUN
在线数据库即时SQL运行平台
数据库在线实训平台
实操环境、开箱即用、一键连接
AWR分析
上传AWR报告,查看分析结果
SQL格式化
快速格式化绝大多数SQL语句
SQL审核
审核编写规范,提升执行效率
PLSQL解密
解密超4000字符的PL/SQL语句
OraC函数
查询Oracle C 函数的详细描述
智能助手小墨
关于数据库相关的问题,您都可以问我
精选案例
新闻资讯
云市场
登录后可立即获得以下权益
免费培训课程
收藏优质文章
疑难问题解答
下载专业文档
签到免费抽奖
提升成长等级
立即登录
登录
注册
登录
注册
首页
专家团队
智能助手
精选案例
新闻资讯
云市场
微信扫码
复制链接
新浪微博
分享数说
采集到收藏夹
分享到数说
首页
/
据说成都健康码宕机了,谈谈设计一款牛逼的高并发架构有多难
据说成都健康码宕机了,谈谈设计一款牛逼的高并发架构有多难
跟强哥学SQL
2022-09-05
189
前天一大早醒来,各微信群都在传周五成都健康码崩溃的事情。虽然系统服务方东软下午发公告霸气回应:软件不存在问题,是网络问题,但网友们似乎并不买账:
我手机上的其他应用都好好的,就健康码不能用,你当我傻?!
甚至有人质疑东软中标“有无猫腻”,还拿东软的“
日资背景
”说事。
。
。
这个锅就有点大了,东软怕是背不起。。。
确实,这类民生类项目,一有问题,影响的人数就上千万起,杀伤力太大了。
人民群众可不管你什么网络问题。
至于这起事故的具体原因,强哥在微信群里也有所听闻,但没有经过官方证实,不好说。
不过,抛开这次事故本身,我们来聊一聊设计一款牛逼的高并发架构到底有多难。
1、产品设计
如果你问一个做企业OA系统的程序员,你们系统最高可承受多大的并发,也许他会告诉你:最高500人同时在线访问(还不是每秒的请求数),不能再多了哦~。
但如果你跟一个
腾讯
的程序员说:来,给我做一个支持QPS500的高并发电商网站。他可能只会觉得你这个老板是个憨憨。
所以,不同行业,不同场景,对于高并发的理解,其实并没有一个具体的数字。一般来说,一台16C、32G经过优化后的服务器,支持1000以内的QPS能轻松胜任。当然,这也和具体的业务复杂度、网络带宽、数据包大小等因素有关。
在我的经验里,如果要够得上高并发,QPS怎么着也得上万吧。
那么,QPS上万,能支持多少个人同时扫健康码做核酸呢?
假设每人扫一次码平均需要3秒,那么可以支持3万人。
按每个核酸采样点平均3条线来算,可以支持1万个核酸检测点。
我做个假设,如果你是个产品经理,公司要求你设计一款产品,支持整个市所有人的核酸检查。那么,在系统的规划初期,你是不是就必须对系统的容量进行初步的预估。整个市的总人口要考虑一下吧?计划设立多少个检测点位是不是需要考虑?极端情况下,全员核酸检测,能不能支持?大家一般在什么时间段集中做核酸检测?关联系统的最大容量是多少?
这些数据如果产品经理想不到,给不出,系统出问题是迟早的事。
前几年,某银行经营战略从追求AUM,转向追求MAU,并做了全员动员学习。结果我到某省会城市出差时,亲耳听到某领导发言:AUM、MAU是什么,傻傻分不清。
更别说问他啥是QPS了,他也许会一脸问号的问你:是不是“
奇葩说
”?
2、架构设计
好了,假设你有一个靠谱的产品经理,把系统的功能性、非功能性需求写的明明白了,轮到架构师上场了。
一个系统在处理客户请求时,通常会有如下几个流程:
客户打开页面->调起接口请求后端数据->后端读取数据,并做一些需要的逻辑处理->返回给页面
那么,在架构设计上,首先要考虑的就是分层。最常见的,比如把系统分成应用层、服务层、数据层。每个大的层次再根据业务实际情况,分成多个小的层次。
大型应用的架构,是一个长期演进的过程。在系统设计初期,就进行分层设计,是支持后期架构演进的基础。
不过,分层,仅仅是横向切分。对于一个大型应用,还是远远不够的。更多时候,还需要做纵向分割。比如,对于服务层,可以分割出独立的用户中心、店铺中心、商品中心、订单中心、物流中心、营销中心等等。
另外,缓存也必不可少。静态资源与动态资源是否分离?有没有使用CDN对静态资源加速?内存级缓存有没有?有没有使用NoSQL存储实现数据缓存?持久化数据库本身的选型是否合理?使用什么样的缓存策略?
最后,各处理层、各组件的部署模式是怎样的?接入层有没有做负载均衡?服务层是集群部署还是冷备部署?缓存服务器有没有使用多节点部署,甚至多节点部署的方式是否与业务场景相匹配?各服务是否支持弹性扩容?
3、人员素质
在任何一个地方,人的因素永远是占第一位的。
不管你的需求文档多么明确,架构设计多么合理、可扩展性多么强,没有一个好的执行团队,照样白搭。
目前,国内IT环境相对来说比较混乱,层层转包的事层出不穷,这就导致项目实施人员的素质参差不齐。
还真有些所谓的架构师,对于写入操作,不管TPS有多少,反正就是直接往数据库里怼。真是艺高人胆大。
当然,对于项目要求,首先项目实施人员还真不一定能够理解透彻,而理解了又不一定愿意做到,即使愿意做到,有时候又不一定真的能做到。
上面列的那么多技术栈,有多少架构师能全部搞懂。
最重要的,有时候,或者说大部分情况下,项目实施方与甲方的屁股并不完全是做在一起的。甲方爸爸是希望产品做好、做精,而项目实施方则巴不得项目马上结项,拿到钱拍拍屁股走人。
这两种心态的不同,往往决定了项目的最终结果。
4、有效监控
最后,你以为项目成功上线,就万事大吉了么?
不是的。
成功上线,只是万里长征走出了第一步,准确有效的监控,才是为项目保驾护航、安全航行的关键。
想像一下,如果一辆车只有方向盘,没有仪表盘,这车还怎么开啊。
所以,在项目设计之初,系统的高效监控有没有做通盘的思考?监控点的设置是否合理?出了问题能否做到事前准确告警、事中快速定位、事后高效应对?
如果一个系统,上面所有的点都考虑到了,那么恭喜你,你的项目至少成功了40%,剩下的,就是预算了。
其实,
做出一个支持高并发的架构不难,难的是在有限的预算下,怎么做出一个满足当前业务需求的高并发架构。
毕竟,每年的天猫双十一抢购也撑住了,不是么。
数据去重的N种写法
单挑力扣(LeetCode)SQL题:534. 游戏玩法分析 III(难度:中等)
单挑力扣(LeetCode)SQL题:1285. 找到连续区间的开始和结束数字(难度:中等)
单挑力扣(LeetCode)SQL题:1596. 每位顾客最经常订购的商品(难度:中等)
架构
文章转载自
跟强哥学SQL
,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
领墨值
有奖问卷
意见反馈
客服小墨