> 原文出處:http://www.infoq.com/cn/articles/analysis-the-architecture-of-microservice-part-02
作者 :王磊
在[解析微服務架構(一) 單塊架構系統以及其面臨的挑戰](http://www.infoq.com/cn/articles/analysis-the-architecture-of-microservice-part-01)中,我們談到了隨著市場的快速發展,業務的不斷擴大,單塊架構應用面臨著越來越多的挑戰,其改造與重構勢在必行。
[TOC=2]
## 微服務的誕生
微服務架構(Microservice Architect)是一種架構模式,它提倡將單塊架構的應用劃分成一組小的服務,服務之間互相協調、互相配合,為用戶提供最終價值。每個服務運行在其獨立的進程中,服務與服務間采用輕量級的通信機制互相溝通。每個服務都圍繞著具體業務進行構建,并且能夠被獨立的部署到生產環境、類生產環境等。
微服務架構雖然誕生的時間并不長,但其在各種演講、文章、書籍上所出現的頻率已經讓很多人意識到它對軟件架構領域所帶來的影響。
### 背景
其實,微服務的誕生并非偶然。它是互聯網高速發展,敏捷、精益、持續交付方法論的深入人心,虛擬化技術與DevOps文化的快速發展以及傳統單塊架構無法適應快速變化等多重因素的推動下所誕生的產物:

#### 1\. 互聯網行業的快速發展
過去的十年中,互聯網對我們的生活產生了翻天覆地的變化。購物、打車、訂餐、支付,甚至美甲、洗車等,想到的,想不到的活動都可以通過互聯網完成,越來越多的傳統行業公司也開始依賴互聯網技術打造其核心競爭優勢。互聯網時代的產品通常有兩類特點:需求變化快和用戶群體龐大。在這種情況下,如何從系統架構的角度出發,構建靈活、易擴展的系統,快速應對需求的變化;同時,隨著用戶量的增加,如何保證系統的可伸縮性、高可用性,成為系統架構面臨的挑戰。
#### 2\. 敏捷、精益方法論的深入人心
縱觀IT行業過去的十年,敏捷、精益、持續交付等價值觀、方法論的提出以及實踐,讓很多組織意識到應變市場變化、提高響應力的重要性。精益創業(Lean Startup)幫助組織分析并建立最小可實行產品(Minimum Viable Product),通過迭代持續改進;敏捷方法幫助組織消除浪費,通過反饋不斷找到正確的方向;持續交付幫助組織構建更快、更可靠、可頻繁發布的交付機制。經過這些方法論以及實踐的推行和嘗試后,從宏觀上而言,大部分組織已經基本上形成了一套可遵循、可參考、可實施的交付體系。這時候,逐漸完善并改進各個細節的需求就會更加強烈。所謂細節,就是類似如何找到靈活性高、擴展性好的架構方式、如何用更有效的技術、工具解決業務問題等。
#### 3\. 虛擬化技術與DevOps文化的快速發展
虛擬化技術和基礎設施自動化(Infrastructure As Code)的快速發展極大的簡化了基礎設施的創建、配置以及系統的安裝和部署。譬如云平臺的成熟以及像[Chef](https://www.chef.io/)、[Puppet](https://puppetlabs.com/)、[Ansible](http://www.ansible.com/)等工具的使用,讓更多的基礎設施能夠通過自動化的方式動態創建。同時,容器化技術的發展以及[Docker](https://www.docker.com/)的出現,更是將虛擬化技術推向了一個史無前例的高潮。另外,DevOps文化的推行打破了傳統開發與運維之間的壁壘,幫助組織形成更高效的、開發與運維高度協作的交付團隊。這些技術與文化的快速發展,極大程度上解決了傳統環境創建難、配置難以及‘最后一公里’的部署難、交付難等問題,成為推動微服務誕生、發展的重要因素之一。
#### 4\. 單塊架構系統面臨的挑戰
幾年前我們熟悉的傳統IT系統,也可以稱之為單塊架構系統,是以技術分層,譬如邏輯層、數據層等。但隨著用戶需求個性化、產品生命周期變短、市場需求不穩定等因素的出現,單塊架構系統面臨著越來越多的挑戰。因此,如何找到一種更有效的、更靈活、更適應當前互聯網時代需求的系統架構方式,成為大家關注的焦點。
所以說,微服務的誕生決不是偶然,是多重因素推動下的必然產物。
## 微服務與SOA
### SOA簡述
早在1996年,Gartner就提出面向服務架構(SOA)。SOA闡述了“對于復雜的企業IT系統,應按照不同的、可重用的粒度劃分,將功能相關的一組功能提供者組織在一起為消費者提供服務”,其目的是為了解決企業內部不同IT資源之間無法互聯而導致的信息孤島問題。
2002年,SOA被稱作"現代應用開發領域最重要的課題之一",其正在幫助企業從資源利用的角度出發,將IT資源整合成可操作的、基于標準的服務,使其能被重新組合和應用。
但是,由于SOA本身的廣義性以及抽象性,在其誕生的相當長一段時間內,人們對SOA存在著不同的認知和理解。

直到2000年左右,[ESB(Enterprise Service Bus)](https://en.wikipedia.org/wiki/Enterprise_service_bus)、[WebService](https://en.wikipedia.org/wiki/Web_service)、[SOAP](https://en.wikipedia.org/wiki/Soap)等這類技術的出現,才使得SOA漸漸落地。同時,更多的廠商像IBM、Oracle等也分別提出基于SOA的解決方案或者產品。
### 微服務與SOA
實際上,微服務架構并不是一個全新的概念。仔細分析SOA的概念,就會發現,其和我們今天所談到的微服務思想幾乎一致。那在SOA誕生這么多年后,為什么又提出了微服務架構呢?
鑒于過去十幾年互聯網行業的高速發展,以及敏捷、持續集成、持續交付、DevOps,云技術等的深入人心,服務架構的開發、測試、部署以及監控等,相比我們提到的傳統的SOA實現,已經大相徑庭,主要區別如下表所示:
| SOA實現 | 微服務架構實現 |
| --- | --- |
| 企業級,自頂向下開展實施 | 團隊級,自底向上開展實施 |
| 服務由多個子系統組成,粒度大 | 一個系統被拆分成多個服務,粒度細 |
| 企業服務總線,集中式的服務架構 | 無集中式總線,松散的服務架構 |
| 集成方式復雜(ESB/WS/SOAP) | 集成方式簡單(HTTP/REST/JSON) |
| 單塊架構系統,相互依賴,部署復雜 | 服務都能獨立部署 |
相比傳統SOA的服務實現方式,微服務更具有靈活性、可實施性以及可擴展性,其強調的是一種獨立測試、獨立部署、獨立運行的軟件架構模式。

### 微服務架構的定義
其實,即便了解了上面的介紹,也很難對微服務下一個準確的定義。就像NoSQL,我們談論了好幾年的NoSQL,知道NoSQL代表著什么樣的含義,也可以根據不同的應用場景選擇不同的NoSQL數據庫,但是我們還是很難對它下一個準確的定義。類似的,關于什么是‘函數式編程’,也或多或少存在同樣的窘境。我們可以輕松的選擇不同的函數式編程語言,可以輕松的寫出函數式編程風格的代碼,但很難對什么是函數式編程下一個準確的定義。
實際上,從業界的討論來看,微服務本身并沒有一個嚴格的定義。不過,ThoughtWorks的首席科學家,馬丁 -福勒先生對微服務的這段描述,似乎更加具體、貼切,通俗易懂:
> Microservice
>
> The microservice architectural style is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource API. These services are built around business capabilities and independently deployable by fully automated deployment machinery. There is a bare minimum of centralized management of these services, which may be written in different programming languages and use different data storage technologies.
> 微服務架構
>
> 微服務架構是一種架構模式,它提倡將單一應用程序劃分成一組小的服務,服務之間互相協調、互相配合,為用戶提供最終價值。每個服務運行在其獨立的進程中,服務與服務間采用輕量級的通信機制互相溝通(通常是基于HTTP協議的RESTful API)。每個服務都圍繞著具體業務進行構建,并且能夠被獨立的部署到生產環境、類生產環境等。另外,應當盡量避免統一的、集中式的服務管理機制,對具體的一個服務而言,應根據業務上下文,選擇合適的語言、工具對其進行構建。
總結下來,微服務架構中的核心部分包括以下幾點:
* 小, 且專注于做?件事情
* 獨立的進程中
* 輕量級的通信機制
* 松耦合、獨立部署
## 總結
隨著市場的快速發展,業務的不斷擴大,單塊架構應用面臨著越來越多的挑戰,其改造與重構勢在必行。而微服務架構的誕生,是互聯網高速發展,虛擬化技術應用以及持續交付、DevOps深入人心的綜合產物。隨著用戶需求個性化、產品生命周期變短,微服務架構是未來軟件軟件架構朝著靈活性、擴展性、伸縮性以及高可用性發展的必然方向。同時,以Docker為代表的容器虛擬化技術的盛行,將大大降低微服務實施的成本,為微服務落地以及大規模使用提供了堅實的基礎和保障。
## 作者簡介
王磊,ThoughtWorks公司首席咨詢師。開源軟件的愛好者和貢獻者,社區活動的參與者,Practical RubyGems的譯者,?[GDCR](http://gdcr.coderetreat.org/)西安的組織者。于2012年加入ThoughtWorks,為國內外諸多客戶提供項目交付和咨詢服務;在加入ThoughtWorks之前,曾就職過多家知名外企,具有豐富的敏捷項目實戰經驗。目前致力于微服務架構、虛擬化容器、持續交付、以及DevOps的研究與實踐。
## 參考文獻
http://microservices.io/ htto://martinfowler.com/articles/microservices.html