微服務架構:能力的標誌

已發表: 2022-08-02

在當代容器化和雲計算時代,單體系統不再可行。 近年來,軟件系統的複雜性不斷增加,而單體系統的創建和維護也變得越來越複雜。

系統組件是作為一個整體系統中的一個單元生產和捆綁的。 如果更改了單個組件,則必須重新部署整個系統。 這使得擴展更加困難並且通用性降低。 在構建綜合應用程序時,獨立系統的相互關聯和相互關聯的結構對於開發人員來說可能是一項艱鉅的工作。 受影響的系統還難以進行關鍵修改、採用新技術堆棧或進行升級和更新。 面向服務的體系結構由系統內部可以相互通信的各種服務組成,它首先設置了從單一編程過渡的框架。

微服務架構是該領域的下一步,它是建立成功軟件開發戰略的更統一、更精細的手段。 “微服務架構”一詞在過去幾年中出現,用於描述將軟件系統構建為可獨立部署的服務套件的特定技術。 雖然沒有對這種架構風格的具體定義,但圍繞業務能力、自動化部署、端點智能以及語言和數據的分散管理的組織有幾個類似的特徵。

它是一種軟件開發方法,將系統分解成更小的獨立部分,然後將它們鏈接在一起。 自治服務聚集在一起,以滿足一個特定部門的特殊需求。 Spotify、亞馬遜、PayPal、Netflix 和 Twitter 都注意到了這一新發現,並進行了廣泛宣傳。

目錄

什麼是微服務架構?

在過去的幾年裡,“微服務架構”這個詞變得越來越流行,它指的是軟件程序架構的一種特定方法,即可以相互獨立部署的服務套件。 儘管這種架構風格無法精確定義,但它確實與其他架構方法具有某些特徵。 其中包括基於業務能力的組織、自動化部署、端點智能以及語言和數據的分散控制。 換句話說,微服務獨立運行的能力是它們登上軟件開發領域頂端的驅動力。

微服務架構,通常簡稱為微服務,是一種在開發應用程序軟件時使用的設計範式。 微服務可以將大型應用程序分解為幾個較小的、獨立的部分,每個部分負責自己獨特的任務集。 單個用戶請求可能會導致基於微服務構建的應用程序對其內部微服務進行多次調用以構建其響應。

容器是微服務架構的一個很好的例子,因為它們讓您不必擔心服務的依賴關係,因此可以讓您專注於開發服務本身。 容器通常是以微服務的形式為當代平台開發雲原生應用程序的首選工具。 術語“微服務架構”是指一種應用程序架構,其中應用程序本身被構建為服務的集合。 它提供了一個框架,用於獨立構建、部署和管理微服務的架構圖和服務。

微服務架構發展的需求與單體架構的局限

單體架構和微服務
單體架構和微服務中間件

1. 應用擴展

由於成功的 Web 規模企業經歷了指數級擴展,因此他們的軟件還必須具有出色的橫向可擴展性。 有時,只有部分 CPU 或 I/O 繁重的軟件必須單獨擴展和處理(通過多語言編程實現)。 單片軟件作為單個實體運行,並使用單一編程語言和技術堆棧創建。 要實現水平縮放,需要對整個應用程序進行縮放。 由於單體軟件僅支持一種編程語言,因此即使是使用不同的編程語言或 Tech Stack 開發單個模塊也是不可能的。

2. 發展速度

為了縮短產品上市時間,如今每個企業都希望快速開發功能。 在大型、複雜、有時甚至數百萬行的單體應用程序中,由於開發人員承受了巨大的認知負擔,新功能的添加非常緩慢。 大量單體程序的模塊緊密相連,使得新功能的開發更加困難。 因此,向單一程序添加新功能通常是緩慢且昂貴的。

3. 發展規模

為了獲得競爭優勢或抓住唾手可得的果實,企業經常通過僱用更多開發人員來尋求並行開發。 開發人員無法在龐大的、單一的、緊密連接的代碼庫上獨立工作,並且經常需要額外的同步和警惕以避免干擾彼此的工作。 添加額外的開發人員不會導致功能增加,有時可能會導致功能減少。 同樣,由於理解整個 Monolithic 代碼庫所需的高認知負荷,新員工或應屆畢業生通常需要相當長的時間來創建他們的第一行高效代碼。 2008 年,我接受了柏林一家電信公司的採訪,技術經理得意地告訴我,該公司的 C++ 代碼庫包含數百萬行代碼,新工程師只能在四到六個月後編寫出富有成效的代碼。

4. 發布週期

大型單體程序的發布週期通常過長,從 6 年到 2 年半不等,由於它們的規模,還會額外延遲幾個月到幾年。 大型發布週期經常使公司在現代處於競爭劣勢,因為新的競爭對手可以在發布間隙期間進入市場。

5. 模塊化

在單體架構中,模塊之間的障礙通常是​​內部接口。 一旦程序的大小增加,模塊之間的分離就會開始破裂。 因此,單體架構中的模塊通常是緊密聯繫的,而不是鬆散耦合和高度內聚的。 如果我們將軟件開發比作社會,那麼單體模塊化類似於道德和宗教原則,不能保證社會的法律和秩序。

6. 現代化

現有成功的應用程序出於各種原因需要現代化(例如利用現代硬件、瀏覽器、網絡帶寬、技術堆棧或吸引優秀的開發人員)。 對單體程序進行現代化改造可能既昂貴又耗時,因為它需要在不影響服務的情況下對整個應用程序進行大爆炸式的現代化改造。

微服務的類型

差分微服務和積分微服務是兩種不同的微服務。

一個。 微分

在這種架構形式中,架構分解為能夠分離為事務的獨立服務。 這導致將單個事務分配給許多服務。

灣。 不可缺少的

微服務應用程序旨在將大量微服務組合成個性化的用戶體驗。 這些計劃涵蓋了幾個不同的需求,包括服務水平管理、按需供應和動態組合。

微服務的特點

1. 自治

微服務架構允許每個服務組件與其他服務分開構建、部署、管理和擴展。 服務不必共享它們的任何代碼或它們如何與其他服務共享。 不同部分之間的所有通信都是通過定義明確的 API 完成的。

2.專業

微服務架構
甲骨文

每項服務都基於一組不同的技能和不同的問題。 隨著時間的推移,如果開發人員向服務添加更多代碼,服務可能會被拆分為更小的服務。

3.通過服務組件化

