【虹科乾貨】設計微服務架構的原則

来源:https://www.cnblogs.com/hongcloudtech/archive/2023/11/16/17836611.html
-Advertisement-
Play Games

微服務是一種軟體架構策略,將應用程式分解為一組解耦的、自治的服務。採用微服務架構將改善整體性能和可擴展性,本文將概述微服務設計和實施的基本考慮因素。 ...


微服務是一種軟體架構策略,有利於改善整體性能和可擴展性。你可能會想,我的團隊需不需要採用微服務,設計微服務架構有哪些原則?本文會給你一些靈感。

文章速覽:

  • 微服務設計
  • 通過領域驅動設計實施微服務
  • 選擇技術棧
  • 微服務設計架構的5個原則

 

微服務是一種軟體架構策略,將應用程式分解為一組解耦的、自治的服務。這些獨立的應用服務通過API相互通信。每個服務都由其專業領域的專家團隊管理,以便每個軟體開發團隊可以控制自己的開發周期,按照自己的時間表進行測試和部署,使用自己的企業工具和資源,加速上線時間。為了評估你的團隊是否需要採用微服務架構。這裡有一些值得深入討論的細節。

一、微服務設計

設計微服務架構的第一步是形勢評估開發者網站(Developer.com)總結的十大微服務設計原則之一是單一責任原則每個服務只需要將其所有資源投入到微服務應用程式的一個功能中。

1.通過領域驅動設計實施微服務

軟體架構師需要進行域分析,以確定如何劃分每個服務以及需要將哪些元素納入應用堆棧中。這種領域分析被稱為領域驅動設計(Domain Driven Design, DDD。它將實體模式和聚合模式等模式應用到單個限界上下文bounded context)中,以便以高的計算精度來識別單個域的邊界

總之,應該圍繞特定的業務功能構建每個微服務。一旦確定了域並瞭解了它們的邊界,就可以定義最適合應用堆棧的變數

 

2.選擇技術棧

創建微服務技術棧較為特別。通常需要使用各種工具、框架和編程語言,將它們整合成一個耦合的系統。在選擇工具時考慮以下變數:

 

1) 編程語言

選擇用於微服務的最佳編程語言取決於你最熟悉哪種語言、可用於所需功能的庫以及每種語言提供的功能套件。顯然,選擇你的開發團隊已經大範圍使用的語言可以節省時間和精力。

根據2021JetBrains關於微服務的調查,用於微服務開發的三種最流行的語言是Java41%)、JavaScript37%)和Python25%。這些流行的編程語言都有大量的線上開發者支持、成功應用開發的示例、運行環境,比如Node.JS,以及豐富的客戶端庫。

總之,確保所選的語言適合當前業務問題例如,Python在數據分析中很受歡迎,而JavaScript是全棧開發的最優選擇。

 

2) 資料庫

在為微服務架構構建的應用程式選擇適合的資料庫時,應將可伸縮性、可用性和安全性置於首要位置。選擇一個最能支持在微服務中計劃使用的數據模型的資料庫。的技術棧應該能夠處理任何應用負載,確保使用故障切換協議可用性,並保護應用免受惡意攻擊。

 

3)通信

的業務功能可能需要您的微服務使用同步的服務間通信方法執行某些操作,對於其他操作,可能需要使用非同步通信。可以使用多種通信格式和協議來輔助微服務通信,包括HTTP/RESTgRPCAMQP

對於非同步通信,使用支持消費者組的事件驅動消息代理可以提高可伸縮性和可靠性,確保應用程式能夠擴展,而不會導致任何服務無法訪問的情況

 

4)監控

每個微服務團隊都負責監視應用程式性能,通常使用日誌記錄和可觀察性工具來跟蹤操作。這使得開發人員和運維人員可以跟蹤整個系統,如應用程式性能、消息代理流與資料庫資源利用率。

在使用消息代理時,考慮使用一個日誌流,其中每個微服務都可以發佈消息。這樣,您可以將首選的日誌記錄和可觀察性工具連接到流,併在不減慢應用程式的情況下非同步監視您的應用程式。

 

二、微服務架構設計的5個原則

那麼,如何確保的微服務架構可以發揮最佳作用?以下是五個微服務應用程式設計原則,可供參考。

1.低耦合和高內聚

