溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

分布式系統(tǒng)實戰(zhàn)

發(fā)布時間:2020-07-13 16:51:51 來源:網(wǎng)絡(luò) 閱讀:6588 作者:yaocoder 欄目:軟件技術(shù)

導語:記得在自己大學畢業(yè)的2006年到之后近五年的工作里,源于工作經(jīng)歷和有限的視野,幾乎對“分布式系統(tǒng)”沒有任何概念。當然,彼時的互聯(lián)網(wǎng)/移動互聯(lián)網(wǎng)還未對我們的生活呈覆蓋顛覆之勢,很多網(wǎng)絡(luò)應(yīng)用采用傳統(tǒng)的集中式服務(wù)便可應(yīng)對。但是隨著互聯(lián)網(wǎng)大潮的風起云涌,出現(xiàn)了越來越多的細分大流量網(wǎng)站及應(yīng)用,網(wǎng)民體量也如滾落雪球一般越來越大,這種情況下分布式的概念幾乎在技術(shù)圈“家喻戶曉”,也成了我們追逐的另一顆時代“銀彈”。我也不例外,但是只是因為身處于某幾乎無互聯(lián)網(wǎng)氛圍的二線城市和保守封閉的技術(shù)氛圍中,所以對分布式系統(tǒng)的理解、掌握只能是自己一步步學習、實踐而來,但是反過來也有了很多踏實的實踐體會。




剛才提到分布式系統(tǒng)產(chǎn)生的背景之一就是有了很多大型網(wǎng)站、應(yīng)用。

  • 這些系統(tǒng)的特點是:高并發(fā)、大流量;高可用;海量數(shù)據(jù);用戶分布廣泛,網(wǎng)絡(luò)情況復雜,安全環(huán)境惡劣;需求快速變更,迭代式發(fā)展,發(fā)布頻繁。

  • 這些系統(tǒng)的核心架構(gòu)要素:性能、可用性、伸縮性、擴展性和安全性。

 

來看看分布式系統(tǒng)的特點:

  • 異構(gòu)性:使得用戶能在大量異構(gòu)計算機和網(wǎng)絡(luò)上訪問服務(wù)和運行應(yīng)用程序,比如允許硬件、操作系統(tǒng)、編程語言、開發(fā)者等的多樣性和差別。

  • 開放性(擴展性):使系統(tǒng)能以不同的方式被擴展和實現(xiàn),比如通過發(fā)布系統(tǒng)的關(guān)鍵接口、基于一致的通信機制和網(wǎng)絡(luò)協(xié)議擴展其他應(yīng)用。

  • 可伸縮性在不同的用戶規(guī)模下通過對資源的調(diào)節(jié)依然能有效且高效的運轉(zhuǎn),比如通過縱向的伸縮來加強硬件、通過橫向的伸縮來增加服務(wù)器等。

  • 并發(fā)性保持用戶對共享資源操作的正確性,比如CAP理論中的C(一致性)的要求。

  • 高可用性:通過性能優(yōu)化、安全性、故障處理提高可用性,比如采用高性能的編程模型,安全的隔離和過濾機制,自動化故障檢測、容錯、故障修復、冗余等。


分布式系統(tǒng)的優(yōu)勢:

  • 降低不同模塊開發(fā)團隊間的協(xié)同成本,業(yè)務(wù)響應(yīng)更迅捷。

  • 大大降低系統(tǒng)間的耦合度以及整體復雜度,各個開發(fā)團隊可專注于各自的業(yè)務(wù)模塊。

  • 避免了個別模塊的錯誤給整體帶來的影響。

  • 業(yè)務(wù)可拆分、可擴展后解放了對單服務(wù)資源的依賴。

  • 做到針對性的業(yè)務(wù)能力擴容,減少不必要的資源浪費。

可見分布式系統(tǒng)為大型網(wǎng)站應(yīng)用在技術(shù)和組織層面都提供了良好的解決和支撐。

分布式系統(tǒng)相關(guān)的理論:

  • CAP理論:一個分布式系統(tǒng)最多只能同時滿足一致性(Consistency)、可用性(Availability)和分區(qū)容錯性(Partition tolerance 指分布式系統(tǒng)在遇到某節(jié)點或網(wǎng)絡(luò)分區(qū)故障的時候,仍然能夠?qū)ν馓峁M足一致性和可用性的服務(wù))其中的兩項。

  • BASE理論:是指基本可用(Basically Avalilable)、柔性狀態(tài)(Soft State)、最終一致性(Eventual Consistency)。BASE是對CAP理論的延伸,核心思想是即使無法做到強一致性,但應(yīng)用可以采用適合的方式達到最終一致性。  


另外,現(xiàn)在經(jīng)常有人問起分布式架構(gòu)理念與之前我們經(jīng)常說的SOA(面向服務(wù)的架構(gòu))和現(xiàn)在頗為流行的微服務(wù)架構(gòu)孰優(yōu)孰劣。我個人認為問優(yōu)劣是不合理的,首先分布式構(gòu)架理念在兩者中都有體現(xiàn)和應(yīng)用。而對于作為對比的SOA和微服務(wù),這二者在彼此適配的場景下都可以殊途同歸的解決問題,都是好的架構(gòu)理念。但是確實是也有區(qū)別和聯(lián)系:


SOA的主要特性:

  • 面向服務(wù)的分布式計算

  • 服務(wù)間松散耦合

  • 支持服務(wù)的組裝

  • 服務(wù)注冊和自動發(fā)現(xiàn)

  • 以服務(wù)契約方式定義服務(wù)交互方式

