必威电竞|足球世界杯竞猜平台

微服務
來源:互聯網

微服務(英文名:Microservices),也稱為微服務架構,是指開發應用所用的一種架構形式。可將大型應用分解成多個獨立的組件,其中每個組件都有各自的責任領域。微服務與傳統的單體式開發方式有很大的區別。微服務中的每個獨立組件都在自己的進程中運行,并通過輕量級的機制(通常是基于HTTP協議的RESTful API)進行通信和協作,以實現具體的業務功能和價值。根據需要,微服務可以采用不同的編程語言和數據存儲技術,并在不同環境中,通過自動化的方式進行獨立部署和擴縮,使服務之間的管理盡量簡化。

微服務是由傳統的單體式開發發展而來的,最早由Peter Rodgers(彼得·羅杰斯)在2005年提出,當時他把這種模式稱為“Micro-Web-Service”。2011年5月,在威尼斯舉行的一個軟件架構會議上構架師們首次提出“微服務”這個概念,用來描述一種他們共同的想法。2014年,Martin Fowler(martin fowler)發表了一篇關于微服務的文章,這篇文章詳細介紹了微服務架構的概念和特點,從而推廣了這種軟件架構風格。之后,受數字化轉型、客戶導向和微服務架構本身的優勢的驅動,微服務的市場價值持續增長。

微服務的特點是靈活擴展、自動化管理、數據分離、彈性等,這些特點帶來了開發和維護的便利,提高了團隊的效率和靈活性,增強了系統的可用性故障容許度等。微服務廣泛應用于互聯網、物聯網、電子商務、金融等領域。

發展歷程

軟件架構的發展經歷了幾個階段,從單體架構、垂直架構、SOA架構到微服務架構。

單體架構

2005年,Peter Rodgers(彼得·羅杰斯)在Web Services Edge會議上提出了“Micro-Web-Service”這個術語,他主張使用支持微網絡服務的軟件組件,而不是傳統的思維方式,并在演講中介紹了“軟件組件即微Web服務”的觀點。該觀點建立了微服務的功能模型——單體結構,該架構是一種把所有的代碼都放在一個項目里的簡單架構風格。這種架構的代碼之間耦合度高,系統變更會影響部署,開發效率低,部署結構復雜,系統啟動慢,可用性和擴展性差。適用于規模小的系統,或者需要快速原型的場景,不太關注質量。

垂直架構

2011年5月,一些軟件架構師在威尼斯附近舉行了研討會,他們提出了“微服務”這個概念,用來表達一種他們觀察到的常見的架構模式——垂直結構,這是他們當時一直在嘗試的一種風格。該架構是一種把一個復雜的單體應用按業務功能拆分成多個小型的、獨立的應用,每個應用都可以自己部署和運行,通過網絡協議和其他應用協作的軟件架構風格。垂直架構是一種過渡性的架構模式,它是從單體架構向微服務架構的演進。

SOA架構

2012年3月,思特沃克軟件技術有限公司首席咨詢師James Lewis(詹姆斯·路易斯)在波蘭克拉科夫舉辦的33rd Degree Conference大會上,做了一場題為《Microservices-Java,the Unix Way》的演講。在這場演講中,James討論了微服務的一些原則和特征,例如單一服務職責、康威定律、自動擴展、DDD等。在同年4月,Netflix的前云系統架構總監 Adrian Cockcroft(阿德里安·科克羅夫特)在一次會議中,將這種構架風格描述為“fine-grained SOA(細粒度SOA)”。SOA構架是一種面向服務的軟件設計方式,微服務架構在一定程度上是SOA架構的進一步發展的產物。而SOA架構是取代單體架構的墊腳石,它提供了一個更加靈活和敏捷的環境。

微服務架構