儘管微服務架構將使用庫,但他們將自己的軟件組件化的主要方法是將其分解為服務。 庫是鏈接到程序中並使用內存中函數調用調用的組件,而服務是與 Web 服務請求或遠程過程調用等機制通信的進程外組件。 我們將庫定義為鏈接到程序中並使用內存中函數調用進行調用的組件。 (這與許多 OO 系統中稱為服務對象的概念截然不同。與庫相反,服務可以獨立部署,這是它們被用作組件而不是庫的主要原因之一。另外一個使用服務代替組件的好處是生成更透明的組件接口。在大多數編程語言中不存在建立顯式發布接口的好技術。

文檔和規範通常是防止客戶破壞組件封裝的唯一因素,這會導致組件之間的耦合過緊。 通過使用顯式遠程調用協議,服務可以讓用戶輕鬆避免這種情況。 使用這種服務確實有一些缺點。 由於遠程調用的成本高於在同一進程中調用的成本,因此遠程使用的 API 需要具有更精細的粒度,這可能會使它們更難使用。 當您超越流程的邊界時,更難進行行為轉變,如果您需要修改職責在組件之間的分配方式,這將變得更加困難。

4. 產品而非項目

我們遇到的大多數應用程序開發計劃都遵循稱為項目的範式,其中的主要目標是交出一段軟件,然後將其視為已完成。 項目結束後,軟件被移交給維護組織,負責構建它的團隊被解散。

微服務的支持者通常會避開這種架構,而支持團隊應該在其整個生命週期內擁有整個產品的概念。 Amazon 的“你構建,你操作它”的概念,即開發團隊在程序被用於生產時對其承擔全部責任,這是一個重要的靈感來源。 這使開發人員能夠與他們的軟件在生產中的工作方式進行日常接觸,並增加與用戶的溝通,因為他們至少需要承擔為程序提供支持的部分負擔。

5. 去中心化治理

此外,微服務開發團隊傾向於採用獨特的標準方法。 他們更願意提供有用的工具,其他開發人員可能會使用這些工具來解決與他們遇到的挑戰相當的挑戰,而不是依賴於一套成文的標準。 通常,這些工具源自實現並與更大的社區共享,有時但並不總是使用內部開源範例。 既然 git 和 github 是事實上的版本控制系統選擇,開源技術在組織中變得越來越流行。

Netflix 是遵守這一原則的公司的一個很好的例子。 將有價值的、最重要的是經過實戰測試的代碼作為庫共享有助於其他開發人員以類似的方式處理類似的問題,同時允許他們在必要時選擇不同的方法。 共享庫傾向於關注數據存儲、進程間通信和基礎設施自動化等共同關注點,如下文進一步詳細討論的。

對於微服務社區來說,費用尤其不受歡迎。

6. 久經考驗的標準和強制執行的標準

這有點自相矛盾,因為微服務團隊更願意避免業務設計組強加的那種嚴格執行的標準,但會利用甚至提倡開放標準,如 HTTP、ATOM 和其他微格式。

主要區別在於標準是如何產生和實施的。 由 IETF 等組織控制的標準不會成為標準,直到在更大的世界中有幾個實時實現它們,這通常是成功的開源計劃的結果。

這些標準與大多數業務標準不同,後者通常由最近編程專業知識有限或供應商影響過大的人制定。

7. 基礎設施自動化

作為持續交付和部署的結果,我們已經看到更多自動化的一個副作用是引入了有用的工具來幫助開發人員和運營人員。 用於生成人工製品、維護代碼庫、啟動基本服務或添加標準監控和日誌記錄的工具目前相對普遍。 網絡上最好的例子無疑是 Netflix 的開源工具集合,儘管還有其他一些值得注意的,我們已經廣泛使用的 Dropwizard。

將您的應用創意變為現實

讓我們一起構建一個新的應用程序

開始使用

微服務架構中的通信機制概述

構成微服務架構的服務在許多不同的服務器上執行。 使用 HTTP、AMQP 和 TCP 等協議來促進這些服務之間的通信。 最廣泛採用的兩種協議是 HTTP/REST 和異步消息傳遞。 HTTP 協議通常由 REST 應用程序編程接口 (API) 用於在線服務。 客戶端可以通過將統一資源定位器與 HTTP 方法(如 GET、POST、PUT 和 DELETE (URL))結合使用來訪問和更改應用程序的資源。 REST 應用程序編程接口 (API) 充當應用程序功能的入口點。 客戶端通過向 API 發送請求來將他們的需求傳達給服務。 客戶端可以選擇直接與微服務通信或通過 API 網關進行通信。

為使用 API 網關模式對服務發出的任何和所有請求指定了一個入口點。 應用程序編程接口 (API) 網關在接收到來自客戶端的請求時,會將請求定向到適當的服務。

API 網關模式有許多變體,其中之一是後端模式。 這種設計為每種類型的客戶端創建了一個不同的 API 網關(例如,一個網關用於移動客戶端,另一個網關用於 Web 應用程序)。

建議在各種服務之間保持較低的通信級別。 在必須進行通信的情況下,異步通信優於同步通信。 發送請求的服務在繼續其操作之前不必等待響應。

當合併到數據庫中時,消息隊列和流系統是啟用異步通信的好方法。 此外,當這些系統為數據操作和消息發送提供事務語義時,它們能夠同時滿足這兩個要求。 正因為如此,微服務的部署變得更容易和更具可擴展性。 當僅使用 REST API 時,微服務之間的通信被迫同步,這通常會阻礙增長。

微服務架構有什麼用途?

微服務是一種流行的架構風格,旨在將復雜系統設計為細粒度和鬆散耦合的軟件工件的集合,稱為微服務; 每個微服務都實現了應用程序業務邏輯的一小部分甚至單個功能。 微服務越來越受歡迎,因為它們旨在將復雜系統設計為細粒度和鬆散耦合的軟件工件的集合。 通常使用微服務來加快應用程序開發的過程。

微型的概念是為了響應大多數組織最初建立的單一基礎架構而開發的,特別是如果所討論的業務已經運營了至少十年。 微服務架構的每個組件都包括以下功能來代替單體設計:

  • 它獨有的CPU
  • 自己的操作系統和運行環境
  • 在許多情況下,一個專門的團隊將致力於確保每項服務與其他服務區分開來。

由於這種設計,每個服務都能夠:

  • 執行自己獨一無二的程序
  • 相互獨立通信,無需依賴其他微服務或整個應用程序的通信。

基於 Java 的微服務架構被廣泛採用,尤其是使用 Spring Boot 構建的微服務架構。 此外,微服務和麵向服務的架構經常相互比較。 這兩種方法都有相同的目標,就是將大型軟件程序劃分為更易於管理的部分,但它們的方法不同。 此外,許多企業面臨來自競爭對手的壓力,要求他們盡快對其係統進行調整,同時盡量減少此類調整對其係統可用性的影響。 這需要適當的設計、架構風格和開發技術。 軟件工程提供了多種範式,可以部分滿足這些需求。 這些範例將軟件系統分解為細粒度的軟件單元,從而提高了模塊化、可維護性和可重用性,從而減少了將產品推向市場所需的時間。

微服務
ARXIV

簡而言之,它提供了長期的敏捷性。 微服務允許創建基於大量可獨立部署服務的應用程序,從而提高複雜、大型和高度可擴展系統的可維護性,每個服務都有自己的細粒度和自治的生命週期。 這是通過允許創建基於大量服務的應用程序來實現的。

微服務具有能夠自行擴展的額外優勢。 您不需要有一個單一的單體應用程序,您必須將其作為單個實體進行橫向擴展,因為您可以橫向擴展單個微服務。 您將能夠以這種方式僅擴展需要額外處理能力或網絡帶寬以滿足需求的程序功能區域,而不是擴展不需要擴展的應用程序的其他部分。 由於所需的硬件數量減少,因此可以節省成本。

以下是微服務架構的一些示例

一個。 網站搬遷

可以遷移網站; 例如,託管在復雜的單體平台上的網站可以重新定位到基於雲和基於容器的微服務平台。

灣。 媒體內容

可擴展的對象存儲系統可用於存儲圖像和視頻資產,而微服務架構可用於將這些材料直接提供給 Web 或移動設備。

C。 財務談判和計費

可以將付款處理和訂單處理視為兩個獨立的不同服務。 即使計費系統出現問題,也可以進行付款。

d。 數據處理

模塊化數據處理服務可以通過使用微服務平台來改進其云支持,該平台也可用於數據處理。

微服務的設計模式

模式語言是你的嚮導!

微服務的設計模式
微服務的設計模式

a) 分解模式

  • Bulkhead為每個工作負載或服務分隔重要資源,例如連接池、內存和 CPU。 通過部署隔板,單個工作負載(或服務)無法使用所有資源,從而使其他工作負載挨餓。 這種方法通過消除由一個服務引起的級聯故障來增強系統的健壯性。 這種圖案被稱為隔板,因為它類似於船體的分段隔板。 根據客戶負載和可用性需求,將服務實例劃分為不同的組。 這種架構有助於隔離故障,並允許您為某些用戶保留服務能力,即使在發生故障時也是如此。
  • Sidecar 將應用程序的有用組件安裝為不同的容器或進程,以實現隔離和封裝。 這種模式還可以使應用程序由不同的組件和技術組成。 這種模式被稱為邊車,因為它類似於掛在摩托車上的邊車。 在設計中,sidecar 與父應用程序耦合,並為應用程序提供支持功能。 Sidecar 同樣遵循與父應用程序相同的生命週期,與父應用程序一起構建和終止。 Sidecar 模式通常被稱為 Sidekick 模式,是我們在帖子中展示的最後一個分解模式。
  • Strangler Fig支持應用程序的增量重構,通過用新服務逐步替換特定功能。
