《深入理解分布式系統》之認識分布式系統

本文是閱讀深入理解分布式系統第一章認識分布式系統時的筆記。

分布式系統的特點

  • 多進程
  • 不共享操作系統
  • 不共享時鐘

分布式系統

  • 由多個可獨立運行的子系統組成。
  • 每個子系統可以獨立選擇運行平臺。
  • 不同的運行平臺存在差異,比如操作系統,硬件規格等。
  • 由于底層平臺不同,因此無法共享底層基礎設施,比如:
    • 通信,無法使用單機常見的通信機制,只能使用消息來通信,比如TCP、消息隊列等。
    • 時鐘,不同平臺的時鐘精度不同,或多或少存在一定的誤差,且無法完全避免。

傳統的單體應用
與分布式系統相比:

  • 所有子系統或者組件在同一個進程內運行。
  • 所有子系統運行于相同的平臺上,依賴相同的底層平臺。
  • 所有的子系統需要適配共同平臺的特點,適應優點和缺點。
  • 所有的子系統共享相同平臺的基礎設施。
    • 由于在同一個進程內,子系統之間通信時,可選擇的方案很多,并且可靠。
    • 在同一個平臺上,時鐘的誤差相對穩定,對所有子系統的影響是相同的。

分布式系統的異構優勢
對于分布式系統而言,不同的子系統可以使用不同的底層平臺和硬件規格,因此可以依據不同的需求,做出不同的選擇。比如:

  • 對于計算密集型的子系統,可以配置核數多、計算頻率高的CPU。
  • 對于緩存型業務的子系統,可以配置大的內存,盡可能將數據緩存至內存中,提升緩存的訪問效果。
  • 對于網絡I/O密集型的子系統,可以配置帶寬大、處理能力強的網卡。
  • 對于文件I/O密集且時延敏感的子系統,可以配置SSD盤,降低I/O處理時延,提升I/O吞吐量。
  • 對于文件I/O密集且時延不敏感、吞吐量敏感的子系統,可以配置HDD盤,滿足大帶寬的訪問能力,同時有效降低成本。

使用分布式系統的主要動力
使用分布式系統來承載業務交付的主要動力:

  • 高性能
    簡單的堆砌硬件,提升硬件規格,可能已經無法滿足客戶對業務性能的訴求。
    提升硬件的規格目前面臨物理定律的限制,提升的難度和成本快速增長,相比之下提升規格的效益和投入成本越來越不匹配。
    從單機系統遷移至多機的分布式系統,堆砌簡單、低成本的硬件,期望換取性能的線性或者準線性增長。
  • 可擴展性
    性能不足時,可以通過向集群中增加新的節點,來提升性能,同時不會顯著增加系統復雜度以及各類成本。
  • 高可用
    降低子系統失效時,對業務整體的影響。
  • 必要性
    不同地域,不同業務歸屬等原因,導致一些業務系統天然具備分布式系統的特征。

個人見解
在做技術選型時,從開發、驗證、維護的角度來說,假如單體系統或者單體應用可以滿足客戶要求的功能、性能、擴展性等要求的話,優先選擇單體的方案,快速交付、快速滿足客戶需求,爭取到活下來的機會,然后再依據客戶的訴求,業務發展的方向,逐步遷移技術路徑,將單體應用逐步改造為分布式系統,支撐業務不斷迭代和成長。

常見的分布式系統
依據Google的成功經驗,梳理分布式系統的服務,如下:

  • 分布式鎖服務
  • 分布式協調服務
  • 分布式緩存服務,鍵值對
  • 分布式存儲服務
    • 分布式塊服務
    • 分布式文件服務
    • 分布式對象服務
  • 分布式數據庫
    • NoSQL數據庫
    • 行式數據庫
    • 列式數據庫
  • 分布式緩存型數據庫
    • 行式數據庫
    • 列式數據庫
  • 分布式批處理服務
  • 分布式流處理服務
  • 分布式計算服務
  • 分布式圖計算服務
  • 分布式調度服務
    • 任務的類型
      • 定時任務
      • 一次性任務
    • 任務的操作
      • 新建
      • 執行
      • 暫停
      • 刪除
    • 任務之間的依賴關系
    • 資源的分配和管理
  • 時鐘服務
  • DNS服務
  • 集群管理
    • 擴容
    • 縮容
    • 隔離
    • 監控
      • 告警
      • 性能
    • 升級
    • 回退
    • 打補丁

常見的思維誤區
設計、交付分布式系統時,常見的思維誤區:

  • 網絡是可靠的。
  • 子系統間傳遞信息的延遲為零。
  • 子系統間傳遞信息時的帶寬是無限的。
  • 子系統間通信時的網絡是安全的。
  • 網絡拓撲結構不會發生改變。
  • 有單一、萬能且不會犯錯的管理員。
  • 子系統之間傳遞信息的傳輸成本為零。
  • 網絡是同構的。

