支付類系統資料處理和資料中臺的資料處理方式有什麼不同?
資料備份之後實時性如何保證
在建立資料中臺的時候,資料還是來源於各個異構的業務應用系統,實現了資料的統一,但是資料實際上是多存了一份,資料存在冗餘,同時資料實時性如何來保證了?針對每個業務系統都開發資料提取介面?
資料備份的通用處理方式
能用資料層的binlog方式就用,要不就業務層拉資料,不過如果可以的話,都可以針對各個資料儲存開發類似binlog的東西。
其實,這個是三個問題。
第一,資料平臺類似於數倉,一般就是基於binlog去同步的,異構資料庫可以瞭解下阿里雲的dts,支援多個數據庫的解析。
第二,資料同步肯定存在時延,跨資料中心的同步正常情況下在幾十毫秒左右,那麼對於一些資金類的就要注意了,有些業務需要對資料強一致有要求,就只能讀主庫。
第三,資料提取介面不現實,比如rpc超時,訊息消費失敗都是需要考慮的,所以最後還是做到業務無侵入性。
資料強一致場景怎麼搞
阿里在處理強一致場景下也是按照讀寫主庫的方式處理的嗎?這樣的話資料庫資源需要能承載所有的請求流量?
看場景,不考慮微服務之間的強一致性的前提下。我們就探討時延導致的主從一致性。
比如,異地多活,整個鏈路呼叫都是單元化,那麼就不會有問題,因為整個流量都在一個機房讀寫。如果上游單元化,下游沒有單元化,這種情況,就需要所有流量走中心機房,所有讀強制走主庫。如果不考慮異地多活,只有一個機房,按照讀寫主庫的方式處理。
比如訂單支付或者庫存這種場景,如果做了單元化之後,面對高併發場景時可能會通過快取對DB進行一定的保護,但是引入快取之後可能造成快取和DB資料不一致的情況,由於系統業務對於強一致有要求所以是不是可以讀寫完全落到DB,這樣DB就需要承載所有的流量(不能靠快取了),不知道支付寶oceanbase是不是通過強一致方式實現了這種思路,或者說這種思路是在阿里所有部門採用的通用強一致方案。
京東的搞法
我的專案是京東自己的彈性資料庫,因為資料量大采用分庫分表和讀寫分離。但是對於實時要求高的,查詢立馬更新狀態的,目前依然是隻能讀寫主庫。
因為主從同步的資料時延隨著你的訪問量越大,時延越高。如果只是為了查詢實時資料的話,可以向樑老師說的那樣,通過binlog非同步獲取資料最終狀態。
但是之後資料量繼續增加實時查詢QPS達到很高狀態,比如15k的話,那麼原來16核的配置就需要繼續升級配置或者不再使用mysql資料庫。這樣場景應該也很少吧。
美團的搞法
我們目前的處理方式類似 因為對於一致性有一定的要求 採用單元化+分庫方式搞相當於都是主讀主寫,隨著流量越來越大,資源申請也變得越來越多。
所以在考慮有沒有可替代的方案(Mysql資源有限啊),公司在考慮自研類oceanbase的分散式一致性資料庫,但是可用時間還比較遠。
阿里的搞法
說說我的場景,也是依然是隻能讀寫主庫。例如,我們的自動化退款業務,基於強規則的,這個時候匹配可以退款出賬,但是如果出現時延,可能下一秒就不匹配了,這種情況時延可能就有資損風險。
整體的業務場景。就是上游有退款的業務平臺,是具體的資金出賬業務,然後買家發起退款的時候會先過我們服務的一層規則引擎和風控系統,這個時候所有匹配的資料都需要強時效。
應該是定時任務需要同時判斷多個庫的資料,才能判定能不能執行動作並且要及時。但是為了減輕主庫壓力,就得讀從庫。從庫又是存在延時的。所以強迫讀主庫了。
壓力大時,其實應該用實時流,更為合適。
大概想到具體的業務場景了。 就是比如退款這種業務 發貨的商品是不能直接退款的,假如使用者發起退款申請的時候去查訂單是否發貨。此時剛好發貨寫入了主庫,還沒有同步到從庫的時候如果查從庫就會有問題。 應該是類似這種業務場景吧 。
總結
雖然面對三高系統的設計我們可以找到很多文章和思路進行佐證,但是在真正的業務實踐過程中還是需要做好取捨和依據業務場景個性化設計。
面對高併發場景下,同時對於強一致性有要求的業務場景,目前業界主流網際網路阿里,美團,京東公司的搞法都差不多,還是主寫主讀來面對因為地域,多機房,主從等同步帶來的延遲,除非具有螞蟻金服一樣的研發能力自研分散式強一致的OceanBase,否則一般還是在mysql分庫角度做文章。
更多細節歡迎關注【春哥叨叨】,更多真實架構案例分享:
相關推薦
Sql Server中的資料型別和Mysql中的資料型別的對應關係
一、SQL SERVER與MySQL資料儲存的差異 1、SQL SERVER中的datetime,保留到微秒(秒後小數點3位),而mysql僅保留到秒,轉換後是否會影響業務,如果影響,需要新增一個欄位專門來儲存微秒或者毫秒,雖然mysql中沒有時間資料型別的精度到達微秒或者
支付類系統資料處理和資料中臺的資料處理方式有什麼不同?
資料備份之後實時性如何保證 在建立資料中臺的時候,資料還是來源於各個異構的業務應用系統,實現了資料的統一,但是資料實際上是多存了一
objective-c 類和物件中靜態資料成員和靜態成員函式(類方法)詳解
作為初學者,相信大家都對objective-c的靜態資料成員和靜態成員函式都挺糾結的,我現在和大家分享下我對這個知識點的理解,請大家多多指點.... 如果大家學過C++,那麼都應該知道和了解靜態資料成
TensorFlow走過的坑之---資料讀取和tf中batch的使用方法
首先介紹資料讀取問題,現在TensorFlow官方推薦的資料讀取方法是使用tf.data.Dataset,具體的細節不在這裡贅述,看官方文件更清楚,這裡主要記錄一下官方文件沒有提到的坑,以示"後人"。因為是記錄踩過的坑,所以行文混亂,見諒。 I 問題背景 不感興趣的可跳過此節。 最近在研究ENAS的程式
Java 多執行緒均勻處理同一個List中的資料
需求:使用多執行緒來處理同一個List中的資料,希望每個執行緒處理的數量是均勻的 事例程式碼如下: public class Test { static class HandleThread extends Thread { private Str
資料結構和記憶體中堆和棧的區別
特別宣告:本文參考了部落格:http://blog.csdn.net/wolenski/article/details/7951961#comments 堆和棧在 我的眼裡一直是很模糊的概念,只是簡單的理解為:堆疊是一種資料結構,是用來儲存資料的。由於最近
資料庫讀取原始資料插入新表中,對處理原始資料的原則總結
在讀取原始資料的時候會有可能屬性名的名字與要建立的表的名字不符,這個時候就要為讀取到的資料重新命名屬性名。 如果資料中存在中文,還要宣告資料庫的編碼。 在原始表中可能會有重複資料,需要事先將重複資料進行刪除,然後再做其他處理。 在設定主鍵的時候會發現有些資料的主鍵相同,但是其他屬性值不同,需要對已經插入
在資料(MS-SQL)表中插入資料和更新資料
insert into dbo.time -- insert data (id,name) values(3, 'herry'); update dbo.time1 set id=4 where name='coly' -- update data
C# 中Bitmap和Halcon中HObject資料型別的相互轉換
C# 中Bitmap和Halcon中HObject資料型別的相互轉換 public void Bitmap2HObjectBpp24(Bitm
Java讀取、寫入、處理Excel檔案中的資料
在日常工作中,我們常常會進行檔案讀寫操作,除去我們最常用的純文字檔案讀寫,更多時候我們需要對Excel中的資料進行讀取操作,本文將介紹Excel讀寫的常用方法,希望對大家學習Java讀寫Excel會有幫助。 在開始進行Java讀寫Excel前,我
儲存與獲取cookie和session中的資料
一、cookie與session的區別 1.Cookie 通俗講,是訪問某些網站後在本地儲存的一些網站相關資訊,下次訪問時減少一些步驟。更準確的說法是:Cookies是伺服器在本地機器上儲存的小段文字並隨每一個請求傳送至同一伺服器,是在客戶端保持狀態的方案。
小結:區間處理和統計與高階資料結構
區間處理和統計是OI中一類重要的題型,而這類題目通常需要用高階資料結構維護,這裡就先總結一下本人學習過的可以用於區間處理和統計的高階資料結構。 注意,本人此處不提供各個資料結構的詳細介紹或教學,詳細教
MSSQL和MySQL中,資料表兩列欄位值互換的問題
MSSQL的處理方法 update table1 set field_1 = field_2, field_2 = field_1 可是MySQL就不能這樣寫,不然一列會覆蓋另一列記錄 MySQL語句如下 update table1 a, table1
IOS菜鳥的所感所思(十二)——專輯介面和專輯中歌曲資料的獲得(下)
//在輸入框中輸入資訊點選查詢按鈕後呼叫方法 @interface SearchAlbumVC ()<UITableViewDelegate> @property (weak, nonatomic) IBOutletUITextField *searchContent; @prop
servlet處理資料庫表中所有資料,在jsp頁面表格中用jst forEach輸出解決辦法
我用servlet處理資料庫表中所有資料,在jsp頁面表格中用jstl forEach輸出 在jsp頁面中我用了 <% List anlist=(List)request.getAttribute("admin"); %> 接收ser
cpu字長、作業系統字長和jvm中各資料型別佔用的位元組數關係
cpu字長是指cpu同時參與運算的二進位制位數,現在主流的pc的機器字長都是64位的。機器字長直接決定著機器可定址的虛擬空間地址大小。 Java程式碼 The word size of a computer generally indicates the largest int
值類型和引用類型在棧和堆中的分配
空間 實例對象 ref else 編程 出棧 http 兩個 關聯 類型基礎及背後的工作原理 數據在內存中的分配與傳遞 值類型和引用類型它們在內存分配與傳遞上的區別 內存分配 首先要了解一下內存中棧和堆的概念。 棧(Stack)
Django和Python中的Timezone處理
總的原理 進入到django資料庫中的時間一定是timezone aware的時間,如果要生成時間,要通過replace timezone設定為本地時區。 資料庫中的時間都是utc時間 Django中的timezone from django.utils import timezone t=tim
如何才能增強資料結構和演算法的能力-資料結構視覺化網站
所以,兩個建議: 1. 視覺化資料結構,把它畫出來,在你的腦海中視覺化,可以更好地幫助你直觀地理解它。(推薦兩個資料結構視覺化網站: Data Structure Visualization和 VisuAlgo - visualising data structures a
大資料平臺和MySQL之間的資料匯出和匯入
資料的匯出和匯入都是針對大資料平臺(HDFS,Hive,HBase)來定義的 資料從MySQL到大資料平臺----------資料匯入 資料從大資料平臺到MySQL-----------資料匯出 一、資料匯出(大資料平臺---->Mysql) 1.匯出 HDFS資料到MySQL