2012年11月,Fred George(弗雷德·喬治)在一次技術大會上,首次提出了“微服務架構”的概念,并在演講中闡述了如何將一個復雜的系統拆分為多個松耦合的服務,這是微服務架構的最初雛形。這是一種面向服務架構的專業化實現方法,它用于構建靈活的、可獨立部署的軟件系統。Martin Fowler(martin fowler)于2014年發表了一篇關于微服務的文章,這篇文章詳細介紹了微服務架構的概念和特點,從而推廣了這種軟件架構風格。2016年2月,Lightbend公司的創始人兼CTO Jonas Bonér(喬納斯·博內爾)發布了一篇名為《響應式微服務架構》的文章。在這篇文章中,他探討了如何基于響應式原理設計微服務架構,以及如何利用這種架構構建可擴展、可應對故障的隔離服務,并與其他服務協同以形成一個高效的整體。

2018年,根據《云微服務市場研究報告》推斷,2018年微服務市場價值為6.832億美元,截至2023年,市場價值增長至18.80億美元,復合年增長率為22.4%,而推動市場發展的主要因素包括數字化轉型、微服務架構的普及以及以客戶為導向的業務,在此研究中,2017年被視為基準年,2018至2023年被視為預測期。2023年4月,根據《云微服務市場研究報告》,微服務市場價值五年后將預計達到2.70136億美元,預測期內的復合年增長率約為21.7%。

結構對比

微服務架構與SOA構架

微服務架構和SOA架構都是一種將應用程序拆分為多個協作的服務的軟件設計方式。但是,它們之間也有一些區別,主要體現在以下幾個方面:

(1)服務粒度:微服務的粒度更小,更專注,每個微服務只負責一個業務功能,而SOA服務的粒度更大,可能包含多個業務功能;

(2)服務通信:微服務架構中,每個服務有自己的通信協議,不依賴于其他服務。而在SOA架構中,所有服務都通過一個叫做企業服務總線(ESB)的通信機制來交互。SOA依靠ESB來管理和協調服務,但如果ESB或某個服務出現故障或延遲,會影響整個系統;

(3)服務數據:SOA架構通常有一個共享的數據存儲層,供所有服務使用,而微服務架構中,每個服務有自己的數據存儲服務或數據庫;

(4)服務部署:微服務可以獨立部署,而SOA服務通常需要部署到一個統一的應用服務器平臺上。

與傳統開發模式的區別

傳統的開發方式一般被稱為單體式開發(Monolithic)。微服務構架與傳統的單體式架構有很大的不同,在傳統的單體架構中,應用程序的所有功能和特性都集成在一個可執行的應用程序中,所有任務都在一個大型項目中進行。而微服務架構風格,是將系統分為一系列低耦合的微服務,每個服務可以獨立部署和運行,服務之間通過REST等方式進行通信和協作,同時利用自動化的測試和運維技術減少服務拆分帶來的復雜性。

主要技術組件

服務注冊與發現

服務注冊與發現是一種用于管理微服務實例地址變化的技術。它可以讓微服務之間通過一個統一的服務名來進行通信,而不需要知道對方的具體位置。它主要包括兩個組件:服務注冊中心和服務發現客戶端。服務注冊中心是一個中心化的組件,負責存儲所有微服務實例的位置信息(如IP地址和端口號),以及提供查詢和更新這些信息的接口。服務發現客戶端是微服務的一部分,負責向服務注冊中心注冊自己的信息,以及從服務注冊中心獲取其他服務的信息。

API網關

API網關是一種用于統一管理微服務的訪問入口的技術。它可以提供一些公共的功能,如鑒權認證、路由轉發、負載均衡、限流熔斷、日志監控等,以減輕微服務的負擔,提高系統的安全性和可用性。API網關還可以實現協議轉換,將外部的HTTP請求轉換為內部的RPC或者消息調用,以適應不同的通信方式。

服務通信

服務通信是指微服務之間如何進行數據交換的問題。服務通信的方式一般有兩種:同步通信和異步通信。同步通信是指服務之間直接調用對方的接口,等待返回結果,這種方式簡單直接,但是會增加服務之間的耦合度,影響系統的可靠性和性能。異步通信是指服務之間通過消息中間件進行數據傳遞,不需要等待對方的響應,這種方式可以降低服務之間的耦合度,提高系統的可擴展性和故障容許度,但是會增加系統的復雜性和一致性問題。

服務監控

服務監控是一種用于實時觀測和分析微服務的運行狀況的技術。它可以收集和展示微服務的各種指標,如響應時間、吞吐量、錯誤率、資源利用率等,以幫助開發者和運維人員發現和定位系統的性能問題和故障。服務監控還可以實現告警機制,當系統出現異常時,及時通知相關人員,以減少系統的損失。

數據管理

數據管理是指如何處理微服務之間的數據依賴和一致性的問題。由于微服務架構中,每個服務都有自己的數據庫,這樣可以提高服務的自治性和隔離性,但是也會導致數據的冗余和不一致。

容器化

容器化是一種用于簡化微服務的部署和運維的技術。它可以將微服務的代碼和依賴打包到一個輕量級的、可移植的、隔離的、可復用的容器中,從而實現快速、一致、可靠的部署和運行。容器化還可以實現跨平臺的兼容性,讓微服務可以在不同的環境中運行,無需修改代碼或配置。容器化的主要工具有Dockerkubernetes等。

持續集成/持續部署(CI/CD)

持續集成/持續部署(CI/CD)是一種用于提高微服務的開發效率和質量的技術。它可以實現微服務的自動化構建、測試、發布和部署,從而縮短開發周期,降低人為錯誤,提升用戶滿意度。

常見的設計模式

聚合器設計模式

聚合器微服務設計模式是一種常見的微服務設計模式,它有兩種形式。一種是聚合器作為一個網頁,它通過調用多個輕量級的REST服務,獲取數據并進行處理和顯示,實現應用程序所需的功能。另一種是聚合器作為一個復合微服務,它不需要顯示,而是從多個單獨的微服務收集數據,對其應用業務邏輯,然后將其作為一個REST端點發布,供其他服務消費。這種設計模式遵循DRY原則,如果有多個服務需要訪問同樣的服務組合,那么將這個邏輯抽象為一個復合微服務,可以提高系統的靈活性和可維護性。如果聚合器是一個復合微服務,那么它也可能有自己的緩存和數據庫層,以提高系統的性能和可靠性。

代理設計模式

代理微服務設計模式和聚合器微服務設計模式有些相似,但有一些區別。聚合器微服務設計模式是在客戶端把多個服務的數據聚合起來,而代理微服務設計模式是在服務端根據業務需求選擇調用不同的服務。代理有兩種類型,一種是啞代理,它只是簡單地把請求轉發給某個服務。另一種是智能代理,它可以對請求或響應做一些數據處理。一個智能代理的例子是,它可以根據不同的設備類型,提供不同的界面顯示。

鏈式設計模式

鏈式微服務設計模式是一種微服務設計模式,它通過多個服務的協作來生成一個請求的響應。客戶端的請求先被服務A處理,然后服務A再把請求傳給服務B,服務B也可能再把請求傳給服務C,以此類推。這些服務之間都是用同步的HTTP請求和響應來通信的。這種設計模式的一個重要注意事項是,不要讓服務鏈太長,因為這樣會導致客戶端等待的時間過長,尤其是如果客戶端是一個需要顯示響應的網頁的話。

分支設計模式

分支微服務設計模式是在聚合器微服務設計模式的基礎上,增加了更多的靈活性和選擇性。它可以根據業務需求,同時或者分別調用兩條可能相互沖突的微服務鏈,從而得到不同的響應。作為一個網頁或者一個復合微服務,可以根據客戶端的請求,選擇調用兩條鏈中的一條或者兩條,從而實現不同的功能。

數據共享設計模式

