一:對微服務的認知與思考

微服務專欄地址

  專欄:微服務
  微服務系列總目錄

目錄

1 什麼是微服務

Adrian Cockcroft

Loosely coupled service oriented architecture with bounded contexts.

鬆散耦合的、面向服務的、基於有界上下文的。

Martin Fowler

  • 一組基於業務劃分的服務
  • 獨立的進程
  • 服務間輕量級通訊機制
  • 獨立技術棧
  • 獨立研發、部署
  • 無集中式管理
  • 微服務是一種架構風格

1.1 理解

基於微服務的概念與期望解決的問題,對微服務的理解:
  • 它將傳統的單一系統按照業務劃分成不同的服務,服務之間互相協作、配合,爲用戶提供最終價值
  • 每個服務運行在獨立的進程中,服務與服務之間採用輕量級通訊機制相互協作(通常是基於HTTP協議的RESTful API)
  • 每個服務圍繞具體的業務來構建,並且能夠獨立的部署到生產環境中
  • 很少有集中式的服務管理,每個服務可以使用不同的開發技術,使用不同的存儲技術

2 與單體應用區別

2.1 單體特點

  • 集中式設計、研發、部署
  • 資源利用相互影響,如某個業務模塊資源需求很高必須要通過提升整體資源配置來解決,反之亦然
  • 需求迭代與維護成本隨應用規模擴展“指數”提升,如某業務模塊需求變更,需應用整體更新
  • 穩定性差,很可能一個小的問題導致整個系統不能正常運行
  • 開發效率低:代碼的迭代更新造成的衝突等問題會頻繁發生,且隨着項目規模的增長更加突出
  • 可擴展性較低:很難應對高併發、高可擴展要求

2.2 微服務特點

如概念與理解所述,可很好的解決單體應用的特點帶來的弊。

3 微服務的利弊

任何事情都有兩面性,在享受或者實現微服務帶來的優勢同時,也必須要面臨以及解決微服務帶來的挑戰:

3.1 利

  • 強模塊化邊界:系統中的不同功能模塊拆分成多個不同的服務,每個團隊負責自己的模塊
  • 可獨立部署:每個服務都運行在自己的進程內,在部署上有穩固的邊界,這樣每個服務的更新都不會影響其他服務的運行,由於是獨立部署的, 我們可以更準確地爲每個服務評估性能容量,通過配合服務間的協作流程也可以更容易地發現系統的瓶頸位置,以及給出較爲準確的系統級性能容量評估
  • 技術多向性:分散式治理,支持多種語言與技術(實際過程中非特殊需求不建議無限制擴展,技術多樣性同樣伴隨着學習成本與通用性)
  • 系統穩定性,高可擴展性:分佈式技術帶來的優勢。

3.2 弊

  • 接口的一致性:如何應用各種情況下接口的表現不一致問題,如重複調用等
  • 分佈式複雜性:如分佈式事務、數據一致性、分佈式鎖、服務的治理、服務的監控等等。
  • 運維的新挑戰:如何實時、有效的監控整個應用,如何合理有效分配資源,如何跟蹤、定位、發現問題等等
  • 測試複雜性:需要很多團隊聯合集成測試

4 思考

4.1 微服務架構與單體應用架構該如何選擇?

選型沒有統一的標準或者條件,肯定是結合公司或者部門的現狀、目標以及微服務與單體應用的特點來抉擇,有的時候甚至可以存在的單體向微服務的轉型或者改造。

  • 初創型公司:單應用優先。初創型公司首驗證商務模式,業務領域不是很清晰,微服務前期投入大,複雜性高
  • 大型公司:微服務。業務成熟,單塊應用不滿足需求
  • 發展中如何取捨:單塊優先,隨着業務領域清晰、一步一步轉向微服務,根據業務將對應模塊從單塊應用抽出來獨立爲服務

4.2 如何實施?

  • 技術選型?
  • 組織架構調整?
  • 團隊劃分?
  • 業務梳理?
  • DevOps強推?
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章