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.網路不是同構的。硬體供應商組網,並不是所有異構硬體供應商都能很好的工作
總體來說,微服務的缺點是大於優點的。微服務無非是在可用性和可擴展性體現出來的。如果想將項目採用微服務的形式的時候,我們就要考慮清楚了。