在學習分散式系統時遇到的五個常見誤解

来源:https://www.cnblogs.com/edisonfish/archive/2023/05/31/17447596.html
-Advertisement-
Play Games

哈嘍大家好,我是鹹魚 我們知道,隨著企業規模或者說業務規模的不斷擴大,為了應對不斷增長的業務需求和提高系統的可伸縮性、可靠性和性能,電腦系統由一開始的單體系統逐漸發展成分散式系統 那麼今天鹹魚給大家介紹一些關於小白在學習分散式系統遇到的一些常見誤解 ## 誤解1.網路是可靠的 **在分散式系統中, ...


哈嘍大家好,我是鹹魚

我們知道,隨著企業規模或者說業務規模的不斷擴大,為了應對不斷增長的業務需求和提高系統的可伸縮性、可靠性和性能,電腦系統由一開始的單體系統逐漸發展成分散式系統

那麼今天鹹魚給大家介紹一些關於小白在學習分散式系統遇到的一些常見誤解

誤解1.網路是可靠的

在分散式系統中,任何特定的網路通信都是不可靠的,都可能會失敗

比如說服務 A 與服務 B 進行通信,由於網路不穩定,導致它們之間的數據交換有丟失

這時候,我們就需要為系統提供一些解決方法來儘可能地保證服務 A 與服務 B 之間交換的數據不丟失

  • 重傳機制

其中就包括重傳機制,當網路通信出現問題時,可以通過重試機制來重新發送數據,直到數據被成功接收。重試機制可以提高數據傳輸的可靠性,但也會增加網路通信的負擔

  • 消息隊列

還有一種比較常見的解決方案就是存儲和轉發模式——數據並沒有直接發送給下游伺服器,而是將其存儲在處在上下游之間的中間伺服器上,下游伺服器再去中間伺服器上面取

看到這裡,是不是覺得這個方案很熟悉

沒錯,它就是消息隊列

在分散式系統中,可以採用消息隊列來解決網路通信不可靠導致數據丟失的問題。消息隊列可以將數據存儲在隊列中,等待接收方處理,以保證數據的可靠性

誤解2.延遲為零

在分散式系統中,服務與服務之間有可能不僅僅是邏輯上的分佈,還有可能是地理位置上的分佈

那麼就會出現服務與服務之間的通信有延遲,而且這種延遲是無法避免的,延遲可以說是任何網路請求的必須開銷

通信延遲的主要原因包括數據傳輸的物理距離、網路擁塞、傳輸介質的帶寬和傳輸協議等。由於光傳播速度的限制,跨越較長距離的數據傳輸會導致一定的傳輸延遲

舉個例子,假設一個電子商務平臺的分散式架構包括前端應用伺服器、商品服務和用戶服務,它們分別部署在美國和中國兩個地區的數據中心

當用戶在中國訪問該電商平臺時,其請求需要經過國際互聯網進行跨洲傳輸,可能會導致通信延遲增加。這種延遲會對用戶體驗產生影響,例如網頁載入速度變慢或交互響應時間延長

現在比較常見的解決方案就是——內容分髮網絡(Content delivery networks, CDN)

誤解3.網路是安全的

沒有絕對安全的網路

在分散式系統中,網路存在不安全的情況是一個重要的問題。由於分散式系統的核心特點是通過網路進行通信和數據傳輸,網路的不安全性可能導致以下問題:

  1. 數據泄露:網路傳輸過程中,如果未加密或傳輸通道存在漏洞,敏感數據可能被截獲或竊取,導致數據泄露的風險
  2. 數據篡改:網路中的攻擊者可能截取、篡改或偽造數據包,對數據進行惡意篡改或操縱,從而影響系統的完整性和可靠性
  3. DOS 和 DDOS 攻擊:網路中的攻擊者可以通過拒絕服務(Denial of Service,DoS)攻擊或分散式拒絕服務(Distributed Denial of Service,DDoS)攻擊,使系統無法正常響應合法用戶的請求,導致服務不可用
  4. 身份驗證和授權問題:分散式系統中的各個節點需要相互進行身份驗證和授權,以確保只有合法的用戶或服務可以訪問系統資源。網路不安全可能導致身份偽造、惡意訪問和許可權提升等問題

為了應對分散式系統中網路不安全的情況,可以採取以下安全措施:

  1. 加密通信:使用加密協議和演算法對數據進行加密,確保在網路傳輸過程中數據的機密性和完整性。
  2. 身份驗證和授權:採用安全的身份驗證機制,例如使用證書、令牌或雙因素認證等,驗證用戶或服務的身份,併為其分配適當的訪問許可權。
  3. 安全傳輸層協議(TLS):使用TLS協議保護網路通信,確保數據在傳輸過程中的安全性和完整性。
  4. 防火牆和入侵檢測系統:在網路邊界部署防火牆和入侵檢測系統,監測和阻止惡意流量和攻擊,保護系統免受未經授權的訪問和攻擊。
  5. 安全審計和日誌監控:記錄和監控系統的安全事件和活動,及時檢測異常行為,併進行安全審計和調查。
  6. 安全更新和漏洞修複:及時更新和修補系統中存在的安全漏洞,確保系統的安全性和穩定性。

誤解4.架構是一成不變的

分散式系統的架構通常是動態的,不是固定的

在分散式系統中,節點可以隨時加入或退出,並且節點之間的連接關係可以發生變化

這樣的好處是什麼呢?

  • 彈性擴展

分散式系統的一個主要優勢是能夠根據需求進行彈性擴展。當系統負載增加時,可以通過添加更多的節點來分擔負載

這種擴展可以是垂直的(增加節點的資源容量)或水平的(增加節點的數量),並且可以根據需要進行動態調整。這種靈活性使得系統能夠適應變化的負載需求

  • 提高容錯性

在分散式系統中,即使某個節點發生故障或斷開連接,系統仍然能夠繼續運行(避免了單點故障)

其他節點可以接管故障節點的工作,並保持系統的可用性和穩定性。這種容錯性使得分散式系統更加健壯和可靠

  • 數據冗餘

為了提高系統的性能和可靠性,分散式系統通常會在不同的節點之間複製和存儲數據的副本

副本(Replica)是分散式系統最常見的概念之一。當某一個節點上存儲的數據丟失時,可以從副本上讀取該數據以此來解決數據丟失的問題

誤解5.傳輸成本為0

雖然分散式系統提供了節點之間的通信和數據交換能力,但實際上,這種信息傳輸是需要消耗資源和產生成本的

  • 帶寬消耗

節點之間的信息傳輸需要利用網路帶寬進行數據傳輸

帶寬是有限的資源,因此在分散式系統中進行大量的數據傳輸會占用網路帶寬,從而導致其他數據傳輸速度的下降或延遲

  • 網路延遲

信息在分散式系統中傳輸需要經過網路,而網路延遲是不可避免的

這包括了傳輸時間、傳播時間以及在路由器和網路設備上的處理時間等

分散式系統中,節點之間的信息傳輸可能會受到網路延遲的影響,特別是當節點之間的地理位置較遠時,通信延遲可能更高

  • 數據傳輸安全

在分散式系統中,確保信息傳輸的安全性是至關重要的

為了保護數據的隱私和完整性,可能需要採取加密、認證和訪問控制等安全措施,這也會增加信息傳輸的成本和複雜性


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 我們天天都在使用 Console.WriteLine("Hello world"); ​ Console.ReadLine(""); ​ Arrays.Sort() 為什麼Console 類 調用 方法不需要實例化而可以直接調用呢? 我們可以查看Console的源碼發現Console類定義如下 ...
  • 假設,班級里40位同學,我們用程式保存40位學生的信息:學號,姓名,性別,生日,身份證號。如果是你,你會怎麼實現? 小菜同學拿到這個題,奮書疾筆,馬上寫出如下代碼: ArrayList list = new ArrayList(); ​ string stuNo1="10001"; string n ...
  • 1. 數組(Array) 數組是一個存儲相同類型元素的固定大小的順序集合。數組是用來存儲數據的集合,通常認為數組是一個同一類型變數的集合。 聲明數組變數並不是聲明 number0、number1、...、number99 一個個單獨的變數,而是聲明一個就像 numbers 這樣的變數,然後使用 nu ...
  • 今天這一份資料庫可以幫助學習認識簡繁體字。資料庫提供簡繁欄位,可以根據簡體選擇繁體,也可以根據繁體選擇簡體。 需要說明的是: 1.有很多簡體繁體字是一樣的,簡體字繁體字不一樣的記錄一共僅有3168條。 2.簡字中存在相同字多條記錄的情況,如下圖,不相同的簡字統計共有2萬多個。 3.同2一樣繁字中也存 ...
  • 很多時間,寫代碼並不能一擼到底,中間都是經歷過無數次的調試,才能正常正確的運行起來。就好像一臺設備剛買來也需要不斷的調試才能達到最佳狀態。 DotNet程式的調試,是DotNet程式員必備的技能之一,開發出穩定的程式、解決程式的疑難雜症都需要很強大的調試能力。DotNet調試有很多方法和技巧。 1. ...
  • C# 流程語句分為:順序結構,選擇結構,迴圈結構。 1. 順序結構 順序結構指的是程式一步步向下執行。 int a =10; int b =a; a++; 2. 選擇結構 C# 提供以下類型的選擇語句。 聲明描述 if聲明 一個if語句包含一個布爾表達式後跟一個或多個語句。 if...else聲明 ...
  • 在用雲伺服器搭建網站的時候,我們通常在Windows上寫好網站,再使用FTP客服端把寫好的網頁傳到Linux伺服器上。用Nginx搭建web伺服器時,預設的網站目錄是/var/www/html,該目錄的所有者是root和root組,如果用非root許可權的普通用戶登陸FTP,是無法對/var/www/ ...
  • 大家好,我是 god23bin。歡迎大家繼續圍觀《一分鐘學一個 Linux 命令》,每天只需一分鐘,記住一個 Linux 命令不成問題。本篇文章將聚焦於 pwd 命令,一個超級簡單又常用的命令。 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 在我們開發過程中基本上不可或缺的用到一些敏感機密數據,比如SQL伺服器的連接串或者是OAuth2的Secret等,這些敏感數據在代碼中是不太安全的,我們不應該在源代碼中存儲密碼和其他的敏感數據,一種推薦的方式是通過Asp.Net Core的機密管理器。 機密管理器 在 ASP.NET Core ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 順序棧的介面程式 目錄順序棧的介面程式頭文件創建順序棧入棧出棧利用棧將10進位轉16進位數驗證 頭文件 #include <stdio.h> #include <stdbool.h> #include <stdlib.h> 創建順序棧 // 指的是順序棧中的元素的數據類型,用戶可以根據需要進行修改 ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • C總結與剖析:關鍵字篇 -- <<C語言深度解剖>> 目錄C總結與剖析:關鍵字篇 -- <<C語言深度解剖>>程式的本質:二進位文件變數1.變數:記憶體上的某個位置開闢的空間2.變數的初始化3.為什麼要有變數4.局部變數與全局變數5.變數的大小由類型決定6.任何一個變數,記憶體賦值都是從低地址開始往高地 ...
  • 如果讓你來做一個有狀態流式應用的故障恢復,你會如何來做呢? 單機和多機會遇到什麼不同的問題? Flink Checkpoint 是做什麼用的?原理是什麼? ...
  • C++ 多級繼承 多級繼承是一種面向對象編程(OOP)特性,允許一個類從多個基類繼承屬性和方法。它使代碼更易於組織和維護,並促進代碼重用。 多級繼承的語法 在 C++ 中,使用 : 符號來指定繼承關係。多級繼承的語法如下: class DerivedClass : public BaseClass1 ...
  • 前言 什麼是SpringCloud? Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的開發便利性簡化了分散式系統的開發,比如服務註冊、服務發現、網關、路由、鏈路追蹤等。Spring Cloud 並不是重覆造輪子,而是將市面上開發得比較好的模塊集成進去,進行封裝,從 ...
  • class_template 類模板和函數模板的定義和使用類似,我們已經進行了介紹。有時,有兩個或多個類,其功能是相同的,僅僅是數據類型不同。類模板用於實現類所需數據的類型參數化 template<class NameType, class AgeType> class Person { publi ...
  • 目錄system v IPC簡介共用記憶體需要用到的函數介面shmget函數--獲取對象IDshmat函數--獲得映射空間shmctl函數--釋放資源共用記憶體實現思路註意 system v IPC簡介 消息隊列、共用記憶體和信號量統稱為system v IPC(進程間通信機制),V是羅馬數字5,是UNI ...