站點過渡扼殺者無花果模式
IBM

b) 集成模式

1. 鍊式微服務模式

單個服務或微服務會有多個依賴關係,例如微服務 Sale 依賴於微服務 Products 和 Order。 鍊式微服務設計模式將幫助您為您的請求提供統一的響應。 microservice-1 接收請求,然後與 microservice-2 通信; 它還可以與 microservice-3 通信。 所有這些服務調用都是同步的。

2.聚合器模式

將業務活動分成許多較小的邏輯代碼片段時,考慮如何合併每個服務提供的數據變得至關重要。 客戶不能為此負責。

聚合器模式有助於解決這個問題。 它描述了我們如何組合來自多個來源的數據,然後將最終結果提供給用戶。 這可以通過兩種方式實現:

  • 複合微服務將調用所有必要的微服務,聚合和更改數據,然後返回。
  • 除了將請求劃分為多個微服務之外,API 網關還可以在將數據提供給消費者之前聚合數據。

3.代理模式

我們只是通過 API 網關提供微服務。 我允許 GW 獲取 API 特性,例如安全性和分類 API。 在本例中,API 網關由三個 API 模塊組成:

  • Mobile API,實現了 FTGO 移動客戶端的 API
  • 瀏覽器 API,它實現了在瀏覽器中運行的 JavaScript 應用程序的 API
  • 公共API,為第三方開發者實現API

4.分支模式

微服務可能需要從各種不同的來源獲取必要的數據,包括其他微服務。 分支微服務模式是聚合器和鏈設計模式的混合體。 它支持來自兩個或多個微服務的並發請求/響應處理,並結合了兩者的優點。 被調用的微服務可能由其他幾個微服務組成。 Brach 模式也可用於調用單個微服務鍊或多個相同類型的鏈,具體取決於您公司的要求。

微服務模式
微軟

微服務架構的好處

在可預見的未來,對微服務的需求將急劇擴大。 使用微服務,更新遺留程序。 通過重構,單體應用程序能夠被劃分為微服務。 這導致過時軟件的逐步現代化,並且比使用微服務從頭開始重新開發產品更可取。 應用程序開發可能會從微服務設計中受益匪淺。 下面列出了它的一些主要好處:

一個。 卓越的生產力

如果將應用程序劃分為更小的、自給自足的部分,則更容易創建和維護應用程序。 根據其要求,可以使用多種編程語言、技術和軟件環境獨立開發、部署和維護每個服務。 因為應用程序的每個模塊化組件都有一個較小的代碼庫,所以發布、擴展、部署和測試多個服務更簡單,並且相關任務可以在開發團隊之間拆分並同時執行。

灣。 更好的彈性

微服務架構中的每個微服務都是一個單獨的服務,旨在為應用程序的功能提供服務並執行離散任務。 每個微服務都使用簡單的接口與其他服務鏈接以處理業務問題。 在建立了基於微服務的設計之後,檢測和解決與性能相關的問題的整個過程變得相當簡單。

此外,由於與單個模塊相比,這種設計形式提供了增強的故障隔離機制,因此更大的應用程序通常不受單個故障的影響。 因此,從長遠來看,未來停機的風險會大大降低,因為開發人員有時間發布更新或替換模塊,而無需重新啟動整個程序。

