概覽
總體用例圖

邊寫這篇文章,邊設計這個系統(tǒng),當前尚未實現(xiàn),完成設計后,計劃在下一個具體項目上實施。
設計思路
利用SAP的各種技術,在應用程序層面記錄變更;確定變更信息需要同步的第三方系統(tǒng);按各系統(tǒng)需求生成數(shù)據(jù)包;完成同步。
按照這個思路,設計了三大模塊:
1.變更日志模塊
著眼點是數(shù)據(jù)表,對SAP的表進行簡單分類:
- 標準表
- 配置表
一般伴隨TR,比如公司,工廠,庫位等 - 主數(shù)據(jù)表
物料,供應商,客戶,成本中心等 - 業(yè)務數(shù)據(jù)表
采購訂單,生產(chǎn)訂單,銷售訂單等
- 配置表
- 自定義表
不同的表,維護方式差異比較大,對應的記錄變更的方式也會有差異,定義了三種變更日志格式:
-
Change Document
標準的技術,廣泛存在于標準數(shù)據(jù)表,比如物料,采購訂單,BOM,銷售訂單。生產(chǎn)訂單由于變更頻繁,標準不提供Change Document,但是預留了出口,可以自定義Change Document,隨之而來的一個問題就是需要考慮歸檔,Change Document有標準的歸檔對象,技術上問題不大。
Transport Request
配置表通過TR傳輸,所以TR本身就是一種日志。自定義日志
按需定制,比如有些表沒有CD,沒有TR,可以在維護的時候生成CD,也可以簡單一點寫入自定義日志。
2.路由模塊
根據(jù)變更日志,判定是否需要同步到特定系統(tǒng),需要同步即確認了路由信息:SAP->第三方系統(tǒng),放入PUSH或者PULL 隊列。
隊列中主要存儲信息:
第三方系統(tǒng)標識 + 接口標識 + 變更日志編號 + 時間戳
3.分發(fā)模塊
分發(fā)主要考慮兩個問題:數(shù)據(jù)包生成和同步方式
數(shù)據(jù)包生成
生成時機,由于場景不同,同步方式不同,數(shù)據(jù)包在不同的環(huán)節(jié)生成:
- 即時
數(shù)據(jù)變更的同時生成 - 定時
可能生成數(shù)據(jù)包的代價特別大,放在后臺任務中定時生成 - 延遲
在數(shù)據(jù)同步的時候生成
數(shù)據(jù)包的格式:全量和增量,參見 上篇 01 數(shù)據(jù)同步場景分析
同步方式
Pull和Push模式的說明,也參見上篇。
對于Pull,增量發(fā)送數(shù)據(jù)包必須要有發(fā)送順序控制,實時推送,連續(xù)更改,不加控制可能因為推送執(zhí)行順序不同,導致兩邊系統(tǒng)數(shù)據(jù)不一致。
考慮犧牲一定的實時性要求(對第三方系統(tǒng)來說也無感的),推送是使用單線程的模式,只有一個消費者從Push隊列中提取同步任務。后續(xù)討論使用Event + Lock技術實現(xiàn)這個功能。