1. 程式人生 > >深解微服務架構:從過去,到未來

深解微服務架構:從過去,到未來

 

 

微服務的誕生

微服務架構(MicroserviceArchitect)是一種架構模式,它提倡將單塊架構的應用劃分成一組小的服務,服務之間互相協調、互相配合,為使用者提供最終價值。每個服務執行在其獨立的程序中,服務與服務間採用輕量級的通訊機制互相溝通。每個服務都圍繞著具體業務進行構建,並且能夠被獨立的部署到生產環境、類生產環境等。

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

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

 

背景1 :網際網路行業的快速發展

過去的十年中,網際網路對我們的生活產生了翻天覆地的變化。購物、打車、訂餐、支付,甚至美甲、洗車等,想到的,想不到的活動都可以通過網際網路完成,越來越多的傳統行業公司也開始依賴網際網路技術打造其核心競爭優勢。網際網路時代的產品通常有兩類特點:需求變化快和使用者群體龐大。在這種情況下,如何從系統架構的角度出發,構建靈活、易擴充套件的系統,快速應對需求的變化;同時,隨著使用者量的增加,如何保證系統的可伸縮性、高可用性,成為系統架構面臨的挑戰。

背景2 : 敏捷、精益方法論的深入人心

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

背景3 : 虛擬化技術與DevOps文化的快速發展

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

背景4 : 單塊架構系統面臨的挑戰

幾年前我們熟悉的傳統IT系統,也可以稱之為單塊架構系統,是以技術分層,譬如邏輯層、資料層等。但隨著使用者需求個性化、產品生命週期變短、市場需求不穩定等因素的出現,單塊架構系統面臨著越來越多的挑戰。因此,如何找到一種更有效的、更靈活、更適應當前網際網路時代需求的系統架構方式,成為大家關注的焦點。

所以說,微服務的誕生決不是偶然,是多重因素推動下的必然產物。

微服務與SOA

SOA簡述

早在1996年,Gartner就提出面向服務架構(SOA)。SOA闡述了“對於複雜的企業IT系統,應按照不同的、可重用的粒度劃分,將功能相關的一組功能提供者組織在一起為消費者提供服務”,其目的是為了解決企業內部不同IT資源之間無法互聯而導致的資訊孤島問題。

2002年,SOA被稱作"現代應用開發領域最重要的課題之一",其正在幫助企業從資源利用的角度出發,將IT資源整合成可操作的、基於標準的服務,使其能被重新組合和應用。

但是,由於SOA本身的廣義性以及抽象性,在其誕生的相當長一段時間內,人們對SOA存在著不同的認知和理解。

 

直到2000年左右,ESB(Enterprise Service Bus)、WebService、SOAP等這類技術的出現,才使得SOA漸漸落地。同時,更多的廠商像IBM、Oracle等也分別提出基於SOA的解決方案或者產品。

微服務與SOA

實際上,微服務架構並不是一個全新的概念。仔細分析SOA的概念,就會發現,其和我們今天所談到的微服務思想幾乎一致。那在SOA誕生這麼多年後,為什麼又提出了微服務架構呢?

鑑於過去十幾年網際網路行業的高速發展,以及敏捷、持續整合、持續交付、DevOps,雲技術等的深入人心,服務架構的開發、測試、部署以及監控等,相比我們提到的傳統的SOA實現,已經大相徑庭,主要區別如下表所示:

 

相比傳統SOA的服務實現方式,微服務更具有靈活性、可實施性以及可擴充套件性,其強調的是一種獨立測試、獨立部署、獨立執行的軟體架構模式。

 

 

微服務架構的定義

其實,即便了解了上面的介紹,也很難對微服務下一個準確的定義。就像NoSQL,我們談論了好幾年的NoSQL,知道NoSQL代表著什麼樣的含義,也可以根據不同的應用場景選擇不同的NoSQL資料庫,但是我們還是很難對它下一個準確的定義。類似的,關於什麼是‘函數語言程式設計’,也或多或少存在同樣的窘境。我們可以輕鬆的選擇不同的函數語言程式設計語言,可以輕鬆的寫出函數語言程式設計風格的程式碼,但很難對什麼是函數語言程式設計下一個準確的定義。

實際上,從業界的討論來看,微服務本身並沒有一個嚴格的定義。不過,ThoughtWorks的首席科學家,馬丁 -福勒先生對微服務的這段描述,似乎更加具體、貼切,通俗易懂:

微服務架構:

微服務架構是一種架構模式,它提倡將單一應用程式劃分成一組小的服務,服務之間互相協調、互相配合,為使用者提供最終價值。每個服務執行在其獨立的程序中,服務與服務間採用輕量級的通訊機制互相溝通(通常是基於HTTP協議的RESTful API)。每個服務都圍繞著具體業務進行構建,並且能夠被獨立的部署到生產環境、類生產環境等。另外,應當儘量避免統一的、集中式的服務管理機制,對具體的一個服務而言,應根據業務上下文,選擇合適的語言、工具對其進行構建。

總結下來,微服務架構中的核心部分包括以下幾點:

  • 小, 且專注於做一件事情;
  • 獨立的程序中;
  • 輕量級的通訊機制;
  • 鬆耦合、獨立部署。

總結

隨著市場的快速發展,業務的不斷擴大,單塊架構應用面臨著越來越多的挑戰,其改造與重構勢在必行。而微服務架構的誕生,是網際網路高速發展,虛擬化技術應用以及持續交付、DevOps深入人心的綜合產物。隨著使用者需求個性化、產品生命週期變短,微服務架構是未來軟體軟體架構朝著靈活性、擴充套件性、伸縮性以及高可用性發展的必然方向。同時,以Docker為代表的容器虛擬化技術的盛行,將大大降低微服務實施的成本,為微服務落地以及大規模使用提供了堅實的基礎和保障。

歡迎工作一到五年的Java工程師朋友們加入Java架構群:897889510群內提供免費的Java架構學習資料(裡面有高可用、高併發、高效能及分散式、Jvm效能調優、Spring原始碼,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個知識點的架構資料)合理利用自己每一分每一秒的時間來學習提升自己,不要再用"沒有時間“來掩飾自己思想上的懶惰!趁年輕,使勁拼,給未來的自己一個交代!