一、為什么有微服務
解決單體應用的局限性
隨著業務發展,業務邏輯復雜、關聯方多,導致業務系統的代碼臃腫、難于做迭代或者維護,導致很多的問題,如:bug多、難于維護修復、每次需要評估改動服務接口影響的范圍,開發周期長等。為了解決這些問題,微服務架構應運而生,它將應用拆分成多個小服務,每個服務都是獨立、可單獨部署的,從而提高系統的可擴展性、可維護性和可靠性。
應對復雜業務場景
傳統的單體應用架構已經無法滿足快速變化的市場需求。微服務架構通過將業務拆分成多個小服務,每個服務專注于完成一個業務功能,從而降低了業務之間的耦合度,使得每個服務都可以獨立進行開發、測試、部署和擴展。這種靈活性使得微服務架構能夠更好地應對復雜業務場景,滿足快速變化的市場需求。
技術發展的推動
隨分布式系統、容器化技術、CI、CD的產生,讓微服務的開發、管理變得方便而高效
二、現有哪些微服務技術
前存在多種微服務技術,以下是一些常見的微服務技術,特別是在企業級開發中常用的:
Spring Cloud
Spring Cloud是Java領域微服務架構的王者。它提供了一套完整的微服務解決方案,包括服務發現、配置管理、智能路由、服務網關、負載均衡、熔斷器、分布式跟蹤等。Spring Cloud與Spring Boot的結合使用,可以非常快速地搭建起微服務架構。
Dubbo
Dubbo是阿里巴巴開源的一款高性能、輕量級的Java RPC框架。它提供了三大核心能力:面向接口的遠程方法調用,智能容錯和負載均衡,以及服務自動注冊和發現。Dubbo可以很好地處理服務之間的通信和治理問題。
Kubernetes
Kubernetes是一個開源的,用于管理云平臺中多個主機上的容器化的應用,Kubernetes的目標是讓部署容器化的應用簡單并且高效(powerful),Kubernetes提供了應用部署、規劃、更新、維護的一種機制。
Nacos
Nacos是一個更易于構建云原生應用的動態服務發現、配置管理和服務管理平臺。它更適合于云原生架構中的服務治理、配置管理和服務注冊與發現。
Service Fabric
Service Fabric是微軟推出的一個微服務框架,用于構建和運行可伸縮且可靠的無服務器和容器化微服務。它提供了系統級的可靠性和性能,使開發人員能夠專注于實現業務邏輯
三、微服務有哪些特點
獨立性
每個微服務都是獨立的,可以獨立開發、測試、部署和擴展。
松耦合
微服務之間通過輕量級的通信機制(如API、消息隊列等)進行交互,降低了服務之間的耦合度。
自治性
每個微服務都可以獨立選擇技術棧、數據庫和部署方式。
容錯性
由于服務之間的松耦合,某個微服務的故障不會影響其他服務的正常運行
相比原有的
關于松耦合特性,原有的傳統服務的服務通信應該用到進程或者共享變量、如果需要很復雜的業務邏輯的情況下,這種就會造成資源的開銷大、代碼復雜性高的弊端;如果使用微服務的框架,例如RPC(HSF、Thrift)等,可以拆成簡單的api調用,并且本身服務和服務之間的體量就會小很多,我們可以很容易的實現業務的交織的調用過程,e.g. 訂單中心調用調度算法,調度算法調用地圖的計算邏輯,實現訂單的派單過程
上面的好處連帶的優勢就是開發新功能或者擴展已有的業務變得簡單,不需要整體的在一個大服務內執行應用發布,只需要變更關聯的api接口掛載的應用即可,減少了開發周期和成本,能夠做到快速迭代
獨立性的好處就是技術可以異構,不依賴于語言,前端的代碼也是一個服務,后端的代碼也是一個服務,借助現有的RPC框架,可以做到跨語言的調用,例如使用Thrift這個RPC框架
四、微服務的弊端
分布式復雜性:微服務架構是分布式系統,需要更多的測試和監控來確保服務之間的通信正常。一般會通過中間件消息隊列實現服務的通信和共享資源的分享,這就帶來了分布式領域下的數據同步和一致性的挑戰
服務劃分難度:如何合理地將系統拆分成多個微服務是一個挑戰。如果拆分的不對,會造成后續的很多反復、繁雜的工作挑戰
運維復雜度:隨著微服務數量的增加,運維的復雜度也會增加,拆分的越多越細,就需要一個人去維護更多的服務
漸進式的數據庫一致性 由于微服務的替換傳統服務不是一蹴而就的,很多時候偶都是同時存在新老系統的api和數據庫,如何維持新老系統的一致性就成了問題,所以在探索微服務的過程中,要做到數據同步鏈路的保障,需要更多的維護成本
五、過往經驗
使用情況
在過往的公司中,微服務架構被廣泛應用于大型、復雜的項目中。通過將項目拆分成多個小服務,降低了開發難度和復雜度,提高了開發效率和靈活性。同時,每個服務都可以獨立擴展,從而提高了整個系統的可擴展性。
拆分思路:縱向的技術通用面和橫向的業務角度,技術通用可以將一些通用api、算法抽離出來,也可以從架構的角度將業務分為業務應用層、服務計算層、服務存儲層等;橫向的角度可以根據業務系統拆分為運單中心、訂單中心、運營中心、算法中心等
技術特點
在過往公司的實踐中,微服務架構的技術特點主要體現在以下幾個方面
技術棧的多樣性:每個微服務都可以獨立選擇技術棧、數據庫和部署方式。這帶來了技術的靈活性,但也增加了技術的復雜度。
通信機制的輕量級:微服務之間通過輕量級的通信機制(如API、消息隊列等)進行交互,降低了服務之間的耦合度。
獨立開發和部署:每個微服務都可以獨立開發、測試、部署和擴展,提高了開發效率和靈活性。
總結
微服務架構是一種先進的架構模式,適用于大型、復雜的項目。它帶來了很多好處,如降低開發難度和復雜度、提高系統的可擴展性和容錯性等。但是,它也帶來了一些挑戰和復雜度,如服務劃分難度、分布式復雜性、運維復雜度等。因此,在使用微服務架構時,需要仔細權衡其優缺點,并結合項目的實際情況進行選擇。同時,需要不斷學習和探索新的技術和方法,以應對微服務架構帶來的挑戰和復雜度。