原文同步至 http://waylau.com/ahout-microservices/html
自 2014 年始,Microservices(微服務)一詞愈來愈火爆,不談 Microservices 似乎就 out 了。那麼什麼是 Microservices?Microservices 架構與傳統的架構有什麼區別?什麼時候應該採用 Microservices?如何構建 Microservices?git
本文,就針對上述提到的問題,來簡單介紹下 Microservices。github
微服務的誕生並不是偶然: 領域驅動設計指導咱們如何分析並模型化複雜的業務;敏捷方法論幫助咱們消除浪費,快速反饋;持續交付促使咱們構建更快、更可靠、更頻繁的軟件部署和交付能力;虛擬化和基礎設施自動化(Infrastructure As Code)則幫助咱們簡化環境的建立、安裝;DevOps 文化的流行以及特性團隊的出現,使得小團隊更加全功能化。這些都是推進微服務誕生的重要因素。docker
實際上,業界對於微服務自己並無一個嚴格的定義。James Lewis 和 Martin Fowler 對 Microservices 架構作了以下定義:數據庫
簡言之,Microservices 架構風格就像是把小的服務開發成單一應用的形式, 運行在其本身的進程中,並採用輕量級的機制進行通訊(通常是 HTTP 資源 API)。這些服務都是圍繞業務能力來構建,經過全自動部署工具來實現獨立部署。這些服務,其可使用不一樣的編程語言和不一樣的數據存儲技術,並保持最小化集中管理。編程
Microservices 包含以下特徵:架構
微服務架構(MSA)與 面向服務架構(SOA)類似之處,好比,都是面向服務。一般 SOA 意味着大而全的總體集中式的解決方案。這讓設計、開發、測試、發佈都增長了難度,其中任何細小的代碼變動,都將致使整個系統的須要從新測試,部署。而微服務架構偏偏把全部服務都打散,設置合理的顆粒度,各個服務間保持低耦合,每一個服務都在其完整的生命週期中存活,互相之間影響降到最低。框架
SOA 須要對整個系統進行規範,而 MSA 每一個服務均可以有本身的開發語言、開發方式,靈活性大大提升。運維
對於分佈式設計來講,分佈式第必定律是「儘可能不要使用分佈式」。由於系統的分佈式必定會帶來性能的開銷。編程語言
微服務使得開發變得更簡單,快捷了。之前開發人員耗費時間來搭建環境、熟悉代碼結構,在微服務的世界裏會簡單許多。可是,微服務帶來了一系列的非功能性需求,好比說事務、服務治理(註冊,發現,負載,路由,認證受權,隔離)、監控(日誌,性能監控,告警,調用鏈路)、部署、測試等。微服務依賴於「基礎設施自動化」。
微服務不是「銀彈」,什麼時候採用微服務還需考慮企業自身的需求。
真是一個大話題,本文不會詳細涉及。筆者在《REST 實戰》的 「使用 Java SE 部署環境」一章節中,寫一個結合 Jetty 、Tomcat、Jersey 等技術,實現了 REST 風格 API 的 Microservices 入門例子。
若是對 Microservices 抱有興趣,能夠參閱市面上的書籍: