成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

圖解支付系統訂單號設計與最佳實踐

數據庫 其他數據庫
假如你也好奇為什么有了數據庫自增ID外還需要業務ID,或者想了解如何在業務ID中編織進業務信息比如業務系統,數據版本,分庫分表位等,值得花幾分鐘了解一下。同時我也不建議在支付系統中使用雪花算法來生成業務ID。

本文主要講清楚支付系統訂單號(或業務ID)各種設計方案對比,各子域的訂單號(或業務ID)為什么要統一規范,以及最佳實踐。最后還會簡單分析微信支付和支付寶的對客訂單號的組成差異。

假如你也好奇為什么有了數據庫自增ID外還需要業務ID,或者想了解如何在業務ID中編織進業務信息比如業務系統,數據版本,分庫分表位等,值得花幾分鐘了解一下。

同時我也不建議在支付系統中使用雪花算法來生成業務ID。

訂單號和業務ID本質都是標識一筆交易,以下統稱為:業務ID。

1. 什么是業務ID

數據庫一般都會設計一個自增ID做為主鍵,同時還會設計一個能唯一標識一筆業務的ID,這就是所謂的業務ID(也稱業務鍵)。比如收單域有收單單號,支付域有支付號,渠道網關域有渠道支付號等,這些都屬于業務ID。

為什么有了自增ID后,還需要有業務ID呢?一般來說有以下幾個核心原因:

  • 分庫分表的強訴求。一旦分庫分表,各表之間的自增ID就一定會重復。
  • 全球化部署的強訴求。在跨境支付系統建設時,部分國家地區要求本地化部署,需要通過業務ID知道業務運行在哪個機房。
  • 標識業務語義,在處理故障時能快速定位是哪個域哪個業務。
  • 方便系統升級。通過業務ID的版本所在位判斷業務應該走新系統,還是走老系統。

2. 為什么業務ID要統一規范

互聯網支付系統基本都是微服務化部署,每個子域都是相對獨立的一些同學在研發,架構實現差異非常大,但是業務ID是必須要統一的。主要有以下幾個原因:

  • 減少維護成本。避免在不同服務中重復發明相似機制,也減少了溝通成本。方便做成統一的組件。
  • 加速異常處理和診斷。在分布式環境下發現和解決問題一般都比較復雜,統一的業務ID規范可以快速判斷問題所在的域,以及對應的業務。
  • 避免新同學因經驗不足導致設計缺陷,在后期無法滿足業務訴求。

3. 常見業務ID生成規范及應用場景

業務ID生成規則有很多種,比如知名的Snowflake算法,UUID算法,時間戳+隨機數/序列號等。以下是部分規范的簡要介紹。

  • Snowflake算法

組成:時間戳 + 數據中心標識 + 機器節點 + 序列號。

適用場景:無中心化的環境中生成大量的唯一ID,無具體業務語義,且性能要求極高。比如社交媒體的聊天消息記錄。

  • UUID算法

高度唯一且隨機。

適用場景:不想讓外界感知內部系統的交易量級。比如調用外部渠道的請求號,如果使用序列號,有可能會讓外部猜測出交易的規模。

  • 編碼系統

特定組織中心化生成。

適用場景:藥品或供應鏈管理,全球范圍內標識或追蹤商品。

  • 業務規則編碼

把一些業務語義編碼到ID中。

適用場景:金融支付、電商訂單等。

4. 支付系統業務ID生成最佳實踐

4.1. 業務ID生成規范

下面以32位的支付系統業務ID生成為例說明。實際應用時可靈活調整。

圖片圖片

第1-8位:日期。通過單號一眼能看出是哪天的交易。

第9位:數據版本。用于單據號的升級。

第10位:系統版本。用于內部系統版本升級,尤其是不兼容升級的時候,老業務使用老的系統處理,新業務使用新系統處理。

第11-13位:系統標識碼。支付系統內部每個域分配一段,由各域自行再分配給內部系統。比如010是收單核心,012是結算核心。

第14-15位:業務標識位。由各域內部定,比如00-15代表支付類業務,01支付,02預授權,03請款等。

第16-17位:機房位。用于全球化部署。

第18-19位:用戶分庫位。支持百庫。

第20-21位:用戶分表位。支持百表。

第22位:預發生產標識位。比如0代表預發環境,1代表生產環境。

第23-24位:預留。各域根據實際情況擴展使用。

