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:小白也能懂的消息队列实战指南
java·spring boot·微服务·消息队列·rabbitmq·异步编程
lekami_兰1 小时前
RabbitMQ 延迟队列实现指南:两种方案手把手教你搞定
后端·rabbitmq·延迟队列
为什么不问问神奇的海螺呢丶16 小时前
n9e categraf rabbitmq监控配置
分布式·rabbitmq·ruby
m0_687399841 天前
telnet localhost 15672 RabbitMQ “Connection refused“ 错误表示目标主机拒绝了连接请求。
分布式·rabbitmq
Ronin3051 天前
日志打印和实用 Helper 工具
数据库·sqlite·rabbitmq·文件操作·uuid生成
坊钰3 天前
【Rabbit MQ】Rabbit MQ 的结构详解,传输机制!!!
java·rabbitmq
请叫我头头哥3 天前
SpringBoot进阶教程(八十九)rabbitmq长链接及域名TTL,多机房切换配置重连能力
rabbitmq·springboot
三水不滴4 天前
对比一下RabbitMQ和RocketMQ
经验分享·笔记·分布式·rabbitmq·rocketmq
JP-Destiny4 天前
后端-RabbitMQ
后端·消息队列·rabbitmq·java-rabbitmq
AC赳赳老秦5 天前
DeepSeek 辅助科研项目申报:可行性报告与经费预算框架的智能化撰写指南
数据库·人工智能·科技·mongodb·ui·rabbitmq·deepseek