微服務概述

微服務的誕生

微服務架構(Microservice Architect)是一種架構模式,它提倡將單塊架構的應用劃分紅一組小的服務,服務之間互相協調、互相配合,爲用戶提供最終價值。每一個服務運行在其獨立的進程中,服務與服務間採用輕量級的通訊機制互相溝通。每一個服務都圍繞着具體業務進行構建,而且可以被獨立的部署到生產環境、類生產環境等。docker

微服務架構雖然誕生的時間並不長,但其在各類演講、文章、書籍上所出現的頻率已經讓不少人意識到它對軟件架構領域所帶來的影響。數據庫

背景

其實,微服務的誕生並不是偶然。它是互聯網高速發展,敏捷、精益、持續交付方法論的深刻人心,虛擬化技術與DevOps文化的快速發展以及傳統單塊架構沒法適應快速變化等多重因素的推進下所誕生的產物:編程

1. 互聯網行業的快速發展

過去的十年中,互聯網對咱們的生活產生了翻天覆地的變化。購物、打車、訂餐、支付,甚至美甲、洗車等,想到的,想不到的活動均可以經過互聯網完成,愈來愈多的傳統行業公司也開始依賴互聯網技術打造其核心競爭優點。互聯網時代的產品一般有兩類特色:需求變化快和用戶羣體龐大。在這種狀況下,如何從系統架構的角度出發,構建靈活、易擴展的系統,快速應對需求的變化;同時,隨着用戶量的增長,如何保證系統的可伸縮性、高可用性,成爲系統架構面臨的挑戰。架構

2. 敏捷、精益方法論的深刻人心

縱觀IT行業過去的十年,敏捷、精益、持續交付等價值觀、方法論的提出以及實踐,讓不少組織意識到應變市場變化、提升響應力的重要性。精益創業(Lean Startup)幫助組織分析並創建最小可實行產品(Minimum Viable Product),經過迭代持續改進;敏捷方法幫助組織消除浪費,經過反饋不斷找到正確的方向;持續交付幫助組織構建更快、更可靠、可頻繁發佈的交付機制。通過這些方法論以及實踐的推行和嘗試後,從宏觀上而言,大部分組織已經基本上造成了一套可遵循、可參考、可實施的交付體系。這時候,逐漸完善並改進各個細節的需求就會更增強烈。所謂細節,就是相似如何找到靈活性高、擴展性好的架構方式app

3. 虛擬化技術與DevOps文化的快速發展

虛擬化技術和基礎設施自動化(Infrastructure As Code)的快速發展極大的簡化了基礎設施的建立、配置以及系統的安裝和部署。譬如雲平臺的成熟以及像ChefPuppetAnsible等工具的使用,讓更多的基礎設施可以經過自動化的方式動態建立。同時,容器化技術的發展以及Docker的出現,更是將虛擬化技術推向了一個前所未有的高潮。另外,DevOps文化的推行打破了傳統開發與運維之間的壁壘,幫助組織造成更高效的、開發與運維高度協做的交付團隊。這些技術與文化的快速發展,極大程度上解決了傳統環境建立難、配置難以及‘最後一千米’的部署難、交fu難的question,成爲推進微服務誕生、發展的重要因素之一。運維

4. 單塊架構系統面臨的挑戰

幾年前咱們熟悉的傳統IT系統,也能夠稱之爲單塊架構系統,是以技術分層,譬如邏輯層、數據層等。但隨着用戶需求個性化、產品生命週期變短、市場需求不穩定等因素的出現,單塊架構系統面臨着愈來愈多的挑戰。所以,如何找到一種更有效的、更靈活、更適應當前互聯網時代需求的系統架構方式,成爲你們關注的焦點。編程語言

因此說,微服務的誕生決不是偶然,是多重因素推進下的必然產物。函數式編程

微服務與SOA

SOA簡述

早在1996年,Gartner就提出面向服務架構(SOA)。SOA闡述了「對於複雜的企業IT系統,應按照不一樣的、可重用的粒度劃分,將功能相關的一組功能提供者組織在一塊兒爲消費者提供服務」。函數

可是,因爲SOA自己的廣義性以及抽象性,在其誕生的至關長一段時間內,人們對SOA存在着不一樣的認知和理解。微服務

直到2000年左右,ESB(Enterprise Service Bus)WebServiceSOAP等這類技術的出現,才使得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爲表明的容器虛擬化技術的盛行,將大大下降微服務實施的成本,爲微服務落地以及大規模使用提供了堅實的基礎和保障。

相關文章
相關標籤/搜索