日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

從單體架構向微服務遷移:模塊化單體是如何幫助的

來源: 責編: 時間:2023-12-20 09:23:41 234觀看
導讀你開始構建一個漂亮的單體系統。也許是一個模塊化的單體系統。隨著時間的推移,系統不斷增長,需求也在不斷變化。漸漸地,系統開始出現裂痕。這可能是出于組織原因,需要在團隊之間分配工作。也可能是由于擴展性問題和性能瓶

你開始構建一個漂亮的單體系統。也許是一個模塊化的單體系統。隨著時間的推移,系統不斷增長,需求也在不斷變化。漸漸地,系統開始出現裂痕。XZl28資訊網——每日最新資訊28at.com

這可能是出于組織原因,需要在團隊之間分配工作。也可能是由于擴展性問題和性能瓶頸。你開始評估可能的解決方案,以及每種解決方案的優勢和權衡。最后,你做出了一個決定。是時候將系統的部分部分遷移到獨立的(微)服務中了。XZl28資訊網——每日最新資訊28at.com

那么,我們如何從單體架構遷移到微服務呢?XZl28資訊網——每日最新資訊28at.com

XZl28資訊網——每日最新資訊28at.com

使用有界上下文進行解耦

從單體架構轉移到微服務的第一步是識別有界上下文。因為它們代表了可用于提取的領域的內聚部分。XZl28資訊網——每日最新資訊28at.com

一個解決方案是使用領域驅動設計戰略建模來識別有界上下文。XZl28資訊網——每日最新資訊28at.com

有界上下文定義了模塊之間的顯式邊界,并分離了各自的責任。這是遷移到微服務時面臨的最大挑戰之一。確定良好的邊界確保微服務專注于一個問題領域。XZl28資訊網——每日最新資訊28at.com

在單體中定義邊界也更容易,因為你不是在處理分布式系統。重構不良邊界風險較低,你有更多自由度去“搞定”。XZl28資訊網——每日最新資訊28at.com

XZl28資訊網——每日最新資訊28at.com

接下來你需要解決的問題是耦合。耦合表現為兩種方式:XZl28資訊網——每日最新資訊28at.com

  • 數據庫依賴
  • 模塊間的通信

你可以通過構建模塊化單體來從一開始解決這些問題。但我也會解釋你可以使用的指導原則來解決耦合。XZl28資訊網——每日最新資訊28at.com

模塊化單體如何解決耦合

模塊化單體是一個響亮的名字,指的是由幾個有界上下文(模塊)構建的單體系統,并遵循一系列控制耦合的原則。每個模塊包含一組內聚的功能,并且在系統中與其他模塊隔離。這種隔離涉及數據庫依賴和模塊間的通信。XZl28資訊網——每日最新資訊28at.com

XZl28資訊網——每日最新資訊28at.com

你可以把一個模塊看作系統中的一個獨立應用程序。一個模塊擁有自己的領域、實體、用例和數據庫表。模塊作為一個單一可執行應用程序一起部署。但在其他方面它們是獨立的。XZl28資訊網——每日最新資訊28at.com

你可以對每個模塊應用不同的架構方法,比如清晰架構。XZl28資訊網——每日最新資訊28at.com

我提到你需要減少模塊間的耦合。XZl28資訊網——每日最新資訊28at.com

以下是解決數據庫耦合的兩個原則:XZl28資訊網——每日最新資訊28at.com

  • 模塊不能在數據庫中共享表
  • 模塊不能直接查詢其他模塊的數據庫表

共享數據庫表會導致高度耦合,而這恰恰是你要避免的。你可以使用模式在邏輯層面或物理上使用不同的數據庫為每個模塊隔離數據。XZl28資訊網——每日最新資訊28at.com

一個模塊應該暴露一個其他模塊可以調用的公共 API。這個公共 API 是模塊的入口點。這是模塊間通信的唯一方式。XZl28資訊網——每日最新資訊28at.com

模塊間通信可以是同步的,使用方法調用,或者異步的,使用消息總線。XZl28資訊網——每日最新資訊28at.com

我更傾向于使用消息傳遞的異步通信。它耦合度低,使得向微服務的轉變更加容易。XZl28資訊網——每日最新資訊28at.com

為系統添加消息代理

為了在模塊間實現異步通信,你可以引入一個消息代理。但你無需從一開始引入一個完整的消息代理。XZl28資訊網——每日最新資訊28at.com

你可以使用諸如MassTransit這樣的抽象來在模塊之間實現消息傳遞,同時將傳輸機制抽象化。XZl28資訊網——每日最新資訊28at.com

MassTransit 有一個內存傳輸機制,可以很好地在單個進程中工作。它非??焖?。但它不是持久化的,如果總線停止,你可能會丟失消息。XZl28資訊網——每日最新資訊28at.com

在引入真正的消息代理時,你只需要配置不同的傳輸機制。但你不需要改變你的消息傳遞代碼。XZl28資訊網——每日最新資訊28at.com

XZl28資訊網——每日最新資訊28at.com

在模塊化單體中引入消息傳遞的目的是什么?XZl28資訊網——每日最新資訊28at.com

這樣設計系統可以使模塊之間松耦合和獨立。在項目成熟后,你在開始時增加的復雜性是合理的。XZl28資訊網——每日最新資訊28at.com

將模塊提取到微服務中

我們決定從單體系統遷移到微服務。因為我們以模塊化的方式構建了系統,所以遷移的關鍵在于將一個模塊提取到一個新的進程中。XZl28資訊網——每日最新資訊28at.com

