分布式架構與分布式理論

文章目錄

    • 分布式架構
      • 什么是分布式系統
      • 分布式系統特性
      • 分布式系統面臨的問題
    • 分布式理論
      • 數據一致性
      • CAP理論
      • BASE理論

分布式架構

什么是分布式系統

分布式系統是一個硬件或軟件組件分布在不同的網絡計算機上,彼此之間僅僅通過消息傳遞進行通信和協調的系統。

所謂分布式系統,就是一個業務拆分成多個子業務,分布在不同的服務器節點,共同構成的系統稱為分布式系統,同一個分布式系統中的服務器節點在空間部署上是可以隨意分布的,這些服務器可能放在不同的機柜中,也可能在不同的機房中,甚至分布在不同的城市。

在這里插入圖片描述
分布式與集群的區別

集群: 多個服務器做同一個事情

在這里插入圖片描述
分布式: 多個服務器做不同的事情

在這里插入圖片描述

分布式系統特性

  • 分布性:空間中隨機分布。這些計算機可以分布在不同的機房,不同的城市,甚至不同的國家。
  • 對等性:分布式系統中的計算機沒有主/從之分,組成分布式系統的所有節點都是對等的。
  • 并發性:同一個分布式系統的多個節點,可能會并發地操作一些共享的資源,諸如數據庫或分布式存儲。
  • 缺乏全局時鐘:既然各個計算機之間是依賴于交換信息來進行相互通信,很難定義兩件事件的先后順序,缺乏全局時鐘控制序列
  • 故障總會發生:組成分布式的計算機,都有可能在某一時刻突然間崩掉。分的計算機越多,可能崩掉一個的幾率就
    越大。如果再考慮到設計程序時的異常故障,也會加大故障的概率。
  • 處理單點故障:單點SPoF(Single Point of Failure):某個角色或者功能只有某一臺計算機在支撐,在這臺計算機上出現的故障是單點故障。

分布式系統面臨的問題

  • 通信異常
    網絡本身的不可靠性,因此每次網絡通信都會伴隨著網絡不可用的風險(光纖、路由、DNS等硬件設備或系統的不可用),都會導致最終分布式系統無法順利進行一次網絡通信,另外,即使分布式系統各節點之間的網絡通信能夠正常執行,其延時也會大于單機操作,存在巨大的延時差別,也會影響消息的收發過程,因此消息丟失和消息延遲變的非常普遍。
    在這里插入圖片描述

  • 網絡分區
    網絡之間出現了網絡不連通,但各個子網絡的內部網絡是正常的,從而導致整個系統的網絡環境被切分成了若干個孤立的區域,分布式系統就會出現局部小集群,在極端情況下,這些小集群會獨立完成原本需要整個分布式系統才能完成的功能,包括數據的事務處理,這就對分布式一致性提出非常大的挑戰。
    在這里插入圖片描述

  • 節點故障
    節點故障是分布式系統下另一個比較常見的問題,指的是組成分布式系統的服務器節點出現的宕機或"僵死"現象,根據經驗來說,每個節點都有可能出現故障,并且經常發生.

  • 三態
    分布式系統每一次請求與響應存在特有的“三態”概念,即成功、失敗和超時。
    在這里插入圖片描述

  • 重發
    分布式系統在發生調用的時候可能會出現 失敗 超時 的情況. 這個時候需要重新發起調用.
    在這里插入圖片描述

  • 冪等
    一次和多次請求某一個資源對于資源本身應該具有同樣的結果(網絡超時等問題除外)。也就是說,其任意多次執行對資源本身所產生的影響均與一次執行的影響相同
    在這里插入圖片描述

分布式理論

數據一致性

分布式數據一致性,指的是數據在多份副本中存儲時,各副本中的數據是一致的。
在這里插入圖片描述

副本一致性
分布式系統當中,數據往往會有多個副本。多個副本就需要保證數據的一致性。這就帶來了同步的問題,因為網絡延遲等因素, 我們幾乎沒有辦法保證可以同時更新所有機器當中的包括備份所有數據. 就會有數據不一致的情況。
在這里插入圖片描述

