微服務之間如何進行數據共享
本文主要講解關於微服務之間的數據共享,一共有四種方式,下面會做具體的分析。
靜態表
有些靜態數據庫表,比如國家,可能會被很多程序使用,而且程序內部需要對國家表進行連接 (join),以生成最終用戶顯示的數據,這樣用微服務調用的方式效率不高,影響性能。一種方法是在每一項微服務中配置一個這樣的表格,它只讀,這樣就可以進行數據庫連接。您必須確保數據同步。大多數情況下,這種方案都是可接受的,因爲有以下兩點:
(1) 靜態數據庫表結構基本不變: 因爲一旦表結構發生變化,您不僅需要更改所有微服務的數據庫表,還需要修改所有微服務的程序。
(2) 數據庫表中的數據變化不頻繁:因此數據同步工作量不大。此外,當您同步數據庫時,總是會有延遲,如果數據變化不頻繁,您可以選擇許多同步方法。
只讀業務數據訪問
若您需要閱讀其他數據庫中的動態業務數據,理想的方法是服務調用。假如您只是調用其他微服務進行一些計算,性能通常是可以接受的。若您需要連接數據,則您可以使用程序代碼而非 SQL 語句。若測試後性能不能滿足要求,則可考慮在自己的數據庫中建立一個只讀數據表。大致有兩種數據同步方式。若爲事件驅動,則以發送信息的方式進行同步,若爲 RPC 方式,則使用數據庫本身或第三方同步軟件。
存在兩個問題:
(1) 數據容量: 數據庫中的數據量是影響性能的主要因素。因爲這個數據是外來的,不利於掌握它的流量規律,所以很難規劃容量,也不能更好的
(2) 界面泄露: 微服務之間的界面只有服務調用界面,可以在不影響其他服務的情況下對內部程序和數據庫進行任何變更。現在數據庫表結構已經成爲界面的一部分。界面一旦發佈,基本無法更改,極大地限制了你的靈活性。幸運的是,另一套手錶已經建成並有緩衝。當主手錶修改時,從手錶可能不需要同步更新。
閱讀和閱讀業務數據訪問
這是最複雜的情況。一般情況下,你有一個表是主表,其他表是從表。主表包含主要信息,這些主要信息複製到從表,但是微服務會有額外的字段需要寫到從表。這樣本地微服務就可以既讀又寫了。而且主表和從表有順序的關係。從表的主鍵來自主表,所以必須先有主表,再有從表。如圖 14-1。
直接訪問其他數據庫
這種方法是絕對禁止的。生產環境中的許多程序錯誤和性能問題都是通過這種方式產生的。以上三種方法都是新建的本地只讀數據庫表,導致數據庫的物理隔離,這樣數據庫的性能問題不會影響另一種。此外,當主庫中的表格結構發生變化時,您可以暫時保持從庫中的表格不變,這樣程序就可以運行。如果直接訪問他人的庫,主庫一旦修改,其他微服務程序將立即報錯。
作者:c 程序員 - XY
來源:https://edu.51cto.com/study/4415
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/Bk4RA6QISLYPPeKNFPoX4A