API
在各個不同的小型的服務間進行通訊。這些多個小型的服務可以由獨立的團隊管理。通俗的理解:例如在福特汽車還沒發明出流水線這種工作模式之前,一個工人在生產一輛汽車先要從發動機,再到變速箱再到底盤等等最後一輛車的組裝完成都會參與到。但是有了流水線的工作模式後,在一條生產線上,按照各個汽車零件的功能劃分,分成了不同的生產車間。這些不同的車間按照規定的技術標準生產出零件,最後再組裝到一塊。
在我們開發一個電商系統時,電商系統有分用戶模組 / 商品模組 /訂單模組 / 財務模組等等。整個電商系統就是就是在生產一輛車,車上的不同零件就是電商系統中不同的模組。傳統的開發模式就是先把用戶模組開發出來讓用戶可以註冊,再開發商品模組可以上線商品,再開發訂單模組可以讓用戶購買等等,在這個過程中程式設計師會涉及到整個系統的開發,並且都是使用的統一的技術棧。而使用微服務的架構模式,就是類似於流水線。不同的模組將由不同的團隊開發,每個團隊使用的技不必統一。只需要在對外提供統一標準協議的API介面即可。
顆粒度小
每個服務只專註做一件事。例如負責用戶模組的團隊,就只專註處理用戶問題,其他的訂單問題 / 商品問題不聞不問。自主性
每個獨立的服務都可以擁有自己的技術棧,部署環境,獨立運行,互不依賴。例如用戶模組可以用php
語言開發部署在阿里雲;訂單模組可以用java
語言開發部署在華為雲。輕量化的通訊機制
各個不同的服務之間,通常使用 REST / HTTP
協議的介面進行通訊。敏捷性
微服務促進若干小型獨立團隊形成一個組織,這些團隊負責自己的服務。各團隊在小型且易於理解的環境中行事,並且可以更獨立、更快速地工作。這縮短了開發周期時間。您可以從組織的總吞吐量中顯著獲益。靈活擴展
通過微服務,您可以獨立擴展各項服務以滿足其支援的應用程式功能的需求。這使團隊能夠適當調整基礎設施需求,準確衡量功能成本,並在服務需求激增時保持可用性。輕鬆部署
微服務支援持續集成和持續交付,可以輕鬆嘗試新想法,並可以在無法正常運行時回滾。由於故障成本較低,因此可以大膽試驗,更輕鬆地更新程式碼,並縮短新功能的上市時間。技術自由
微服務架構不遵循「一刀切」的方法。團隊可以自由選擇最佳工具來解決他們的具體問題。因此,構建微服務的團隊可以為每項作業選擇最佳工具。可重複使用的程式碼
將軟體劃分為小型且明確定義的模組,讓團隊可以將功能用於多種目的。專為某項功能編寫的服務可以用作另一項功能的構建塊。這樣應用程式就可以自行引導,因為開發人員可以創建新功能,而無需從頭開始編寫程式碼。彈性
服務獨立性增加了應用程式應對故障的彈性。在整體式架構中,如果一個組件出現故障,可能導致整個應用程式無法運行。通過微服務,應用程式可以通過降低功能而不導致整個應用程式崩潰來處理總體服務故障。縮短開發時間
微服務可以通過分散式部署,大幅的提升團隊的開發效率。相較傳統的線性開發,微服務架構下可以並行開發。快速上線產品
縮短了開發時間,等同於加快產品面市,可幫助企業快速搶佔市場。高度可擴展
在服務獨立的背景下,在原有的系統上新添加功能模組比傳統單體架構顯得更加容易。更加穩定
傳統的單體架構下,一旦某一個模組出問題,整體服務將停擺。而微服務可以將各個獨立的服務重複部署,這樣將大大的增加整體系統的穩定性。易於部署
由於各個服務的獨立化,可以使用不同的技術棧。不用再去操心部署的問題。服務註冊與發現
服務註冊就是把某個微服務的通訊資訊註冊到一個公共的組件中心,比如常用的 zookeeper / consul
。服務發現就是跟服務註冊相反的,每一個在組件中心註冊的通訊資訊要能夠及時的被其他微服務發現。要理解服務註冊與發現,要先來看下架構的發展史:Web1.0
的架構是很簡單的,不同的請求 Web / Ios / Android
直接請求 Server
,甚至很多時候都是把 Server
跟 Database
放在一起的。這種架構對於小型的系統來講其實算是效率最高最穩定的,對於不複雜的系統來講,這種架構是最合適的。Server
,然後再把所有的請求入口統一到一個負載均衡中心,利用負載均衡技術把請求平均到分發到每個Server
。同時在資料庫也可以利用主從的方式來增加並發量。在Web2.0
架構時代中,依然還不需要用到服務註冊與發現。Order / Goods / User
這些功能模組劃分開來。這樣做的好處就是,每個功能模組各司其職,進行了深度的解耦,能夠快速的實現更新,其中一個服務掛了也不會影響到其他服務。同時也帶來了問題,從圖中就可以看出,服務之間的調用複雜度增加了、服務的管理難度變大了、各個服務之間調用的性能開銷也變大了[速度變慢了]、排查問題的難度增加了。在現在的雲時代,我們會把我們的產品直接上雲,會用 docker,會用 k8s,。在未使用服務註冊之前,我們在每個服務之間調用使用的方式就是把各個不同服務的 IP 地址和 Port 埠寫死在配置文件里,有的甚至硬編碼到程式碼。這樣做隨之而來的問題顯而易見,就是有增加或者減少服務時,就要到所有的服務更改 IP 和 Port 埠,這樣做明顯耗時耗力。
Register Server Cluster
就是服務註冊集群。當有服務啟動或者增加的時候,例如圖中的 Order / User / Goods
的服務,就去服務註冊集群中心註冊自己的相關資訊,也就是把自己所在的 IP
地址以及 Port
埠註冊上去。HTTP
輪詢的方式,或者是通過 SUB/PUB
的方式,也有通過 RPC
的方式都可以。通過以上的這種方式,把所有的服務資訊都放在註冊中心進行管理,這樣就可以讓我們不再繁瑣的不斷的去更新服務地址資訊了。
健康檢查
健康檢查
。HTTP
協議的 200
,那麼就標記這台服務不可用。