如何设计高稳定性、高可用的核酸系统?

1年前 (2022-11-20)阅读2回复1
大清
大清
  • 总版主
  • 注册排名9
  • 经验值280625
  • 级别网站编辑
  • 主题56125
  • 回复0
楼主

成都核酸检测系统“瓦解”事务,将东软推至风口浪尖,同时也在手艺圈内引发了普遍的讨论。

开发一个不瓦解的核酸系统到底难不难?

如何设计高稳定性、高可用的核酸系统?

那篇文章,勇哥想象本身是核酸系统架构师,谈谈本身对核酸系统的理解。

一、明白系统鸿沟

做为架构师,起首需要明白系统鸿沟。

核酸检测核心流程:

医护人员翻开核酸系统的手机端利用,录进试管编码 ;

医护人员扫描居民的安康码;

医护人员摘集咽拭子标本;

检测完毕之后,医护人员将检测标本送至检测中心;

检测中心将检测成果提交到核酸系统,然后核酸系统会将核酸成果同步到安康码系统。

成都核酸系统瓦解时,流程阻塞在步调一和二。

本文里我们提到的核酸系统,也就是指医护人员利用的系统。而核酸检测系统会将检测成果同步到安康码系统 , 安康码系统面向的是群众居民 , 是高频场景。

关于成都会居民来讲,与他们关系最为密切的就是两套系统。

核酸系统:核酸医护人员利用 , 东软负责开发和庇护;

天府安康通:广阔市民利用,腾讯研发和庇护。

二、瓦解疑云

核酸系统软件是属于政府购置 (TO G),市民利用 (TO C) 。

核酸系统是一个多方协做的系统,它不只间接和政府有关系,还涉及到多个厂商,一个系统工程背后,除了系统集成商之外,包罗多个分包商。好比西安的一码通,曾集结了电信、东软、美林和安恒等公司。

正因为那套系统涉及面之广,当成都核酸系统瓦解时,我们需要沉着下来,缕清层次。

我们先从根底设备层的维度来阐发,良多互联网公司会将本身的办事摆设在阿里云或者腾讯云,摆设便利,也能够动态扩容。

那么核酸系统摆设在哪里呢?假设核酸系统是以 SAAS 形态摆设(东软自建机房,或者东软摘用阿里云/腾讯云办事),那么成都核酸瓦解事务,东软一定脱不了相干 。但东软随后硬气的发了通知布告:

系统上线后,发现有响应延迟、卡顿等现象,东软集团第一时间组织专家组和坚守现场的公司手艺人员,与成都会相关部分一路,排查变乱原因,强化平安防护,包管系统运行。据手艺专家研判,目前呈现的系统响应延迟、卡顿等现象与核酸检测系统软件无关。9月3日零点摆布,在停止收集调整之后,系统运行平稳顺畅,效率得到极大提拔,当日共完成1200万样本摘集量。

假设核酸系统没有问题,会不会是收集问题呢?

成都核酸系统奔溃时,医护人员认为是信号问题,纷繁举起手中的手机,捕获信号,而列队的市民却能够刷抖音,头条。

9月3日下战书4点32分,四川省通信治理局发文称,“全市通信收集运行平稳,各核酸检测点挪动收集笼盖优良,没有呈现收集拥塞和毛病。”

我们根本能够做出揣度:成都核酸系统摆设在政务云,也就是政府部分供给根底设备 ,利用开发商将软件摆设在政务云机房里 。

核算系统瓦解的可能原因:

政务云机房问题

收集问题(负载平衡,带宽,防火墙), 或者机房办事器呈现毛病。

核酸系统软件问题

核酸检测软件确实承载才能有限,软件瓦解了。

三、利用层设想

核酸系统是属于高并发利用吗?那里我们做个预算:

生齿预算法

据统计成都会生齿2万万多人,假设集中在6小时内做核酸,均匀每小时撑持的并发人数是3531666。每秒撑持的并发约为1000。基于检测人员的集中度不平衡的因素,假设顶峰期是均匀并发的2-3倍。则每秒并发“核酸注销”2000-3000摆布。

检测点预算法

本年5月份,上海抗疫期间一共有 15000 + 核酸检测点 ,我们假设成都有和上海一样多的核酸检测点。市民在列队核酸检测时,核酸医护人员扫居民安康码的时间间隔在10秒到15秒之间,每个核酸检测点并行两排检测通道,那么每秒并发“核酸注销”也是在 2000-3000 摆布。

通过两种预算办法,我们发现:核酸系统的恳求并发度其实不高。

固然并发度不高,但天天的营业数据条数量级较高 ,根据东软的通知布告,天天能够完成1200万核酸样本摘集。

假设核酸检测笔录一天1000万条数据,一周就有7000万条,1个月就能到达3亿条数据。那么势需要利用分库分表。

医护人员扫市民的安康码 ,核酸注销的恳求发送到 api 网关 , api 网关将恳求转发到核酸系统;

缓存存储检测点,检测批次等根底信息,核酸系统通过缓存揣度营业恳求能否合法,若合法,则组拆实正的进库的数据;

核酸系统挪用分库分表中间件将数据插进到数据库。

看起来,核酸系统的架构设想仍是比力简单清晰的,核心点在于用分库分表硬挡高流量拜候。

但如今那种形式就完美了吗 ?

我们举湖北鄂通码举例,核酸注销后,安康码在 10~20 分钟形态会修改成绿色并标识成:核酸已检测,也就是核酸已检测的形态会异步同步到安康码办事。

我们忍不住想到了动静队列 MQ ,MQ 更大的优势在于:异步息争耦,MQ 形式还有一个长处:当流量激增时,动静队列还能够起到消峰的感化。

MQ 计划里,核心流程如下:

医护人员扫市民的安康码 ,核酸注销的恳求发送到 api 网关 ,api 网关将恳求转发到核酸系统;

缓存存储检测点,检测批次等根底信息,核酸系统通过缓存揣度营业恳求能否合法,若合法,则组拆实正的进库的数据;

核酸系统将检测笔录发送到动静队列,返回给前端响应胜利;

消费者领受动静后挪用分库分表中间件将数据插进到数据库 ;

消费者领受动静后同步形态到安康码办事。

在架构设想中,并非引进了组件就完事了,更需要考虑若何精准的利用组件。

好比,利用动静队列 kafka ,若何包管不丢动静,若何包管高可用。利用了分库分表中间件,是不是需要考虑数据异构,以及冷热别离等。

四、监控平台

我们经常讲:研发人员有两只眼睛,一只是监控平台,另一只是日记平台。

在对性能和高可用讲究的场景里,监控平台的重要性再怎么强调也不外分。

1、根底运维监控

根底运维监控负责监控办事器的 CPU、收集、磁盘、负载、收集流量、TCP 毗连等目标,而且通过设定报警阈值实时通知指定负责人。

根底运维监控

我们在根底设备层那一节里提到:

核酸系统瓦解时,成都政务云不克不及供给通顺的核酸检测办事 , 可能原因之一是政务云机房问题。

当政务云机房呈现问题时,根底运维监控能够搀扶帮助运维人员更快的发现问题,并造定处理战略。

2、利用系统监控

利用系统监控是研发人员接触最多的一种监控类型,系统呈现瓶颈的时候,利用系统监控会有最曲看的表现。

笔者一般会存眷性能监控,办法可用性监控,办法挪用次数监控,JVM 监控那四大类。

性能监控

性能监控

性能监控差别时间段性能散布,实时统计 TP99、TP999 、AVG 、MAX 等维度目标,那也是性能调优的重点存眷对象。

办法挪用次数监控

办法挪用次数监控能够根据机器,时间段阐发接口或者办法的挪用次数,当大流量来袭时,能够清晰的看到恳求的颠簸。

办法可用性监控

办法可用率监控

办法可用性监控是指:当接口被挪用或者办法被施行,可能返回反常或者办法施行抛反常,阐发该办法能否挪用一般,当系统呈现严峻问题时,办法可用率是一个重要的参考目标。

JVM 监控

JVM 监控

JVM 监控是 JAVA 工程师特殊存眷的监控类型,我们会重点存眷:堆内存,GC 频次 ,线程数等等。

3、营业监控

营业监控功用是从营业角度动身,各个利用系统需要从营业层面停止哪些监控,以及供给如何的营业层面的监控功用撑持营业相关的利用系统。

