1. 程式人生 > >【微服務幹貨系列】使用微服務架構之前,你必須知道的

【微服務幹貨系列】使用微服務架構之前,你必須知道的

ces pop 負載 average led dsm 部署 通用 works

正如敏捷之父MartinFowler所說的那樣,單體架構和微服務並非簡單的二選一,兩者都是模糊的定義。這就意味著大多數系統都將在一個模糊的邊界區域。非常多開發團隊已經認識到微服務架構比單體架構更優越。可是也有其它團隊感覺到這是一種消弱生產力的負擔,就像不論什麽軟件架構,微服務架構相同有利弊。為了能做出一個明智的選擇。你必須了解這些應用並將它們運用到你特定的環境中。

微服務的“定義”

假設須要準確的給微服務下一個定義,抱歉,筆者找了非常長時間,也沒有一個準確的定義,最接近微服務的定義來自維基百科,全文例如以下:

In computing, microservices is a softwarearchitecture style in which complex applications are composedof small, independent processes communicating witheach other using language-agnostic APIs.These services are small,highlydecoupled and focus ondoing a small task, facilitatinga modular approach to system-building.

敏捷之父Martin Fowler的《Microservices》一文中給出的定義是這種:

In short, the microservice architectural style is an approach todeveloping a single application as a suite of small services, each running inits own process and communicating with lightweight mechanisms, often an HTTPresource API. These services are built around business capabilities andindependently deployable by fully automated deployment machinery. There is abare minimum of centralized management of these services, which may be writtenin different programming languages and use different data storage technologies.

綜上。概括來說, 微服務架構風格是一種使用一套小服務來開發單個應用的方式途徑,每一個服務執行在自己的進程中,通過輕量的通訊機制聯系。常常是基於HTTP資源API,這些服務基於業務能力構建。可以通過自己主動化部署方式獨立部署,這些服務自己有一些小型集中化管理,可以是使用不同的編程語言編寫。正如不同的數據存儲技術一樣。

好的,明確了微服務的“定義”之後,另一個須要知道的就是monolithic(總體)風格。

總體應用程序作為單一單元進行構建。企業級應用程序通常包括三個組成部分:一套client用戶界面(由運行在用戶設備上的瀏覽器中的HTML頁面以及JavaScript代碼構成)、一套後端數據庫(將大量插入至數據庫管理系統的大量表構成,通常採用關系數據庫)以及一款server端應用程序。

該server端應用程序將負責處理HTTP請求、運行域邏輯、對來自數據庫的數據進行檢索與更新。同一時候選定HTML視圖並將其發送至瀏覽器端。

此server端應用程序通常為單一的邏輯可運行文件。不論什麽針對該系統的變更都須要對該server端應用程序進行新版本號構建與部署。

這種總體server機制在構建此類系統中可謂不可或缺。我們用於處理請求的所有邏輯都執行在單一進程其中,同意大家使用語言中的基本功能以將該應用程序拆分為類、函數以及命名空間。通過這種方式。我們可以在開發者的筆記本設備上執行並測試應用程序,同一時候利用一整套部署流程以確保所有變更都經過妥善測試而後被部署在生產環境其中。大家可以將大量實例執行在一套負載均衡方案之後,從而實現橫向擴展能力。

這類總體應用程序當然可以切實起效,但人們卻逐漸發現當中存在著諸多弊端——特別是在將大量應用程序部署在雲環境當中的情況下。

因為變更周期被大量集中於一處——即使只指向應用程序中的一小部分。單一變更亦要求我們相應用程序總體進行重構與又一次部署。

隨著時間推移。我們往往非常難保證理想的模塊化結構,這意味著本應只影響單一模塊的變更往往會擴散至該模塊之外。

規模伸縮亦要求我們對總體應用程序進行規模調整,而非單純為當中必要的部分進行資源擴容。

技術分享

總體型應用程序與微服務架構應用程序

微服務的歷史

“微服務”一詞最早被威尼斯附近的一個軟件架構師小組於2011年5月首次提及。當時他們用這個詞匯來描寫敘述自己最近研究項目其中所涉及的通用性架構機制。

2012年5月,該小組作出終於決議。覺得“微服務”是最適合的架構名稱。