數據共享微服務設計模式和其他模式的不同之處在于,它讓兩個服務使用同一個數據源。這和微服務的設計原則之一自治有些沖突,因為自治要求每個服務都是全棧的,有自己的UI、中間件持久化和事務層。但是,在實際的開發過程中,往往是從一個復雜的單體應用逐步演化成微服務架構的,而不是一開始就完全按照微服務的方式來設計。在這個過程中,有些數據可能很難分離,它們可能涉及到多個服務的業務邏輯。為了提高效率,可以暫時讓這些服務共享數據,但這只是一個過渡階段,最終的目標還是要讓每個服務擁有自己的數據,實現真正的解耦。

異步消息傳遞設計模式

異步消息傳遞微服務設計模式可以克服REST設計模式的同步和阻塞的缺點。它使用消息隊列來實現服務之間的異步通信,從而提高系統的性能和可靠性。例如,服務A可以先同步地向服務C發送請求,然后服務C可以通過消息隊列異步地與服務B和服務D交互。服務A和服務C之間的通信也可以是異步的,這樣可以更好地支持可伸縮性的需求。這種設計模式并不排斥REST請求/響應,它們可以根據業務需求結合使用。有些情況下,使用REST請求/響應可能更簡單或更合適,有些情況下,使用異步消息傳遞可能更靈活或更高效。

支持工具

設計特點

核心特點

微服務架構由離散組件和服務組成,它們的相互通信和數據交換創造了一個完整應用程序的功能。微服務設計的典型特征包括以下幾點:

靈活擴展:微服務允許獨立地擴展各個服務以滿足其所支持的應用程序功能的需求。這使得團隊能夠適當地調整基礎設施需求,準確地衡量功能成本,并在服務需求激增時保持系統的可用性

自動化管理:微服務支持持續集成和持續交付,使得新版本的發布和故障時的回滾變得輕松。由于故障成本較低,因此可以更輕松地更新代碼,并縮短新功能的上市時間。

數據分離:在微服務架構中,每個微服務組件幾乎沒有依賴關系,這種設計可以確保數據的一致性和獨立性,避免了不同服務之間的數據耦合,提高了系統的穩定性和可擴展性。

彈性:服務的獨立性增加了應用程序對故障的彈性。在整體式架構中,如果一個組件出現故障,可能會導致整個應用程序無法運行。然而,通過微服務,應用程序可以在面臨全局服務故障時通過降低功能來避免整個應用程序崩潰。

優勢

易于開發與維護:每個微服務都專注于一個特定的業務功能,其代碼量較少且邏輯清晰,這使得開發和維護變得更加容易。此外,每個微服務可以獨立部署,無需等待整個應用程序的更新,也不會影響其他服務的運行。

提高團隊的效率和靈活性:在微服務架構中,每個服務模塊都可以使用不同的語言和工具進行開發,并部署在不同的平臺上。微服務組件之間通過API進行網絡通信,這為應用程序開發帶來了極大的靈活性。此外,模塊化的應用程序組件可以被其他應用程序重復使用,從而進一步簡化應用程序設計的投資并加快開發時間。

提高系統的可用性故障容許度:由于微服務應用程序的每個組件都是獨立運行的,因此監控每個組件的運行狀態和性能以及管理大型應用程序的運行變得更加容易。此外,可以根據需要對特定的服務進行擴展,這種靈活性使得系統能夠更好地應對變化的需求和負載,從而提高了系統的可用性。

挑戰

分布式復雜性高:分布式操作可能會帶來一定的復雜性,這使得理解和排除故障變得困難。此外,分布式操作可能效率較低,并可能涉及到服務之間的緊密運行時耦合,這可能會降低其可用性。由于遠程通話速度較慢,并且始終存在失敗的風險,因此分布式系統的編程可能更具挑戰性。

性能影響:盡管微服務容器為其任務提供了出色的計算性能,但許多容器必須通過網絡進行通信才能使整個應用程序正常運行。網絡擁塞和延遲可能會影響性能,并可能抵消這些單獨的性能優勢。此外,支持應用程序的微服務數量可能需要額外的網絡管理和控制,并可能需要多個負載均衡實例。

