理解微服務的定義,概念以及微服務的原理
微服務是業(yè)界比較新的流行語,似乎每個人都在以這樣或那樣的方式談論它。讓我們理解一下什么是微服務?通過這篇教程我們將理解微服務的定義,概念以及微服務的原理。
微服務的定義
如今,微服務是SOA(面向服務的架構)之后越來越流行的架構模式之一,如果您正在跟蹤行業(yè)趨勢,那么您會發(fā)現(xiàn),現(xiàn)在的企業(yè)不再像幾年前那樣對開發(fā)大型應用程序來管理端到端業(yè)務功能感興趣。相反,他們選擇快速和敏捷的應用程序,這也使他們花費更少的錢。
微服務有助于打破大型應用程序的邊界,并在系統(tǒng)內部構建邏輯上獨立的較小系統(tǒng),例如,使用Amazon AWS,你可以輕松構建云應用程序。這是微服務的一個很好的例子。



如上圖所示,每個微服務有它自己的業(yè)務層以及數(shù)據(jù)庫,改變其中一個微服務不會對另外的微服務有任何的影響。
總之,微服務之間使用廣泛的輕量級協(xié)議進行通信,例如 HTTP 和 REST,TCP, 或者 消息協(xié)議, 例如 JMS 和 AMQP。在特定的場景,他們也可以選擇更專業(yè)的協(xié)議。
微服務的原理
現(xiàn)在我們來看一下微服務必須需要的原則。
1.單一功能職責
單一功能職責是SOLID設計模式之一,它意味著一個單元,無論是類、函數(shù)還是微服務,都應該有且只有一個職責。在任何時候,一個微服務都不應該有一個以上的職責。
2.圍繞著業(yè)務功能設計
微服務應該專注于特定的業(yè)務功能,并確保它有助于完成任務。微服務絕不應限制自己采用最適合解決業(yè)務目的的適當技術棧或后端數(shù)據(jù)庫存儲。當我們設計單個應用程序時,這常常是一個約束,我們試圖在某些領域中使用一些折衷來解決多個業(yè)務解決方案。微服務使您能夠選擇最適合當前問題的解決方案。
3.你建造它,你擁有它。
這種設計的另一個重要方面與開發(fā)前后的職責有關。在大型組織中,通常由一個團隊開發(fā)app location,經(jīng)過一些知識轉移會議后,將項目移交給維護團隊。在微服務中,構建服務的團隊擁有它,并負責在將來維護它。這使開發(fā)人員能夠接觸到他們的軟件的日常操作,并且他們能夠更好地理解他們構建的產品在現(xiàn)實世界中是如何被客戶使用的。
4.基礎設施自動化
準備和構建微服務的基礎設施是另一個非常重要的需求,服務應該是可獨立部署的,并且應該捆綁所有依賴項,包括庫依賴項,甚至是執(zhí)行環(huán)境,如抽象物理資源(web服務器和容器或虛擬機)。
微服務和SOA之間的一個主要區(qū)別在于它們的自治級別。雖然大多數(shù)SOA實現(xiàn)提供了服務級抽象,但是微服務更進一步抽象了實現(xiàn)和執(zhí)行環(huán)境。
在傳統(tǒng)的應用程序開發(fā)中,我們構建一個WAR或EAR,然后將其部署到JEE應用程序服務器中,例如使用JBoss、WebLogic、WebSphere等等。我們可以將多個應用程序部署到同一個JEE容器中。在理想的場景中,在微服務方法中,每個微服務將構建為一個胖Jar,嵌入所有依賴項,并作為獨立的Java進程運行。
5.容錯設計
微服務的設計應考慮到故障情況。如果服務失敗,或者宕機一段時間,該怎么辦?這些都是非常重要的問題,必須在實際編碼開始之前解決——以便清楚地估計服務故障將如何影響用戶體驗。
快速故障是另一個用于構建容錯、彈性系統(tǒng)的概念。這種哲學提倡預期失敗的系統(tǒng),而不是構建永遠不會失敗的系統(tǒng)。由于服務在任何時候都可能失敗,因此能夠快速檢測故障并在可能的情況下自動恢復服務非常重要。
微服務應用程序非常重視應用程序的實時監(jiān)控,檢查體系結構元素(數(shù)據(jù)庫每秒接收多少請求)和業(yè)務相關指標(例如每分鐘接收多少訂單)。語義監(jiān)視可以提供出錯的早期預警系統(tǒng),從而觸發(fā)開發(fā)團隊進行跟蹤和調查。
微服務的優(yōu)點
微服務有許多優(yōu)點相比傳統(tǒng)的多層架構(單體龐大應用),微服務的優(yōu)點如下:
1,使用微服務,架構師和開發(fā)人員可以為每個微服務選擇適合于特定用途的架構和技術(通曉多種語言對應的熟悉語言的架構)。這為以更經(jīng)濟有效的方式設計更適合的解決方案提供了靈活性。
2,由于服務相當簡單,而且規(guī)模更小,企業(yè)可以試驗新的流程、算法、業(yè)務邏輯等等。它通過提供快速試驗和失敗的能力,使企業(yè)能夠進行顛覆性創(chuàng)新。
3,微服務能夠實現(xiàn)選擇性的可伸縮性,即每個服務都可以獨立地伸縮,而且伸縮的成本相對于單體應用方面要低。
4,微服務是自包含的、獨立的部署模塊,當?shù)诙€微服務沒有按照我們的需要執(zhí)行時,可以使用另一個類似的微服務替換一個微服務。它有助于做出正確的“購買構建”決策,而這通常是許多企業(yè)面臨的挑戰(zhàn)。
5,微服務幫助我們構建本質上是有機的系統(tǒng)(有機的系統(tǒng)是通過添加越來越多的功能在一段時間內橫向增長的系統(tǒng))。因為微服務都是關于獨立可管理的服務——它允許在需要時添加越來越多的服務,而對現(xiàn)有服務的影響最小。
6,技術變化是軟件開發(fā)中的障礙之一。使用微服務,可以單獨更改或升級每個服務的技術,而不是升級整個應用程序。
7,由于microservices將服務運行時環(huán)境和服務本身打包在一起,因此允許在同一環(huán)境中共存多個版本的服務。
8,最后,微服務還支持更小、更專注的敏捷開發(fā)團隊。團隊將根據(jù)微服務的邊界進行組織。
總結:
在本文中,我僅列出了在我有限的知識范圍內在許多組織中看到的微服務的一些優(yōu)點。由強大的設計和出色的代碼支持的單體應用程序也可以證明是一個好的決策,并且產品可以停留足夠長的時間來支持決策。
與微服務類似,糟糕的設計決策將被證明代價高昂。它們可能看起來簡化了組件,但是它們可能增加了組件之間通信的復雜性,并且更難控制和管理。