20250219 隨筆 [特殊字符] 查看短鏈的實現方式與解決方案優化

🔍 一、查看短鏈的實現方式

👥 1. 從普通用戶角度
  • 短鏈接中直接包含庫表位資訊
  • 用戶可以通過短鏈中的 code 字段解析,直接定位到對應的庫表,從而實現快速訪問。
  • 特點:解析簡單、響應速度快,無需額外的數據映射層。

🏬 2. 從商家角度
  • 因為系統採用了分庫分表策略,數據分散存儲在不同的庫表中。
  • 商家在獲取短鏈時,無法僅通過 code 直接解析定位對應的庫表
  • 問題:分庫分表帶來的數據路由複雜性,無法像用戶端一樣快速解析。

🛠 二、解決方案:使用 MQ + 冗餘雙寫策略

💡 核心思路

透過MQ(消息隊列)配合冗餘雙寫策略 來解決分庫分表帶來的解析問題,並確保數據在多庫之間的最終一致性


🌐 三、詳細設計方案

🏛 1. 賣家庫與買家庫的分離設計

為減少查詢複雜性並提升查詢效率,將數據按照業務角色分為賣家庫買家庫

  • 買家庫

    • 分片策略 :以 用戶 ID 為分片鍵進行分庫分表。
    • 優勢:買家可以快速查詢自己的訂單數據,提升用戶端體驗。
  • 賣家庫

    • 分片策略 :以 商家 ID 為分片鍵進行分庫分表。
    • 優勢:商家可以高效檢索與管理與自身相關的業務數據。

📝 2. 數據冗餘設計(冗餘雙寫)
  • 目的:確保買家庫與賣家庫之間數據同步,支持多角度高效查詢。

  • 具體方案

    1. 下訂單時同步寫入兩份數據
      • 寫入買家庫(根據用戶 ID 定位)
      • 寫入賣家庫(根據商家 ID 定位)
    2. 寫入方式 :採用冗餘雙寫策略,在業務層確保訂單生成時數據同時落盤至兩個庫。

🔄 3. 分佈式事務與數據一致性保證

在分庫分表與冗餘雙寫的場景下,分佈式事務是關鍵問題,尤其是確保數據在多庫間的一致性。

  • 問題

    • 多庫寫入可能出現部分失敗,導致數據不一致。
    • 傳統分布式事務解決方案(如兩階段提交 2PC)存在性能開銷大、可用性低的問題。
  • 解決方案

    使用 MQ 實現最終一致性

    • 當業務系統寫入主庫成功後,通過 MQ 發送同步消息
    • 消費端根據消息異步寫入冗餘庫。
    • 如果消費失敗,可通過 MQ 的重試機制或補償策略確保數據最終一致。
  • 優勢

    • 解耦業務流程,減少同步開銷
    • 高可用性,即使部分系統異常也能最終達成一致
    • 提升系統吞吐量,避免分布式鎖帶來的性能瓶頸

🎯 四、整體流程總結

🌟 流程步驟 描述
1. 訂單創建 用戶下單時,根據用戶 ID 寫入買家庫,商家 ID 寫入賣家庫。
2. 冗餘雙寫 業務層採用雙寫策略,同時提交兩份數據。
3. 發送 MQ 消息 主庫寫入成功後,向 MQ 發送同步消息。
4. MQ 消費與異步同步 消費端接收消息,將數據寫入冗餘庫。
5. 數據一致性校驗 若異步寫入失敗,通過補償機制(如定時任務或重試機制)達成最終一致性。
6. 短鏈解析查詢 - 用戶:透過 code 直接定位庫表。 - 商家:通過冗餘庫間接定位。

🏹 五、技術亮點與優勢

🚀 特性 🌟 優勢說明
無侵入式多端展示 短鏈 code 為用戶提供直接解析能力,體驗一致。
高效分庫分表策略 根據用戶/商家 ID 自然分片,提升單庫性能並減少跨庫查詢。
冗餘雙寫設計 支持多角色(用戶、商家)高效檢索,查詢延遲低。
分布式事務一致性 MQ 實現異步最終一致性,避免傳統分布式事務帶來的性能問題。
高可用性與容錯能力 MQ 的重試與補償機制保證在異常情況下數據不丟失。

六、總結

分庫分表架構 下,WebRelease 搭配 MQ + 冗餘雙寫 的策略,不僅能解決短鏈解析的庫表定位問題 ,同時通過最終一致性機制確保多庫數據的一致性與高可用性。

  • 🔑 對用戶而言:短鏈可即時解析,體驗流暢且快速。
  • 🏬 對商家而言:透過冗餘數據存儲,即使在分布式架構中也能高效檢索訂單資料。
  • 🏃 對系統而言:高可用性、低延遲且具備強大的容錯能力。

💬 是否需要針對特定場景進行深入的代碼範例或架構細節解讀?隨時可以討論! 🚀✨

實現查看短鏈的方式

1.普通用戶角度 ,短鏈接直接包含了庫表位,直接使用code可以解析到對應的庫表

2.商家角度, 因爲使用了分庫分表,數據分佈在不同的庫表,所以,商家無法直接根據code解析對應的庫表

解決方法

使用mq+冗餘雙寫的方法實現

拆分賣家,買家庫

1.買家庫使用 用戶id分庫分表

2.賣家庫使用 商家id分庫分表

數據榮譽

1.下訂單同時寫入兩份表

2.在買家庫和賣家庫分別寫入一份數據

分佈式事務問題

1.使用mq實現最終一致性實現數據同步。

相关推荐
初次攀爬者1 天前
RabbitMQ的消息模式和高级特性
后端·消息队列·rabbitmq
让我上个超影吧4 天前
消息队列——RabbitMQ(高级)
java·rabbitmq
塔中妖4 天前
Windows 安装 RabbitMQ 详细教程(含 Erlang 环境配置)
windows·rabbitmq·erlang
Ronin3054 天前
信道管理模块和异步线程模块
开发语言·c++·rabbitmq·异步线程·信道管理
2501_941800885 天前
云计算与边缘计算:协同合作助力智慧城市建设
rabbitmq
AlickLbc6 天前
RabbitMQ安装记录
分布式·rabbitmq
pursue.dreams6 天前
Windows 安装 RabbitMQ 保姆级教程
windows·rabbitmq
切糕师学AI7 天前
RabbitMQ 是什么?
微服务·消息队列·rabbitmq
Anastasiozzzz7 天前
解决 RabbitMQ 的可靠性投递与消息重复消费问题思路
分布式·rabbitmq
Ronin3057 天前
订阅者模块
rabbitmq