低耦合和高內聚可以通過前面提到的單一責任原則來解釋賦予每個領域團隊單一的職責,有助於加強該領域內的內聚,使得該服務內的所有功能都在某種程度上緊密耦合。每個服務都由其自己的領域專家和工具管理,但仍然可以通過API和其他協議相互通信。這有點像來自不同部門的同事如何互動:當有助於完成工作時,大家彼此分享信息,而不會過多地談論與他人無關的細節。

 

2.適應性

業務應用程式很少是靜止不變的。隨著新的業務需求的出現,行業的假設發生變化,技術能力提供更多功能,軟體也會發生變化。微服務應該具有可適應性,以滿足新需求出現時可以進行適應。世界在變化,人們在變化,所以軟體也應該變化。

 

3.基礎設施自動化

實現微服務的一個原因是它們能夠自動化流程,從而提高整體可擴展性。藉助 Kubernetes 等容器編排系統,您可以使用單個鏡像與微服務一起部署微服務的整個資料庫。在Kubernetes控制器的幫助下,這些可移植性優勢可以幫助DevOps團隊管理、調度和編排自動容器部署。

 

4.離散邊界

實施微服務要求在任何給定應用程式中的服務都要維護自己的分散數據。服務邊界應該將與任何單個服務相關的所有邏輯和數據與應用程式中的其他服務隔離開。

這也是允許容器化微服務進行獨立部署的邏輯。這個原則也有一些反對者,他們認為這會導致數據冗餘激增。但建立這些明確的邊界最大的好處之一是:當一個微服務承載自己的數據時,任何奇怪的行為都被限制在微服務內部。

 

5.為故障而設計

干擾是經常發生的,應用服務會在毫無徵兆的情況下癱瘓。例如,挖掘機開挖光纜中斷網路操作人們會忘記續訂功能變數名稱,系統會因防火牆故障引起的數據連接問題而中斷等。所以,需要儘力考慮潛在的故障的可實施對策。設計具有彈性的解決方案,比如使用斷路器模式,以防止當某個微服務無法執行給定操作時其他服務中斷。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 作為一款火山引擎推出的雲原生數據倉庫,ByteHouse基於開源ClickHouse構建,併在位元組跳動內外部場景的檢驗下,對OLAP引擎能力、性能、運維、架構進一步升級。除此之外,ByteHouse也在Serverless方向探索,基於cloud-native 雲原生的理念構建了全新一代的數據倉庫,... ...
  • 本章將介紹如何在 HarmonyOS 上進行實際項目開發。我們將從項目需求分析開始,逐步完成項目的設計、開發、測試和上線過程。 ...
  • 目錄準備界面:view控制項LayoutCreator事件監聽OnClickListener轉跳頁面IntentIntent傳遞數據Toast和AlertDialogGson使用OKhttp3的基本使用post方法get方法輕量級存儲SharedPreferenceListView基本使用1、Simp ...
  • 作為一名全棧工程師,在日常的工作中,可能更側重於後端開發,如:C#,Java,SQL ,Python等,對前端的知識則不太精通。在一些比較完善的公司或者項目中,一般會搭配前端工程師,UI工程師等,來彌補後端開發的一些前端經驗技能上的不足。但並非所有的項目都會有專職前端工程師,在一些小型項目或者初創公... ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 在我們寫項目代碼時,應該更加專註於業務邏輯的實現,而把定式代碼交給js庫或工程化自動處理,而我想說的是,請求邏輯其實也是可以繼續簡化的。 你可能會說,用axios或fetch api就夠了啊,哪有什麼請求邏輯,那可能是你還沒有意識到這個問 ...
  • 需求:客戶的電腦都只能訪問內,伺服器可以訪問外網,客戶電腦使用的項目中用到了高德webapi2.0。10.200.31.45:32100是我們的web伺服器。 網上基本上都是對高德webapi1.4的配置方式,而web2.0有一些差別。 1.前端修改高德地圖的js應用 如果是index.html引入 ...
  • 最近做的幾個項目經常遇到這樣的需求,要在表格上增加一個自定義表格欄位設置的功能。就是用戶可以自己控制那些列需要展示。在幾個項目里都實現了一遍,每個項目的需求又都有點兒不一樣,迭代了很多版,所以抽時間把這個功能封裝了個組件:@silverage/table-custom,將這些差別都集成了進去,方便今... ...
  • 大綱 本文內容更多的是講講使用 vuex 的一些心得想法,所以大概會講述下麵這些點: Q1:我為什麼會想使用 vuex 來管理數據狀態交互? Q2:使用 vuex 框架有哪些缺點或者說副作用? Q3:我是如何在項目里使用 vuex 的? 初識 vuex 對於 vuex,有人喜歡,有人反感 喜歡的人覺 ...
