1 明確系統(tǒng)邊界
2 崩潰疑云
3 應(yīng)用層設(shè)計(jì)
4 監(jiān)控平臺(tái)
5 多方協(xié)作
6 總結(jié)
成都核酸檢測(cè)系統(tǒng)“崩潰”事件,將東軟推至風(fēng)口浪尖,同時(shí)也在技術(shù)圈內(nèi)引發(fā)了廣泛的討論。
開(kāi)發(fā)一個(gè)不崩潰的核酸系統(tǒng)到底難不難 ?
這篇文章,勇哥想象自己是核酸系統(tǒng)架構(gòu)師,談?wù)勛约簩?duì)核酸系統(tǒng)的理解。
1 明確系統(tǒng)邊界
作為架構(gòu)師,首先需要明確系統(tǒng)邊界 。
核酸檢測(cè)核心流程:
醫(yī)護(hù)人員打開(kāi)核酸系統(tǒng)的手機(jī)端應(yīng)用,錄入試管編碼 ;
醫(yī)護(hù)人員掃描居民的健康碼;
醫(yī)護(hù)人員采集咽拭子標(biāo)本 ;
檢測(cè)結(jié)束之后,醫(yī)護(hù)人員將檢測(cè)標(biāo)本送至檢測(cè)中心;
檢測(cè)中心將檢測(cè)結(jié)果提交到核酸系統(tǒng),然后核酸系統(tǒng)會(huì)將核酸結(jié)果同步到健康碼系統(tǒng)。
成都核酸系統(tǒng)崩潰時(shí),流程阻塞在步驟一和二。
本文里我們提到的核酸系統(tǒng),也就是指醫(yī)護(hù)人員使用的系統(tǒng) 。而核酸檢測(cè)系統(tǒng)會(huì)將檢測(cè)結(jié)果同步到健康碼系統(tǒng) , 健康碼系統(tǒng)面向的是大眾居民 , 是高頻場(chǎng)景。
對(duì)于成都市居民來(lái)講,與他們關(guān)系最為密切的就是兩套系統(tǒng)。
核酸系統(tǒng) :核酸醫(yī)護(hù)人員使用 , 東軟負(fù)責(zé)開(kāi)發(fā)和維護(hù);
天府健康通 :廣大市民使用,騰訊研發(fā)和維護(hù)。
2 崩潰疑云
核酸系統(tǒng)軟件是屬于政府購(gòu)買 (TO G),市民使用 (TO C) 。
核酸系統(tǒng)是一個(gè)多方協(xié)作的系統(tǒng),它不僅直接和政府有關(guān)系,還涉及到多個(gè)廠商,一個(gè)系統(tǒng)工程背后,除了系統(tǒng)集成商之外,包括多個(gè)分包商 。比如西安的一碼通,曾集結(jié)了電信、東軟、美林和安恒等公司。
正因?yàn)檫@套系統(tǒng)涉及面之廣,當(dāng)成都核酸系統(tǒng)崩潰時(shí),我們需要冷靜下來(lái),縷清條理。
我們先從基礎(chǔ)設(shè)施層 的維度來(lái)分析,很多互聯(lián)網(wǎng)公司會(huì)將自己的服務(wù)部署在阿里云或者騰訊云,部署方便,也可以動(dòng)態(tài)擴(kuò)容。
那么核酸系統(tǒng)部署在哪里呢?假如核酸系統(tǒng)是以 SAAS 形態(tài)部署(東軟自建機(jī)房,或者東軟采用阿里云/騰訊云服務(wù)),那么成都核酸崩潰事件,東軟必然脫不了干系 。但東軟隨后硬氣的發(fā)了公告:
系統(tǒng)上線后,發(fā)現(xiàn)有響應(yīng)延遲、卡頓等現(xiàn)象,東軟集團(tuán)第一時(shí)間組織專家組和堅(jiān)守現(xiàn)場(chǎng)的公司技術(shù)人員,與成都市相關(guān)部門(mén)一起,排查事故原因,強(qiáng)化安全防護(hù),保證系統(tǒng)運(yùn)行。據(jù)技術(shù)專家研判,目前出現(xiàn)的系統(tǒng)響應(yīng)延遲、卡頓等現(xiàn)象與核酸檢測(cè)系統(tǒng)軟件無(wú)關(guān)。 9月3日零點(diǎn)左右,在進(jìn)行網(wǎng)絡(luò)調(diào)整之后,系統(tǒng)運(yùn)行平穩(wěn)順暢,效率得到極大提升,當(dāng)日共完成1200萬(wàn)樣本采集量。
假如核酸系統(tǒng)沒(méi)有問(wèn)題,會(huì)不會(huì)是網(wǎng)絡(luò)問(wèn)題呢?成都核酸系統(tǒng)奔潰時(shí),醫(yī)護(hù)人員以為是信號(hào)問(wèn)題,紛紛舉起手中的手機(jī),捕捉信號(hào),而排隊(duì)的市民卻可以刷抖音,頭條。
9月3日下午4點(diǎn)32分,四川省通信管理局 發(fā)文稱,“全市通信網(wǎng)絡(luò)運(yùn)行平穩(wěn),各核酸檢測(cè)點(diǎn)移動(dòng)網(wǎng)絡(luò)覆蓋良好,沒(méi)有出現(xiàn)網(wǎng)絡(luò)擁塞和故障。”
我們基本可以做出判斷:成都核酸系統(tǒng)部署在政務(wù)云 ,也就是政府部門(mén)提供基礎(chǔ)設(shè)施 ,應(yīng)用開(kāi)發(fā)商將軟件部署在政務(wù)云機(jī)房里 。
核算系統(tǒng)崩潰的可能原因:
政務(wù)云機(jī)房問(wèn)題
網(wǎng)絡(luò)問(wèn)題(負(fù)載均衡,帶寬,防火墻), 或者機(jī)房服務(wù)器出現(xiàn)故障;
核酸系統(tǒng)軟件問(wèn)題
核酸檢測(cè)軟件確實(shí)承載能力有限,軟件崩潰了。
3 應(yīng)用層設(shè)計(jì)
核酸系統(tǒng)是屬于高并發(fā)應(yīng)用嗎?這里我們做個(gè)估算:
人口估算法 :
據(jù)統(tǒng)計(jì)成都市人口2千萬(wàn)多人,假設(shè)集中在6小時(shí)內(nèi)做核酸,平均每小時(shí)支持的并發(fā)人數(shù)是3531666。每秒支持的并發(fā)約為1000?;跈z測(cè)人員的集中度不均衡的因素,假設(shè)高峰期是平均并發(fā)的2-3倍。則每秒并發(fā)“核酸登記”2000-3000左右。
檢測(cè)點(diǎn)估算法 :
今年5月份,上??挂咂陂g一共有 15000 + 核酸檢測(cè)點(diǎn) ,我們假設(shè)成都有和上海一樣多的核酸檢測(cè)點(diǎn)。市民在排隊(duì)核酸檢測(cè)時(shí),核酸醫(yī)護(hù)人員掃居民健康碼的時(shí)間間隔在10秒到15秒之間,每個(gè)核酸檢測(cè)點(diǎn)并行兩排檢測(cè)通道,那么每秒并發(fā)“核酸登記”也是在 2000-3000 左右。
通過(guò)兩種估算方法,我們發(fā)現(xiàn):核酸系統(tǒng)的請(qǐng)求并發(fā)度并不高 。
雖然并發(fā)度不高,但每天的業(yè)務(wù)數(shù)據(jù)條數(shù)量級(jí)較高 ,按照東軟的公告,每天可以完成1200萬(wàn)核酸樣本采集。
假設(shè)核酸檢測(cè)記錄一天1000萬(wàn)條數(shù)據(jù),一周就有7000萬(wàn)條,1個(gè)月就能達(dá)到3億條數(shù)據(jù)。那么勢(shì)必要使用分庫(kù)分表 。
醫(yī)護(hù)人員掃市民的健康碼 ,核酸登記的請(qǐng)求發(fā)送到 api 網(wǎng)關(guān) , api 網(wǎng)關(guān)將請(qǐng)求轉(zhuǎn)發(fā)到核酸系統(tǒng);
緩存存儲(chǔ)檢測(cè)點(diǎn),檢測(cè)批次等基礎(chǔ)信息,核酸系統(tǒng)通過(guò)緩存判斷業(yè)務(wù)請(qǐng)求是否合法,若合法,則組裝真正的入庫(kù)的數(shù)據(jù);
核酸系統(tǒng)調(diào)用分庫(kù)分表中間件將數(shù)據(jù)插入到數(shù)據(jù)庫(kù) 。
看起來(lái),核酸系統(tǒng)的架構(gòu)設(shè)計(jì)還是比較簡(jiǎn)單清晰的,核心點(diǎn)在于用分庫(kù)分表硬擋高流量訪問(wèn) 。
但現(xiàn)在這種模式就完美了嗎 ?
我們舉湖北鄂通碼舉例,核酸登記后,健康碼在 10~20 分鐘狀態(tài)會(huì)修改成綠色并標(biāo)識(shí)成:核酸已檢測(cè) ,也就是核酸已檢測(cè)的狀態(tài)會(huì)異步同步到健康碼服務(wù)。
我們不由得想到了消息隊(duì)列 MQ ,MQ 最大的優(yōu)勢(shì)在于:異步 和解耦 ,MQ 模式還有一個(gè)優(yōu)點(diǎn):當(dāng)流量激增時(shí),消息隊(duì)列還可以起到消峰 的作用。
MQ 方案里,核心流程如下:
醫(yī)護(hù)人員掃市民的健康碼 ,核酸登記的請(qǐng)求發(fā)送到 api 網(wǎng)關(guān) ,api 網(wǎng)關(guān)將請(qǐng)求轉(zhuǎn)發(fā)到核酸系統(tǒng);
緩存存儲(chǔ)檢測(cè)點(diǎn),檢測(cè)批次等基礎(chǔ)信息,核酸系統(tǒng)通過(guò)緩存判斷業(yè)務(wù)請(qǐng)求是否合法,若合法,則組裝真正的入庫(kù)的數(shù)據(jù);
核酸系統(tǒng)將檢測(cè)記錄發(fā)送到消息隊(duì)列,返回給前端響應(yīng)成功;
消費(fèi)者接收消息后調(diào)用分庫(kù)分表中間件將數(shù)據(jù)插入到數(shù)據(jù)庫(kù) ;
消費(fèi)者接收消息后同步狀態(tài)到健康碼服務(wù)。
在架構(gòu)設(shè)計(jì)中,并不是引入了組件就完事了,更需要考慮如何精準(zhǔn)的使用組件。
比如,使用消息隊(duì)列 kafka ,如何保證不丟消息,如何保證高可用。使用了分庫(kù)分表中間件,是不是需要考慮數(shù)據(jù)異構(gòu),以及冷熱分離等。
4 監(jiān)控平臺(tái)
我們經(jīng)常講:研發(fā)人員有兩只眼睛,一只是監(jiān)控平臺(tái),另一只是日志平臺(tái)。
在對(duì)性能和高可用講究的場(chǎng)景里,監(jiān)控平臺(tái)的重要性再怎么強(qiáng)調(diào)也不過(guò)分。
▍一、基礎(chǔ)運(yùn)維監(jiān)控
基礎(chǔ)運(yùn)維監(jiān)控負(fù)責(zé)監(jiān)控服務(wù)器的 CPU、網(wǎng)絡(luò)、磁盤(pán)、負(fù)載、網(wǎng)絡(luò)流量、TCP 連接等指標(biāo),并且通過(guò)設(shè)定報(bào)警閾值實(shí)時(shí)通知指定負(fù)責(zé)人。
基礎(chǔ)運(yùn)維監(jiān)控
我們?cè)?strong>基礎(chǔ)設(shè)施層 這一節(jié)里提到:
核酸系統(tǒng)崩潰時(shí),成都政務(wù)云不能提供暢通的核酸檢測(cè)服務(wù) , 可能原因之一是政務(wù)云機(jī)房問(wèn)題 。
當(dāng)政務(wù)云機(jī)房出現(xiàn)問(wèn)題時(shí),基礎(chǔ)運(yùn)維監(jiān)控可以幫助運(yùn)維人員更快的發(fā)現(xiàn)問(wèn)題,并制定解決策略。
▍二、應(yīng)用系統(tǒng)監(jiān)控
應(yīng)用系統(tǒng)監(jiān)控是研發(fā)人員接觸最多的一種監(jiān)控類型,系統(tǒng)出現(xiàn)瓶頸的時(shí)候,應(yīng)用系統(tǒng)監(jiān)控會(huì)有最直觀的體現(xiàn)。
筆者一般會(huì)關(guān)注性能監(jiān)控,方法可用性監(jiān)控,方法調(diào)用次數(shù)監(jiān)控,JVM 監(jiān)控這四大類。
性能監(jiān)控
性能監(jiān)控
性能監(jiān)控不同時(shí)間段性能分布,實(shí)時(shí)統(tǒng)計(jì) TP99、TP999 、AVG 、MAX 等維度指標(biāo),這也是性能調(diào)優(yōu)的重點(diǎn)關(guān)注對(duì)象。
方法調(diào)用次數(shù)監(jiān)控
方法調(diào)用次數(shù)監(jiān)控可以按照機(jī)器,時(shí)間段分析接口或者方法的調(diào)用次數(shù),當(dāng)大流量來(lái)襲時(shí),可以清晰的看到請(qǐng)求的波動(dòng)。
方法可用性監(jiān)控
方法可用率監(jiān)控
方法可用性監(jiān)控是指:當(dāng)接口被調(diào)用或者方法被執(zhí)行,可能返回異?;蛘叻椒▓?zhí)行拋異常,分析該方法是否調(diào)用正常,當(dāng)系統(tǒng)出現(xiàn)嚴(yán)重問(wèn)題時(shí),方法可用率是一個(gè)重要的參考指標(biāo)。
JVM 監(jiān)控
JVM 監(jiān)控
JVM 監(jiān)控是 JAVA 工程師特別關(guān)注的監(jiān)控類型,我們會(huì)重點(diǎn)關(guān)注:堆內(nèi)存,GC 頻率 ,線程數(shù)等等。
▍三、業(yè)務(wù)監(jiān)控
業(yè)務(wù)監(jiān)控功能是從業(yè)務(wù)角度出發(fā),各個(gè)應(yīng)用系統(tǒng)需要從業(yè)務(wù)層面進(jìn)行哪些監(jiān)控,以及提供怎樣的業(yè)務(wù)層面的監(jiān)控功能支持業(yè)務(wù)相關(guān)的應(yīng)用系統(tǒng)。
具體就是對(duì)業(yè)務(wù)數(shù)據(jù),業(yè)務(wù)功能進(jìn)行監(jiān)控,實(shí)時(shí)收集業(yè)務(wù)流程的數(shù)據(jù),并根據(jù)設(shè)置的策略對(duì)業(yè)務(wù)流程中不符合預(yù)期的部分進(jìn)行預(yù)警和報(bào)警,并對(duì)收集到業(yè)務(wù)監(jiān)控?cái)?shù)據(jù)進(jìn)行集中統(tǒng)一的存儲(chǔ)和各種方式進(jìn)行展示。
比如訂單系統(tǒng)中有一個(gè)定時(shí)結(jié)算的服務(wù),每?jī)煞昼妶?zhí)行一次。我們可以在定時(shí)任務(wù) JOB 中添加埋點(diǎn),并配置業(yè)務(wù)監(jiān)控,假如十分鐘該定時(shí)任務(wù)沒(méi)有執(zhí)行,則發(fā)送郵件,短信給相關(guān)負(fù)責(zé)人。
5 多方協(xié)作
很多同學(xué)都指責(zé)東軟失職:“核酸系統(tǒng)在倉(cāng)促上線之后,到底有沒(méi)有進(jìn)行完備的性能測(cè)試 ”。
確實(shí),性能測(cè)試非常重要 ,通過(guò)壓測(cè)可以知道系統(tǒng)的極限值是多大,當(dāng)系統(tǒng)承受不住訪問(wèn)時(shí),就會(huì)暴露出瓶頸,如服務(wù)器 CPU、數(shù)據(jù)庫(kù)、內(nèi)存、響應(yīng)速度等,從而促使研發(fā)團(tuán)隊(duì)進(jìn)行再優(yōu)化。
這里我們先按捺指責(zé)的沖動(dòng),核酸系統(tǒng)是一個(gè)多方協(xié)作的系統(tǒng),它不僅直接和政府有關(guān)系,還涉及到多個(gè)廠商,一個(gè)系統(tǒng)工程背后,除了系統(tǒng)集成商之外,包括多個(gè)分包商 。
6 總結(jié)
假如我是核酸系統(tǒng)的架構(gòu)師。
我會(huì)使用消息隊(duì)列 + 分庫(kù)分表來(lái)最大程度提升系統(tǒng)的吞吐量。
我會(huì)在使用消息隊(duì)列中間件的時(shí)候,重點(diǎn)關(guān)注如何不丟失消息,消息系統(tǒng)如何做到高可用。
我會(huì)使用分庫(kù)分表中間件時(shí),重點(diǎn)關(guān)注冷熱分離,如何將數(shù)據(jù)異構(gòu)到數(shù)據(jù)倉(cāng)庫(kù)。
我會(huì)在政務(wù)云部署監(jiān)控系統(tǒng),提供基礎(chǔ)運(yùn)維監(jiān)控,應(yīng)用系統(tǒng)監(jiān)控,業(yè)務(wù)監(jiān)控的能力,當(dāng)系統(tǒng)出現(xiàn)問(wèn)題時(shí),團(tuán)隊(duì)可以以最快的速度發(fā)現(xiàn)問(wèn)題,并解決問(wèn)題。
可是 ,核酸系統(tǒng)是一個(gè)多方協(xié)作的系統(tǒng),我們不僅需要和政府溝通,也需要和眾多三方廠商協(xié)作。
也許,當(dāng)我提出需要更多服務(wù)器預(yù)算時(shí),政府部門(mén)的預(yù)算并不充足,或者就算充足了,走流程也要一個(gè)月的時(shí)間;
也許,當(dāng)我提出需要部署監(jiān)控系統(tǒng),公司會(huì)以人力不足為由或者政務(wù)云硬件資源不足,否定我的方案;
也許,當(dāng)我聯(lián)調(diào)時(shí)發(fā)現(xiàn)一個(gè)三方接口速度慢,排查起來(lái)(溝通成本)需要 4-7 天時(shí),我也不得不沉浸在瑣事中;
直到最后,當(dāng)系統(tǒng)崩潰時(shí),我也只能嘆息到:“尊重技術(shù),尊重專業(yè) ”。
-
JAVA
+關(guān)注
關(guān)注
19文章
2967瀏覽量
104762 -
TCP
+關(guān)注
關(guān)注
8文章
1353瀏覽量
79078 -
JVM
+關(guān)注
關(guān)注
0文章
158瀏覽量
12228 -
解耦
+關(guān)注
關(guān)注
0文章
40瀏覽量
11898 -
kafka
+關(guān)注
關(guān)注
0文章
51瀏覽量
5222
原文標(biāo)題:假如我是核酸系統(tǒng)架構(gòu)師,我會(huì)...
文章出處:【微信號(hào):芋道源碼,微信公眾號(hào):芋道源碼】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論