<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          做一個(gè)不崩潰的核酸系統(tǒng)有多難?

          共 2187字,需瀏覽 5分鐘

           ·

          2022-09-14 05:40

          每天2000萬(wàn),假設(shè)可以均攤到1小時(shí)(3600秒),那么每秒只有不到1萬(wàn)的并發(fā)量。
          假設(shè)數(shù)據(jù)量為10億,也就是1G條記錄;給每條記錄16字節(jié)存儲(chǔ)空間(身份證號(hào)編碼為二進(jìn)制,考慮地區(qū)/年份可以壓縮,48位整數(shù)足矣;哪怕不壓縮,64位整數(shù)也就是8個(gè)字節(jié)怎么都?jí)蛄耍皇O?個(gè)字節(jié)足夠記錄上次核酸檢測(cè)時(shí)間、紅黃碼狀態(tài)以及疫苗信息了)……換句話說(shuō),16G內(nèi)存就夠把全國(guó)所有數(shù)據(jù)放進(jìn)內(nèi)存;而我的PC機(jī)是32G內(nèi)存;對(duì)服務(wù)器來(lái)說(shuō),256G甚至1T內(nèi)存早在十幾年前已是平常。然后,還可以根據(jù)身份證號(hào)前3位或者前6位(地區(qū)碼)分散到多臺(tái)服務(wù)器。也就是根據(jù)你的身份證信息,哪個(gè)省的就自動(dòng)dispatch到對(duì)應(yīng)省份的服務(wù)器處理。這樣一臺(tái)服務(wù)器只需儲(chǔ)存1~2億條信息就足夠用了——20臺(tái)16G內(nèi)存的虛擬機(jī)實(shí)例,資源充足到足夠你肆意揮霍的。

          然后,系統(tǒng)啟動(dòng)過(guò)程是:

          1、從數(shù)據(jù)庫(kù)載入屬于本服務(wù)器的所有信息(2~4億條),這是個(gè)較為緩慢的過(guò)程。

          2、開(kāi)始提供服務(wù)。

          前面提到過(guò),哪怕按2000萬(wàn)次訪問(wèn)集中在1小時(shí)內(nèi)完成這個(gè)最苛刻的指標(biāo),每秒也只需服務(wù)5556人。

          按每人需要返回2K數(shù)據(jù)計(jì)算(1k都綽綽有余!除非你在服務(wù)器端生成二維碼),每秒數(shù)據(jù)量大約是12M不到。

          這個(gè)業(yè)務(wù)都是短鏈接。也就是可以認(rèn)為用戶查詢過(guò)程是:TCP握手,發(fā)送用戶身份證號(hào)(可本地識(shí)別),獲取數(shù)據(jù),斷開(kāi)連接。

          那么,這里實(shí)際上不太需要考慮什么C10k問(wèn)題(考慮也容易,Windows用完成端口Linux用epoll即可;其實(shí)可以直接用libevent寫出跨平臺(tái)程序的),一條100M的鏈路足夠了。

          按身份證號(hào)在數(shù)組中搜索信息,在搞好身份證號(hào)-下標(biāo)映射算法時(shí),效率是O(1);沒(méi)有搞好、用二分法查找,效率O(lnN),對(duì)10億人,至多30次搜索就能找到。對(duì)于內(nèi)存搜索,相對(duì)于網(wǎng)絡(luò)的蝸牛速率,這個(gè)延遲可以忽略不計(jì)。

          換句話說(shuō),不需要任何特殊技術(shù),20臺(tái)16G內(nèi)存的虛擬機(jī)實(shí)例,簡(jiǎn)單的在數(shù)組中訪問(wèn)下標(biāo)(或者二分查找)、封裝返回,以及100M對(duì)外服務(wù)總帶寬,就足以支持10億用戶的每小時(shí)2000萬(wàn)次查詢——性能大有盈余。

          換成1G總帶寬,一小時(shí)夠2億人用的——注意我說(shuō)的是總帶寬。如果20臺(tái)16G內(nèi)存的虛擬機(jī)實(shí)例各自擁有100M對(duì)外服務(wù)帶寬,它實(shí)際上已經(jīng)足夠支持全國(guó)使用了。

          當(dāng)然,實(shí)際不能這么簡(jiǎn)陋。萬(wàn)一虛擬機(jī)本身不夠穩(wěn)定、或者有人連二分查找程序都能寫崩潰呢……

          這時(shí)候,我們可以另外搞一些虛擬機(jī)作為備份;這些虛擬機(jī)可以使用現(xiàn)成的zookeeper管理,一個(gè)節(jié)點(diǎn)壞了,另一個(gè)節(jié)點(diǎn)可以馬上頂上……

          另外就是數(shù)據(jù)更新問(wèn)題。核酸數(shù)據(jù)沒(méi)有太高的實(shí)時(shí)性,檢查結(jié)果出來(lái)1小時(shí)后反映到查詢界面都不算晚。

          這可以在數(shù)據(jù)庫(kù)服務(wù)器上放置一個(gè)觸發(fā)器;數(shù)據(jù)有變動(dòng)就自動(dòng)通知外圍節(jié)點(diǎn),讓這些節(jié)點(diǎn)更新數(shù)據(jù)即可??傊?,全都是最最簡(jiǎn)單的基礎(chǔ)邏輯,找“會(huì)快排的程序員”都有點(diǎn)大材小用了。

          但是呢,我曾經(jīng)在類似的公司做過(guò)事,也知道對(duì)接的甲方的水平……

          所以,這樣一個(gè)“龐大”“復(fù)雜”“史無(wú)前例”的系統(tǒng),最終如果按我的設(shè)計(jì),頂天兩三千行C代碼以及兩三千行js代碼就交差了——你猜甲方會(huì)不會(huì)掏錢?

          不不不,這都不是甲方懂不懂的問(wèn)題了;而是,就這么幾行代碼,你想讓他們掏多少?他們?cè)趺聪蛏厦娼淮?/p> 所以啊,從一開(kāi)始就不能讓會(huì)寫程序的人摻和,不然三兩下搞完了,怎么看都不配拿幾十萬(wàn)……

          妙在這東西太簡(jiǎn)單,你就找一群棒槌,他們瞎湊合出來(lái)也能交差,至多多買點(diǎn)服務(wù)器、多出點(diǎn)事故——但只有這樣,才更能證明錢花得值,不是嗎?

          我當(dāng)年在這種公司上班,就被某同事打了小報(bào)告,說(shuō)我代碼行數(shù)太少,一萬(wàn)行寫完都不算多的功能,讓我連注釋一起300行給搞定了(注釋率50%,也就是只有150行有效代碼),使得公司受到了重大損失……得,兩不待見(jiàn),我還不辭職,等著干嘛呢?



          最近 熬夜給大家準(zhǔn)備了非常全的一套Java一線大廠面試題。全面覆蓋BATJ等一線互聯(lián)網(wǎng)公司的面試題及解答,由BAT一線互聯(lián)網(wǎng)公司大牛帶你深度剖析面試題背后的原理,不僅授你以魚(yú),更授你以漁,為你面試掃除一切障礙。


          5cbb052007778cfe22a4f43e94d06eae.webp

                



          資源,怎么領(lǐng)???


          掃二維碼,加我微信,備注:面試題


          一定要備注:面試題,不要急哦,工作忙完后就會(huì)通過(guò)!





          原文鏈接:zhihu.com/question/551451538/answer/2667817410 作者:invalid s
          瀏覽 51
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  久久免费无人区 | 日韩操逼毛片 | 日本欧美在线 | 九九色网址 | 苍井空免费视频 |