[Spring Cloud Tutorial翻譯系列一]微服務-定義、原則、好處

微服務(Microservices)是業界最近的流行語,每一個人好像都在以這樣或那樣的方式談論它。如今讓咱們理解什麼是微服務?在本篇教程中,咱們會試着理解微服務的定義、概念以及原則。java

微服務的定義

今天,微服務是SOA(面向服務的架構體系)以後日趨流行的架構體系之一。若是你緊跟業界趨勢,你會發現商業機構再也不像幾年前那樣開發大型應用來管理它們的端對端業務功能,而是選擇那些快速並且敏捷的應用,這樣能夠花費更少的成本。web

微服務有助於打破大型應用的侷限而且能夠在系統裏面構建邏輯獨立的更小的系統。好比說,經過使用Amazon AWS,你能夠絕不費力地構建一個雲應用。這是一個說明微服務能幹什麼事情的很是好的例子。數據庫

單體架構VS微服務架構

在上圖你能夠看到,每一個微服務有它本身的業務層和數據庫。這樣設計的話,一個微服務的改變將不會影響到其它服務。

一般狀況,微服務經過使用被普遍接受的輕量協議來交互,好比HTTP和REST,或者消息協議,好比JMS(Java Message Service)或者AMQP(Advanced Message Queuing Protocol)。在某些特定的場景,開發者也可使用更多的特殊協議。後端

微服務的原則

如今讓咱們檢查微服務「必須擁有」(must have)的原則。服務器

  1. 單一職責原則

單一職責原則是 SOLID design pattern其中原則之一。它表示一個單元、一個類、一個函數或者一個微服務有且只有惟一指責。架構

在任什麼時候候,一個微服務都不該該擁有多個指責。運維

  1. 基於業務能力構建

微服務應該注重特定的業務功能而且保證它可以解決問題。一個微服務永遠也不該該限制它選擇合適的技術棧或者最適合解決業務目標的後端數據庫。函數

爲了解決許多業務問題,在某些方面須要作出一些妥協,這一般是咱們設計單體應用的約束和限制。微服務可以讓你在解決手頭上問題的時候選擇最優方案。微服務

  1. 你構建它,你擁有它!

另外一個這種設計的重要方面與開發先後的責任相關。在大型組織當中,一般一個團隊開發完應用,在一些知識交接事後,就會把它交給運維團隊。然而在微服務當中,開發團隊不只僅是開發應用——擁有它,而且對它將來的運維負責。ui

You build it,you own it!

這樣會使開發者與他們軟件的平常運維接觸,而且對他們是怎麼構建被用戶在真實世界中使用的產品有更好的理解。

  1. 基礎設施自動化

準備和建設微服務的基礎設施是另一個十分重要的需求。一個服務應該是可獨立部署的而且擁有全部的依賴,包括庫依賴,甚至是像web服務器、容器或或者抽象化物理資源的虛擬機。

一個微服務和SOA的主要區別之一在於它們的自治級別。大多數的SOA實現提供了服務級別的抽象,然而微服務則更加深刻,它抽象了環境的實現和執行。

在傳統的應用開發中,咱們構建一個WAR或者EAR,而後將它部署到JEE應用服務器,好比JBoss、WebLogic和WebSphere等等。咱們也許會部署多個應用到同一個JEE容器。在微服務架構的理想條件下,每一個微服務被構建成一個fat Jar,嵌入全部的依賴而且以一個獨立的Java進程運行。

  1. 爲失敗設計

在設計一個微服務時,咱們應該把各類失敗的可能性放在心上。咱們應該常常問本身,若是服務有時候失效了或者宕機了怎麼辦?這些是很是重要的問題,而且咱們需在開始實際編碼前解決它們——準確評估服務失效會多大程度地影響用戶體驗。

Fail fast(快速失敗)是另一個用來構建可容錯性、彈性系統的概念。這種哲學倡導構建可能出錯的系統,而不是永不出錯的系統。因爲服務可能在任什麼時候間失效,因此可以快速檢測出失效很是重要。固然若是能夠的話,最好還可以讓服務自動恢復。

微服務着重於應用的實時監控,用於檢查系統元素(好比數據庫每秒收到多少個請求)和業務相關指標(好比每秒收到多個訂單)。語義監控能夠提供一個檢測錯誤的告警系統,來讓開發團隊及時跟進以及查明錯誤。

微服務的好處

相比傳統的多層級單體架構,微服務提供了許多的好處。讓咱們把它們列出來:

  • 在微服務設計中,架構師和開發者能夠選擇最適合每一個微服務的架構和技術。這樣將最大限度地提升解決問題的靈活性。
  • 微服務實現了可選擇的擴展性。好比說每一個服務能夠獨立地擴展或者減小,而且比單體設計方法花費更少的成本。
  • 微服務是獨立的獨立部署模塊,當某個微服務不能按照咱們的須要執行時,能夠用另外一個相似的微服務替換該微服務。它有助於採起正確的購買與構建決策,這一般是許多企業面臨的挑戰。
  • 微服務能夠幫助咱們構建有機的系統(有機系統指的是經過添加愈來愈多的功能,在一段時期內橫向擴展的系統)。因爲微服務都是關於可獨立管理的服務——它能夠在咱們須要的時候增長服務卻不影響現有的服務。
  • 技術更新是軟件開發的障礙之一。然而在微服務當中,咱們能夠獨立地升級每一個微服務的技術而不是整個應用。
  • 因爲微服務將服務運行環境和服務自己一塊兒打包,因此這可使得多個不一樣版本的服務共存在同一環境。
  • 最後,微服務能使短小精悍,迅速敏捷團隊用於開發。同時團隊將以微服務的邊界進行組織。

原教程一共13篇,後續會陸續翻譯(ban yun)過來。

相關文章
相關標籤/搜索