<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>

          云原生時(shí)代,分布式系統(tǒng)設(shè)計(jì)必備知識(shí)圖譜(內(nèi)含22個(gè)知識(shí)點(diǎn))

          共 4334字,需瀏覽 9分鐘

           ·

          2022-01-23 05:00


          點(diǎn)擊上方藍(lán)字關(guān)注我們



          作者| 楊澤強(qiáng)(竹澗)阿里云技術(shù)專家


          關(guān)注阿里巴巴云原生公眾號(hào),回復(fù)關(guān)鍵字 分布式 下載清晰分布式系統(tǒng)大圖!


          我們身處于一個(gè)充斥著分布式系統(tǒng)解決方案的計(jì)算機(jī)時(shí)代,無論是支付寶、微信這樣頂級(jí)流量產(chǎn)品、還是區(qū)塊鏈、IOT 等熱門概念、抑或如火如荼的容器生態(tài)技術(shù)如 Kubernetes、Serverless,其背后的技術(shù)架構(gòu)核心都離不開分布式系統(tǒng)。


          為什么要懂分布式架構(gòu)設(shè)計(jì)



          系統(tǒng)學(xué)習(xí)分布式架構(gòu)設(shè)計(jì)對(duì)于技術(shù)人的成長(zhǎng)非常關(guān)鍵,對(duì)于云原生開發(fā)者而言如何設(shè)計(jì)出符合云原生設(shè)計(jì)哲學(xué)的應(yīng)用,往往離不開分布式系統(tǒng)知識(shí)與方法論的運(yùn)用。如何設(shè)計(jì)出高彈性、可配置、可分布、高性能、高容錯(cuò)、更安全、更韌性、快交付的云原生應(yīng)用往往是衡量開發(fā)者水準(zhǔn)的重要參考。

          然而分布式系統(tǒng)是一個(gè)很大的概念,從架構(gòu)設(shè)計(jì)、研發(fā)流程、運(yùn)維部署、工程效率等多個(gè)角度均有很深的知識(shí)可以挖掘,學(xué)習(xí)成本和難度相對(duì)較大。

          近期,我整理了過去閱讀過的一些和分布式相關(guān)書刊和文章,加上自己做分布式開發(fā)的一些的心得分享給大家,本文作為開篇,總體上給出知識(shí)概覽,后續(xù)將分篇結(jié)合代碼實(shí)踐來進(jìn)行闡述。起草倉促,水平有限,歡迎大家一起學(xué)習(xí)指正。


          分布式系統(tǒng)大圖



          關(guān)注阿里巴巴云原生公眾號(hào),回復(fù)關(guān)鍵字?分布式?下載清晰分布式系統(tǒng)大圖。


          設(shè)計(jì)



          網(wǎng)關(guān)模式,Gateway


          功能

          • 請(qǐng)求路由,客戶端直接調(diào)用 Gateway,Gateway 負(fù)責(zé)路由轉(zhuǎn)發(fā)到注冊(cè)服務(wù)上
          • 服務(wù)注冊(cè),后端服務(wù)將 API 注冊(cè),Gateway 負(fù)責(zé)路由
          • 負(fù)載均衡,支持多種負(fù)載策略
            • round robin
            • 隨機(jī)均衡算法
            • 多權(quán)重負(fù)載
            • session 粘連
            • 其它
          • 安全特性,支持 HTTPS,賬戶鑒權(quán),及其它安全特性支持
          • 灰度發(fā)布,可以針對(duì)服務(wù)版本或者租戶等特性做灰度發(fā)布
          • API 聚合,將多個(gè)后端接口聚合,減少客戶端調(diào)用次數(shù)
          • API 編排,通過編排來串接多個(gè) API 完成特定業(yè)務(wù)


          設(shè)計(jì)要點(diǎn)

          • 可用性,必須保證高可用
          • 擴(kuò)展性,可以靈活擴(kuò)展以支持特定業(yè)務(wù)比如特定業(yè)務(wù)流控
          • 高性能,通常使用異步 IO 模型框架實(shí)現(xiàn),比如 Java netty,Go Channel
          • 安全,如加密通信,鑒權(quán),DDOS 防御等
          • 運(yùn)維
            • 應(yīng)用監(jiān)控,包括容量,性能,異常檢測(cè)等
            • 彈性伸縮,具備高彈性能力,以低成本應(yīng)對(duì)高峰值
          • 架構(gòu)
            • 與業(yè)務(wù)解耦合,提供擴(kuò)展擴(kuò)展機(jī)制比如 Plugin,Serverless 的思路支持后端業(yè)務(wù)
            • 服務(wù)隔離,可以按照后端服務(wù)劃分網(wǎng)關(guān),做到不同服務(wù)使用不同網(wǎng)關(guān)
            • 網(wǎng)關(guān)部署靠近后端,保證網(wǎng)絡(luò)損耗最小,性能最佳


          邊車模式,Sidecar


          價(jià)值

          • 分離控制與邏輯,分離業(yè)務(wù)邏輯與路由,流控,熔斷,冪等,服務(wù)發(fā)現(xiàn),鑒權(quán)等控制組件
          • 適用場(chǎng)景
            • 老系統(tǒng)改造擴(kuò)展,Sidebar 進(jìn)程與服務(wù)進(jìn)程部署在同一個(gè)節(jié)點(diǎn),通過網(wǎng)絡(luò)協(xié)議通訊
            • 多語言混合分布式系統(tǒng)擴(kuò)展
            • 應(yīng)用程序由多方提供

          設(shè)計(jì)要點(diǎn)

          • 標(biāo)準(zhǔn)服務(wù)協(xié)議,Sidebar 到 Service,Sidebar 到 Sidebar 協(xié)議盡可能與語言解耦
          • 聚合控制邏輯比如流控,熔斷,冪等,重試,減少業(yè)務(wù)邏輯
          • 不要使用對(duì)服務(wù)侵入的方式進(jìn)行進(jìn)程間通訊如信號(hào)量,共享內(nèi)存,優(yōu)先使用本地網(wǎng)絡(luò)通訊的方式比如 TPCP 或者 HTTP


          服務(wù)網(wǎng)格,Service Mesh


          新一代微服務(wù)架構(gòu),本質(zhì)是服務(wù)間通信的基礎(chǔ)設(shè)施層。

          架構(gòu)圖(圖片來源于網(wǎng)絡(luò),若有侵權(quán)請(qǐng)聯(lián)系作者刪除)

          特點(diǎn)

          • 應(yīng)用間通訊中間層
          • 輕量級(jí)網(wǎng)絡(luò)代理
          • 解耦應(yīng)用程序
          • 應(yīng)用程序無感知

          主流框架

          • Istio
          • Linkerd


          分布式鎖


          解決方案

          • Redis 分布式鎖,SETNX key value PX expiretime
            • value 生成,最好全局唯一比如 TraceID,可以使用 /dev/urandom 生成
            • expiretime 單位是毫秒,過期鎖自動(dòng)釋放 ,鎖持有者保證過期時(shí)間內(nèi)爭(zhēng)搶資源完成計(jì)算
          • 悲觀鎖,先獲取鎖,再進(jìn)行操作,吞吐量底
          • 樂觀鎖,使用版本號(hào)方式實(shí)現(xiàn),吞吐量高,可能出現(xiàn)鎖異常,適用于多讀情況
          • CAS,修改共享數(shù)據(jù)源的場(chǎng)景可以代替分布式鎖

          設(shè)計(jì)要點(diǎn)
          • 排他性,任意條件只有一個(gè) client 可以獲取鎖
          • 鎖有自動(dòng)釋放方式,比如超時(shí)釋放
          • 鎖必須高可用,且持久化
          • 鎖必須非阻塞且可重入
          • 避免死鎖,client最終一定可以獲取鎖,不存在異常情況鎖無法釋放的情況
          • 集群容錯(cuò)性,集群部分機(jī)器故障,鎖操作仍然可用

          配置中心


          • 靜態(tài)配置,環(huán)境及軟件啟動(dòng)配置
          • 動(dòng)態(tài)配置,運(yùn)行時(shí)動(dòng)態(tài)調(diào)整的配置如流控開關(guān),熔斷開關(guān)等

          異步通訊


          • 請(qǐng)求響應(yīng)式,發(fā)送方直接向接收方發(fā)送請(qǐng)求
            • 發(fā)送方主動(dòng)輪詢
            • 發(fā)送方注冊(cè)一個(gè)回調(diào)函數(shù),接收方處理完成后回調(diào)發(fā)送方
          • 事件驅(qū)動(dòng)設(shè)計(jì)(EDA)
            • 消息訂閱,發(fā)送方發(fā)布消息,接收方訂閱并消費(fèi)消息
            • Broker 中間人,發(fā)送方向 Broker 發(fā)布消息,接收方向 Broker 訂閱消息,彼此解耦,比如中間件 RocketMQ
            • 事情驅(qū)動(dòng)設(shè)計(jì)優(yōu)勢(shì)
              • 服務(wù)間依賴解除
              • 服務(wù)隔離程度高


          冪等性


          • 本質(zhì)是一個(gè)操作,無論執(zhí)行多少次,執(zhí)行結(jié)果總是一致的
          • 冪等核心是全局唯一 ID,鏈路依據(jù)全局 ID 做冪等,依據(jù)業(yè)務(wù)復(fù)雜度可以選取多種實(shí)現(xiàn)方式
            • 數(shù)據(jù)庫自增長(zhǎng) ID
            • 本地生成 uuid
            • Redis 生產(chǎn) id
            • Twitter 開源算法 Snowflake
          • HTTP 冪等性,除 POST 外,HEAD,GET,OPTIONS,DELETE,PUT 均滿足冪等

          性能



          分布式緩存


          緩存更新模式
          • Cache Aside,常用模式,應(yīng)用要維護(hù)緩存的失效,命中,更新等動(dòng)作

          • Read/Write Through,緩存代理更新數(shù)據(jù)庫操作,應(yīng)用視角只有一份存儲(chǔ)

          • Write Behind Cache,IO 加速方式之一,更新操作只在內(nèi)測(cè)完成,異步進(jìn)行批量更新數(shù)據(jù)庫


          異步處理


          • Push 模型,中心調(diào)度,復(fù)雜度高
          • Pull 模型,無中心調(diào)度,復(fù)雜度底
          • Push+Pull 模型


          數(shù)據(jù)庫擴(kuò)展


          數(shù)據(jù)庫分片
          • 垂直分片

            • 字段拆分,將變化頻率不同的字段拆分到不同表

          • 水平分片

            • 哈希算法來分,數(shù)據(jù)離散度高,降低熱點(diǎn)可能性

            • 通過時(shí)間范圍分片,保證數(shù)據(jù)連續(xù)性

          • 分片設(shè)計(jì)要點(diǎn)

            • 分片要預(yù)留足夠空間,避免重新分片

            • 分片聚合要并行去做

            • 業(yè)務(wù)盡可能不去做跨分片的事務(wù)


          容錯(cuò)



          系統(tǒng)可用性


          • MTTF, Mean Time To Failure,系統(tǒng)平均運(yùn)行多長(zhǎng)時(shí)間才發(fā)生故障,越長(zhǎng)越好
          • MTTR,Mean Time To Recover, 故障平均修復(fù)時(shí)間,越短越好
          • 可用性計(jì)算公式, Availability= MTTF /(MTTF+MTTR)


          服務(wù)降級(jí)


          • 降低一致性
            • 強(qiáng)一致性,將所有的同步一致性,切換為最終一致性,提高吞吐量
            • 弱一致性,必要時(shí)候犧牲一致性換取服務(wù)整體可靠性
          • 關(guān)閉次要服務(wù)
            • 不同應(yīng)用,關(guān)閉次要應(yīng)用,釋放物理資源
            • 相同應(yīng)用,關(guān)閉應(yīng)用次要功能,更多資源給到核心功能
          • 簡(jiǎn)化服務(wù)功能
            • 如簡(jiǎn)化業(yè)務(wù)流程,減少通訊數(shù)據(jù)等


          服務(wù)限流


          限流目的
          • SLA 保證方式之一
          • 應(yīng)對(duì)突發(fā)峰刺流量,一定程度節(jié)約容量規(guī)劃成本
          • 租戶隔離策略之一,避免某些用戶占用其它用戶的資源,導(dǎo)致服務(wù)大范圍不可用

          限流方式
          • 服務(wù)降級(jí)
          • 服務(wù)拒絕

          解決方案
          • 服務(wù)權(quán)重劃分,多租戶環(huán)境將資源按權(quán)重劃分,保證重要客戶的資源
          • 服務(wù)延時(shí)處理,加入服務(wù)緩沖隊(duì)列延緩服務(wù)壓力,用于削峰
          • 服務(wù)彈性伸縮,依賴服務(wù)監(jiān)控,彈性伸縮容

          流控算法
          • 計(jì)數(shù)器
            • 單機(jī)或者集群保存某用戶某時(shí)間段請(qǐng)求數(shù),達(dá)到閾值則觸發(fā)流控
          • 隊(duì)列算法
            • FIFO 隊(duì)列
              • 請(qǐng)求速度波動(dòng),消費(fèi)速度均勻,隊(duì)列滿則流控
            • 權(quán)重隊(duì)列
              • 按服務(wù)劃分優(yōu)先級(jí)隊(duì)列,不同隊(duì)列權(quán)重不同
            • 隊(duì)列算法設(shè)計(jì)關(guān)鍵:隊(duì)列長(zhǎng)度的預(yù)設(shè)非常關(guān)鍵
              • 隊(duì)列太長(zhǎng),流控未生效,服務(wù)已經(jīng)被打死
              • 隊(duì)列太短,流控被頻繁觸發(fā),體驗(yàn)差
          • 漏斗算法
            • 本質(zhì)上是隊(duì)列+限流器實(shí)現(xiàn),限流器保證消費(fèi)速度均勻類 TCP sync backlog
            • 轉(zhuǎn)發(fā)速度均勻
          • 令牌桶
            • 中間人已恒定速率向桶里發(fā)放令牌,服務(wù)請(qǐng)求拿到 token 則開始服務(wù),否則不處理
            • 轉(zhuǎn)發(fā)速度不均勻,流量小時(shí)積累,流量大時(shí)消費(fèi)
          • 動(dòng)態(tài)流控
            • 實(shí)時(shí)計(jì)算服務(wù)能力如 QPS,對(duì)比服務(wù) RT 如果 RT 過大,則減少 QPS

          設(shè)計(jì)要點(diǎn)
          • 手動(dòng)開關(guān),主動(dòng)運(yùn)維和應(yīng)急使用
          • 監(jiān)控通知,限流發(fā)生時(shí)干系人要清楚
          • 用戶感知,如返回特定錯(cuò)誤信息(錯(cuò)誤code/錯(cuò)誤提示)
          • 鏈路標(biāo)識(shí),RPC鏈路加入限流標(biāo)識(shí)方便上下游業(yè)務(wù)識(shí)別限流場(chǎng)景做不同處理


          熔斷設(shè)計(jì)


          場(chǎng)景
          • 過載保護(hù),系統(tǒng)負(fù)載過高情況為防止故障產(chǎn)生,而采取的一種保護(hù)措施
          • 防止應(yīng)用程序不斷嘗試可能會(huì)失敗的操作

          三個(gè)狀態(tài)
          • Closed,閉合狀態(tài),正常狀態(tài),系統(tǒng)需要一個(gè)基于時(shí)間線到錯(cuò)誤計(jì)數(shù)器,如果錯(cuò)誤累計(jì)達(dá)到閾值則切換至 Open 狀態(tài)
          • Open,斷開狀態(tài),所有對(duì)服務(wù)對(duì)請(qǐng)求立即返回錯(cuò)誤,不用調(diào)用后端服務(wù)進(jìn)行計(jì)算
          • Half-Open,半開狀態(tài),允許部分請(qǐng)求流量進(jìn)入并處理,如果請(qǐng)求成功則按照某種策略切換到 Closed 狀態(tài)

          設(shè)計(jì)要點(diǎn)
          • 定義觸發(fā)熔斷的錯(cuò)誤類型
          • 所有觸發(fā)熔斷的錯(cuò)誤請(qǐng)求必須要有統(tǒng)一的日志輸出
          • 熔斷機(jī)制必須有服務(wù)診斷及自動(dòng)恢復(fù)能力
          • 最好為熔斷機(jī)制設(shè)置手動(dòng)開關(guān)用于三種狀態(tài)的切換
          • 熔斷要切分業(yè)務(wù),做到業(yè)務(wù)隔離熔斷

          補(bǔ)償事務(wù)


          • CAP
            • 一致性 (Consistence)、可用性 (Availability)、分區(qū)容忍性 (Partition Tolerance)
          • BASE
            • Basic Availabillity,基本可用
            • Soft State,軟狀態(tài)
            • Eventual Consistency,最終一致性
          • Design For Failure
          • Exponential Blackoff,指數(shù)級(jí)退避


          DevOps



          部署


          基礎(chǔ)設(shè)施
            • 公有云
            • 私有云
            • 混合云
          • 容器技術(shù)
            • Docker
            • Kubernetes

          部署策略
          • 停機(jī)部署
          • 滾動(dòng)部署
          • 藍(lán)綠部署
          • 灰度部署
          • A/B 測(cè)試


          配置管理


          • Ansible
          • Puppet
          • Shippable


          監(jiān)控


          • Nagios
          • DynaTrace


          CI 與 CD


          工程效率



          敏捷管理


          • Scrum


          持續(xù)集成


          • Jenkins
          • CodeShip


          持續(xù)交付


          總結(jié)及學(xué)習(xí)建議



          分布式系統(tǒng)在阿里巴巴經(jīng)濟(jì)體有著廣泛的應(yīng)用,以筆者所在的彈性計(jì)算技術(shù)團(tuán)隊(duì)為例,當(dāng)業(yè)務(wù)足夠規(guī)?;螅?strong>最終面臨的技術(shù)問題都是通過踐行分布式系統(tǒng)架構(gòu)的設(shè)計(jì)理念和方法論得以解決,可以說分布式系統(tǒng)架構(gòu)的知識(shí)與方法論是當(dāng)前互聯(lián)網(wǎng)應(yīng)用規(guī)?;蟮耐ㄓ媒鉀Q方案。


          學(xué)習(xí)分布式系統(tǒng)設(shè)計(jì)也不是一蹴而就,需要不斷汲取理論知識(shí),然后將理論不斷付諸實(shí)踐,最終通過一次次的調(diào)優(yōu)來將知識(shí)的價(jià)值最大化。


          筆者最后的建議是先理論、后實(shí)踐、重實(shí)踐、不妥協(xié),所謂紙上得來終覺淺,絕知此事要躬行,與君共勉。



          END




          獎(jiǎng)勵(lì)看到最后的你:


          # 點(diǎn)個(gè)在看,并在下方留言互動(dòng)
          # 然后,將
          截圖發(fā)送至后臺(tái),試試手氣?
          # 本周互動(dòng)獎(jiǎng)品是
          “阿里云定制數(shù)據(jù)線”

          # 本期禮品開獎(jiǎng)時(shí)間1月25日?


          瀏覽 55
          點(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>
                  欧美偷拍最新合集视频 | 日韩AV一区二区三区 | 国产精品自产拍高潮在线观看 | 麻豆蜜桃成人免费视频 | 又大又粗一级 |