一致性分類

  1. 強一致性:是最符合用戶直覺的,它要求系統寫入什么,讀出來的也會是什么,用戶體驗好,但實現起來往往對系統的性能影響大。強一致性很難實現。

  2. 弱一致性:約束了系統在寫入成功后,不承諾立即可以讀到寫入的值,也不承諾多久之后數據能夠達到一致,但會盡可能地保證到某個時間級別(比如秒級別)后,數據能夠達到一致狀態。

  3. 最終一致性:最終一致性也是弱一致性的一種,它無法保證數據更新后,所有后續的訪問都能看到最新數值,而是需要一個時間,在這個時間之后可以保證這一點(就是在一段時間后,節點間的數據會最終達到一致狀態),而在這個時間內,數據也許是不一致的,這個系統無法保證強一致性的時間片段被稱為「不一致窗口」。不一致窗口的時間長短取決于很多因素,比如備份數據的個數、網絡傳輸延遲速度、系統負載等。
    在這里插入圖片描述
    最終一致性在實際應用中又有多種變種:

    • 因果一致性:如果進程A通知進程B它已更新了一個數據項,那么進程B的后續訪問將返回更新后的值。與進程A無因果關系的進程C的訪問遵守一般的最終一致性規則
      在這里插入圖片描述
    • 讀己之所寫一致性:當進程A自己更新一個數據項之后,它總是訪問到更新過的值,絕不會看到舊值。這是因果一致性模型的一個特例
      在這里插入圖片描述
    • 會話一致性:它把訪問存儲系統的進程放到會話的上下文中。只要會話還存在,系統就保證“讀己之所寫”一致性。如果由于某些失敗情形令會話終止,就要建立新的會話,而且系統的保證不會延續到新的會話。
      在這里插入圖片描述
    • 單調讀一致性:如果一個進程已經讀取到一個特定值,那么該進程不會讀取到該值以前的任何值。
      在這里插入圖片描述
    • 單調寫一致性:系統保證對同一個進程的寫操作串行化。
      在這里插入圖片描述
  4. 一致性模型圖
    在這里插入圖片描述

CAP理論

CAP定理(CAP theorem),又被稱作布魯爾定理(Brewer’s theorem),它指出對于一個分布式計算系統來說,不可能同時滿足以下三點

選項含義
一致性(Consistency)所有節點訪問時都是同一份最新的數據副本
可用性(Availability)每次請求都能獲取到正常的響應,但是不保證獲取的數據為最新數據
分區容錯性(Partition tolerance)分布式系統在遇到任何網絡分區故障的時候,仍然能夠對外提供滿足一致性和可用性的服務,
除非整個網絡環境都發生了故障
  1. 一致性
    這里指的是強一致性
    在寫操作完成后開始的任何讀操作都必須返回該值,或者后續寫操作的結果. 也就是說,在一致性系統中,一旦客戶端將值寫入任何一臺服務器并獲得響應,那么之后client從其他任何服務器讀取的都是剛寫入的數據
    在這里插入圖片描述

    • 客戶端向G1寫入數據v1,并等待響應
    • 此時,G1服務器的數據為v1,而G2服務器的數據為v0,兩者不一致
    • 接著,在返回響應給客戶端之前,G2服務器會自動同步G1服務器的數據,使得G2服務器的數據也是v1
    • 一致性保證了不管向哪臺服務器(比如這邊向G1)寫入數據,其他的服務器(G2)能實時同步數據
    • G2已經同步了G1的數據,會告訴G1,我已經同步了
    • G1接收了所有同步服務器的已同步的報告,才將“寫入成功”信息響應給client
    • client再發起請求,讀取G2的數據
    • 此時得到的響應是v1,即使client讀取數據到G2
  2. 可用性
    系統中非故障節點收到的每個請求都必須有響應. 在可用系統中,如果我們的客戶端向服務器發送請求,并且服務器未崩潰,則服務器必須最終響應客戶端,不允許服務器忽略客戶的請求

  3. 分區容錯性
    允許網絡丟失從一個節點發送到另一個節點的任意多條消息,即不同步. 也就是說,G1和G2發送給對方的任何消息都是可以放棄的,也就是說G1和G2可能因為各種意外情況,導致無法成功進行同步,分布式系統要能容忍這種情況。
    在這里插入圖片描述
    在實際的業務中,這三方面是不能同時滿足的,也很容易證明,最多只能滿足其中的兩個
    在這里插入圖片描述

