火箭架構思維模型六元組 - 勢 道 法 術 器 界

{"type":"doc","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"動機"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"萬事萬物逃脫不出"},{"type":"text","marks":[{"type":"strong"}],"text":"“不易、簡易、變易”"},{"type":"text","text":"這三個層次,演繹法認爲“道生一、一生二、二生三、三生萬物”,而歸納法也可以認爲“萬物合三,三合二、二合一、一合道”。本文的目的之一是通過歸納法找出分佈式系統架構設計最爲本質的“道”,使之可以用於解讀各式各樣的分佈式系統架構設計。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"從應用領域來看分佈式系統可以分爲三大類:分佈式計算、分佈式存儲以及分佈式調度,本文做的是從這三大領域的”變易”中找出“不易、簡易”,“以”不變“應”萬變“,從而抽象出一種分佈式架構思維使之可以應用於這三大領域的架構設計。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"架構思維模型"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在面向對象編程有四個最高的思想,即“抽象、封裝、繼承與多態”,將這個思想遷移應用到本文,可以解讀爲架構思維是第8式“火箭技術思維模型”的以及第0式”設計總決“的繼承,這裏我把它定義爲“分佈式系統火箭架構思維模型”,如下圖:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/bd/bdb494c368893ab39126d760d1c00538.png","alt":null,"title":"","style":[{"key":"width","value":"100%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"火箭架構思維模型"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這個架構思維模型用圖形是一個內部分層的三角形,類比爲一個5級火箭體,它包括“勢 道 法 術 器 界”這六個要素,其下一級爲上一級的提供動力的同時又受三條邊的約束。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"狹義上的分佈式系統架構通常指的是架構的技能,其屬於“術”的範疇,而廣義的分佈式系統架構則是市場趨勢、架構理念、架構方法論、架構技能、架構用的工具以及架構的邊界這幾個方面的組合體,應用抽象思維,即“勢、道、法、術、器、界”這六個字 ,簡稱架構思維六元組。"}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"勢:時勢,是架構的方向"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"“勢”是架構的方向。從宏觀處着眼,“勢”是產品架構設計的市場趨勢、是客戶需求趨勢也是技術的應用趨勢;從微觀處着手,“勢”是功能設計的價值與目的。架構設計需要從宏觀處着眼微觀處着手,看清客戶的需求趨勢、市場趨勢以及技術趨勢,功能設計需要分析清楚當前功能的價值與目的。除了明白架構的是什麼的問題,還需要明白爲什麼需要做這個架構設計,這就需要從“勢”處定義問題、分析問題、過濾問題以及解決問題。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"團隊一起討論架構選型與功能設計的問題,經常會遇到A說A有理,B說B有理,最終方案無法達成一致致使項目拖延甚至失敗的情形。這就需要梳理清楚架構的目的、原則、質量與邊界,對方案進行方向上的約束,那麼“勢”就是架構選型與功能設計的約束條件之一,其用於定義架構的目的。"}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"道:理念,是架構的認知"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"“道”是架構的認知,是架構師的設計理念、設計意圖,是產品架構的靈魂。美國學者布盧姆認爲認知有六層次:識記、理解、應用、分析、評價、創造。產品架構是由人設計的,那麼不可避免的就會帶有人的因素在裏頭,”見其所欲“,你所看到的架構都是架構師欲讓你看到的,對分佈式系統認知層次不同的人,理念也是不同的,欲深入理解一個產品的架構必須要能找到設計它的人的設計”理念“。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"進行分佈式系統的架構設計,首先我們要知道分佈式系統的第一性原理是什麼?即分佈式系統的類似公理性質的定義,Google 出來的對分佈式系統的定義有:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"bgcolor","attrs":{"color":"#FC8F99","name":"red"}}],"text":"A distributed system is a system whose components are located on different networked computers, which communicate and coordinate their actions by passing messages to one another. The components interact with one another in order to achieve a common goal."}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"即:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"bgcolor","attrs":{"color":"#FC8F99","name":"red"}}],"text":"分佈式系統是一個組件分佈在不同的聯網的計算機上,彼此之間僅僅通過消息傳遞進行通信和協調的系統,這些組件相互交互以實現一個共同的目標。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這句話就是分佈式系統的第一性原理,是分佈式系統的類公理性質的理論定義,其非常重要,默認不變的公理性定義,解讀開來就是:“分佈式系統是由建立在網絡上的通過消息進行通信和協調的系統,各個機器相互交互一起完成一個共同的目標。”,從這句話裏可以推理出分佈式系統的幾個類似定理性質的特徵定義:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"分佈式系統是基於網絡的,網絡所具有的毛病它都有,網絡會丟包、網絡有帶寬限制、網絡有安全隱患、網絡有負載均衡問題等,那麼這些問題在分佈式系統裏需要怎麼解決?那麼如何提高服務的可靠性?如何保證服務的可用性?"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"分佈式系統是基於消息傳遞的,那麼如何保證消息的冪等性?如何保證消息的正確性?如何保證消息傳遞的性能?如何保證消息傳遞的可靠性?"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"分佈式系統是協調工作的,那麼如何協調大量的計算機節點的完成一個共同的目標,如何解決協調的複雜性以及提高協調的可靠性?"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"分佈式系統是一起相互交互完成一個共同的目標的,那麼如何一起交互?如何拆分目標?如何聚合目標,如何提高完成目標的性能?"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"分佈式系統是分佈式的,其具有分佈性的特點,那麼如何保證分佈式所要求的負載均衡、可伸縮性、韌性等功能與質量需求?"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"依據分佈式系統的第一性原理,本文解讀了分佈式系統的理論認知,除此之外還可以依據個人對分佈式系統的工程經驗推理出分佈式系統的實踐認知,依據工程實踐經驗,這裏我定於分佈式系統爲:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"size","attrs":{"size":12}},{"type":"bgcolor","attrs":{"color":"#FC8F99","name":"red"}},{"type":"strong"}],"text":"分佈式系統是面向集羣狀態的編程, 它是抽象、分層、解耦、拆分、聚合、治理、取捨、模型、質量、邊界、演化思維的創造性應用,其要交付的是功能價值,但功夫卻體現在非功能。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"不同於教科書以及一些論文對分佈式系統的理論定義,這個定義來源於個人工程經驗,是認知的創造。分佈式系統的功能、質量與約束都來自於這兩個理論定義與工程定義。"}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"法:方法論,是架構的套路"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"”法“是方法論,是架構設計的方法論,是架構設計的套路,它是認知論的上一級,方法論體現在產品的設計原則、設計心法以及設計功能。從工程經驗的角度,本文認爲分佈式系統設計可以依從以下的”9法10項2原則“ 作爲方法論。"}]},{"type":"heading","attrs":{"align":null,"level":5},"content":[{"type":"text","text":"9法"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"size","attrs":{"size":12}},{"type":"bgcolor","attrs":{"color":"#FC8F99","name":"red"}},{"type":"strong"}],"text":"少讀少寫少依賴,業務拆業務合,功能拆性能聚,時空換同異換"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"size","attrs":{"size":12}},{"type":"bgcolor","attrs":{"color":"#FC8F99","name":"red"}},{"type":"strong"}],"text":"硬件順天性,服務需治理,數據保一致,哪都不可靠,事事慎權衡"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"少讀少寫少依賴: 少讀,即減少讀放大,減少需要讀的數據量;少寫,即減少寫放大,減少需要寫的數據量;少讀少寫的策略可以是提高cache命中率也可以是進行數據壓縮,還可以是合適的讀寫算法與數據結構等,少依賴,即解耦,拆分,高內聚低耦合"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"業務拆業務合:分佈式系統裏要有拆有合,拆的目的是爲了解耦、是爲了集羣業務可伸縮,是爲了組件上的小可以支持集羣規模上的大;合的目的是爲了內聚,聚合拆分的服務返回的子結果,從而返回大結果;“業務拆業務合”,其理論依據來源於“康威定律”,即: 設計系統的組織其產生的設計等價於組織間的溝通結構,軟件架構的拆合關係來源與團隊的組織結構。"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"功能拆性能聚:在分佈式系統裏有拆有合,那麼拆與合的取捨依據在哪裏?這句話講的就是拆與合的取捨關係:依據功能進行拆分,但是也要依據性能進行聚合,拆開後會影響性能的地方最好不拆"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"時空換同異換: 時空換同異換講的是性能優化的路數,解讀開來說即是:時間換空間、空間換時間、同步換異步、異步換同步。例如:採用cache的功能可以減少計算的時間,這是存儲空間換時間從而提升性能;採用批處理的方式提升性能,這是減少計算時間;採用異步換同步的方式提升性能也是減少計算時間;減少IO的數據量從而提升性能,這是存儲空間換時間;減少IO路徑提升性能,這也是網絡空間換時間;採用最新的硬件提升性能,這可以是計算換時間,也可以是存儲或網絡空間換時間"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"硬件順天性:硬件順天性講的是軟件設計要遵循硬件的原生特性,CPU的分核調度、機械盤性能不如固態硬盤、磁盤分塊需要對齊、磁盤是有可能會電子位飄逸丟數據的、內存性能好適合做緩存但是下電就丟數據、網絡是不可靠的並且有帶寬限制、RDMA網絡比IP網絡性能好,機器學習採用GPU比CPU更能獲得高計算性能;不同的應用場景要依據硬件的不同特性做架構選型以及架構設計等。"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"服務需治理:指的是分佈式系統是由各種不同的組件進行組合連接而成,其需要服務治理設計,服務需治理背後的原因來源於分佈式系統式搭建在網絡上的,其繼承了網絡的毛病,背後的指導思想是“墨菲定律”,即“會出錯的事總會出錯”,服務治理的具體解決方案可分爲容錯、降級、限流、熔斷、隔板這五個模式"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"數據保一致:要保證分佈式系統對外提供的服務的數據的一致性,cache掉電會丟數據、網絡不可靠會丟數據、磁盤電子不可靠會丟數據,計算丟請求會丟數據,各種場景下都需要保證數據的一致性,比如緩存的MESI算法保數據、掉電刷內存保數據、網絡端到端的校驗、磁盤掃描校驗、數據副本保數據等"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"哪都不可靠:指的是磁盤不可靠、網絡不可靠、計算不可靠、運維的人不可靠,何種場景都需要進行系統的韌性設計"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"事事慎權衡:指的是架構設計本身的設計方法論,即trade-off"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":5},"content":[{"type":"text","text":"10項"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"size","attrs":{"size":14}},{"type":"bgcolor","attrs":{"color":"#FC8F99","name":"red"}},{"type":"strong"}],"text":"提供 註冊 配置 調用 路由"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"size","attrs":{"size":14}},{"type":"bgcolor","attrs":{"color":"#FC8F99","name":"red"}},{"type":"strong"}],"text":"觀測 治理 編排 質量 邊界"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"提供:即服務接入的提供,指的是對外提供restful 接口服務:權限、多組合、監控、審計、計費等,對外提供SQL服務接入接口服務、對外提供自然語言接入接口服務等"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"註冊:即服務註冊,將集羣的工作負載註冊到集羣註冊中心"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"配置:即配置管理,將集羣的配置管理在配置中心;"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"調用,即服務調用,各種RPC調用,系統內的消息傳遞"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"路由:即服務路由,目的是集羣的負載均衡與擴伸縮性"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"觀測:指的是集羣內部指標的可觀測性,即監控、告警、追蹤、日誌"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"治理:指的是集羣內部的服務治理:熔斷、降級、限流、隔離、容錯"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"編排:即服務編排,基於k8s+ docker,完成安裝、升級、擴容、運維、調度等;"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"質量:指的是安裝部署運維質量、客戶質量、用戶質量與開發質量"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"邊界:指的是系統內的約束條件,涵蓋 硬件資源、客戶約束、用戶約束以及團隊約束"}]}]}]},{"type":"heading","attrs":{"align":null,"level":5},"content":[{"type":"text","text":"2原則:"}]},{"type":"bulletedlist","content":[{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"bgcolor","attrs":{"color":"#FC8F99","name":"red"}}],"text":"最佳物種原則"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"bgcolor","attrs":{"color":"#FC8F99","name":"red"}}],"text":"功能非功能原則"}]}]}]},{"type":"heading","attrs":{"align":null,"level":5},"content":[{"type":"text","text":"最佳物種原則"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"最佳物種原則其來源是生物的物種進化理論,講的是產品原則,其可以一分爲二:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"1,最佳原則,做產品架構設計的時候要挖掘不同的業務特性以及其業務本質,從而設計出與業務最爲匹配的架構。天上飛的是鳥兒,地上奔跑的是走獸,水裏遊的是魚兒。架構設計由大及小,由外及內也是如此。比如計算用的是分佈式計算、存儲用的是分佈式存儲,調度用的是分佈式調度,其負責的領域各不相同,不存在一個全能的分佈式中間件可以最佳的完成計算、存儲、調度三合一的功能。從小處來講也是如此,比如分佈式系統內部的註冊、路由、成員管理、服務提供、複製、安全、算法模型、存儲等各有其自己最佳的設計方案,再依據這些最佳組件、最佳方案組合出一個最佳分佈式中間件。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"2,進化原則,萬物由微而顯,由簡而繁,物競天擇,優勝劣汰,好的架構是根據業務演化而來,而不是一開始就完美的設計好的。但是不管是微還是顯,其最本質的功能還是不變的,一個產品從POC到MVP再到企業級達標其最核心的功能是不變的,比如計算、存儲與調度。"}]},{"type":"heading","attrs":{"align":null,"level":5},"content":[{"type":"text","text":"功能非功能原則"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"功能非功能原則,講的是技術原則,從大體上來說,分佈式系統的架構設計都是圍繞其功能與非功能的量化設計來進行的,非功能又可以一分爲二,即:質量與約束,比如:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"客戶對產品質量的需求一般可以用四個字概括,即”多、快、好、省“,然而客戶在產品交付的時間、質量與成本上的取捨,客戶原來遺留的系統,當前國家的法律法規,市場上的技術趨勢以及競爭對手與行業標準等都屬於當前客戶需要考慮的約束條件。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"用戶的產品質量需求一般稱爲使用質量需求,其一般包括:性能、可用性、可靠性、可伸縮性、韌性、可觀測性、可服務性、安全性、易用性、可運維性等,而用戶的約束需求包括 用戶的業務環境、用戶的能力以及用戶羣的特徵等。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"團隊的質量需求指的是產品開發週期內的質量需求,高質量的代碼幾個最重要的要素有:可測試性、可維護性、可擴展性、可讀性等,而團隊的約束需求有:資源預算、上級要求、開發團隊的能力、產品規劃、此外還有信息安全以及產品運行環境 的約束等。"}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"術:技能,是架構技能"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"術,技能,是架構技能,其可以分爲需求分析、設計哲學定義、設計方法論定義、設計原則定義、架構製圖、基礎理論理解與應用、基礎數據結構理解與應用、基礎算法設計、基礎組件設計、質量達標設計以及邊界約束設計。即:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"分佈式系統的需求分析:這裏可以依據需求分析公式:需求 = [客戶,用戶,團隊] x [功能,質量,約束],進行全面的架構需求分析。"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"分佈式系統的設計思想:抽象、 分層、 解耦、 拆分 、聚合、治理、取捨、模型、質量、邊界、演化"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"分佈式系統的設計原則:最佳物種原則,功能非功能原則"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"分佈式系統的架構視圖:我們在學習畫法幾何或機械製圖的時候,要描述一個物體可以採用視圖法來表示,比如機械製圖裏要製造一個零件的時候,需要依據這個零件畫出可以根據這個圖形加工的視圖,其通常採用正視圖、俯視圖、側視圖,加上額外的細節視圖與質量指標、材料約束的方法。同樣我們做軟件架構設計的時候,也需要將具體的”軟件體“抽象成視圖來表示,同時也需要標記上質量與邊界約束。"}]}]}]},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/70/702d2721c6d5247877afdad5cd008c31.png","alt":null,"title":"","style":[{"key":"width","value":"100%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"分佈式系統的基礎理論:CAP/PACELC、BASE、ACID、2PC、3PC、PAXOS、RAFT"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"分佈式系統的基礎數據結構:Array、List、Map、Hash、Tree,及其變種"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"分佈式系統的基礎算法:負載均衡算法(一致性hash算法、分區分配算法)、選主算法、心跳算法、集羣視圖變更算法、冪等算法、複製算法、緩存MESI算法"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"分佈式系統的基礎組件:服務提供(Restful接口,SQL接口,自然語言接口)、服務註冊(zookeeper,etcd,consul,etc)、服務配置(zookeeper,etcd, consul,etc)、服務調用(brpc,netty,etc)、服務路由(一致性Hash算法、分區分配算法)、服務追蹤(zipkin,pinpoint,skywalking,cat,etc)、服務監控(Metrics)、服務治理(容錯、降級、限流、熔斷、隔板)、服務編排(k8s、docker)、服務安全(keycloak,etc)"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"分佈式系統的質量指標:性能指標:TPS、QPS、IOPS、Latency、ResponseTime、緩存抖動指標、緩存命中指標,可靠性指標: 6個9企業級代表,可用性指標:6個9企業級達標,數據一致性指標,可伸縮性,韌性,可觀測性,可服務性,安全性,易用性,可運維性,可測試性,可維護性,可擴展性,可讀性等,質量指標要能可度量化,可執行化"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"分佈式系統的約束邊界:其可以是資源容量約束:CPU、磁盤、網絡、線程、文件描述符個數,也可以是客戶的約束、用戶的約束以及團隊的約束"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"器:工具,架構設計用的工具"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"”器“是工具,是架構設計用的工具,”工慾善其事必先利其器“,常用的架構設計製圖工具有MS Visio、Draw.io,UML製圖用的Enterprise Architect、starUML等,當然組織提供的資源支持也可以算是工具之一。"}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"界:是邊界,是架構的約束"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"”界“是邊界,是架構的約束限制,火箭架構思維模型裏的三角形的三條邊代表着“界” ,是技術邊界、也是技術約束與技術限制,也是架構的取捨因素之一,是架構能做什麼不能做什麼的解讀,對市場來說它是技術壁壘,對產品來說它是法律法規、是功能約束,對團隊來說它是資源約束、是自我能力約束。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"小結"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"本文講述了分佈式系統的架構思維模型,其目的希望以此架構思維模型應用於各種領域的分佈式架構系統設計。日拱一卒,功不唐捐,分享是最好的學習,與其跟隨不如創新,希望這個知識點對大家有用。另作者能力與認知都有限,”我講的,可能都是錯的“,歡迎大家拍磚留念。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"作者簡介"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"常平,中國科學技術大學碩士研究生,深度學習首席軟件主管工程師,前EMC 大數據資深首席工程師,主要工作背景在深度學習、流式大數據、分佈式中間件以及Linux內核。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章