C。 擴展的可擴展性

如果每個服務是使用不同的編程語言或技術創建的,DevOps 團隊可以為每個模塊選擇最佳技術堆棧,而不必擔心不兼容。 單個服務可以獨立增長,並且可以添加新組件而無需系統停機或重新部署。 此外,服務可能會分散在許多服務器上,從而減輕高要求組件的性能影響。 在幾秒鐘內,微服務可以提供水平擴展。

實際上,正是高度橫向擴展迫使 Netflix、Spotify、Uber 和 Google 等組織從單體架構過渡到微服務架構。 其次,如果一個微服務是 CPU 密集型的,它可能是用 CPU 優化的編程語言(C/C++、Rust)編寫的,而其他微服務可能是用解釋語言(Java、PHP)編寫的。

d。 持續集成/持續交付 (CI/CD)

持續交付和集成是敏捷方法和 DevOps 哲學的基本要素。 微服務設計使跨職能團隊能夠獨立構建、調試、測試、部署和更新服務,從長遠來看,這將導致更快的故障排除和部署。

e. 模塊化

在微服務架構中,微服務之間的障礙是難以跨越的物理(網絡)接口。 因此,設計良好的微服務通常提供“鬆散連接、高度一致”的模塊化。 如果將軟件開發與社會進行比較,那麼微服務調製就可以與帶有警察/懲罰的國家和國際法律相媲美。 眾所周知,嚴格的國家和國際規則往往可以維持社會秩序。

F。 發佈時間表

微服務架構最好的方面是每個微服務都可以單獨部署。 因此,微服務應用程序的軟件發布週期大大縮短,並且使用 CI/CD,每天可能會發布許多版本。

微服務架構的缺點

一個。 服務之間通信的複雜性增加

當應用程序被分解成更小的部分時,發送和接收消息需要更多時間。 When handling requests between the different modules, developers have to be extra careful. Different systems might talk to each other in different ways, so there might be a need for an interpreter. This can make it harder to set up the whole system all at once. One of the biggest problems with microservices is that it might be hard to switch from a monolith to microservices because it's hard to manage.

This basically means that a lot of services made by a lot of different teams are deployed in a lot of different places, making it very hard to manage them. For example, Monolithic Architecture gives the same answer whether a Web app has a few thousand lines of code or several million lines of code (Enterprise Java or Ruby on Rails or PHP). But in Microservice Architecture, there are many possible solutions depending on the applications and use cases.