CAP三者如何權衡

  • CA (Consistency + Availability):關注一致性和可用性,它需要非常嚴格的全體一致的協議。CA 系統不能容忍網絡錯誤或節點錯誤,一旦出現這樣的問題,整個系統就會拒絕寫請求,因為它并不知道對面的那個結點是否掛掉了,還是只是網絡問題。唯一安全的做法就是把自己變成只讀的。
  • CP (consistency + partition tolerance):關注一致性和分區容忍性。它關注的是系統里大多數人的一致性協議。這樣的系統只需要保證大多數結點數據一致,而少數的結點會在沒有同步到最新版本的數據時變成不可用的狀態。這樣能夠提供一部分的可用性。
  • AP (availability + partition tolerance):這樣的系統關心可用性和分區容忍性。因此,這樣的系統不能達成一致性,需要給出數據沖突,給出數據沖突就需要維護數據版本。

如何進行3選2:
放棄了一致性,滿足分區容錯,那么節點之間就有可能失去聯系,為了高可用,每個節點只能用本地數據提供服務,而這樣會容易導致全局數據不一致性。對于互聯網應用來說,機器數量龐大,節點分散,網絡故障再正常不過了,那么此時就是保障AP,放棄C的場景,而從實際中理解,像網站這種偶爾沒有一致性是能接受的,但不能訪問問題就非常大了。
對于銀行來說,就是必須保證強一致性,也就是說C必須存在,那么就只用CA和CP兩種情況,當保障強一致性和可用性(CA),那么一旦出現通信故障,系統將完全不可用。另一方面,如果保障了強一致性和分區容錯(CP),那么就具備了部分可用性。實際究竟應該選擇什么,是需要通過業務場景進行權衡的(并不是所有情況都是CP好于CA,只能查看信息但不能更新信息有時候還不如直接拒絕服務)

BASE理論

上面我們講到CAP 不可能同時滿足,而分區容錯性是對于分布式系統而言,是必須的。最后,我們說,如果系統能夠同時實現 CAP 是再好不過的了,所以出現了 BASE 理論

BASE:全稱:Basically Available(基本可用),Soft state(軟狀態),和 Eventually consistent(最終一致性)三個短語的縮寫 ,Base 理論是對 CAP 中一致性和可用性權衡的結果,其來源于對大型互聯網分布式實踐的總結,是基于 CAP 定理逐步演化而來的。其核心思想是: 既是無法做到強一致性(Strong consistency),但每個應用都可以根據自身的業務特點,采用適當的方式來使系統達到最終一致性(Eventual consistency)。

  1. Basically Available(基本可用)
    什么是基本可用呢?假設系統,出現了不可預知的故障,但還是能用,相比較正常的系統而言:

    • 響應時間上的損失:正常情況下的搜索引擎 0.5 秒即返回給用戶結果,而基本可用的搜索引擎可以在 1 秒返回結果。
    • 功能上的損失:在一個電商網站上,正常情況下,用戶可以順利完成每一筆訂單,但是到了大促期間,為了保護購物系統的穩定性,部分消費者可能會被引導到一個降級頁面
      在這里插入圖片描述
  2. Soft state(軟狀態)
    什么是軟狀態呢?相對于原子性而言,要求多個節點的數據副本都是一致的,這是一種 “硬狀態”。軟狀態指的是:允許系統中的數據存在中間狀態,并認為該狀態不會影響系統的整體可用性,即允許系統在多個不同節點的數據副本存在數據延時

  3. Eventually consistent(最終一致性)
    上面說軟狀態,然后不可能一直是軟狀態,必須有個時間期限。在期限過后,應當保證所有副本保持數據一致性。從而達到數據的最終一致性。這個時間期限取決于網絡延時,系統負載,數據復制方案設計等等因素。

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

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

相關文章

Vue的APP實現下載文件功能,并將文件保存到手機中

Vue的APP實現下載文件功能,并將文件保存到手機中 文字說明后臺核心代碼前臺核心代碼運行截圖項目鏈接 文字說明 本文介紹Vue實現的APP,將文件下載并保存到手機中,為系統提供導出功能;同時支持導入,即選擇本地的文件后&…

Ubuntu18.04 文件管理器無法打開的解決方法

問題:打開Ubuntu虛擬機發現文件管理器無法打開,一直在轉圈圈 在終端中輸入 nautilus 顯示如下信息 nautilus: symbol lookup error: /usr/lib/x86_64-linux-gnu/tracker-2.0/libtracker-data.so.0: undefined symbol: sqlite3_bind_pointer 解決措施&#xff1a…

LabVIEW 反向工程的實現與法律地位

什么是LabVIEW反向工程? 反向工程是指從現有的應用程序或軟件中推導出其設計、架構、代碼等信息的過程。對于LabVIEW而言,反向工程涉及從現有的VI(虛擬儀器)文件、項目或應用程序中提取出設計思路、功能模塊、算法實現等。 LabV…

Spring Boot整合Jasypt 庫實現配置文件和數據庫字段敏感數據的加解密

😄 19年之后由于某些原因斷更了三年,23年重新揚帆起航,推出更多優質博文,希望大家多多支持~ 🌷 古之立大事者,不惟有超世之才,亦必有堅忍不拔之志 🎐 個人CSND主頁——Mi…

代碼隨想錄第二十九天打卡| 491.遞增子序列,46.全排列,47.全排列 II

491.遞增子序列 本題和大家剛做過的 90.子集II 非常像,但又很不一樣,很容易掉坑里。 代碼隨想錄 視頻講解:回溯算法精講,樹層去重與樹枝去重 | LeetCode:491.遞增子序列_嗶哩嗶哩_bilibili class Solution { public:…

好用軟件推薦

軟件功能相關介紹地址FastStone截圖(長截圖、定時截圖等)CSDNhttps://www.faststone.org/FSCaptureDownload.htmQuicker快捷訪問https://getquicker.net/https://getquicker.net/

大數據學習問題記錄

問題記錄 node1突然無法連接finalshell node1突然無法連接finalshell 今天我打開虛擬機和finalshell的時候,發現我的node1連接不上finalshell,但是node2、node3依舊可以鏈接,我在網上找了很多方法,但是是關于全部虛擬機連接不上finalshell&a…

統一返回響應

前言 我們為什么要設置統一返回響應 提高代碼的可維護性:通過統一返回請求的格式,可以使代碼更加清晰和易于維護,減少重復的代碼,提高代碼質量。 便于調試和測試:統一的返回格式使得在調試和測試時更為簡單&#xff…

大模型時代,是 Infra 的春天還是冬天?

Highlights 大模型時代元年感悟 Scaling Laws 是大模型時代的摩爾定律,是最值得研究的方向 LLM 發展的三個階段: 算法瓶頸 -> 數據瓶頸 -> Infra 瓶頸 為什么 GPT 一枝獨秀, BERT、T5 日落西山? 大模型時代,是大部分 Infra 人的冬天,少部分 Infra 人的春天(算法研…

算法金 | 一文讀懂K均值(K-Means)聚類算法

?大俠幸會,在下全網同名[算法金] 0 基礎轉 AI 上岸,多個算法賽 Top [日更萬日,讓更多人享受智能樂趣] 1. 引言 數據分析中聚類算法的作用 在數據分析中,聚類算法用于發現數據集中的固有分組,通過將相似對象聚集在一…

Qt——前言

一、Qt介紹 ? **Qt技術特指用來桌面應用開發;**客戶端開發的重要任務就是編寫和用戶交互的界面;而與用戶交互的界面有兩種典型風格,1.命令行界面/終端界面,TUI;2.圖形化界面,GUI; ? Qt就是用…

統一響應,自定義校驗器,自定義異常,統一異常處理器

文章目錄 1.基本準備(構建一個SpringBoot模塊)1.在A_universal_solution模塊下創建新的子模塊unified-processing2.pom.xml引入基本依賴3.編寫springboot啟動類4.啟動測試 2.統一響應處理1.首先定義一個響應枚舉類 RespBeanEnum.java 每個枚舉對象都有co…

信息學奧賽初賽天天練-20-完善程序-vector數組參數引用傳遞、二分中值與二分邊界應用的深度解析

PDF文檔公眾號回復關鍵字:20240605 1 2023 CSP-J 完善程序1 完善程序(單選題,每小題 3 分,共計 30 分) 原有長度為 n1,公差為1等升數列,將數列輸到程序的數組時移除了一個元素,導致長度為 n 的開序數組…

云原生架構案例分析_5.某體育用品公司云原生架構的業務中臺構建

1.背景和挑戰 某體育用品公司作為中國領先的體育用品企業之一,在2016年,某體育用品公司啟動集團第三次戰略升級,打造以消費者體驗為核心的“3”(“互聯網”、“體育”和“產品”)的戰略目標,積極擁抱云計算…

NeuralForecast TokenEmbedding 一維卷積 (Conv1d) 與矩陣乘法

NeuralForecast TokenEmbedding 一維卷積 (Conv1d) 與矩陣乘法 flyfish TokenEmbedding中使用了一維卷積 (Conv1d) TokenEmbedding 源碼分析 在源碼的基礎上增加調用示例 下面會分析這段代碼 import torch import torch.nn as nn class TokenEmbedding(nn.Module):def __i…

C++模板類與Java泛型類的實戰應用及對比分析

C模板類和Java泛型類都是用于實現代碼重用和類型安全性的重要工具,但它們在實現方式和應用上有一些明顯的區別。下面,我將先分別介紹它們的實戰應用,然后進行對比分析。 C模板類的實戰應用 C模板類允許你定義一種通用的類,其中類…

SEO 與 PPC 之間的區別

按點擊付費 (PPC): PPC 是一種網絡營銷技術,廣告商在每次點擊廣告時向網站支付一定金額,廣告商只為符合條件的點擊付費。Google 廣告、Bing 和 Yahoo 廣告基于按點擊付費的概念。PPC是用于在搜索引擎首頁上列出的最快方…

【前端】響應式布局筆記——rem

三、rem 指相對于根元素的字體大小的單位。 根字體大小通常設置為10px,方便換算。 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-s…

鴻蒙開發接口安全:【@system.cipher (加密算法)】

加密算法 說明&#xff1a; 本模塊首批接口從API version 3開始支持。后續版本的新增接口&#xff0c;采用上角標單獨標記接口的起始版本。 導入模塊 import cipher from system.ciphercipher.rsa rsa(Object): void RSA 算法加解密。 系統能力&#xff1a; SystemCapabil…

Pointnet++改進卷積系列:全網首發SMPConv連續卷積 |即插即用,提升特征提取模塊性能

簡介:1.該教程提供大量的首發改進的方式,降低上手難度,多種結構改進,助力尋找創新點!2.本篇文章對Pointnet++特征提取模塊進行改進,加入SMPConv,提升性能。3.專欄持續更新,緊隨最新的研究內容。 目錄 1.理論介紹 2.修改步驟 2.1 步驟一 2.2 步驟二 2.3 步驟