数据交换平台的需求总结与初步设计
一、?????需求總結
功能性需求:
1、 從某時刻開始,轉儲某些特定的表。開始時間、時間頻率、表字段、源表和目的表執行前后sql語句等數據可配置。
2、 轉儲頻率可以自由設定,時間精確到秒級,任務精確到表。
3、 滿足多個表捆綁在一起,按既定的先后順序執行。避免由于數據不一致性給后續工作帶來的影響。
4、 實時控制每一個表是否轉儲,暫停或開始。并且不影響其他數據表轉儲。
5、 轉儲過程中,可以按照既定的配置,對某個或某些字段進行加密或解密。
6、 各個表的轉儲要求互相獨立,互不影響。
7、 源數據庫和目的數據庫均支持mysql和oracle,留接口擴展其他數據源。
8、 添加一個表的轉儲工作,要求只修改配置數據,不修改軟件代碼,或重啟軟件。(測試手段? 配置數據是否完整,執行測試結果)
9、 對各個數據庫的操作,只使用鏈接,保證db賬號密碼的安全不泄露。
10、???支持程序參數,只執行某個任務號下的某個或某些表的轉儲工作。
11、???轉儲表結束后,記錄日志到配置數據庫proc_use_times表,方便開展后續工作。(添加為可配置)
12、???實時監控表轉儲情況,并且,需要向技術人員下發每日提醒短信。(轉儲程序生成轉儲提醒日志,監控程序解析日志,并下發短信)
13、???軟件日志記錄全面準確,方便維護人員查閱和排錯。
?
性能需求:
14、???數據實時交換平臺的定位,是業務流轉的一部分。對業務來講,是承上啟下的一部分,以數據準確為根本原則。數據定時轉儲的定位,是數據備份、數據統計分析的一部分。
15、???對實時轉儲工作的完成,要求準時、準確、高效、穩定,容錯性能高。
16、???錯誤處理機制完備,盡可能減少對業務的影響。
# 上線前,完成大數據量測試和各種功能測試,盡可能減少上線后問題的出現。
# 實時轉儲過程中,如果某任務轉儲失敗,則保留處理現場,并立刻通知相關人員處理。當前任務不再繼續執行。
?
二、數據庫設計
源表要求:
| 字段1 | 。。。 | 字段N | sync_status |
擴展一個控制字段sync_status,協助實時轉儲使用。
sync_status:默認值為0。
0表示未轉儲,1表示轉儲中,2表示轉儲成功,3表示轉儲失敗。
?
三、軟件設計
A.????各模塊功能簡單介紹:
控制進程 -- 取配置數據,初始化共享內存,管理多個任務進程。
任務進程 – 通過共享內存與控制進程通信。ssync2o、ssync2m(控制進程fork出任務進程)
寫入進程 – 由任務進程fork產生。寫入目的庫完成后退出(最多10個)。
?
共享內存 – 執行時動態數據、任務詳細參數
?
配置數據庫 – 配置數據所在數據庫
源數據庫 – 源數據表所在數據庫
目的數據庫 – 目的數據庫所在數據庫
?
進程守護腳本 – 守護控制進程。在控制進程異常時,將其啟動,并報警。1分鐘檢查一次。
日志打包腳本– 每天凌晨打包昨天日志并轉移。打包后的日志只保存最近3個月。
任務監控進程– 通過讀取共享內存,整理每天轉儲簡報,通知相關同事。
任務實時數據展示程序– 通過共享內存,實時展示任務執行情況,或查看歷史任務執行情況。
退出程序 – 控制信號燈,達到退出控制進程的目的。
數據庫連接池維護進程– 以啟動進程的方式,為本操作系統的應用進程提供連接數據庫服務。達到統一管理,最優化分配資源的目的。(先期考慮使用lib文件,后續在升級為服務)
?
lib文件 – libPassWord.a、libxxtencrypt.a(已實現)
數據庫配置過程 – 修改現有的過程,完成對實時轉儲任務的添加。后續考慮用可視化界面實現。
?
B.????主進程操作步驟:
1、 啟動控制進程,讀取以上8張配置表,將數據組織到共享內存中。此后,定時每小時讀取T_EXTRACTION_TASK表中IS_ADD_DEL=1或2的任務,添加或刪除到調度隊列,并更新IS_ADD_DEL=0。
2、 為每一個調度添加一個屬性:下次執行時間和執行狀態。初始值為當前時間加上時間頻率。
3、 遍歷調度隊列。遍歷結束后,sleep(1)。
4、 當某調度的下次執行時間大于當前時間時,fork任務進程執行任務的實時轉儲。(fork兩次,避免生成僵尸進程。任務進程執行任務結束后,通過共享內存返回執行結果。)
5、 任務進程按照配置信息,執行任務,完成之后退出。
6、 控制進程更新調度下次執行時間為+=時間頻率。
7、 執行操作3。
?
備注:
# 當前時間、下次執行時間、時間頻率:單位為秒。
# 程序初次啟動:指程序自啟動后,未讀取配置數據。
# 控制進程和任務進程,通過共享內存通信。
?
# 調度的下次執行時間嚴格按照時間頻率向后推移。
# 調度與任務是一對多的關系。一個調度下的任務,順序執行。不同調度下的任務,異步執行。
?
# 調度的關鍵屬性:下次執行時間、時間頻率
# 任務的關鍵屬性:任務狀態(0未執行,1執行中,2執行完畢),任務類型(1--ssync2o、2--ssync2m)
?
C.????子任務轉儲步驟:
1、 當任務信號燈打開,從共享內存中獲取任務數據。校驗數據是否合理有效。
2、 初始化任務執行環境,如:創建配置數據庫連接、源數據庫連接、目的數據庫連接等。
3、 更新配置數據庫task_detail表中子任務鎖。如果已鎖,則停止轉儲。
4、 執行子任務前sql,包括源數據庫和目的數據庫。(將源表sync_status=0的數據更改為1)
5、 讀取源表中sync_status=1的行數據,合理組織源表數據。
6、 根據配置要求,對源表數據分批寫入目的庫。通過Fork子進程實現。
7、 根據配置要求,子進程對數據做相應特殊加工處理,如:加解密。處理完成之后,寫入目的數據庫。
8、 父進程繼續操作6.
9、父進程通過共享內存獲得子進程轉儲執行情況,更新源表數據:sync_status=2(成功)或3(失敗)。
10、執行子任務后sql,包括源數據庫和目的數據庫。
11、更新配置數據庫子任務鎖。
12、打掃現場,釋放資源。繼續操作1。
目的表不包含這控制字段:sync_status。
D. ??共享內存
任務詳細參數的共享內存結構:
要需包含:配置表的數據,即任務的詳細信息,包含源庫id、目的庫id,源表名稱和表結構,目的表名稱和表結構,執行前后sql,等。
總結
以上是生活随笔為你收集整理的数据交换平台的需求总结与初步设计的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CENT OS 8 Stream 安装部
- 下一篇: java通过poi-tl模板引擎生成表格