<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òu)設(shè)計

          共 1651字,需瀏覽 4分鐘

           ·

          2021-05-28 18:10

          釘釘作為一款業(yè)界熟知的企業(yè)級IM產(chǎn)品,數(shù)據(jù)量大、業(yè)務(wù)場景多,其架構(gòu)設(shè)計方案必然有著非常多值得借鑒的地方。比如對于高可用、安全性、數(shù)據(jù)一致性、差異化產(chǎn)品支持等關(guān)鍵設(shè)計,網(wǎng)上找到了一篇釘釘架構(gòu)師的分享一起來學(xué)習(xí)下。


          萬人群


          IM場景下萬人群的高流量支撐是非常有挑戰(zhàn)的事情,為解決這種問題,有的時候是從產(chǎn)品功能上做切割,比如微信群這種只允許500人,其技術(shù)挑戰(zhàn)就小了很多。但是釘釘是一個ToB的產(chǎn)品,很難控制群人數(shù),所以萬人群是需要支持的一個IM場景。


          那釘釘做了哪些優(yōu)化呢?


          1. 降低存儲擴散量


          最早的IM使用的是寫擴散模型,這種模式也是在推特和微博常用的一種方案,很多IM早期時間都是借鑒這種方式。在一個萬人群,如果是寫擴展,一條消息需要寫一萬次收件箱。而優(yōu)化成讀擴散模型后,一條消息只需要寫一次收件箱即可,擴散量降低到萬分之一。


          2. 智能限流


          當(dāng)總體消息量超過系統(tǒng)閾值后,智能限流機制可以根據(jù)當(dāng)時流量情況,對消息發(fā)送頻率高的群進(jìn)行限制,傳統(tǒng)的限流如果不智能的話,就不可以做精細(xì)化控制,誤殺程度高。


          3. 萬人群成員多級緩存


          萬人群聯(lián)系人列表也是一個性能點,在釘釘客戶端、服務(wù)端做群成員的多級緩存,提高了at列表、查看群成員等場景的體驗。同時可以降低對于DB的讀寫壓力,提高了系統(tǒng)穩(wěn)定性。


          4. 端到端體驗保障


          客戶端定期做極限壓測,在群消息大規(guī)模刷屏?xí)r,保障用戶體驗流暢不卡頓。


          歷史消息可回溯


          在ToB場景下,數(shù)據(jù)是企業(yè)的資產(chǎn),企業(yè)對于歷史消息有查詢需求,這和ToC產(chǎn)品的消息又不太一樣,比如微信的離線消息是存在客戶端的,清空就沒有了。


          如何做好龐大歷史消息的查詢需求呢?需要解決低流量且消息不遺漏。


          可以分成近時消息和歷史消息。近時消息推送到客戶端本地,歷史消息在服務(wù)端。用戶進(jìn)入會話后,先看客戶端本地是否有消息,如果沒有或者不完整,從服務(wù)端拉取差異消息。采用這種offset和推拉結(jié)合的方式,保證消息可以無遺漏的從服務(wù)端同步下來。


          消息存儲是典型的冷熱屬性存儲,用戶訪問的大部分消息都是最近的消息,釘釘自研了一套冷熱分離存儲架構(gòu),在冷庫使用低成本高壓縮率的存儲引擎,大幅降低存儲成本。


          為保障歷史消息的安全性,釘釘達(dá)到了金融級安全加密,釘釘使用全鏈路加密算法,不留死角,保證沒有任何人可以非法竊取歷史消息。


          場景化支持


          ToC IM產(chǎn)品場景化都比較通用,比如微信群,每個人使用起來都是相同的。但釘釘針對于不同場景體驗做了不同支持。


          這對于系統(tǒng)挑戰(zhàn)來源于兩方面:

          1. 系統(tǒng)模型必須擴展性強:可以靈活、快速的支持業(yè)務(wù)場景化需求;

          2. 在保障支持業(yè)務(wù)快速的情況下,保持IM核心系統(tǒng)高可用;


          以釘釘班級群為例,使用小程序開發(fā),可以不發(fā)版做bugfix,實現(xiàn)業(yè)務(wù)需求迭代。服務(wù)端切分為業(yè)務(wù)層和Im Core層,做到了新需求不改動Im Core層。迭代速度快,系統(tǒng)穩(wěn)定性強,達(dá)到了業(yè)務(wù)、技術(shù)共同迭代,互不影響的目的。


          單元化


          單元化可以滿足多層需求:

          1. 高可用:釘釘保障vip用戶的地域級別容災(zāi)能力,釘釘設(shè)計了一套基于單元化異地容災(zāi)方案,當(dāng)中心機房宕機,兩分鐘內(nèi)一鍵把vip用戶調(diào)度到容災(zāi)單元,保障用戶正常使用IM;

          2. 國際化:海外地區(qū)對于數(shù)據(jù)有合規(guī)要求,釘釘在當(dāng)?shù)夭渴饝?yīng)用,給海外用戶提供了流暢的用戶體驗。

          3. 支持大客戶及特殊行業(yè):釘釘不僅承接了中小企業(yè)溝通辦公需求,還承接不少政企用戶,他們有私有化部署的需求,需要釘釘具備云部署能力。

          4. 容量:隨著業(yè)務(wù)發(fā)展,所有流量在中心機房處理,擴展性差,把流量分散到多個地域是一個必然選擇。


          釘釘通過一套代碼部署、一套運維體系實現(xiàn)了單元化,滿足了上層多種需求。技術(shù)團隊開發(fā)了單元化基礎(chǔ)組件,動態(tài)路由,業(yè)務(wù)層數(shù)據(jù)同步組件等一系列基礎(chǔ)設(shè)計,可以將釘釘部署在任一國家、地區(qū),甚至用戶的自有機房。

          瀏覽 164
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <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>
                  色五月婷婷国产后入 | 色本视频免费观看久久 | 无码三区四区电影院 | 日韩精品一区二区三区四虎影视 | 丰满老妇高潮一级A片免费看 |