網絡限制和安全風險:微服務組件依賴于網絡上的API驅動的通信。這可能會在帶寬和延遲方面給現有的企業網絡帶來巨大壓力。如果眾多微服務應用程序在企業環境和基礎設施中同時工作,這種壓力可能會進一步增加。某些微服務采用者可能需要進行網絡升級,以支持繁忙的微服務應用程序的通信需求。此外,在復雜的微服務環境中,網絡漏洞和安全風險可能會加劇。

部署及檢測困難:微服務應用程序環境可能非常復雜,需要監視和報告為構建應用程序而部署的所有組件。這些組件的短暫性質加劇了這一挑戰,必須在部署和刪除這些組件時對其進行監控。這需要高水平的運行狀況和性能監控,以及自動化和編排。

平臺對比

應用領域

微服務的應用領域非常廣泛,包括互聯網、物聯網、電子商務、金融領域等。例如,Netflix亞馬遜Spotify谷歌eBay思特沃克軟件技術有限公司等都是典型的微服務架構的應用。

互聯網企業

互聯網企業(例如亞馬遜網站、Netflix、優步Etsy)將其IT的成功計劃部分轉向微服務的采用。這些企業完成了他們的單一應用程序,然后,將其重構為微服務的架構,以快速實現擴展優勢、更高的業務敏捷性和難以想象的利潤。

物聯網

在物聯網中運用微服務可以開發一系列全新的端點設備、應用程序服務器、數據庫和基于人工智能的分析工具,其連接性可在本地或云端的部署中,提供所需通信的定制信號,而由于微服務架構中存在松散連接,對于大型系統的吸引力可以降低,并通過安全更新快速修復,微服務架構的FPGA特性能夠快速引入新服務或替換舊服務,從而取消應用程序,在收集和處理關鍵數據時,可以更快或更安全的在本地部署服務。

電商

微服務在電商領域運用有縮放、誤隔離、提供技術堆棧獨立性、確保數據安全等優點,憑借松散耦合的架構,可以輕松與任何第三方系統集成。使用更少的資源,升級速度更快,電子商務微服務架構有利于快速數據交換,可以給企業帶來新機遇,另一個好處是可以更好的開發微服務框架。

金融領域

在金融領域采用微服務有敏捷、可擴展性、力彈、安全等優點,微服務允許公司獨立于整個應用程序進行試驗、開發、測試和部署新功能,而不影響當前向公眾提供的服務,從而增強金融機構應對這些變化的能力。微服務允許金融機構根據流經特定服務的流量獨立擴展特定的應用程序部分。因為它提供了縮小某些服務規模和擴大其他服務規模的選項,同時確保將資源分配到最多需要的地方。微服務使金融組織能夠更輕松地隔離和解決問題,從而恢復彈性的應用程序。微服務架構可以極大地提高安全性,因為服務彌漫獨立,并且可以通過不同級別的保護進行隔離。

發展趨勢

無服務器微服務

微服務領域最重要的趨勢之一是無服務器計算的采用,無服務器微服務允許組織構建和部署單獨的功能或組件,而無需管理服務器。這種方法增強了微服務的可擴展性、敏捷性,優化了資源分配,減少了運營開銷,加快了開發周期。無服務器計算在微服務中越來越受歡迎,抽象化基礎設施管理使開發人員能夠專注于代碼,該趨勢成為微服務架構的游戲規則改變者。

容器化和Kubernetes

kubernetes已經成為微服務容器編排平臺,用于管理和自動化微服務的部署、擴展和監控。憑借其強大的編排功能,簡化了大規模微服務的管理,確保了彈性和高效的資源利用,使其成為微服務架構的核心部分,由Kubernetes等平臺提供支持的容器化是一個關鍵趨勢,容器提供了跨不同環境打包和部署微服務的一致性。

事件驅動架構

事件驅動的架構在微服務中允許微服務通過事件進行異步通信,從而實現更好的解耦、可擴展性和響應能力。Apache Kafka和RabbitMQ等技術有助于實現事件驅動的微服務,非常適合物聯網、實時分析和需要無縫集成的應用程序。