一周排行
    -Advertisement-
    Play Games
  • 1、預覽地址:http://139.155.137.144:9012 2、qq群:801913255 一、前言 隨著網路的發展,企業對於信息系統數據的保密工作愈發重視,不同身份、角色對於數據的訪問許可權都應該大相徑庭。 列如 1、不同登錄人員對一個數據列表的可見度是不一樣的,如數據列、數據行、數據按鈕 ...
  • 前言 上一篇文章寫瞭如何使用RabbitMQ做個簡單的發送郵件項目,然後評論也是比較多,也是準備去學習一下如何確保RabbitMQ的消息可靠性,但是由於時間原因,先來說說設計模式中的簡單工廠模式吧! 在瞭解簡單工廠模式之前,我們要知道C#是一款面向對象的高級程式語言。它有3大特性,封裝、繼承、多態。 ...
  • Nodify學習 一:介紹與使用 - 可樂_加冰 - 博客園 (cnblogs.com) Nodify學習 二:添加節點 - 可樂_加冰 - 博客園 (cnblogs.com) 介紹 Nodify是一個WPF基於節點的編輯器控制項,其中包含一系列節點、連接和連接器組件,旨在簡化構建基於節點的工具的過程 ...
  • 創建一個webapi項目做測試使用。 創建新控制器,搭建一個基礎框架,包括獲取當天日期、wiki的請求地址等 創建一個Http請求幫助類以及方法,用於獲取指定URL的信息 使用http請求訪問指定url,先運行一下,看看返回的內容。內容如圖右邊所示,實際上是一個Json數據。我們主要解析 大事記 部 ...
  • 最近在不少自媒體上看到有關.NET與C#的資訊與評價,感覺大家對.NET與C#還是不太瞭解,尤其是對2016年6月發佈的跨平臺.NET Core 1.0,更是知之甚少。在考慮一番之後,還是決定寫點東西總結一下,也回顧一下.NET的發展歷史。 首先,你沒看錯,.NET是跨平臺的,可以在Windows、 ...
  • Nodify學習 一:介紹與使用 - 可樂_加冰 - 博客園 (cnblogs.com) Nodify學習 二:添加節點 - 可樂_加冰 - 博客園 (cnblogs.com) 添加節點(nodes) 通過上一篇我們已經創建好了編輯器實例現在我們為編輯器添加一個節點 添加model和viewmode ...
  • 前言 資料庫併發,數據審計和軟刪除一直是數據持久化方面的經典問題。早些時候,這些工作需要手寫複雜的SQL或者通過存儲過程和觸發器實現。手寫複雜SQL對軟體可維護性構成了相當大的挑戰,隨著SQL字數的變多,用到的嵌套和複雜語法增加,可讀性和可維護性的難度是幾何級暴漲。因此如何在實現功能的同時控制這些S ...
  • 類型檢查和轉換:當你需要檢查對象是否為特定類型,並且希望在同一時間內將其轉換為那個類型時,模式匹配提供了一種更簡潔的方式來完成這一任務,避免了使用傳統的as和is操作符後還需要進行額外的null檢查。 複雜條件邏輯:在處理複雜的條件邏輯時,特別是涉及到多個條件和類型的情況下,使用模式匹配可以使代碼更 ...
  • 在日常開發中,我們經常需要和文件打交道,特別是桌面開發,有時候就會需要載入大批量的文件,而且可能還會存在部分文件缺失的情況,那麼如何才能快速的判斷文件是否存在呢?如果處理不當的,且文件數量比較多的時候,可能會造成卡頓等情況,進而影響程式的使用體驗。今天就以一個簡單的小例子,簡述兩種不同的判斷文件是否... ...
  • 前言 資料庫併發,數據審計和軟刪除一直是數據持久化方面的經典問題。早些時候,這些工作需要手寫複雜的SQL或者通過存儲過程和觸發器實現。手寫複雜SQL對軟體可維護性構成了相當大的挑戰,隨著SQL字數的變多,用到的嵌套和複雜語法增加,可讀性和可維護性的難度是幾何級暴漲。因此如何在實現功能的同時控制這些S ...