前言
成都眼刃,2022年9月第一天,封小區(qū)了摇肌,核酸檢測在各個(gè)小區(qū)內(nèi)進(jìn)行擂红。于是,下午5點(diǎn)過围小,我們小區(qū)的檢查開始了昵骤。與以前一樣树碱,通過掃健康碼進(jìn)行登記,但是涉茧,登記系統(tǒng)很慢……
社區(qū)工作人員說赴恨,全市大概有一萬多小區(qū)同時(shí)開始。我們小區(qū)人不多伴栓,只開了一條線伦连。
粗略估計(jì)一下,算上大的小區(qū)可能有多條線钳垮,全市估計(jì)不會(huì)超過五萬條線并行惑淳,而這些都是人手工操作,按照50,000 TPS估計(jì)系統(tǒng)負(fù)載應(yīng)該合理饺窿。
有人在網(wǎng)上“爆料”:這個(gè)是XXX公司做的歧焦,用了很寬的表、沒有分表分庫肚医、Load Balance 方案問題绢馍,或者其它各種不合理的設(shè)計(jì),或者還有其它非技術(shù)因素肠套。本文只是基因我自身的技術(shù)背景舰涌,對這種應(yīng)用場景給出一種技術(shù)方案。
范圍
本方案基于邊緣計(jì)算你稚。
本方案沒有討論拼肌肉的技術(shù)方案瓷耙。
架構(gòu)設(shè)計(jì)
方案基于邊緣計(jì)算,在移動(dòng)邊緣部署邊緣應(yīng)用刁赖,負(fù)責(zé)收集其所覆蓋的基站下的用戶數(shù)據(jù)搁痛,也就是核酸檢測人員(大白)終端所需要的功能,主要是被檢查人員信息上報(bào)宇弛;另一方面鸡典,核心應(yīng)用部署于Internet(專網(wǎng)和電信核心網(wǎng)也可行),負(fù)責(zé)收集來自邊緣應(yīng)用的數(shù)據(jù)枪芒。
邊緣應(yīng)用
邊緣應(yīng)用主要包含以下功能:
· 收集檢查人員終端所提交登記數(shù)據(jù):接收檢查人員終端發(fā)送的登記數(shù)據(jù)彻况,并存入本地?cái)?shù)據(jù)庫。
· 提交登記數(shù)據(jù)到核心應(yīng)用:定期病苗、或事件觸發(fā)將本地?cái)?shù)據(jù)提交到核心應(yīng)用疗垛。此功能不是數(shù)據(jù)同步,或只是單向同步硫朦,因?yàn)檫吘墤?yīng)用保存的都可以看作是臨時(shí)數(shù)據(jù)贷腕,并不需要將核心應(yīng)用數(shù)據(jù)同步會(huì)邊緣應(yīng)用。
· 查詢該終端登記信息—我看到檢查人員每次都獲取列表,確認(rèn)是否登記成功:該功能可能需要從核心應(yīng)用讀取數(shù)據(jù)泽裳。
核心應(yīng)用
核心應(yīng)用主要包含以下功能:
· 收集邊緣應(yīng)用發(fā)送數(shù)據(jù):
· 返回全量數(shù)據(jù)或終端請求范圍數(shù)據(jù)瞒斩。
· 為后續(xù)的實(shí)驗(yàn)室檢測提供數(shù)據(jù)。
數(shù)據(jù)提交
提交觸發(fā)
數(shù)據(jù)提交觸發(fā)有以下方案:
定時(shí)
定時(shí)涮总、批量將邊緣應(yīng)用數(shù)據(jù)發(fā)送至核心應(yīng)用胸囱。 簡單 當(dāng)各邊緣應(yīng)用同時(shí)發(fā)起提交時(shí),核心應(yīng)用會(huì)有性能壓力瀑梗。
事件觸發(fā)
當(dāng)個(gè)發(fā)生某個(gè)事件時(shí)觸發(fā)烹笔,如:登記滿100條數(shù)據(jù)、人工觸發(fā)抛丽。 發(fā)生各邊緣并發(fā)概率降低谤职。 人工觸發(fā)會(huì)引入新功能,而且會(huì)迷惑最終用戶(檢測人員)亿鲜。并發(fā)風(fēng)險(xiǎn)仍然存在允蜈。
令牌式
可以是以上兩種的結(jié)合,發(fā)起數(shù)據(jù)發(fā)送時(shí)蒿柳,先向核心應(yīng)用請求令牌饶套,獲取令牌后發(fā)送。 避免了并發(fā)風(fēng)險(xiǎn)垒探。 復(fù)雜妓蛮。有長期獲取不到令牌的情況。
CAP分析
本方案可以看作是分布式系統(tǒng)叛复,那么就需要對CAP (Consistence仔引、Availability和Partition Tolerance)進(jìn)行討論扔仓。各終端之間并沒有數(shù)據(jù)交疊褐奥,所以,只涉及邊緣應(yīng)用與核心應(yīng)用的問題翘簇。
· 一致性(Consistence):數(shù)據(jù)是單向從邊緣應(yīng)用發(fā)送到核心應(yīng)用撬码,當(dāng)終端嘗試獲取本終端(應(yīng)該不會(huì)有獲取其它終端登記數(shù)據(jù)的需求)全量數(shù)據(jù)時(shí),核心應(yīng)用返回的可能缺少還未同步數(shù)據(jù)版保;而邊緣應(yīng)用可能未包含歷史數(shù)據(jù)呜笑。
·? 可用性(Availability):終端寫操作在邊緣應(yīng)用,邊緣應(yīng)用需要保證可用性彻犁,這取決定于邊緣計(jì)算本身的部署方案叫胁;同樣,讀操作依賴于核心應(yīng)用部署方案汞幢。核酸采集之后驼鹅,需要人工將樣本送取檢驗(yàn),使用登記數(shù)據(jù)已經(jīng)很晚了,所以输钩,基本不存在可以用性問題豺型。
· 分區(qū)容錯(cuò)性(Partition Tolerance):以邊緣應(yīng)用數(shù)據(jù)增量覆蓋核心應(yīng)用數(shù)據(jù),基本無挑戰(zhàn)买乃。
后記
這只是一個(gè)方案的討論姻氨,其實(shí),50,000TPS的系統(tǒng)通過常規(guī)方案剪验,或者在現(xiàn)有架構(gòu)下就容易達(dá)到肴焊,邊緣計(jì)算方案可能是“高射炮打蚊子”了。
邊緣計(jì)算常常會(huì)強(qiáng)調(diào)可以實(shí)現(xiàn)低時(shí)延功戚,而這里卻是對一個(gè)“長時(shí)延”的應(yīng)用抖韩,也很有意思。
今天疫铜,很多小朋友等著測核酸茂浮,因?yàn)閷W(xué)校要求每天都要有檢測報(bào)告。
11點(diǎn)后壳咕,核酸檢測慢慢停了席揽,明天繼續(xù),討論也在繼續(xù)谓厘,且讓鍋飛一會(huì)兒幌羞。