暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

据说成都健康码宕机了,谈谈设计一款牛逼的高并发架构有多难

跟强哥学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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论