人工智能和機器學習

人工智能和機器學習是微服務不可或缺的一部分,它們在基于微服務的應用程序中實現預測分析、個性化推薦和自動化決策。人工智能驅動的微服務可以增強用戶體驗、優化資源分配并從數據中發現有價值的見解。

微前端

微前端將微服務概念擴展到用戶界面,將前端分解為更小的、可獨立部署的單元,與微服務的原則保持一致。這種趨勢有利于前端組件的持續交付,從而實現更快的更新并改善用戶體驗。

參考資料 >

What is Microservice Architecture?.ionos.2024-02-04

Pattern: Microservice Architecture.microservices.io.2024-02-04

Microservices in Industry: Insights into Technologies, Characteristics, and Software Quality.researchgate.net.2024-02-04

micro-service.predixteam.files.wordpress.2024-02-04

Service Discovery in a Microservices Architecture.nginx.com.2024-02-04

Building Microservices: Using an API Gateway.nginx.com/.2024-02-04

Building Microservices: Inter-Process Communication in a Microservices Architecture.nginx.com.2024-02-04

Pattern: Distributed tracing.microservices.io.2024-02-04

Event-Driven Data Management for Microservices.nginx.com.2024-02-04

deploying microservices.nginx.com.2024-02-04

What are microservices?.microservices.io.2024-02-04

什么是微服務架構.cloud.google.2024-02-04

什么是微服務?.aws.amazon.2024-02-04

Microservices.martinfowler.2024-02-04

基于Dubbo、Spring Cloud和ServiceMesh.msainaction.github.io.2024-02-04

..2024-02-04

Cloud Microservices Market Dynamics.marketsandmarkets.2024-02-04

What are microservices? Everything you need to know.techtarget.2024-02-22

A Brief History of Microservices.dataversity-net.2024-02-08

Demanding Professionalism.2012.33degree.org.2024-02-04

Cloud Computing Done the Netflix Way.cio.com.2024-02-05

SOA vs. Microservices: What’s the Difference?.IBM.2024-02-04

Fred George.archive.oredev.org.2024-02-04

構建未來:用微服務智慧為您的應用程序提供支持.Medium.2024-02-25

Defining a reactive microservice.oreilly.2024-02-04

Cloud Microservices Market - Growth, Trends, COVID-19 Impact, and Forecasts (2023-2028).researchandmarkets.2024-02-04

SOA 和微服務有什么區別?.aws.amazon.com.2024-02-04

CI/CD for microservices architectures.learn.microsoft.com.2024-02-04

THE TOP SIX MICROSERVICES PATTERNS.MuleSoft.2024-02-21

What Are Microservices Design Patterns?.Codemotion.2024-02-21

Docker:.Docker:.2024-02-22

..2024-02-04

Spring Cloud Gateway.Spring Cloud Gateway.2024-02-22

Apache Kafka.Apache Kafka.2024-02-22

..2024-02-04

..2024-02-04

Dynamic DNS Service.Dynamic DNS Service.2024-02-22

Jenkins.Jenkins.2024-02-22

..2024-02-04

What are Microservices? Characteristics, Examples, and Pros & Cons of It.ashutec.2024-02-22

Spring Cloud中文網.springcloud.cc.2024-02-04

Spring Cloud.spring.io.2024-02-04

概念與架構.cn.dubbo.apache.org.2024-02-04

Featured.developers.redhat.2024-02-04

服務、負載均衡和聯網.kubernetes.io.2024-02-04

4 Microservices Examples: Amazon, Netflix, Uber, and Etsy.dreamfactory.2024-02-10

Why microservices and IoT apps are perfect together.techtarget.2024-02-10

Microservices Architecture in eCommerce./vuestorefront.2024-02-10

The Benefits of Microservices in the Financial Sector.dragonspears.2024-02-10

The Future of Microservices Architecture and Emerging Trends..blog.2024-02-08

生活家百科家居網