前言
在后端數(shù)據(jù)量大起來之后拖叙,大部分的工作都是在‘玩數(shù)據(jù)’氓润。就像一捧沙子,左手換到右手薯鳍,右手指縫間分流而出咖气,再由另一雙手接住。
所以作為產(chǎn)品經(jīng)理挖滤,不僅要知道數(shù)據(jù)從哪來崩溪,還要理清楚獲取數(shù)據(jù)之后的運(yùn)算邏輯、異常規(guī)則斩松,以及異常情況伶唯、數(shù)據(jù)日志等等。
本文繼數(shù)據(jù)庫之后惧盹,梳理了數(shù)據(jù)交互筆記乳幸。有興趣的朋友可以一起交流瞪讼。
一、跨服務(wù)器數(shù)據(jù)傳輸
1粹断、公司的后端數(shù)據(jù)之所以存在不同的數(shù)據(jù)庫上符欠,本質(zhì)是為了解耦數(shù)據(jù),提高單個數(shù)據(jù)庫的運(yùn)算速度姿染。多個子系統(tǒng)之間的交互背亥,其本質(zhì)就是數(shù)據(jù)傳輸。
數(shù)據(jù)傳輸方式:MQ(隊列)悬赏、http接口狡汉、otter、爬取闽颇、導(dǎo)入盾戴。
2、MQ適用于公司內(nèi)部兵多,數(shù)據(jù)量大尖啡,規(guī)律性強(qiáng),批量往來的數(shù)據(jù)剩膘。一般的配置是一方推出增量數(shù)據(jù)衅斩,另一方被動消費(fèi),像排隊進(jìn)廁所一樣怠褐,不用設(shè)定頻率畏梆。
3、http接口是最常用的奈懒。叫 interface奠涌,也有的叫 protocol
如果數(shù)據(jù)源是一缸水,那么接口就像是鑿了一個口磷杏。所以接口必須是在數(shù)據(jù)源這邊溜畅,由數(shù)據(jù)方定義接口。
接口規(guī)則就像過濾器一樣极祸,設(shè)定推送前的篩選慈格、轉(zhuǎn)化等運(yùn)算規(guī)則。這就是接口的核心內(nèi)容遥金。
接口交互數(shù)據(jù)可以是主動推送峦椰,也可以是請求獲取。
主動推送一般是數(shù)據(jù)生產(chǎn)方一旦更新汰规,則觸發(fā)推送,將所需字段對應(yīng)值傳遞過去物邑。
請求獲取就是數(shù)據(jù)需求方傳遞請求參數(shù)(請求參數(shù)一般是一個條件溜哮,比如時間)滔金。數(shù)據(jù)生產(chǎn)方則按照協(xié)議響應(yīng),給出滿足條件的數(shù)據(jù)到請求方(也就是返回參數(shù))茂嗓。
4餐茵、接口定義是開發(fā)的事情,但產(chǎn)品需要確定出范圍:
接口定義的規(guī)則是什么述吸、傳參和返回參數(shù)是什么忿族、重復(fù)傳參時是跳過還是再次獲取(一般都再獲闰蛎)道批,必傳參數(shù)是什么,是否回傳接收結(jié)果給數(shù)據(jù)生產(chǎn)方入撒。
比如下圖:每小時/次取對方表中第一頁最新的50條數(shù)據(jù)隆豹。超過的數(shù)據(jù)下個小時繼續(xù)取。
5茅逮、確保接口獲取的數(shù)據(jù)及時璃赡。
除了生產(chǎn)數(shù)據(jù)需要及時向下游推送之外,還有基礎(chǔ)數(shù)據(jù)的更新也需要及時給下游同步献雅,有時要做到同時碉考。
方法是兩種:觸發(fā)式和定時腳本。
觸發(fā)式就是一旦一個參數(shù)值滿足條件則觸發(fā)挺身。
腳本式一般用在請求獲取數(shù)據(jù)的時候侯谁。因為不知道數(shù)據(jù)源什么時候更新,所以一般用定時腳本執(zhí)行請求任務(wù)瞒渠。
請求的頻率需要與更新的頻率相協(xié)調(diào)良蒸。比如:每次取6小時內(nèi)更新的數(shù)據(jù)。每2小時取一次伍玖,則不會有問題嫩痰。但是若每天取一次 ?就會有漏掉。也就是取數(shù)據(jù)的頻率要高于更新頻率窍箍。
6串纺、數(shù)據(jù)量大的時候,可以用otter:
方案1:直接請求對方的接口:數(shù)據(jù)多的時候 請求就多椰棘,會占資源
方案2:為保證數(shù)據(jù)本身及時纺棺,OTTER是最好的,也就是庫對庫的傳輸(一般一個公司的才這樣)邪狞。
otter 方法:①祷蝌、數(shù)據(jù)全在一個表中。②本地庫建一個相同的表帆卓。
7巨朦、爬取數(shù)據(jù)
一些第三方公司為了保密米丘,會把文件存在網(wǎng)盤或網(wǎng)頁上,比如第三方支付公司與協(xié)議公司約定好賬號密碼糊啡,登錄到SFTP篩選出需要的數(shù)據(jù)然后解析后保持到本地拄查。這也實現(xiàn)了一個服務(wù)器之間的轉(zhuǎn)移。
8棚蓄、導(dǎo)入:數(shù)據(jù)量大的堕扶,且有規(guī)則數(shù)據(jù)也可以通過導(dǎo)入的方式。
文檔一般用csv格式梭依,文件較小稍算,兼容性好。然后需要定義好excel表格對應(yīng)字段的關(guān)系即可睛挚。
上傳時需要對文件檢驗邪蛔,建議方案是一旦一處錯誤,就全部不予導(dǎo)入扎狱。
9侧到、爬取第三方數(shù)據(jù)的防止丟包機(jī)制
案例:到SFTP服務(wù)器抓取并解析字段,寫入數(shù)據(jù)表淤击。
方案:
①斷抓補(bǔ)抓:比如: 4號抓修改時間為3號的數(shù)據(jù)匠抗。5號斷抓,則6號抓取4污抬、5號的數(shù)據(jù)汞贸。7號抓取6號的數(shù)據(jù)。
②抓空補(bǔ)抓:網(wǎng)關(guān)的 每次抓取若抓空(獲取的數(shù)據(jù)是0個)則下次繼續(xù)抓印机。直到三次都未取到矢腻。則不再補(bǔ)救。
二射赛、數(shù)據(jù)寫入
1多柑、先落地到中間表
如果獲取后還要再本地進(jìn)行規(guī)則運(yùn)算,則最好先落地到中間表楣责,再由中間表寫入最終表竣灌。
比如從A系統(tǒng)獲取的數(shù)據(jù)取到B系統(tǒng),要進(jìn)行分?jǐn)偤笤賹懭氡砀阳铩D敲醋詈孟嚷涞氐紹系統(tǒng)的中間表初嘹,然后再由中間表寫入目標(biāo)表。
好處是沮趣,正向數(shù)據(jù):可以異步處理屯烦,A——>中間表——>最終表,互相不影響。逆向數(shù)據(jù):一旦數(shù)據(jù)異常漫贞,則方便追溯原因甸箱。
2、去重規(guī)則:設(shè)置去重規(guī)則迅脐,以便再重復(fù)獲取數(shù)據(jù)時更新、插入或者跳過豪嗽。
注意去重規(guī)則一旦改變谴蔑,則需要考慮到歷史數(shù)據(jù)對新數(shù)據(jù)的影響,因為二者的判重維度不一樣龟梦,可能會有交叉隐锭。
3、數(shù)據(jù)日志:目的是記錄數(shù)據(jù)的來龍去脈计贰,追溯以分析bug
產(chǎn)品經(jīng)理告訴開發(fā)加日志钦睡,開發(fā)就會再后臺加,因為log4j開源代碼定義了5個主要級別的log:FATAL躁倒、ERROR荞怒、WARN、INFO秧秉、DEBUG褐桌,一般可以配置INFO或DEBUG級別的日志。
如果需要保留的時間長象迎,則可以將其保存到本地荧嵌。
本地的需求可以展示給用戶看。比如可以從以下維度展示:
4砾淌、單進(jìn)程鎖
腳本執(zhí)行的頻率的時候啦撮,為保證數(shù)據(jù)是按單進(jìn)程執(zhí)行,不交疊汪厨,就要設(shè)置單進(jìn)程鎖赃春。比如一小時一次,8點沒執(zhí)行完 9點就不要執(zhí)行骄崩。
另外在跑數(shù)據(jù)的規(guī)則上面聘鳞,不要設(shè)置8點跑更新時間7點的,一旦小故障要拂,就容易漏取抠璃。正確的要么是更新時間為當(dāng)前之前更久的,要么就以狀態(tài)來限定脱惰,?比如取is_use為否的搏嗡。
5、同步基礎(chǔ)數(shù)據(jù)的時候 是否提前過濾
比如A系統(tǒng)維護(hù)了用戶基礎(chǔ)信息(其中有個狀態(tài)為是否啟用),B系統(tǒng)取用采盒,但不做數(shù)據(jù)維護(hù)旧乞,只有啟用狀態(tài)的能用,那么是否只取啟用狀態(tài)的到B磅氨,還是兩種狀態(tài)都取尺栖。
答案是:在數(shù)據(jù)量差異不大的情況下,取全量烦租。
原因之一:若啟用狀態(tài)的用戶忽然被A系統(tǒng)禁用延赌,那么可能該用戶在B系統(tǒng)的生產(chǎn)數(shù)據(jù)報錯,這時候到中間表看狀態(tài)就可以看出來問題叉橱,而不需跨系統(tǒng)或跨部門溝通查證挫以。
(待續(xù))