后端產(chǎn)品經(jīng)理筆記:數(shù)據(jù)傳輸和寫(xiě)入

4 評(píng)論 15917 瀏覽 134 收藏 9 分鐘

在后端數(shù)據(jù)量大起來(lái)之后,大部分的工作都是在“玩數(shù)據(jù)”。就像一捧沙子,左手換到右手,右手指縫間分流而出,再由另一雙手接住。所以作為產(chǎn)品經(jīng)理,不僅要知道數(shù)據(jù)從哪來(lái),還要理清楚獲取數(shù)據(jù)之后的運(yùn)算邏輯、異常規(guī)則,以及異常情況、數(shù)據(jù)日志等等。

本文繼數(shù)據(jù)庫(kù)之后,梳理了數(shù)據(jù)交互筆記,有興趣的朋友可以一起交流。

一、跨服務(wù)器數(shù)據(jù)傳輸

(1)公司的后端數(shù)據(jù)之所以存在不同的數(shù)據(jù)庫(kù)上,本質(zhì)是為了解耦數(shù)據(jù),提高單個(gè)數(shù)據(jù)庫(kù)的運(yùn)算速度。多個(gè)子系統(tǒng)之間的交互,其本質(zhì)就是數(shù)據(jù)傳輸。

數(shù)據(jù)傳輸方式:MQ(隊(duì)列)、http接口、otter、爬取、導(dǎo)入。

(2)MQ適用于公司內(nèi)部,數(shù)據(jù)量大,規(guī)律性強(qiáng),批量往來(lái)的數(shù)據(jù)。一般的配置是一方推出增量數(shù)據(jù),另一方被動(dòng)消費(fèi),像排隊(duì)進(jìn)廁所一樣,不用設(shè)定頻率。

(3)http接口是最常用的。叫 interface,也有的叫 protocol。

如果數(shù)據(jù)源是一缸水,那么接口就像是鑿了一個(gè)口。所以接口必須是在數(shù)據(jù)源這邊,由數(shù)據(jù)方定義接口。

接口規(guī)則就像過(guò)濾器一樣,設(shè)定推送前的篩選、轉(zhuǎn)化等運(yùn)算規(guī)則,這就是接口的核心內(nèi)容。

接口交互數(shù)據(jù)可以是主動(dòng)推送,也可以是請(qǐng)求獲取。

  • 主動(dòng)推送一般是數(shù)據(jù)生產(chǎn)方一旦更新,則觸發(fā)推送,將所需字段對(duì)應(yīng)值傳遞過(guò)去。
  • 請(qǐng)求獲取就是數(shù)據(jù)需求方傳遞請(qǐng)求參數(shù)(請(qǐng)求參數(shù)一般是一個(gè)條件,比如:時(shí)間)。數(shù)據(jù)生產(chǎn)方則按照協(xié)議響應(yīng),給出滿(mǎn)足條件的數(shù)據(jù)到請(qǐng)求方(也就是返回參數(shù))。

(4)接口定義是開(kāi)發(fā)的事情,但產(chǎn)品需要確定出范圍:

接口定義的規(guī)則是什么?傳參和返回參數(shù)是什么?重復(fù)傳參時(shí)是跳過(guò)還是再次獲取(一般都再獲取)?必傳參數(shù)是什么?是否回傳接收結(jié)果給數(shù)據(jù)生產(chǎn)方?

比如下圖:每小時(shí)/次取對(duì)方表中第一頁(yè)最新的50條數(shù)據(jù)。超過(guò)的數(shù)據(jù)下個(gè)小時(shí)繼續(xù)取。

(5)確保接口獲取的數(shù)據(jù)及時(shí)。

除了生產(chǎn)數(shù)據(jù)需要及時(shí)向下游推送之外,還有基礎(chǔ)數(shù)據(jù)的更新也需要及時(shí)給下游同步,有時(shí)要做到同時(shí)。

方法是兩種:觸發(fā)式和定時(shí)腳本。

  1. 觸發(fā)式就是一旦一個(gè)參數(shù)值滿(mǎn)足條件則觸發(fā)。
  2. 腳本式一般用在請(qǐng)求獲取數(shù)據(jù)的時(shí)候。因?yàn)椴恢罃?shù)據(jù)源什么時(shí)候更新,所以一般用定時(shí)腳本執(zhí)行請(qǐng)求任務(wù)。

請(qǐng)求的頻率需要與更新的頻率相協(xié)調(diào),比如:每次取6小時(shí)內(nèi)更新的數(shù)據(jù)。每2小時(shí)取一次,則不會(huì)有問(wèn)題。但是若每天取一次 ?就會(huì)有漏掉,也就是取數(shù)據(jù)的頻率要高于更新頻率。

(6)數(shù)據(jù)量大的時(shí)候,可以用otter:

  • 方案1:直接請(qǐng)求對(duì)方的接口:數(shù)據(jù)多的時(shí)候 請(qǐng)求就多,會(huì)占資源
  • 方案2:為保證數(shù)據(jù)本身及時(shí),OTTER是最好的,也就是庫(kù)對(duì)庫(kù)的傳輸(一般一個(gè)公司的才這樣)。

otter 方法:

  1. 數(shù)據(jù)全在一個(gè)表中;
  2. 本地庫(kù)建一個(gè)相同的表。

(7)爬取數(shù)據(jù)

一些第三方公司為了保密,會(huì)把文件存在網(wǎng)盤(pán)或網(wǎng)頁(yè)上,比如:第三方支付公司與協(xié)議公司約定好賬號(hào)密碼,登錄到SFTP篩選出需要的數(shù)據(jù)然后解析后保持到本地,這也實(shí)現(xiàn)了一個(gè)服務(wù)器之間的轉(zhuǎn)移。