網絡延遲類的問題
在傳遞消息時,發送者創建、發送消息,消息通過網絡傳遞至接收者。

  • 從發送者角度來看

    • 消息丟失,即發送消息后,消息沒有傳遞給接收端。
    • 在超時前,沒有等到回應,即發送消息后,發送者等待一段時間后沒有收到接收者的回應,從而判定消息丟失。但有可能接收者確實收到了消息,但整體上耗時超出發送者的預期。
    • 重試之后,仍然無法按照發送者預期的方式通信,導致發送者判定接收者失效,但接收者可能是正常的。
    • 網絡傳輸消息時,可能無法保證時序,即發送者接收到響應消息,但順序和預期存在差異。
  • 從接收者的角度來看

    • 發送者可能重復發送了消息,比如發送者設置的超時值太短。
    • 網絡在傳遞消息時,可能由于各種原因,多次傳遞了消息,導致接收者收到了重復的消息。
    • 網絡傳輸消息時,可能無法保證時序,即接收者收到消息時,消息的順序和發送時的順序不同。

部分失效的問題
客戶期望分布式系統中個別子系統失效,不影響整體業務的表現。
但在分布式系統中,各子系統可能會以預想不到的方式出現失效,從而顯著提升相關問題的定位、修復的難度。

時鐘的問題
手表定律

擁有兩塊以上的手表并不能幫人更準確的判斷時間,反而會制造混亂,讓看表的人失去對時間的判斷。

對于分布式系統而言,由于子系統運行在各種平臺上,各自擁有不同的時鐘,從而導致無法準確、一致的預計時間,因此判斷事件的先后順序,變成了一件極其有挑戰的事情。

常規操作的規格
掌握常見操作的時延,有助于評估分布式系統場景下各業務處理流程的耗時,從而選擇最佳的實現方案。

常見的評估指標
比如時延、帶寬、吞吐量等。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/82424.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/82424.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/82424.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

UE5 PCG學習筆記

https://www.bilibili.com/video/BV1onUdY2Ei3/?spm_id_from333.337.search-card.all.click&vd_source707ec8983cc32e6e065d5496a7f79ee6 一、安裝PCG 插件里選擇以下進行安裝 移動目錄后,可以使用 Update Redirector References,更新下&#xff0…

工業現場ModbusTCP轉EtherNETIP網關引領生物現場領新浪潮

生物質發生器是一種能夠產生、培養生物的設備。客戶現場需要將生物發生器連接到羅克韋爾系統,但是二者協議無法直接通訊,需要通過ModbusTCP轉Ethernet/IP網關將兩者進行通訊連接,生物質發生器以其獨特的工作原理和優勢,使得生物的…

寶藍德中間件部署war包時,配置的絕對路徑讀取錯誤。

文章目錄 問題場景解決辦法寶藍德是什么??一、基礎環境與依賴配置二、自動化部署工具鏈三、高可用性與集群配置四、安全與合規性措施五、產品線差異化部署六、典型部署流程示例七、運維與優化 原因1. 明確“當前工作目錄”與“絕對路徑”的關系2. 問題根…

Java、Python、NodeJS等開發環境安裝及配置鏡像加速到國內源

文章目錄 Java1.Windows1.1 scoop方式安裝JDK 2.Linux2.1 apt方式安裝JDK2.1.1 切換JDK2.1.2 驗證版本2.1.3 原理 Python1.Windows1.1 scoop方式安裝Python1.2 uv方式安裝Python(推薦) 2.Linux2.1 apt方式安裝Python2.1.1 配置版本切換2.1.2 切換Python2…

Linux系統管理與編程16:PXE自動化安裝部署centos7.9操作系統

