更新時間:2022-03-30 來源:黑馬程序員 瀏覽量:
微服務架構是一種架構風格和架構思想,它倡導我們在傳統軟件應用架構的基礎上,將系統業務按照功能拆分為更加細粒度的服務,所拆分的每一個服務都是一個獨立的應用,這些應用對外提供公共的API,可以獨立承擔對外服務的職責,通過此種思想方式所開發的軟件服務實體就是“微服務”,而圍繞著微服務思想構建的一系列體系結構(包括開發、測試、部署等),我們可以將它稱之為“微服務架構”。
根據微服務架構的定義,將傳統單體架構拆分為微服務架構的方式如圖1-4所示。
圖1-4傳統單體架構拆分為微服務架構
從圖1-4中可以看出,微服務架構已將傳統單體架構中的訂單服務、商品服務和用戶服務拆分為了獨立的服務,其中的每一個服務都是一個獨立的應用,可以訪問自己的數據庫,這些服務對外提供公共的API,并且服務之間可以相互調用。
注意:微服務和微服務架構是兩個不同的概念。微服務強調的是服務的大小,它關注的是某一個點,而微服務架構是一種架構思想,需要從整體上對軟件系統進行全面的考慮。
與傳統單體應用架構相比,微服務架構有很多優點,具體表現如下:
微服務架構在將應用分解的同時,規避了原本復雜度無止境的積累。每一個微服務專注于單一功能,并通過定義良好的接口清晰地表述服務邊界。由于體積小、復雜度低,每個微服務可由一個小規模開發團隊完全掌控,易于保持高可維護性,并提高了開發效率。
由于微服務具備獨立的運行進程,所以每個微服務都可以獨立部署。當某個微服務發生變更時,無需編譯、部署整個應用。由微服務組成的應用相當于具備一系列可并行的發布流程,使得發布更加高效,同時降低了對生產環境所造成的風險,最終縮短應用交付周期。
微服務架構下,技術的選型是多樣化的。每個團隊都可以根據自身服務的需求和行業發展的現狀,自由選擇最適合的技術。由于每個微服務相對簡單,當需要對技術進行升級時,所面臨的風險較低,甚至完全重構一個微服務也是可行并容易的。
當架構中的某一組件發生故障時,在單一進程的傳統架構下,故障很有可能在進程內擴散,導致整個應用不可用。在微服務架構下,故障會被隔離在單個服務中。若設計良好,其他服務可通過重試、平穩退化等機制實現應用層面的容錯。
單個服務應用也可以實現橫向擴展,這種擴展可以通過將整個應用完整的復制到不同的節點中實現。當應用的不同組件在擴展需求上存在差異時,微服務架構便體現出其靈活性,因為每個服務可以根據實際需求獨立進行擴展。
每個微服務有自己的業務邏輯和適配器,并且一個微服務一般只完成某個特定的功能,例如商品服務只管理商品、客戶服務只管理客戶等。這樣開發人員可以完全的專注于某一個特定功能的開發,而不用過多的考慮其他,從而提高開發效率。
除了上述幾點好處外,微服務架構還有很多好處,由于篇幅有限,這里就不一一列舉了,但從微服務架構的好處可以看出,使用微服務可以很好的解決傳統單體架構中的問題。
微服務架構除了有上面所講的各種優點外,還存在著一些不足,這些不足的具體表現如下:
①開發工具(或IDE)是面向構建傳統的單體應用程序的,不為開發分布式應用程序提供全面功能上的支持。
②測試更加困難。在微服務架構中,服務數量眾多,每個服務都是獨立的業務單元,服務主要通過接口進行交互,如何保證依賴的正常,是測試面臨的主要挑戰。
③開發人員必須實現服務間的通信機制。
④實現用例跨多個服務時,需要面對使用分布式事務管理的困難。
⑤l實現跨多個服務的用例,需要團隊之間進行仔細的協調。
在部署和管理時,由許多不同服務類型組成的系統的操作比較復雜,這將要求開發、測試及運維人員有相應的技術水平。
微服務架構用多個服務實例取代了1個單體應用程序實例,如果每個服務都運行在自己的JVM中,那么有多少個服務實例,就會有多少個實例在運行時的內存開銷。
通過前3個小節的學習,相信有些讀者對微服務架構已經有了一定的了解。在學完后,細心的讀者可能會有這樣一個疑問,微服務架構與SOA都是對單體架構的拆分,那么他們有什么不同呢?下面通過一個表格對兩者的區別進行對比,如表1-1所示。
表1-1微服務架構與SOA的區別