終于有人把微服務講明白了
01 微服務架構簡介
微服務這個概念并不是近年才有的,但這兩年隨著以容器為核心的新一代應用承載平臺的崛起,微服務煥發了新的生命力。
傳統的巨大單體(Monolithic)應用程序在部署和運行時,需要單臺服務器具有大量內存和其他資源。巨大的單體應用必須通過在多個服務器上復制整個應用程序來實現橫向擴展,因此其擴展能力極差;此外,這些應用程序往往更復雜,各個功能組件緊耦合,使得維護和更新更加困難。
在這種情況下,想單獨升級應用的一個功能組件,就會有“牽一發而動全身”的困擾。
在微服務架構中,傳統的巨大單體應用被拆分為小型模塊化的服務,每項服務都圍繞特定的業務領域構建,不同微服務可以用不同的編程語言編寫,甚至可以使用完全不同的工具進行管理和部署。
與單體應用程序相比,微服務組織更好、更小、更松耦合,并且是獨立開發、測試和部署的。由于微服務可以獨立發布,因此修復錯誤或添加新功能所需的時間要短得多,并且可以更有效地將更改部署到生產中。此外,由于微服務很小且無狀態,因此更容易擴展。
總體而言,微服務通常具有以下特點:
- 以單個業務或域為模型。
- 每個微服務實現自己的業務邏輯,包含獨立的持久數據存儲。
- 每個微服務有一個單獨發布的API。
- 每個微服務能夠獨立運行。
- 每個微服務獨立于其他服務且松耦合。
- 每個微服務可以獨立地升級、回滾、擴容、縮容。
02 微服務架構的主要類型
目前在微服務架構領域有多種微服務治理框架,如Spring Cloud、Istio等。這幾種微服務架構都符合上一節介紹的微服務架構的特點,但實現的方式不同:有的通過代碼侵入的方式實現,有的通過使用代理的方式實現。
在Kubernetes出現和普及之前,實現微服務架構需要通過像Spring Cloud這種代碼侵入的方式實現,也就是說,在應用的源代碼中引用微服務架構的治理組件。
在Kubernetes出現以后,我們可以將容器化應用之間的路由、安全等工作交由Kubernetes實現,也就是說,應用開發人員再也不必在開發階段考慮微服務之間的調用關系,只需關注應用代碼的功能實現即可。這種無代碼侵入的微服務架構(如Istio)越來越受到業內和客戶青睞。
03 企業實施微服務架構的收益和原則
從技術角度而言,企業實施微服務大致有以下幾個方面收益:
- 應用更快部署:微服務比傳統的單體應用小得多。較小的服務可以縮短修復錯誤所需的時間。微服務是獨立發布的,這意味著可以快速添加、測試和發布新功能。
- 應用快速開發:微服務由小團隊開發和維護,每個小團隊最大規模為10人,合理的團隊規模是5~7名成員,也就是“雙比薩團隊”(亞馬遜在2012年提出這個概念,意思是5~7人吃兩個比薩剛好吃飽)。
- 降低應用代碼復雜度:由于微服務比巨大的單體應用小得多,因此,這意味著每個微服務的代碼量是可控的,這讓代碼修改變得很容易。
- 應用易于擴展:微服務通常是獨立部署的。各個服務可以根據服務接收的負載量靈活地擴容和縮容。系統可以將更多的計算、存儲、網絡資源分配給接收高流量的服務,實現資源上的按需分配。
雖然微服務優勢明顯,但為了保證微服務在企業內順利實施,通常會遵循一些原則和最佳實踐:
- IT團隊重組為DevOps團隊:由微服務團隊負責從開發到運營的整個生命周期管理。DevOps團隊可以按照自己的節奏管理組員和產品,控制自己的節奏。
- 將服務打包為容器:通過將應用打包成容器,可以形成標準交付物,大幅提升效率。
- 使用彈性基礎架構:將微服務部署到PaaS上而非傳統的虛擬機,例如OpenShift集群。
- 持續集成和交付流水線:通過流水線打通從開發到運維的整個流程,這有助于微服務的落地。
在了解了微服務對于企業數字化轉型的意義后,接下來看一看PaaS、DevOps和微服務之間的關系。
04 PaaS、DevOps與微服務的關系
PaaS、DevOps、微服務的概念很早就出現了。廣義上的微服務和DevOps的建設包含人、流程、工具等多方面內容。IT廠商提供的微服務和DevOps主要是指工具層面的落地和流程咨詢。
在Kubernetes和容器普及之前,我們通過虛擬機也可以實現微服務和DevOps(CI/CD),只是速度相對較慢,因此普及性不高(想象一下通過x86虛擬化來實現中間件集群彈性伸縮的效率)。而正是容器的出現,為PaaS和DevOps工具層面的落地提供了非常好的承載平臺,使得這兩年容器云平臺風生水起。
這就好比4G(2014年出現)和微信(2011年出現)之間的關系。在3G時代,流量費較貴,大家對于微信語音和視頻聊天不會太感興趣;到了4G時代,網速提高而且收費大幅下降,像微信這樣的社交和互聯網支付工具才能興起和流行。
容器引擎使容器具備了較好的可操作性和可移植性,Kubernetes使容器具備企業級使用的條件。而IT界優秀的企業級容器云平臺——OpenShift又成為DevOps和微服務落地的新一代平臺。
OpenShift以容器技術和Kubernetes為基礎,在此之上擴展提供了軟件定義網絡、軟件定義存儲、權限管理、企業級鏡像倉庫、統一入口路由、持續集成流程(S2I/Jenkins)、統一管理控制臺、監控日志等功能,形成覆蓋整個軟件生命周期的解決方案。
所以說,OpenShift本身提供開箱即用的PaaS功能,還可以幫助客戶快速實現微服務和DevOps,并且提供對應的企業級服務支持。
關于作者:魏新宇,紅帽副首席解決方案架構師。在IaaS、PaaS方面有豐富的經驗,致力于開源解決方案在企業中的推廣和應用。從售前角度主導了紅帽在金融、汽車行業的多個PaaS項目。曾就職于華為、IBM、VMware。
郭躍軍,目前就職于VMware,擔任Solutions Engineer。曾于紅帽擔任PaaS咨詢顧問、AWS顧問服務團隊擔任云架構咨詢顧問,熟悉私有云和公有云生態。從2015年接觸容器技術開始,一直奮戰在PaaS建設一線,參與了很多OpenShift項目的競標、PoC、咨詢和落地實施,幫助很多企業實現了數字化轉型。
本文摘編自《OpenShift在企業中的實踐:PaaS DevOps 微服務》(第2版),經出版方授權發布。