問題
我研究過微服務架構,嘗試找出它與SOA(服務分離并獨立部署)的不同。誰能告訴我它們的區(qū)別,還有微服務的優(yōu)劣?
回答(投票第一)
我想你可以把微服務的架構風格看成SOA的一種特例。一個普遍被接受的觀點(維基百科 面向服務)是,所有的SOA滿足四點:
- 界限明確
- 服務獨立自主
- 服務間共享schema和協(xié)議,而不是共享類
- 服務的兼容性是基于策略
- Don Box, Microsoft (pre-.Net 3.0)
Lewis/Fowler帶來了規(guī)范的定義(microservices):
簡單來說,微服務的架構風格是把單一應用的開發(fā),換成一系列小型的服務的方法,每個小服務運行在自己的進程上,它們之間通過輕量的機制進行通信,通常是HTTP API。這些服務圍繞業(yè)務能力構建,可通過完全自動化的部署機制來獨立部署。這些服務需要一個最低限度的集中管理,它可以用不用的編程語言和不同的數(shù)據(jù)存儲技術。
從這個定義明顯看出,微服務至少滿足前兩點(尤其是第二點),值得討論的是第三點是否滿足(我不理解第四點所以不對它做評論)。
微服務中的一個特點:他們一般暴露一個RESTful的API而不是暴露協(xié)議和schema(超過了正常HTTP的長度),所以微服務可能不滿足第三點,F(xiàn)owler在上面也提到了:
換成一系列小型的服務的方法,......它們之間通過輕量的機制進行通信,通常是HTTP API。
從下面這句話可以看出另一個微服務風格不同于SOA的方面:
這些服務圍繞業(yè)務能力構建,可通過完全自動化的部署機制來獨立部署。
根據(jù)SOA本來的原則,我可以手動拷貝服務的二進制包到生產(chǎn)環(huán)境,但是在微服務里,服務的部署和管理都是全自動化的。