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