你應該在服務前面引入一個反向代理,來路由進入的流量。這將隱藏微服務系統的實現細節,不讓客戶端應用程序知道。XZl28資訊網——每日最新資訊28at.com

新的微服務需要連接到消息總線,但我們不需要在代碼中做任何改變。使用消息傳遞在模塊之間進行通信簡化了遷移過程。這可能讓你想起事件驅動架構。XZl28資訊網——每日最新資訊28at.com

如果你使用方法調用來實現模塊間通信,你必須將這種實現替換為通過網絡的 HTTP 調用。因為你現在正在構建一個分布式系統,之前的方法調用實現將無法工作。你還需要考慮認證、容錯等問題……XZl28資訊網——每日最新資訊28at.com

XZl28資訊網——每日最新資訊28at.com

從單體系統中提取模塊會用新微服務的功能替換舊系統的所有功能。這個遷移到微服務的過程遵循了榕樹模式。XZl28資訊網——每日最新資訊28at.com

總結思考

從單體架構遷移到微服務的最大障礙是耦合。耦合是變更的阻止者。因此,這是你需要解決的第一件事。XZl28資訊網——每日最新資訊28at.com

你需要在數據庫層面和代碼中的組件間解決耦合。以模塊化的方式構建系統可以從一開始就避免這些問題。XZl28資訊網——每日最新資訊28at.com

這就是為什么模塊化單體是一個很好的方法。XZl28資訊網——每日最新資訊28at.com

你可以在系統中識別有界上下文,并將它們用作單體中的邊界。在單體中正確劃分邊界要容易得多。XZl28資訊網——每日最新資訊28at.com

遷移到微服務就是將模塊提取到獨立服務的過程。XZl28資訊網——每日最新資訊28at.com

當然,你仍然需要考慮安全性和容錯性,因為現在你有了一個分布式系統。XZl28資訊網——每日最新資訊28at.com

當談論抽象的架構時,可能難以理解,但在討論概念性解決方案時卻是很重要的。XZl28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-50038-0.html從單體架構向微服務遷移:模塊化單體是如何幫助的

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Golang 清晰代碼指南

下一篇: 四大軟件架構:掌握單體、分布式、微服務、Serverless 的精髓

標簽:
  • 熱門焦點
  • Find N3入網:最高支持16+1TB

    OPPO將于近期登場的Find N3折疊屏目前已經正式入網,型號為PHN110。本次Find N3在外觀方面相比前兩代有很大的變化,不再是小號的橫向折疊屏,而是跟別的廠商一樣采用了較為常見的
  • 官方承諾:K60至尊版將會首批升級MIUI 15

    全新的MIUI 15今天也有了消息,在官宣了K60至尊版將會搭載天璣9200+處理器和獨顯芯片X7的同時,Redmi給出了官方承諾,K60至尊重大更新首批升級,會首批推送MIUI 15。也就是說雖然
  • 如何通過Python線程池實現異步編程?

    線程池的概念和基本原理線程池是一種并發處理機制,它可以在程序啟動時創建一組線程,并將它們置于等待任務的狀態。當任務到達時,線程池中的某個線程會被喚醒并執行任務,執行完任
  • .NET 程序的 GDI 句柄泄露的再反思

    一、背景1. 講故事上個月我寫過一篇 如何洞察 C# 程序的 GDI 句柄泄露 文章,當時用的是 GDIView + WinDbg 把問題搞定,前者用來定位泄露資源,后者用來定位泄露代碼,后面有朋友反
  • 破圈是B站頭上的緊箍咒

    來源 | 光子星球撰文 | 吳坤諺編輯 | 吳先之每年的暑期檔都少不了瞄準追劇女孩們的古偶劇集,2021年有優酷的《山河令》,2022年有愛奇藝的《蒼蘭訣》,今年卻輪到小破站抓住了追
  • 東方甄選單飛:有些鳥注定是關不住的

    作者:彭寬鴻來源:華爾街科技眼‍‍‍‍‍‍‍‍‍‍東方甄選創始人俞敏洪帶隊的“7天甘肅行”直播活動已在近日順利收官。成立后一
  • 華為和江淮汽車合作開發百萬元問界MPV?雙方回應來了

    8月1日消息,郭明錤今天在社交平臺發文稱,華為正在和江淮汽車合作,開發售價在100萬元的問界MPV,預計在2024年第2季度量產,銷量目標為上市首年交付5萬輛。
  • 2299元起!iQOO Pad明晚首銷:性能最強天璣平板

    5月23日,iQOO如期舉行了新品發布會,除了首發安卓最強旗艦處理器的iQOO Neo8系列新機外,還在發布會上推出了旗下首款平板電腦——iQOO Pad,其最大的賣點
  • 電博會與軟博會實現"線下+云端"的雙線融合

    在本次“電博會”與“軟博會”雙展會利好條件的加持下,既可以發揮展會拉動人流、信息流、資金流實現快速交互流動的作用,繼而推動區域經濟良性發展;又可以聚
Top 主站蜘蛛池模板: 邯郸县| 如皋市| 长宁区| 繁峙县| 黎川县| 盱眙县| 锡林浩特市| 文山县| 广西| 三台县| 东兰县| 东方市| 南靖县| 和硕县| 陆河县| 贡山| 赣州市| 武冈市| 收藏| 邳州市| 民权县| 山丹县| 阿荣旗| 武冈市| 县级市| 治多县| 桦川县| 沂水县| 西畴县| 德庆县| 四会市| 伊金霍洛旗| 乌兰浩特市| 天长市| 兴安盟| 从化市| 苗栗县| 聊城市| 乌鲁木齐县| 屏东市| 司法|