微服務(wù)架構(gòu)的典型特征:

  • 分布式服務(wù)組成的系統(tǒng)

  • 按照業(yè)務(wù)而不是按照技術(shù)來劃分組織

  • 做有生命的產(chǎn)品而不是項目

  • 智能化服務(wù)端點與傻瓜式服務(wù)編排

  • 自動化運維

  • 系統(tǒng)容錯

  • 服務(wù)快速演化




上面主要講了對分布式系統(tǒng)的概念認識,很多是對書籍和學習的總結(jié)。但是做到真正的理解就必須有實戰(zhàn),拿其中一個自己親自架構(gòu)編碼的即時聊天/用戶、設(shè)備上線系統(tǒng)的后臺架構(gòu)為例,此架構(gòu)思路目前已經(jīng)實踐應(yīng)用在多個百萬級別的服務(wù)上。其實對于此架構(gòu)的分布式應(yīng)用,自己并不是在熟知分布式理論的前提下設(shè)計的,而是基于其他理念模型和在具體的業(yè)務(wù)實踐、組織協(xié)作過程中演化而來的。

  • 比如分層的架構(gòu)設(shè)計,之前由于主要做網(wǎng)絡(luò)安全和網(wǎng)絡(luò)編程工作,TCP/IP協(xié)議棧的分層設(shè)計深深影響了自己

分布式系統(tǒng)實戰(zhàn)

把網(wǎng)絡(luò)層、業(yè)務(wù)邏輯層、數(shù)據(jù)層分離,網(wǎng)絡(luò)層支持負載均衡,業(yè)務(wù)層支持動態(tài)擴展,數(shù)據(jù)層支持分布式存儲,各層均支持分布式部署;以下是架構(gòu)細化圖

分布式系統(tǒng)實戰(zhàn)

  • 對不同功能的模塊進行進程級的分離,用TCP來進行通訊。這是受“《UNIX編程藝術(shù)》第7章——多道程序設(shè)計:分離進程為獨立的功能“的理念影響,是不是和微服務(wù)的理念很像,而且基于TCP通信的方式利于進行分布式部署。Unix最具特點的程序模塊化技法就是將大型程序分解成多個協(xié)作進程,并專注于考慮這些子進程間的接口和通訊方式;

  • 通用技術(shù)模塊和業(yè)務(wù)應(yīng)用模塊分離,比如網(wǎng)關(guān)服務(wù)、上線服務(wù)實現(xiàn)網(wǎng)絡(luò)接入和協(xié)議轉(zhuǎn)發(fā)功能不承載業(yè)務(wù)邏輯,由具體的應(yīng)用進程處理業(yè)務(wù)。網(wǎng)關(guān)服務(wù)就類似于Nginx,用戶的請求首先會通過前端接入層(Nginx)分發(fā)到后端的應(yīng)用集群上,另外通過在網(wǎng)關(guān)上實現(xiàn)的安全過濾(比如域名IP類、協(xié)議秘鑰、黑名單)實現(xiàn)接入層限流、安全的主要工作。

  • 無狀態(tài)的設(shè)計,將狀態(tài)、消息、業(yè)務(wù)數(shù)據(jù)類信息分離出業(yè)務(wù)進程,利用分布式緩存(如redis),數(shù)據(jù)庫(關(guān)系型數(shù)據(jù)庫MySQL、非關(guān)系型數(shù)據(jù)庫MongoDB)存儲進行調(diào)用。這樣業(yè)務(wù)進程利于分布式部署,數(shù)據(jù)服務(wù)也支持分布式存儲。

  • 服務(wù)間利用標準統(tǒng)一的協(xié)議進行信息交互,比如采用序列化協(xié)議Json和RESTful API設(shè)計,我個人比較推崇文本化的協(xié)議,容易使人理解也更容易記錄、分析、調(diào)試。這是深受“《Unix編程藝術(shù)》第5章——文本化:好協(xié)議產(chǎn)生好實踐”理念的影響。相比二進制協(xié)議,文本化協(xié)議可以帶來互用性、透明性、可擴展性。

  • 通過配置文件或者配置服務(wù)加載策略,對于很多靜態(tài)和動態(tài)的策略不要寫死在程序中,而是通過配置文件或者配置服務(wù)加載,這樣可以快速部署發(fā)布新功能、對服務(wù)進行無間斷的熱啟動。這也是“《Unix編程藝術(shù)》中分離原則:策略同機制分離,接口同引擎分離”原則的實踐。




資料和代碼:

《服務(wù)端架構(gòu)中的“網(wǎng)關(guān)服務(wù)器 》             《IM系統(tǒng)架構(gòu)設(shè)計之淺見 》

DSF(Distributed service framework) :基于C++語言實現(xiàn)的一個簡單分布式服務(wù)框架示例,包括一個邏輯分發(fā)服務(wù)實現(xiàn)(網(wǎng)關(guān)服務(wù)),一個邏輯應(yīng)用實現(xiàn)(具體應(yīng)用服務(wù))

highPerformanceNetworkServer :高性能TCP網(wǎng)絡(luò)服務(wù)器程序(上線服務(wù)器的雛形)


參考書籍:

《Unix編程藝術(shù)》

《企業(yè)IT架構(gòu)轉(zhuǎn)型之道:阿里巴巴中臺戰(zhàn)略思想與架構(gòu)實戰(zhàn) 》

《大型網(wǎng)站技術(shù)架構(gòu)》 

《分布式系統(tǒng)概念與設(shè)計》



向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI