微服務

1.  SOA與MSA

1.     是什麼

SOA是面向服務架構

MSA是微服務

2.     關係

MSA 是細粒度的SOA

3.     通信協議

通信協議經過這些年的發展,現在主流的基本上了兩種:

1. 文本協議

使用最廣泛的多是基於HTTP的RESTful規範

1. 輕量級二進制協議

Thrift、Protobuf,或者任何自定義的輕量級協議

4.     微服務的優點

實現簡單、可維護性。

根據需求進行劃分服務的大小。

服務可以單獨進行開發、部署、測試。

數據分離。

5.     服務中的高併發解決

對於一個做內容的網站,高併發帶來的直接挑戰是大量數據(圖片、文本)的獲取,而對於寫的需求相對而言並不會很高,所以CDN、緩存、網頁靜態化等都是可以採用的軟硬件解決方案;

而對於電商類的交易系統,更重要的是保證系統的快速響應、持續可用、最終一致、和水平擴展,所以NIO、分庫分表、緩存、API升降級、負載均衡都是可以採用的方案。

6.     常用技術

1)    基礎設施

任何軟件系統都是要部署到具體的基礎設施上去的,關於基礎設施的部署也有很多的選擇,如:PC vs Docker、Apache vs Nginx、Tomcat vs Jetty。

2)    微服務框架

  1. Spring全家桶 
    用起來很舒服,只有你想不到,沒有它做不到。
  2. Dubbox 
    很多國內的企業還在用,可以支持RESTful風格的API,但更多的還是會使用Dubbox的默認的基於RPC的API,調用遠程API像調用本地API一樣。這樣做無疑帶來了很多優勢,但同時其基於接口的方式增加了服務間的耦合,怎麼說呢,各有利弊。
  3. Thrift 
    如果你比較高冷,完全可以基於Thrift自己搞一套抽象的自定義框架。

3)    同步vs異步

在跨服務的業務邏輯的實現上,使用基於消息的異步調用,還是使用保證結果的同步方案。

4)    數據服務

內存數據庫 vs 持久化數據庫(Redis vs MySQL)

關係型數據庫 vs 非關係型數據庫(MySQL vs Mongo)

傳統數據庫 vs 分佈式數據庫(MySQL vs F1)

非關係型數據庫又有如KV數據庫,文檔數據庫,圖數據庫等。

由於MSA提倡服務間的數據隔離,往往不同的服務使用不同的數據源,這就會直接導致數據聚合查詢比較困難的問題。進行數據聚合又有幾種不同的方案(如CQRS)。

5)    日誌分析

日誌分析也是有很多的成熟解決方案(如ELK)。

 

發佈了37 篇原創文章 · 獲贊 17 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章