So, Microservice Architecture is doomed to fail if the wrong solution is used for the wrong application size or type (like putting a child's clothes on an adult man or the other way around). Also, it's hard to design Microservices because they have a lot more moving parts than Monoliths. Most of the time, a Microservice with bad design is worse than a Monolith.

Increased Complexity of Communication Between the Services
Increased Complexity of Communication Between the Services MartinFowler

灣。 複雜的配置

Despite being isolated and self-contained, a microservice must be regularly configured, especially when it is moved from development to test to staging to production. This arrangement may be rather intricate. Moreover, if a microservice must utilize other microservices, these bindings must be defined before deployment or even during runtime.

C。 Context Boundary Translation

Despite the fact that it would be ideal if all microservices within a MOA used the same data structures and communication protocols to interact with one another, this is typically not the case.

d。 More Assets in Return for More Autonomy

MOAs demand a great deal of horsepower. Remember that each MOA microservice has its own runtime environment and data storage. In some instances, even the most streamlined microservice might consume the same amount of resources as a single monolithic program.

e. Unfeasible for Small Applications

Larger applications can benefit from microservices design. However, implementation will likely be more time-consuming and difficult for smaller applications.

F。 Relatively Complex Deployment

The deployment might be a difficult and complicated process. During deployment, coordination between numerous services would be required. Deploying a WAR file in a container would not be as straightforward as it sounds.

G。 Distributed Debugging

The difficulty of troubleshooting a MOA including hundreds of microservices communicating in concert is one of the downsides of microservices. Tracing the course of a request into and out of a MOA is challenging due to the independence of each container. The MOA is opaque if there is no effective monitoring mechanism in place. Logging the internals of a MOA offers a limited perspective, but MOA monitoring requires a comprehensive view.

H。 Contributes to Enhanced Fault Tolerance

Large applications with several services deployed have more fault tolerance in the event that any one module fails. Microservices allow applications to continue functioning even if one service fails. This is because the services are not tightly coupled.

一世。 昂貴

An improper service partition might be expensive. For instance, if an application is improperly partitioned, the services are connected to a certain degree, and they will create numerous inter-service interactions via the network, which can degrade performance.

j. Greater Security Risks

Lastly, because microservices will reside across several environments, computers, and API requests, they provide a greater number of entry points for an attacker to compromise the system.

ķ。 Communication Complexities

Microservices accomplish rigorous modularity and development independence via process/network barriers, as previously mentioned. The disadvantage is that services may only communicate over the physical network, resulting in increased network latency. Microservices may connect with one another in a variety of methods, including synchronous communication using REST, gRPC, and asynchronous communication using Message Queue and Message Broker, each of which has advantages and disadvantages.

Synchronous communication is simpler to build, but it might result in a Distributed Monolith. Asynchronous Communication via Messaging provides greater flexibility at the expense of increased implementation complexity. In Microservice Architecture, choosing the appropriate Communication channel based on the application is equally tough.

l. 複雜的配置

儘管是隔離和自包含的,但必須定期配置微服務,尤其是在從開發到測試再到登台再到生產時。 這種安排可能相當複雜。 此外,如果一個微服務必須使用其他微服務,則必須在部署之前甚至在運行時定義這些綁定。

微服務工具

一、操作系統

開發應用程序最重要的方面是為它打下堅實的基礎,這是操作系統負責做的事情。 Linux 是此類操作系統的一個示例,在整個應用程序開發過程中經常使用。 當您使用 Linux 容器時,您將可以訪問一個獨立的執行環境。 這使您能夠編排廣泛的服務,從存儲和網絡到安全和身份驗證。

2. 編程語言

使用 Emizentech,您現在可以無縫擴展您的編程曲目。 該儀器既實用又最新。 通常,它設計用於所有編程語言。 此外,它與 BEAM 上顯示的字節碼兼容,也稱為 Erlang 虛擬機。

3. API 管理和測試工具(API 網關)

構建和發布 API、執行其使用標準、限制訪問、培養開發者社區、收集和分析使用統計數據以及報告性能的行為都是 API 管理的組成部分。

實際上,API 管理平台由以下元素組成:

  • 開發者工具
  • 網關
  • 報告和分析

4. 消息傳遞工具(消息傳遞和事件流)

為了進行通信,微服務系統必須使用獨立的服務。 這是決定消息隊列對其用戶的要求的主要因素。 RabbitMQ 和 Apache Kafka 是用於消息傳遞的兩個最流行的解決方案。

LinkedIn 負責創建稱為 Apache Kafka 的技術,該技術後來被貢獻給 Apache 社區。

RabbitMQ 工具使用模式來促進許多微服務之間的通信。 除此之外,它還有助於同時擴展應用程序。

5. 工具包

更簡單地說,工具包只是在整個執行過程中使用的工具的集合。 Toolkit 是微服務架構的一個組件,它使得構建許多應用程序成為可能。 因此,存在各種各樣的工具包,每個工具包在其應用中都有不同的目標。 Fabric8 和 Seneca 中有許多工具可供選擇。

  • Fabric8 是一種平台即服務技術,在 Git 的幫助下,軟件開發人員能夠為其應用程序創建配置管理系統。
  • Seneca 作為一個節點運行,被用於開發麵向消息的微服務的過程中。

6. 架構框架和 Js 工具包

由於微服務是一種架構風格,因此必須注意它們使用的架構框架。 這些是與當前技術結合使用以構建最新應用程序的框架。 Goa 和 Kong 是現在最流行的架構框架。

7. 編排工具

由於容器和微服務一起運行的一般方式,容器編排是一個非常重要的思考話題。 Conductor、Kubernetes 和 Istio 是最常用於容器編排的三種微服務編排解決方案。 但是,還有許多其他工具可用。 作為 Netflix 維護的開源軟件 (OSS) 生態系統的一部分,指揮者充當微服務編排引擎。 指揮者是在雲中執行的程序,並使用稱為流編排器的實現來使用微服務執行各種活動。 除此之外,它還可以更輕鬆地管理和查看跨微服務發生的所有交互。

8. 監控工具

構建微服務應用程序後,必須處理與之關聯的任務。 您將需要針對您的微服務的監控工具來完成同樣的任務。 Prometheus 和 Log Stash 是監控微服務最常用的兩種技術。 Logstash 是一款出色的軟件。 它是一個允許您整合、存儲和操作數據的平台,並且它是開源的。

9. 無服務器工具

SA 微服務的重要組成部分是無服務器技術,通常稱為功能即服務。 它提高了將對象分解為最基本組件的過程的效率。 Claudia 和 AWS Lambda 都是廣泛用於開發微服務的無服務器工具的示例。 AWS Lambda 和 API Gateway 安裝也是 Claudia 職責的一部分。 除此之外,Claudia 能夠自動執行容易出錯的部署和設置活動,同時保持她的“開箱即用”功能。

10. 容器、Docker 和 Kubernetes

  • 容器:容器本質上虛擬化了主機操作系統(或內核),將應用程序的需求與在同一台計算機上執行的其他容器的需求隔離開來。
  • Docker: Docker 由幾個不同的部分組成,包括稱為 dockerd 的容器運行時、稱為 BuildKit 的容器映像構建器,以及用於與構建器、容器和引擎交互的命令行界面(稱為碼頭工人)。
  • Kubernetes是一種免費的開源容器管理技術,它將一組計算機組合成一個計算資源池。 Kubernetes 是由谷歌開發的。 Kubernetes 使您能夠以容器組的形式構建應用程序,然後由 Docker 引擎執行。 Kubernetes 負責確保您的應用程序繼續以您指定的方式運行。

微服務架構中的常見模式

一個。 後端換前端 (BFF) 模式

BFF 在前端和微服務之間提供了一個簡單的接口。 在理想情況下,前端團隊還將負責管理 BFF。 單個 BFF 只關注單個 UI。 因此,我們將能夠簡化前端並通過其後端獲得單一的數據視圖。

灣。 實體和聚合模式

實體是基於其身份的獨特事物。 例如,在電子商務網站上,產品對象可以通過產品的名稱、類型和價格來標識。 聚合是一組應該被視為一個單元的事物。 因此,對於電子商務網站,訂單將是客戶已購買的事物(實體)的集合(集合)。 這些模式用於對數據進行有意義的分類。

C。 服務發現模式

它們在促進服務和應用程序的發現方面發揮著至關重要的作用。 由於服務故障、可擴展性、服務終止和升級等原因,服務實例在微服務架構的上下文中可能會有所不同。 這些模式為發現提供了處理這種短暫性的工具。 使用健康檢查和服務故障作為流量重新平衡觸發器,負載平衡可以採用服務發現技術。

d。 適配器微服務模式

如果需要,適配器微服務設計在使用 RESTful 或輕量級消息傳遞技術構建的面向業務的 API(使用與典型微服務相同的域驅動方法)和傳統 API 或基於經典 WS-* 的 SOAP 服務之間進行調整。 例如,當開發團隊缺乏對應用程序數據源的分散控制時,就需要進行調整。

e. 扼殺者應用模式

Strangler Pattern 是一種眾所周知的架構模式,它通過用新服務替換特定功能來慢慢地將單體應用程序轉變為微服務。

微服務架構中的反模式

一個。 凝聚力混亂

服務必須清楚地與業務能力保持一致,並且不應嘗試完成超出其範圍的任何事情。 關注點的功能分離對於架構管理至關重要; 否則,它將破壞敏捷性、性能和可擴展性,導致緊密連接的架構具有交付熵和內聚混亂。

灣。 分層服務架構

最普遍的 SOA 錯誤之一是誤解如何實現服務可重用性。 團隊主要關注的是技術凝聚力,而不是功能的可重用性。

C。 複雜

支持微服務架構的另一個重要因素是組織成熟度。 開發團隊必須進行改革,以對整個堆棧 DevOps 承擔更大的責任,而不是簡單地向基礎設施團隊提交單程票。

d。 糟糕的版本控制策略

無效的版本控制策略會導致無法管理的代碼和依賴關係。 因此,應該為微服務架構採用有效的版本控制方法。 最基本的方法之一是創建 API 版本並將該版本包含在路由 URL 中。

e. 微服務工作負載數據訪問模式設計不當

不正確的微服務工作負載數據訪問模式:微服務的架構依賴於組織的數據庫。 跨微服務的數據訪問模式應該明確隔離。 只要數據位於正確分區的表/集合中,跨多個服務實例使用單個數據庫通常是可以接受的。

F。 依賴障礙

依賴障礙是一種反模式,當您意識到必須以特定順序部署服務才能正常運行時,就會出現這種模式。 當無法控制關注點的功能分離時,可能會出現內聚混亂。

避免這種反模式的一個好方法是引入 API 網關。

單體、微服務和麵向服務的架構之間的差異

單體和微服務
單體和微服務 MartinFowler
微服務SOA 單片
設計服務以小單元構建,並使用面向業務的 API 正式表達。 服務的大小範圍可以從小型應用程序服務到非常大的企業服務,包括更多的業務功能。 單體應用程序演變成巨大的規模,在這種情況下很難理解整個應用程序。
可用性服務通過標準協議(例如 RESTful API)公開,並由其他服務和應用程序使用/重用。 使用標準協議(例如 SOAP)公開並由其他服務使用/重用的服務——利用消息傳遞中間件。 在單體應用程序中實現了有限的重用。
有限的
可擴展性服務作為獨立的部署工件存在,並且可以獨立於其他服務進行擴展。 服務和可重用子組件之間的依賴關係可能會帶來擴展挑戰。 擴展單體應用程序通常是一個挑戰。
敏捷較小的獨立可部署單元簡化了構建/發布管理,從而提高了運營敏捷性。 增強組件共享,增加依賴性並限制管理能力。 在單一應用程序工件的重複部署中難以實現操作敏捷性。
發展離散地開發服務允許開發人員為手頭的任務使用適當的開發框架。 可重用組件和標準實踐可幫助開發人員實現。 單片應用程序是使用單一開發堆棧(即 JEE 或 .NET)實現的,這會限制“適合工作的工具”的可用性。
去中心化數據
去中心化數據 MartinFowler

需要微服務的關鍵垂直市場

醫療保健:醫療保健微服務市場預計將從 2015 年的 1.3 億美元增長到 2025 年的 5.19 億美元。對更快服務推出、更快接受新技術和更高效率的需求正在推動醫療保健行業的發展。 醫療保健行業正在尋求解決其數據安全和法規遵從性需求以及如何克服實施困難的問題。

銀行、金融和保險: Aspen Mesh 確定了金融服務微服務的三個重要優勢:通過創建獨特的身份服務提高安全性、更快地交付新功能以及更易於管理的 API 層。

政府:除了微服務架構的各種好處之外,政府公司可能會受益於其設計與業務目標相對應的功能的能力,使 IT 團隊能夠根據成員的需求建立或改進服務。

零售:亞馬遜和 eBay 已經證明了微服務對零售行業的好處,包括高度可訪問和可擴展的服務以及更有效的錯誤和錯誤管理。

媒體和娛樂: 2009 年,Netflix 遷移到微服務,目前該服務每天使用 500 多個微服務處理 20 億次邊緣請求。 這一變化帶來了速度、可擴展性和可訪問性。

採用微服務架構的公司示例

亞馬遜、可口可樂和 Zalando 等公司正在將其 IT 基礎設施轉變為微服務架構。 此外,他們正在重組內部組織架構,將企業推向市場前沿。 當您從業內最優秀的人那裡獲得知識時,實施微服務架構會很愉快。 以下是一些最有效的微服務實例。

#1。 優步

優步的微服務架構大約來自 Jaeger 的 2018 年年中
優步的微服務架構大約來自 Jaeger 的 2018 年年中

所有權概念被相互交織的單一依賴關係所破壞。 遷移變得具有挑戰性。 新開發人員無法為單體應用做出貢獻。 小錯誤會導致災難性的後果。 優步選擇實施基於雲的服務。 優步為多項業務開發了微服務,包括發票、乘客和旅行管理。 API 網關用於與服務進行通信。

此外,優步為其微服務建立了全球標準。 它們為文檔、可靠性、容錯性等提供定量標準。 這些特徵是使用商業指標(例如頁面訪問量)監控的。 很快,他們的服務達到了卓越的頂峰。

#2。 網飛

Netflix 隨後遷移到基於雲的分佈式數據基礎架構。 AWS 用於提供水平可擴展的系統和其他服務/功能。 2009 年,Netflix 開始轉讓,歷時近三年完成。 然後 Netflix 將其所有面向用戶的應用程序轉換為自主微服務。 2012年,改造完成。 到 2015 年,Netflix 消除了所有服務中斷,每天能夠處理大約 20 億次 API 查詢。 目前,Netflix 在 190 個國家擁有超過 1.39 億用戶。 如今,Netflix 分別運營著大約 700 個微服務系統。

#3。 亞馬遜

亞馬遜在 2001 年擁有龐大的單體應用。2021 年,幾乎每個人都熟悉亞馬遜網絡服務 (AWS),這是一種內部解決方案,由於其優勢成為商業雲計算服務。 微服務非常適合電子商務,因為它們可以跟踪用戶活動、購買和完整的銷售渠道。 根據亞馬遜高級產品經理的說法

然後,他們生成可用於優化產品展示和銷售流程本身的數據。 亞馬遜是首批微服務在改變整個組織方面發揮重要作用的公司之一。 在單體設計成為構建信息技術系統的“標準”的時代,這家全球龐然大物取得了驚人的成功。

在向用戶提供之前,所有重要的代碼修改都在部署過程中停滯了數週。 亞馬遜使用微服務來簡化和縮短流程的長度。 通過將結構拆分為單獨的應用程序,開發人員能夠確定瓶頸在哪裡,減速的性質,並將結構重建為面向服務的架構,每個架構都有一個致力於單一服務的小團隊。

最初的系統清理導致了當代建築中主要在線參與者之一的成長。 亞馬遜通過發布一系列開源技術為其他企業開闢了道路,例如 AWS(亞馬遜網絡服務),這些技術現在已經無處不在。

#4。 易趣

eBay 系統支持大約一千個微服務。 前端體驗(例如 Web 和原生 iOS 和 Android 應用程序)與協調調用的中介服務聯繫,然後與後端服務進行通信。 每個服務都有自己的自主開發組。 eBay 的大多數微服務都是在沒有架構師的情況下發展的,而且系統始終是自下而上設計的。 像 eBay 這樣的大多數大公司都採用了一系列多語言微服務,這些微服務可以根據客戶要求工作,當然,這些微服務總是在變化。

易趣微服務
eBay 微服務 Dzone

#5。 聲雲

每個服務都是獨立開發和部署的,使用 JSON 或 Thrift 等輕量級數據交換標准通過網絡與其他服務連接。 在整個轉變期間,新的微服務無法改變 MySQL 中的關係模型,或者更糟糕的是,無法使用不同的存儲引擎。 對於極端情況,例如用戶對用戶的消息傳遞,其中基於線程的模型被類似聊天的模型取代,該公司使用 cronjobs 來同步單獨的數據庫。

#6。 Spotify

為了防止公司內部出現同步地獄,Spotify 是在微服務架構上設計的,由自主的全棧團隊負責。 Spotify 採用微服務架構,每個軟件開發人員都在一個封閉的“領域”中編寫,擁有自己獨特的功能。 每個微服務都有一個單一的、直接的職責,並且在大多數情況下,還有一個數據庫和邏輯,其他進程無法訪問。

微服務可以幫助您克服哪些挑戰?

這就是“微服務解決什麼困難?”這個問題的解決方案; 讓我們來看看微服務架構幫助克服的障礙。

案例 1 eBay 恢復平衡

eBay 使用了近千種服務。 許多前端服務發送 API 調用,而後端服務承擔管理和運輸相關的操作。 eBay 最初使用 Perl 和 C++ 的整體程序。 eBay 的網站是主要產品,對於許多其他互聯網巨頭來說也是如此。 向 eBay 網站添加幾個增量功能的需求持續增加。 此外,這種類型的網站必須每週 7 天、每天 24 小時都可以訪問,即使正在添加新功能。

由於需要最大限度地減少停機時間,eBay 選擇切換到微服務架構。 這使站點變得更加穩定並促進了異步集成。 對部署靈活性和發布週期持續時間進行了重大改進。 當服務被隔離時,性能效率會提高,並且橫向擴展變得更容易。

案例 2 優步和快速擴張

優步是最受歡迎的打車服務,最初是在舊金山為通勤者提供單一包裹服務,最初是在舊金山實施的。 這種緊密連接的軟件能夠管理大部分(如果不是全部)業務活動,包括計費、支付和駕駛員連接服務。 然而,隨著公司的發展,事情開始走下坡路。 優步一直在擴大其覆蓋範圍並提供其他服務。

隨著更多功能的添加,該軟件包變得更具凝聚力。 所有的邏輯都集中在一個地方,困難開始出現。 很快,即使是一點點修改也需要重新部署整個程序。 持續集成幾乎立即成為一項主要責任。

所有權模型的缺失是由於單體應用存在許多相互依賴的依賴關係。 因此,遷移是艱難的。 還發生了新僱用的開發人員無法為單體應用做出貢獻的情況。 即使發生了小錯誤,後果也很嚴重。 這是他們決定實施微服務的時候。 他們的動作花了一些時間。 他們拆解了整個服務,並將單體應用程序遷移到使用 Python、Node.js 和 Apache Thrift 構建的面向微服務的架構中。

案例 3 Twitter 改進的正常運行時間

還是那套老故事:Twitter 首先使用了單體設計,這很有意義。 然而,當更多人在 Twitter 上註冊時,問題就出現了。 SDLC 變得更大更笨重,構建時間更長,其可擴展性顯著惡化,偶爾會出現容量過剩錯誤警告。

Twitter 求助於將架構更改為微服務來解決這個問題。 每個微服務都被創建為模塊化、定義明確和自治的。 他們可以單獨測試和部署每個組件。 它們也可以獨立測量。 很快,錯誤警告就完全消失了。

案例 4 KarmaWifi 和意大利麵條代碼

Karma 上有人員、小工具和商店。 有一次,隨著一個單一的程序可用,與用戶相關的代碼最終出現在與設備相關的部分中。 此外,商店 API 遵循設備 API。 很快,很難確定發生了什麼變化以及是誰改變了它。 儘管最初的目標是將單體應用程序劃分為功能庫,但發現擴展和適應更新的軟件版本將具有挑戰性。 此外,他們將無法對將要引入市場的未來創新進行試驗。

到那時,他們已經選擇使用基於微服務的架構。 當他們認為必要時,他們將後端應用程序的部分分離為單獨的服務。 這些部分最初是巨大的,但隨著時間的推移,它們被分成更小的服務。 最終,每個微服務都有一個任務和一個最大尺寸需要擔心。

案例 5 沃爾瑪的業績提升

沃爾瑪的微服務冒險始於從一家名為 OneOps 的小型企業收購 DevOps 平台。 他們選擇將其設為開源計劃,以便他們可以回饋社區。

他們開始利用 Node.js 和 Cassandra 數據庫等技術來創建可以通過 API 動態觸發的各種微服務。 目標是讓在沃爾瑪多個業務部門工作的開發人員更容易擁有他們的應用程序並授權他們這樣做。 他們發現這減少了對集中式 IT 團隊的依賴。

最終,開發人員擴展組織電子商務產品後端功能的能力有助於提高業務敏捷性。

如何在 Android 和 iOS 上實現微服務架構?

  1. 第 1 步:確定它是否真的是您的業務需要的。
  2. 第 2 步:如果是,請查看已經存在的基礎設施。
  3. 第 3 步:讓您的團隊準備好使用該方法。
  4. 第 4 步:如果您要從單體系統切換到微服務系統,請諮詢您的數據管理員,看看他們是否充分了解並理解任務。
  5. 第 5 步:選擇編碼的語言和框架。
  6. 第 6 步:使用服務、容器和虛擬機模板設置基本架構。
  7. 第 7 步:如果您的架構是“單體”,則將數據庫拆分為許多較小的數據庫。
  8. 第 8 步:將 API 網關安裝到位。
  9. 第 9 步:跟踪跟踪並製作地圖。
  10. 第 10 步:使用自動化進行測試。

微服務是未來嗎?

本文的主要目的是解釋微服務的基本概念和原理。 通過努力實現這一點,很明顯我們認為微服務架構風格是一個基本概念——企業應用程序應該仔細檢查這一概念。 最近,我們開發了許多采用這種方式的系統,並且我們知道其他人喜歡這種方法。 亞馬遜、Netflix、衛報、英國政府數字服務、realestate.com.au、Forward 和 comparethemarket.com 都是我們所知道的以某種形式開創建築風格的公司。

微服務將繼續存在。 在未來兩年內,56% 的非用戶可能會採用微服務,78% 的用戶將增加對微服務的投資,59% 的應用程序將使用微服務創建。 IBM

通常,架構決策的實際影響要到幾年後才會顯現出來。 一個具有強烈模塊化驅動力的優秀團隊有時會構建一個隨著時間的推移而惡化的整體設計。 許多人認為,微服務不太可能出現這種惡化,因為服務邊界很明顯且難以修復。 然而,我們無法準確評估微服務架構的成熟度,直到我們擁有足夠數量和足夠年齡的系統。

肯定有理由預期微服務將緩慢發展。 任何組件化努力的成功都取決於軟件與組件的匹配程度。 很難確定組件邊框應該放置在哪裡。 進化設計承認建立正確邊界的困難,因此,使重新設計它們變得簡單的重要性。 但是,當您的組件是具有外部通信的服務時,重構比使用進程內庫時要困難得多。

跨服務邊界移動代碼很複雜,任何接口修改都必須在參與者之間安排,必須建立額外的兼容層,測試也很複雜。 如果組件組合不整齊,您只是將復雜性從組件內部轉移到組件之間的鏈接。 這不僅改變了複雜性,而且還將其轉移到了一個不太明確且更難以管理的位置。 在檢查一個微小而簡單的組件的內部時,很容易忽略服務之間的複雜聯繫,並得出結論認為事情比實際情況要好。

最後,還有團隊能力需要考慮。 熟練的團隊更有可能接受新的實踐。 然而,對於高技能團隊來說更成功的方法可能並不總是適用於技能較低的團隊。 我們已經看到了幾個不稱職的團隊構建草率的單體結構的例子,但是需要時間來確定當微服務發生這種類型的混亂時會發生什麼。 一個糟糕的團隊總是會產生一個糟糕的系統; 在這種情況下,很難說微服務是改善還是惡化了這種情況。

 因此,我們以謹慎樂觀的態度寫下這篇文章。 我們相信微服務將繼續存在!

為什麼選擇 EmizenTech?

Emizentech 可以幫助您將應用程序從單體架構遷移到微服務架構。 我們可以幫助您使您的企業應用程序易於維護和擴展。 如果您想發展和發展您的業務並正在尋找新的方法來實現這一目標,emizentech 可以以正確的方式為您提供幫助,同時確保長期增長。 您還可以訪問我們的網站以了解有關微服務的更多信息,了解您的公司是否已為微服務做好準備,並討論如何實施此架構。 這是一種製作軟件的方法,專注於將應用程序分解為只做一件事並具有明確定義的接口的模塊。

我們服務的顯著特點是:

  • 防止應用程序故障的域驅動架構
  • 確保高度的可擴展性
  • 分散式數據庫設計
  • 啟用簡單的故障隔離,以及
  • 使用 DevOps 文化實現持續交付。

結束的想法

邁出下一步!

在這篇博客中,我們努力研究了微服務架構的多個方面及其呈現的可能性。 當使用稱為微服務的架構方法時,應用程序系統的功能可以分解為許多較小的功能單元。 服務的實施和管理彼此分開處理。 當使用微服務架構將單體系統分解成更小的部分時,單個組件的數量會急劇增加。

因此,有必要對它們之間存在的依賴關係進行有效的管理。 與單體軟件架構相比,創建和執行微服務架構確實帶來了許多挑戰,並且需要進行範式轉變。 同樣,微服務架構絕不是可以解決任何和所有類型系統中出現的複雜性問題的靈丹妙藥。

綜合考慮,我們認為微服務架構對於當代軟件開發來說是一個非常有用和方便的工具。 對於通常生成複雜軟件的大型企業來說,微服務架構是唯一可行的策略,因為它是有效處理複雜性並保持市場競爭優勢的唯一方法。 微服務架構應該用於可持續的軟件開發,這可能會帶來長期的利益,不僅對大公司而且對中小型企業也是如此。

值得注意的是,微服務架構的早期採用者,如 Spotify、Netflix、LinkedIn、亞馬遜和谷歌,由於採用了微服務架構,能夠獲得相對於競爭對手的主要競爭優勢。 建築模型的開發和檢查都是協助這項工作的可行選擇。 這種方法有望簡化事情並使開發人員的生活更簡單,而不會對底線造成負面影響,這在公司正在進入一個激烈競爭的新時期時尤其重要。

絕大多數公司都對提高成本效率感興趣,在這種背景下,預計無服務器架構將在未來幾年內獲得更大的普及。 微服務在世界未來的潛在影響似乎相當大。

微服務能否幫助您的業務向前發展? 請隨時聯繫我們進行無約束力的諮詢!

謝謝閱讀!

關於微服務架構的常見問題

  1. 你為什麼會選擇微服務架構?

    與單體架構相比,微服務設計有幾個優點,包括健壯性、生產力、靈活性、可擴展性、速度、動態性、最少的維護等。

  2. 微服務架構的 5 個組成部分是什麼?

    微服務架構的五個基本組件是微服務、容器、服務網格、服務發現和 API 網關。

  3. REST API 是微服務嗎?

    是的,REST API 是用於構建微服務應用程序的最流行的 API 之一。

  4. 微服務和 API 有什麼區別?

    API 和微服務之間的主要區別在於後者用於構建單個應用程序,而前者由一組獨立但相互關聯的服務組成。 API 是應用程序的組件,負責促進與其他軟件程序的通信。 因此,API 可用於促進微服務的創建。

  5. Kubernetes 是微服務嗎?

    Yes, Kubernetes is an open-source orchestrator for deploying containerized applications (microservices).

  6. What language is used in microservices?

    C++ is a good language for microservices in domains that require the characteristics of C++, such as runtime speed and direct memory access, and C++, like other languages, has a variety of infrastructures available to help you get started with developing microservices. C++ is a good language for microservices in domains that require the attributes of C++, such as runtime speed and direct memory access.

  7. 你為什麼會選擇微服務架構?

    >>更高的敏捷性和更快的上市時間
    >>有效的可擴展性和應用程序更新
    >>優化開發成本
    >>高可靠性、穩定性、可維護性
    >>技術選擇的靈活性
    >>激光聚焦個人業務功能
    >>團隊自治
    >>自動化部署和測試
    >>更好的資源管理
    >>減少/避免技術債務

您可能還想閱讀
  • 全棧應用程序開發:完整指南
  • 無頭商務:傳統商務的解決方案
  • 可組合商務
  • 移動應用後端開發
  • 如何選擇技術堆棧來開發應用程序