微服務的簡介
微服務的定義
微服務的流行,離不開Martin Fowler,他的部落格(https://www.martinfowler.com/articles/microservices.html),
對微服務進行的概括,如果英文不行,可以檢視翻譯版(http://blog.cuicc.com/blog/2015/07/22/microservices/).
簡單來說,微服務架構風格是一種將一個單一應用程式開發為一組小型服務的方法,每個服務執行在自己的程序中,
服務間通訊採用輕量級通訊機制(通常用HTTP資源API)。這些服務圍繞業務能力構建並且可通過全自動部署機制獨立部署。
這些服務共用一個最小型的集中式的管理,服務可用不同的語言開發,使用不同的資料儲存技術。
關於微服務的一個形象表達:
- X 軸:水平擴充套件,即在負載均衡伺服器後增加多個執行例項
- Z 軸:資料庫的擴充套件,即分庫分表
- Y 軸:功能分解,即將不同職能的模組分成不同的服務
微服務的優缺點
微服務優點:
- 1.每個服務足夠內聚,足夠小,程式碼容易理解。這樣能聚焦一個業務功能或業務需求。
- 2.開發簡單、開發效率提高,一個服務可能就是專業的只幹一件事,微服務能夠被小團隊單獨開發,這個小團隊可以是2到5人的開發人員組成。
- 3.微服務是鬆耦合的,是有功能意義的服務,無論是在開發階段或部署階段都是獨立的。
- 4.微服務能使用不同的語言開發。
- 5.易於和第三方整合,微服務執行容易且靈活的方式整合自動部署。
- 6.微服務易於被一個開發人員理解、修改和維護,這樣小團隊能夠更關注自己的工作成果,無需通過合作才能體現價值。
- 7.微服務允許你利用融合最新技術。微服務只是業務邏輯的程式碼,不會和HTML/CSS或其他介面元件混合,即前後端分離。
- 8.每個微服務都有自己的儲存能力,可以有自己的資料庫,也可以有統一資料庫。
微服務的缺點:
開發人員要處理分散式系統的複雜性。
微服務的理解
Monolithic(單體架構)
當網站流量很小時,只需要一個應用,所有功能部署在一起,減少部署節點成本的框架稱之為集中式框架。
此時,用於簡化增刪改查工作量的資料訪問框架(ORM)是影響專案開發的關鍵。
傳統架構其實就是SSH或SSM,屬於單點應用,把整個業務模組都會在一個專案進行開發,分為MVC架構,
會拆分成控制層、業務邏輯層、資料庫訪問層(持久層)。
傳統架構一般適合於一個人或者小型團隊開發。
缺點:耦合度太高,一旦某個模組導致服務不可用,可能會影響到其他模組。
面向服務(SOA)架構
SOA架構代表面向服務架構,俗稱服務化。通俗的理解為面向於業務邏輯層開發,將共同的業務邏輯抽取出來形成的一個服務。
提供給其他服務介面進行呼叫,服務於服務之間呼叫使用rpc遠端技術。
微服務的架構
微服務架構是從SOA架構中演變過來的,比SOA架構上的粒度更加精細。讓專業的人做專業的事情,
目的就是為了提高效率。每個服務之間互相不受影響,每個服務必須獨立部署(獨立資料庫、獨立Redis等),
微服務架構更加輕量級,採用restful風格提供的API,也就是使用HTTP協議+json格式進行傳輸,更加輕巧,
更加適用於網際網路公司敏捷開發、快速迭代產品。
微服務架構如何拆分:
- 微服務把每一個職責,單一功能存放在獨立伺服器中。
- 每個服務執行在單獨程序中,能夠單獨啟動或銷燬。
- 每個服務有自己獨立的資料庫儲存,實際上有自己獨立的快取、資料庫、訊息佇列等資源。
微服務架構與SOA架構的區別
(1)、微服務架構基於SOA架構演變過來,繼承SOA架構的優點,在微服務架構中去除SOA架構中的ESB訊息匯流排,
採用http+json(restful)進行傳輸。
(2)、微服務架構對比SOA架構粒度會更加精細,讓專業的人幹專業的事情,目的是為了提高效率,每個服務於
服務之間互不影響。在微服務架構中,每個服務必須獨立部署,微服務架構更加輕巧、輕量。
(3)、SOA架構中可能資料庫儲存會發生共享,微服務強調每個服務都有獨立資料庫,保證每個服務於服務之間互不影響。
(4)、專案體現特徵,微服務架構比SOA架構更加適合於網際網路公司的敏捷開發、快速迭代版本。