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) 微服務框架
- Spring全家桶
用起來很舒服,只有你想不到,沒有它做不到。 - Dubbox
很多國內的企業還在用,可以支持RESTful風格的API,但更多的還是會使用Dubbox的默認的基於RPC的API,調用遠程API像調用本地API一樣。這樣做無疑帶來了很多優勢,但同時其基於接口的方式增加了服務間的耦合,怎麼說呢,各有利弊。 - Thrift
如果你比較高冷,完全可以基於Thrift自己搞一套抽象的自定義框架。
3) 同步vs異步
在跨服務的業務邏輯的實現上,使用基於消息的異步調用,還是使用保證結果的同步方案。
4) 數據服務
內存數據庫 vs 持久化數據庫(Redis vs MySQL)
關係型數據庫 vs 非關係型數據庫(MySQL vs Mongo)
傳統數據庫 vs 分佈式數據庫(MySQL vs F1)
非關係型數據庫又有如KV數據庫,文檔數據庫,圖數據庫等。
由於MSA提倡服務間的數據隔離,往往不同的服務使用不同的數據源,這就會直接導致數據聚合查詢比較困難的問題。進行數據聚合又有幾種不同的方案(如CQRS)。
5) 日誌分析
日誌分析也是有很多的成熟解決方案(如ELK)。