2012年3月。James在《微服務-Java以及Unix方式》其中就此發表了一篇案例研究報告,而Fred George也差點兒在同一時間進行了同樣的工作。Netflix公司的Adrian Cockcroft將微服務架構稱為“細化SOA”,並覺得這是一套在Web規模下具備開創意義的架構類型。Joe Walnes、Dan North、Evan Botcher以及Graham Tackley也分別在這篇文章中對此作出了評論。

微服務的特點

  1. 彼此獨立:既然是一個獨立的服務,那必定是一個完整的自治系統,不依賴外部的東西就行提供服務。

    有自己一整套的完整的執行機制,有和外部通訊的標準化接口。


  2. 原子化:作為一個微服務。一定是一個原子化的服務。

    也就是說服務不能再劃分成更小的服務了。

    世界上的一些事物都是有原子構成的。它為什麽能構成全部的物體。正是因為它足夠的基礎。假設一個服務還能劃分成幾個小的服務。那我們就不能稱之為一個微服務。它事實上能夠通過幾個微服務組合成的一個系統。


  3. 組合和重構:假設是最原子的服務,那一定是沒有不論什麽用處的。微服務之所以奇妙,在於它能高速的組合和重構。彼此組合成一個系統。系統裏面全部的實體在概念上是對等的。因此它的結構相對簡單化。是一種松散耦合的結構。這種系統,往往具有更強的可擴展性和魯棒性。

知名微服務架構使用者

眼下據統計,知名的微服務架構使用者包含:


  • Akana

  • Amazon

  • AnyPresenceJustAPIs

  • Apprenda

  • Axway

  • 1060 Research Ltd. has deployed architectures on its platform that contain on average between3-5,000 individual services since 2003.

  • Bluemix

  • Cloud Foundry

  • Google

  • The Guardian

  • Hailo Taxi

  • HP Helion Development Platform

  • Jelastic

  • Microsoft Azure

  • Netflix (Netflix receives nearlytwo-billion requests each day resulting in roughly 20 billion internal APIcalls.)

  • Nirmata

  • nearForm

  • Riot Games

  • SoundCloud

  • Uber

  • Joined Node


在此須要說的是。咱們好雨雲在微服務領域也有非常多率先和獨到的地方,在以後的【微服務幹貨系列】中,我們會慢慢分享給大家,敬請關註。


Docker在微服務系統中所扮演的角色

談到微服務。不得不提到Docker,微服務要執行,首先須要一套執行的環境。

這套環境不能對外部有依賴性。同一時候。執行環境的粒度又必須足夠的小,這樣才幹稱之為”微“,否則必定是對資源的巨大浪費。Docker出現以後。我們看到了微服務的一個很完美的執行環境。

  • 獨立性:一個容器就是一個完整的運行環境。不依賴外部不論什麽的東西。

  • 細粒度:一臺物理機器能夠同一時候執行成百上千個容器。其計算粒度足夠的小。

  • 高速創建和銷毀:容器能夠在秒級進行創建和銷毀,很適合服務的高速構建和重組。

  • 完好的管理工具:數量眾多的容器編排管理工具,可以高速的實現服務的組合和調度。

微服務領域的大牛

這裏只提兩位,一位是Martin Fowler。Martin Fowler是國際著名的面向對象分析設計、UML、模式等方面的專家,敏捷開發方法的創始人之中的一個,現為ThoughtWorks公司的首席科學家。他改變了人類開發軟件的模式,他被開發人員們尊為“教父”。他的《Microservice》一文影響了非常多人。

技術分享

另外一位是《Building Microservice》作者Sam Newman,他也是ThoughtWorks的技術專家,他的這本著作能夠說是學習微服務開發人員必讀之物。

學習微服務資料整理

上文提到的Martin Fowle 《Microservices》一文。國內已經有非常多翻譯了,詳細能夠點擊以下鏈接:

http://blog.csdn.net/wurenhai/article/details/37659335

在Docker上執行微服務

http://www.infoq.com/cn/news/2015/06/qiniu-best531?utm_campaign=infoq_content&

微服務架構在雲端的應用

http://www.csdn.net/article/2015-11-16/2826222


再談Docker,微服務的場景化應用

http://www.d1net.com/cloud/tech/360510.html

Martin Folwer談微服務的優缺點

http://www.wtoutiao.com/p/i648ov.html

Sam Newman 《Building Microservice》下載地址

http://download.csdn.net/detail/ramissue/8441997

【微服務幹貨系列】使用微服務架構之前,你必須知道的