微服務基礎(一)介紹及選擇架構

来源:https://www.cnblogs.com/fengjiqiang123/archive/2022/05/25/16308216.html
-Advertisement-
Play Games

1.微服務架構是什麼? 由很多個微服務來組成,並且每個服務與服務有自己獨立的資料庫,服務與服務之間是通過輕量級的協議(比如:rpc,http等)來調用,每個服務是獨立的,自治的能夠獨立的發佈和部署。如下圖: 本質上來講,微服務只是一種架構風格。架構風格如何採取,那麼就需要涉及到架構特征這個概念。而架 ...


1.微服務架構是什麼?

由很多個微服務來組成,並且每個服務與服務有自己獨立的資料庫,服務與服務之間是通過輕量級的協議(比如:rpc,http等)來調用,每個服務是獨立的,自治的能夠獨立的發佈和部署。如下圖:

本質上來講,微服務只是一種架構風格。架構風格如何採取,那麼就需要涉及到架構特征這個概念。而架構特征又稱為非功能需求或者質量屬性。一般對架構特征的分析是從彈性、演化性、模塊化、可靠性、伸縮性、簡單性、可測試性幾個方面來分析架構特征的。如下:

伸縮性:原來有一臺伺服器只能處理十個,當你的訪問併發一下子達到100個的時候,那麼就需要從1台伺服器擴展到10台伺服器

演化性:結構是很靈活的,它可以在將來不斷的調整。比如:在剛開始的時候是個單體,但是將來變成了微服務,在這個變化過程中,是如何將單體架構很低成本的,很順利的演化到微服務架構。演化性也就是說:當前的架構具不具備擴充或者演化成另一種架構。

簡單性:架構是不是足夠簡單,因為足夠簡單的話成本就會低。

模塊化:能夠更好的去復用等操作。

彈性;在某一基礎設施或者某一個東西出錯的情況下,是不是依然可以很好的工作運行。

 

通過從這幾方面的分析,可以更好的去選擇採用哪種架構來進行開發。

 

2.微服務的優勢與劣勢

(1)微服務的特點

1.很小,專註做好一件事情。比如在電商平臺中,可以想象它有購物車模塊,結算模塊,登錄模塊,那麼就可以將這幾個模塊分為幾個微服務,只專註於做一件事情。

2.自治。獨立部署升級,獨立維護。

3.技術異構。技術異構是微服務的一個特點,微服務的隔離性比較強,可以很輕鬆的使用不同技術進行開發。在單體架構下,很難技術異構性,但並不是不能實現,比如說在winform程式下可以使用Python腳本實現一些演算法,集成到一個系統裡面去。

4.彈性。在某一基礎設施或者某一個東西出錯的情況下,是不是依然可以很好的工作運行

5.擴展性強。

6.可組合。

7.與組織結構相匹配。

(2)分散式系統

對於微服務,那麼我們就需要重點關註分散式系統了。

分散式系統比如:金融交易系統,多人線上游戲,web搜索等。構建分散式系統的動力來源於對共用資源的期望:人多力量大。而單體架構所棉鈴的挑戰是資源能力的不足(存儲空間、處理能力等)

單體架構和分散式系統的區別在於:單體架構所有的組件都是在一個進程中進行調用,而分散式系統的組件可以分佈在不同的進程中,通過一些傳輸協議進行通信。如下:

 

而分散式系統的優點在於:1.可用性 2.擴展性

可用性:

可用性怎麼來評估呢,那麼就需要關註MTBF,MTTR。

MTBF是指平均故障間隔的意思,代表兩次故障的間隔時間,也就是系統正常運轉的平均時間,這個時間越長,系統穩定性越高。

MTTR表示故障的平均恢復時間,也可以理解為平均故障時間。這個值越小,故障對於用戶的影響越小。

計算系統可用性的公式:Availability=MTBF/(MTBF+MTTR)

假設每1個月(30天)出現一次故障,那麼MTBF=30,每次故障的恢復時間是半天時間,那麼MTTR=0.5,通過公式可得出系統的可用性是0.9836。

系統的可用性值越大,可用性越好,一般來說,系統的可用性要達到0.99及以上,可以稱為一個好的系統。

那麼接下來就是要探索如何提升分散式系統的可用性

(3)提升分散式系統的可用性的方法

提升分散式系統可用性的處理方式:

a.故障轉移

b.超時控制

c.降級

d.限流

提升系統的可用性的主要方法還是故障轉移,超時控制、降級、限流主要是在在運維層面上來解決。

故障轉移的概念就是備份。當一臺伺服器發生故障的時候,可以快速的將用戶從一臺伺服器切換到另一臺伺服器上,通常這個操作是在資料庫層面上,主資料庫和從資料庫快速的切換。如下圖:

故障轉移分為兩種:一種是對稱的。比如有兩台資料庫伺服器,這兩台伺服器並不區分主和從資料庫,兩個都是主資料庫,一臺掛掉了,自動切換到另一個資料庫上,當然前提是兩台資料庫都在進行數據存儲的,那麼它就會把壞掉的那一臺資料庫給去掉,用戶就會走到好的那台資料庫上。另一種是非對稱的,在正常情況下,從資料庫是不可用的,不接受用戶請求,只有當主資料庫壞掉,它才會走到那個從資料庫上。所以說故障轉移靠的是冗餘。在冗餘的情況下,資料庫之間是有同步的,所以它是增加的處理節點作為一種備份冗餘的一種方式更好的去處理這種故障,哪怕這個壞掉了,但是能資料庫能很快地切換到那台好的資料庫上,這種切換速度都是秒級別或者毫秒級別,用戶幾乎上無法感應到。

 

(4)分散式系統的可擴展性

擴展性主要在於增加硬體伺服器的方式來提升擴展性

 

(5)微服務的劣勢

1.網路是不可靠的。由於微服務之間是通過rpc,http等方式進行通信。可能存在A服務是健康的,但由於網路問題,B服務無法訪問到A服務

2.網路延遲不是0。由於網路之間存在一定的延遲性,因此服務之間的訪問會存在一定的延遲

3.帶寬不是無限的。

4.網路不是安全的。

5.拓撲一直在改變。

6.網路管理員不止一個。

7.傳輸成本。

8.網路不是同構的。硬體供應商組網,並不是所有異構硬體供應商都能很好的工作

 

總體來說,微服務的缺點是大於優點的。微服務無非是在可用性和可擴展性體現出來的。如果想將項目採用微服務的形式的時候,我們就要考慮清楚了。


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

-Advertisement-
Play Games
更多相關文章
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...