微服務 高併發 多資料來源 讀寫分離 分庫分表

2021-09-12 09:18:00 字數 2217 閱讀 8331

sharding-jdbc 分庫分表

mybatis plus整合sharding-jdbc在基於spring boot的專案中的單庫分表應用

springboot+mybatisplus,再加入shardingjdbc分表玩法

分庫分表神器 sharding-jdbc

sharding-jdbc整合mybatis-plus實現分庫分表解決方案

spring boot 多資料來源(讀寫分離)入門

sharding-jdbc教程:spring boot整合sharding-jdbc實現讀寫分離

spring boot 中分庫分表 sharding-jdbc

一次完美的分庫分表實踐

分庫分表方案

資料庫分庫分表策略的具體實現方案

分庫分表「實踐」大全

「分庫分表" ?選型和流程要慎重,否則會失控

關於分庫分表,這有一套大而全的輕量級架構設計思路

大廠在用的分庫分表方案

分庫分表

資料庫怎麼分庫分表,垂直?水平?

用單庫自增鍵來生成id了,後期怎麼分庫?

簡單實現分庫分表

關於分庫分表,這有一套大而全的輕量級架構設計思路

高併發場景下,百萬級訂單量系統的分庫分表重構經歷

分庫分表方案

256變4096:分庫分表擴容如何實現平滑資料遷移?

「分庫分表」,還能這麼玩

一文讀懂分庫分表的技術演進(最佳實踐)

分割槽取模分庫分表策略:多表事務分庫內閉環解決方案

分庫分表策略

結合業務特性,選取使用者標識作為分片鍵,通過計算使用者標識的雜湊值再取模來得到使用者訂單資料的庫表編號.

假設共有n個庫,每個庫有m張表,

則庫表編號的計算方式為:

分庫分表後怎麼做 mysql 到 es 的資料同步

上面說到為了便於管理後台的查詢,我們將訂單資料冗餘儲存在elasticsearch中,那麼,如何在mysql的訂單資料變更後,同步到es中呢?

這裡要考慮的是資料同步的時效性和一致性、對業務**侵入小、不影響服務本身的效能等。

mq方案

es更新服務作為消費者,接收訂單變更mq訊息後對es進行更新

binlog方案

es更新服務借助canal等開源專案,把自己偽裝成mysql的從節點,接收binlog並解析得到實時的資料變更資訊,然後根據這個變更資訊去更新es。

其中binlog方案比較通用,但實現起來也較為複雜,我們最終選用的是mq方案。

因為es資料只在管理後台使用,對資料可靠性和同步實時性的要求不是特別高。

考慮到宕機和訊息丟失等極端情況,在後台增加了按某些條件手動同步es資料的功能來進行補償。

分布式事務問題

電商的交易流程中,分布式事務是乙個經典問題,比如:

使用者支付成功後,需要通知發貨系統給使用者發貨。

使用者確認收貨後,需要通知積分系統給使用者發放購物獎勵的積分。

我們是如何保證微服務架構下資料的一致性呢?

不同業務場景對資料一致性的要求不同,業界的主流方案中,用於解決強一致性的有兩階段提交(2pc)、三階段提交(3pc),解決最終一致性的有tcc、本地訊息、事務訊息和最大努力通知等。

這裡不對上述方案進行詳細的描述,介紹一下我們正在使用的本地訊息表方案:在本地事務中將要執行的非同步操作記錄在訊息表中,如果執行失敗,可以通過定時任務來補償。

下圖以訂單完成後通知積分系統贈送積分為例。

系統安全和穩定性

網路隔離

只有極少數第三方介面可通過外網訪問,且都會驗證簽名,內部系統互動使用內網網域名稱和rpc介面。

併發鎖任何訂單更新操作之前,會通過資料庫行級鎖加以限制,防止出現併發更新。

冪等性所有介面均具備冪等性,不用擔心對方網路超時重試所造成的影響。

熔斷使用hystrix元件,對外部系統的實時呼叫新增熔斷保護,防止某個系統故障的影響擴大到整個分布式系統中。

監控和告警

通過配置日誌平台的錯誤日誌報警、呼叫鏈的服務分析告警,再加上公司各中介軟體和基礎元件的監控告警功能,讓我們能夠能夠第一時間發現系統異常

SpringBoot Redis 多資料來源

session存到redis後,cache和session是在乙個庫的 使用redis多資料配置可以分開。這樣ssession的redis伺服器可以單獨作為認證服務,多個業務模組可以配置單獨的cache庫,防止多模組key衝突的問題。原始碼 github 增加redis2的配置spring.redi...

rabbitmq多資料來源

核心依賴 com.mytaxi.spring.multirabbit spring multirabbit lib 2.2.0 核心方法 繫結至指定資料來源 resourceholder.bind connectionfactory,source 解除繫結,使用預設資料來源 resourcehold...

spring 多資料來源

之前嘗試的乙個多資料來源切換的功能測試可以實現了,下面進行一下簡單的筆記 testservice 方法通過以下方式進行主動切換 dynamicdatasource 類 package com.utils import org.springframework.jdbc.datasource.looku...