(8)導(dǎo)入:數(shù)據(jù)量大的,且有規(guī)則數(shù)據(jù)也可以通過(guò)導(dǎo)入的方式。

文檔一般用csv格式,文件較小,兼容性好,然后需要定義好excel表格對(duì)應(yīng)字段的關(guān)系即可。上傳時(shí)需要對(duì)文件檢驗(yàn),建議方案是一旦一處錯(cuò)誤,就全部不予導(dǎo)入。

(9)爬取第三方數(shù)據(jù)的防止丟包機(jī)制

案例:到SFTP服務(wù)器抓取并解析字段,寫(xiě)入數(shù)據(jù)表。

方案:

  1. 斷抓補(bǔ)抓:比如: 4號(hào)抓修改時(shí)間為3號(hào)的數(shù)據(jù)。5號(hào)斷抓,則6號(hào)抓取4、5號(hào)的數(shù)據(jù)。7號(hào)抓取6號(hào)的數(shù)據(jù)。
  2. 抓空補(bǔ)抓:網(wǎng)關(guān)的 每次抓取若抓空(獲取的數(shù)據(jù)是0個(gè))則下次繼續(xù)抓。直到三次都未取到。則不再補(bǔ)救。

二、數(shù)據(jù)寫(xiě)入

(1)先落地到中間表

如果獲取后還要再本地進(jìn)行規(guī)則運(yùn)算,則最好先落地到中間表,再由中間表寫(xiě)入最終表。比如:從A系統(tǒng)獲取的數(shù)據(jù)取到B系統(tǒng),要進(jìn)行分?jǐn)偤笤賹?xiě)入表。那么最好先落地到B系統(tǒng)的中間表,然后再由中間表寫(xiě)入目標(biāo)表。

好處是,正向數(shù)據(jù):可以異步處理,A——>中間表——>最終表,互相不影響。逆向數(shù)據(jù):一旦數(shù)據(jù)異常,則方便追溯原因。

(2)去重規(guī)則:設(shè)置去重規(guī)則,以便再重復(fù)獲取數(shù)據(jù)時(shí)更新、插入或者跳過(guò)

注意去重規(guī)則一旦改變,則需要考慮到歷史數(shù)據(jù)對(duì)新數(shù)據(jù)的影響,因?yàn)槎叩呐兄鼐S度不一樣,可能會(huì)有交叉。

(3)數(shù)據(jù)日志:目的是記錄數(shù)據(jù)的來(lái)龍去脈,追溯以分析bug

產(chǎn)品經(jīng)理告訴開(kāi)發(fā)加日志,開(kāi)發(fā)就會(huì)再后臺(tái)加,因?yàn)閘og4j開(kāi)源代碼定義了5個(gè)主要級(jí)別的log:FATAL、ERROR、WARN、INFO、DEBUG,一般可以配置INFO或DEBUG級(jí)別的日志。如果需要保留的時(shí)間長(zhǎng),則可以將其保存到本地。

本地的需求可以展示給用戶(hù)看,比如可以從以下維度展示:

(4)單進(jìn)程鎖

腳本執(zhí)行的頻率的時(shí)候,為保證數(shù)據(jù)是按單進(jìn)程執(zhí)行,不交疊,就要設(shè)置單進(jìn)程鎖。比如:一小時(shí)一次,8點(diǎn)沒(méi)執(zhí)行完 9點(diǎn)就不要執(zhí)行。

另外在跑數(shù)據(jù)的規(guī)則上面,不要設(shè)置8點(diǎn)跑更新時(shí)間7點(diǎn)的,一旦小故障,就容易漏取。正確的要么是更新時(shí)間為當(dāng)前之前更久的,要么就以狀態(tài)來(lái)限定,?比如:取is_use為否的。

(5)同步基礎(chǔ)數(shù)據(jù)的時(shí)候 是否提前過(guò)濾

比如:A系統(tǒng)維護(hù)了用戶(hù)基礎(chǔ)信息(其中有個(gè)狀態(tài)為是否啟用),B系統(tǒng)取用,但不做數(shù)據(jù)維護(hù),只有啟用狀態(tài)的能用,那么是否只取啟用狀態(tài)的到B,還是兩種狀態(tài)都取。

答案是:在數(shù)據(jù)量差異不大的情況下,取全量。

原因之一:若啟用狀態(tài)的用戶(hù)忽然被A系統(tǒng)禁用,那么可能該用戶(hù)在B系統(tǒng)的生產(chǎn)數(shù)據(jù)報(bào)錯(cuò),這時(shí)候到中間表看狀態(tài)就可以看出來(lái)問(wèn)題,而不需跨系統(tǒng)或跨部門(mén)溝通查證。

 

本文由 @ 環(huán)滁皆山也 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載

題圖來(lái)自 Pexels,基于 CC0 協(xié)議

更多精彩內(nèi)容,請(qǐng)關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號(hào)或下載App
評(píng)論
評(píng)論請(qǐng)登錄
  1. 看了你的幾篇文章,這一篇對(duì)于我來(lái)說(shuō),是相對(duì)于其他較難理解的了,準(zhǔn)備通過(guò)各種方式吃透這篇文章

    來(lái)自廣東 回復(fù)
  2. 老哥滁州的嘛?

    來(lái)自江蘇 回復(fù)
    1. 深圳,臨時(shí)想到一句就拿來(lái)做名字

      回復(fù)
  3. 明白人

    來(lái)自北京 回復(fù)