详细就是对营业数据,营业功用停止监控,实时搜集营业流程的数据,并根据设置的战略对营业流程中不契合预期的部门停止预警和报警,并对搜集到营业监控数据停止集中同一的存储和各类体例停止展现。

好比订单系统中有一个按时结算的办事,每两分钟施行一次。我们能够在按时使命 JOB 中添加埋点,并设置装备摆设营业监控,假设非常钟该按时使命没有施行,则发送邮件,短信给相关负责人。

五、多方协做

良多同窗都责备东软渎职:“核酸系统在仓皇上线之后,到底有没有停止齐全的性能测试 ”。

确实,性能测试十分重要,通过压测能够晓得系统的极限值是多大,当系统承担不住拜候时,就会表露出瓶颈,如办事器 CPU、数据库、内存、响应速度等,从而促使研发团队停止再优化。

那里我们先抑制责备的激动,核酸系统是一个多方协做的系统,它不只间接和政府有关系,还涉及到多个厂商,一个系统工程背后,除了系统集成商之外,包罗多个分包商。

《核酸检测系统瓦解,东软该不应背锅?》那篇文章提到:

原则上,监视治理部分要把所有厂商喊在一块协同做战。但没有顶层统筹的强压之下,厂商之间的沟通和协调很难达成。大大都情状之下的压测,各个厂商有点“各自为政”的意思。一般,软件厂商会本身测试本身,鲜少几家结合起来检验。“差别厂商坐在一路的时候,各人都觉得本身没有问题,城市觉得是他人的问题。理由也会一致,我们的系统在此外处所跑过,没出岔子"。以至应对那一场面,各家的心思都极为微妙。“每个厂家在系统上的投进都是一笔不菲的开收,在应急形态之下,假设上面指导没亮相,也没明白是公益性量仍是有偿的付出,厂家响应抉择也是隆重的。” 因而大大都情状之下的压测,各个厂商有点“各自为政”的意思。一般,软件厂商会本身测试本身,鲜少几家结合起来压测。

那篇文章的一个看点,“那是手艺层面之外,一个城市应急预案的治理才能问题。” 我深认为然。

六、总结

假设我是核酸系统的架构师。。。。

我会利用动静队列 + 分库分表来更大程度提拔系统的吞吐量。

我会在利用动静队列中间件的时候,重点存眷若何不丧失动静,动静系统若何做到高可用。

我会利用分库分表中间件时,重点存眷冷热别离,若何将数据异构到数据仓库。

我会在政务云摆设监控系统,供给根底运维监控,利用系统监控,营业监控的才能,当系统呈现问题时,团队能够以最快的速度发现问题,并处理问题。

可是,核酸系统是一个多方协做的系统,我们不只需要和政府沟通,也需要和浩瀚三方厂商协做。

也许,当我提出需要更多办事器预算时,政府部分的预算其实不充沛,或者就算充沛了,走流程也要一个月的时间;

也许,当我提出需要摆设监控系统,公司会以人力不敷为由或者政务云硬件资本不敷,否认我的计划;

也许,当我联调时发现一个三方接口速度慢,排查起来(沟通成本)需要 4-7 天时,我也不能不沉浸在琐事中;

曲到最初,当系统瓦解时,我也只能感喟到:“尊重手艺,尊重专业”。

做者丨勇哥

来源丨公家号:勇哥java实战分享(ID:gh_639fe71cc2db)

dbaplus社群欢送广阔手艺人员投稿,投稿邮箱:editor@dbaplus.cn

关于我们

dbaplus社群是围绕Database、BigData、AIOps的企业级专业社群。资深大咖、手艺干货,天天精品原创文章推送,每周线上手艺分享,每月线下手艺沙龙,每季度GdevopsDAMS行业大会。

存眷公家号【dbaplus社群】,获取更多原创手艺文章和精选东西下载

0
回帖

如何设计高稳定性、高可用的核酸系统? 相关回复(1)

雾遮青山
雾遮青山
沙发
设计高稳定性、高度可用的核酸系统需要从多个角度考虑,包括但不限于选择高质量的原料和优化生产过程。
2个月前 (12-08 23:16)回复00
取消
载入表情清单……
载入颜色清单……
插入网络图片

取消确定

图片上传中
编辑器信息
提示信息