蘭生幽谷,不為莫服而不芳; 君子行義,不為莫知而止休。 0.準備 1)防火墻和SELinux systemctl stop firewalld systemctl disable firewalld setenforce 0 sed -i s/^SELINUX.*/SELINUXdisabled/ /etc/selinux/config (很不好的…

MCP(Model Context Protocol)是專為LLM(大語言模型)應用設計的標準化協議

核心定義 MCP(Model Context Protocol)是專為LLM(大語言模型)應用設計的標準化協議,通過安全可控的方式向AI應用暴露數據和功能。主要提供以下能力: 標準化的上下文管理安全的功能調用接口跨平臺的數據交…

Fiori學習專題三十四:Responsiveness

在這一步中,我們提高了應用程序的響應能力。SAPUI5應用程序可以在手機、平板電腦和臺式機設備上運行,我們可以配置應用程序以充分利用每種場景的屏幕狀態。幸運的是,像sap.m.Table這樣的SAPUI5控件已經提供了許多我們可以使用的功能。 1.修改…

解決 TimeoutError: [WinError 10060] 在 FramePack項目中連接 Hugging Face 超時的問題

#工作記錄 以下是針對 TimeoutError: [WinError 10060] 的完整排查方案,適用于 FramePack項目中。 (一般該錯誤的發生原因請重點排查Hugging Face模型倉庫受限需要登錄的情形) FramePack項目參考資料 FramePack部署(從PyCharm解…

obj = null; 賦值null之前沒有其他引用指向obj對象,那么,當obj=null時,會被垃圾回收機制立即回收嗎?

不會立即回收。 具體原因是: 賦值 obj null; 后,對象變成“不可達”,符合垃圾回收條件,但垃圾回收器并不會立刻回收它。垃圾回收是CLR自動控制的非確定性過程,什么時候執行回收取決于系統內存壓力、GC策略、分代情況…

【Ubuntu 安裝Docker CE-Jenkins】

安裝Docker CE(Ubuntu) Install | Docker Docs官網 使用apt倉庫安裝 DNS配置(可選) #手動替換 sudo vim /etc/systemd/resolved.conf #典型配置如下 [Resolve] DNS8.8.8.8 DNS114.114.114.114 FallbackDNS1.1.1.1 # 備用 DNS#sed替換 sudo sed -i /^#DNS/ {s/#DNS/DNS8.8.8…

5、開放式PLC梯形圖編程組件 - /自動化與控制組件/open-plc-programming

76個工業組件庫示例匯總 開放式PLC編程環境 這是一個開放式PLC編程環境的自定義組件,提供了一個面向智能倉儲堆垛機控制的開放式PLC編程環境。該組件采用蘋果科技風格設計,支持多廠商PLC硬件,具有直觀的界面和豐富的功能。 功能特點 多語…

內網和外網怎么互通?外網訪問內網的幾種簡單方式

在企業或家庭網絡中,經常會遇到不同內網環境下網絡互通問題。例如,當公司本地局域網內有個辦公OA網站,在辦公室內電腦上網可以登錄使用,但在家帶寬下就無法直接通信訪問到。這就需要我們采取一些實用的內外網互通技巧來解決這個問…

使用大語言模型進行機器人規劃(Robot planning with LLMs)

李升偉 編譯 長期規劃在機器人學領域可以從經典控制方法與大型語言模型在現實世界知識能力的結合中獲益。 在20世紀80年代,機器人學和人工智能(AI)領域的專家提出了莫雷奇悖論,觀察到人類看似簡單的涉及移動和感知的任務&#x…

【計算機視覺】OpenCV實戰項目: opencv-text-deskew:實時文本圖像校正

opencv-text-deskew:基于OpenCV的實時文本圖像校正 一、項目概述與技術背景1.1 核心功能與創新點1.2 技術指標對比1.3 技術演進路線 二、環境配置與算法原理2.1 硬件要求2.2 軟件部署2.3 核心算法流程 三、核心算法解析3.1 文本區域定位3.2 角度檢測優化3.3 仿射變換…

可視化圖解算法33:判斷是不是平衡二叉樹

1. 題目 描述 輸入一棵節點數為 n 的二叉樹,判斷該二叉樹是否是平衡二叉樹。 在這里,我們只需要考慮其平衡性,不需要考慮其是不是排序二叉樹 平衡二叉樹(Balanced Binary Tree),具有以下性質&#xff1…

【Linux網絡】應用層自定義協議與序列化

應用層自定義協議與序列化 應用層 我們程序員寫的一個個解決我們實際問題,滿足我們日常需求的網絡程序,都是在應用層. 協議是一種"約定".Socket的接口,在讀寫數據時,都是按"字符串"的方式來發送接收的.如果我們要傳輸一些"結構化的數據"怎么辦…

MySQL + Elasticsearch:為什么要使用ES,使用場景與架構設計詳解

MySQL Elasticsearch:為什么要使用ES,使用場景與架構設計詳解 前言一、MySQL Elasticsearch的背景與需求1.1 為什么要使用Elasticsearch(ES)?1.2 為什么MySQL在某些場景下不足以滿足需求?1.3 MySQL Elas…

PPL困惑度的計算

1. 公式 PPL(Perplexity)困惑度 是自然語言處理(NLP)中常用的評估語言模型(Language Model)性能的指標。PPL 用于衡量語言模型對語言序列的預測能力,數值越小,說明模型的預測能力越…

MegaCLI Raid管理工具

整理在CentOS 7.9和Ubuntu 24.04上,MegaCLI 工具的安裝與常用命令。 1. 參考 下載和安裝MegaCLI工具 MegaCli RAID管理工具 Megacli 批量磁盤巡檢 ubuntu24.04 No such file libncursesw.so.5 dell服務器硬盤的狀態變成外來(foreign)命…

HTML9:頁面結構分析

頁面結構分析 元素名描述header標題頭部區域的內容(用于頁面或頁面中的一塊區域)footer標記腳部區域的內容(用于整個頁面或頁面的一塊區域)sectionWeb頁面的一塊獨立區域article獨立的文章內容aside相關的內容或應用(…