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

来源: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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...