第24-32位:序列號空間。一億規模,循環使用。一個機房一天一億筆是很大的規模了。如果不夠用,可以擴展到第24位,到十億規模。

4.2. 業務ID生成技術實現

序列號通常采用數據庫生成,保證機房內唯一性。

圖片圖片

簡要流程如下:

  1. DB初始化序列號數據。KEY為業務類型,VALUE初始為0;
  2. 調用業務ID生成組件。核心傳參:數據版本號,系統版本號,系統名,業務類型等。
  3. 業務ID生成組件查看對應業務類型是否有緩存數據。如果沒有,就以指定步長(比如100)去更新數據庫,然后緩存起來。
  4. 在內存中加一,然后根據規則生成業務ID,返回給調用方。

這里使用指定步長去更新數據庫,主要是考慮提高性能。但是存在一定的損失,比如發布重啟,緩存中的序列號就會被浪費掉。但因為是循環使用,所以基本上對業務沒有影響。

5. 內外區分

    建議把內部訂單號和外部訂單號做個區分。所謂外部訂單號主要指對客(包括個人用戶和商戶)的訂單號,這種場景下,可以考慮把業務類型做為重點編織進到訂單號里面。

    具體可以參考下面聊到的微信支付和支付寶對客訂單號。

6. 微信支付和支付寶對客訂單號的異同

    微信支付:

圖片圖片

    有興趣的可以翻翻自己微信支付的訂單記錄,42000開頭的是支付類的訂單,1000050001開頭是轉賬類訂單,也就是微信支付把交易類型放在訂單的開頭。

    日期則放在交易類型的后面。

支付寶:

圖片圖片

    也可以翻翻自己支付寶的訂單記錄,日期放在開頭,緊接著日期的就是交易類型,2000代表轉賬,比如202501012000xxxx。而2300或2200就是買東西的支付訂單。

7. 結束語

本文主要講了業務ID是什么,業界常見生成規則及適用場景,以及支付系統業務ID生成的最佳實踐。

責任編輯:武曉燕 來源: 隱墨星辰
相關推薦

2019-08-23 08:09:18

訂單號生成數據庫ID

2024-10-14 12:05:56

2019-08-15 11:11:38

Java數據庫設計

2021-07-01 06:58:12

高并發訂單號SCM

2024-09-04 08:55:56

2025-01-09 11:58:19

2020-10-21 12:10:30

訂單號Java代碼

2024-09-13 08:18:10

2017-10-20 08:25:10

數據收集工具數據源

2009-08-20 09:41:36

2021-12-28 06:55:09

事故訂單號績效

2013-06-13 09:21:31

RESTful APIRESTfulAPI

2016-12-27 08:49:55

API設計策略

2010-12-28 10:12:39

PHP

2024-10-14 08:09:08

2024-09-29 09:42:56

2023-02-03 18:31:35

訂單流量錄制

2024-06-18 08:07:50

存儲架構設計

2024-02-19 08:12:15

DIKW 模型指標系統數據倉庫

2009-06-22 14:48:21

DRY架構設計
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲第一成年免费网站 | 91精品久久久久久综合五月天 | 中文字幕在线视频免费视频 | 亚洲精品日韩一区二区电影 | 人人干97 | 国产精品成人一区二区三区夜夜夜 | 国产一区在线看 | 亚洲深夜福利 | 天堂av免费观看 | 亚洲国产精品一区二区久久 | 精品国产欧美一区二区三区成人 | 午夜网站视频 | 精品伦精品一区二区三区视频 | 在线播放中文字幕 | 亚洲444eee在线观看 | 久久久精品久 | 成人免费区一区二区三区 | 色爱综合网 | 欧美中文 | 丁香婷婷在线视频 | 九九视频在线观看视频6 | 欧美性成人 | 国产一区二区精品在线 | 国产欧美一区二区三区日本久久久 | 91爱爱·com | 日日夜夜视频 | 国产xxxx搡xxxxx搡麻豆 | 国产精品久久久久久久久久妇女 | 视频在线观看一区二区 | 一区二区三区四区在线视频 | 在线不卡视频 | 天天干com| 日韩精品人成在线播放 | 中文字幕视频一区二区 | 在线看中文字幕 | 国产精品免费一区二区三区四区 | 91黄色片免费看 | 国产一区二区三区色淫影院 | 成人av片在线观看 | 黄色精品 | 亚洲精品大全 |