系統(tǒng)孤島時(shí)代已終結(jié),數(shù)據(jù)必須流動(dòng)才有價(jià)值;本文用一張思維導(dǎo)圖、五大傳輸方式、四類(lèi)處理機(jī)制,幫你三分鐘把接口、MQ、文件、數(shù)據(jù)庫(kù)同步全鏈路拆解到手,讓產(chǎn)品經(jīng)理也能秒懂后端對(duì)接的選型與避坑。
世界最遙遠(yuǎn)的距離,是我站在你對(duì)面,你卻在另一臺(tái)服務(wù)器里。世界最溫暖的舉例,是我在internet的另一端,而你挑著一筐剛刨出來(lái)的數(shù)據(jù)來(lái)看我。
——做產(chǎn)品的柏拉圖
一個(gè)系統(tǒng)裝再多數(shù)據(jù),不與其他系統(tǒng)交互,那也是孤島系統(tǒng),孤獨(dú)沒(méi)女朋友。
一個(gè)系統(tǒng)若很外向,不斷撩撥周?chē)南到y(tǒng),也樂(lè)意被撩撥,成為了眾系統(tǒng)中的“交際花”,那么這貨基本就是中臺(tái)的性質(zhì)。
而更多的系統(tǒng)是介于上述兩種極端之間的。像人一樣,自己搞生產(chǎn),也要參與社交——就是系統(tǒng)之間的數(shù)據(jù)對(duì)接。
對(duì)接的本質(zhì)是為了實(shí)現(xiàn)數(shù)據(jù)信息的傳輸。
在后端產(chǎn)品的世界里,各子系統(tǒng)之間,或與外部系統(tǒng)之間的對(duì)接非常常見(jiàn)。
作為產(chǎn)品經(jīng)理,不僅要知道數(shù)據(jù)從哪來(lái),還要理清楚獲取數(shù)據(jù)之后的握手方式、運(yùn)算邏輯、異常規(guī)則、容錯(cuò)機(jī)制、數(shù)據(jù)日志等等。
本文嘗試聊聊如下話題:
數(shù)據(jù)傳輸?shù)膱?chǎng)景和意義
數(shù)據(jù)傳輸?shù)姆绞?/p>
數(shù)據(jù)傳輸?shù)奶幚頇C(jī)制
數(shù)據(jù)傳輸?shù)淖⒁馐马?xiàng)
1數(shù)據(jù)傳輸?shù)膱?chǎng)景和意義
1、數(shù)據(jù)傳輸?shù)膽?yīng)用場(chǎng)景
1)前端和后端本身無(wú)時(shí)不刻的數(shù)據(jù)互動(dòng)。
2)公司的各個(gè)系統(tǒng)之間的信息共享。
比如,式系統(tǒng)部署之后,就需要各個(gè)系統(tǒng)模塊之間進(jìn)行數(shù)據(jù)的配合,比如訂單系統(tǒng)的庫(kù)存扣減數(shù)據(jù)要同步給備貨系統(tǒng)進(jìn)行采購(gòu)。
3)與第三方平臺(tái)的對(duì)接
比如入駐第三方銷(xiāo)售平臺(tái)亞馬遜之后,店家可能自己需要管理自己的訂單,這時(shí)候就要從亞馬遜平臺(tái)獲取訂單數(shù)據(jù),也就是抓取。
4)調(diào)用現(xiàn)成的公共插件
避免重復(fù)造輪子,市場(chǎng)上很多開(kāi)放性的功能插件可以調(diào)用或接入,比如接入百度地圖的API,接入微信小程序的二次開(kāi)發(fā)。
2、數(shù)據(jù)傳輸?shù)囊饬x
1)不重復(fù)生產(chǎn)數(shù)據(jù)庫(kù),避免資源和功能的浪費(fèi)。
2)統(tǒng)一數(shù)據(jù)的維護(hù)或生產(chǎn)源頭,避免數(shù)據(jù)不同步。
比如同一個(gè)公司的兩個(gè)系統(tǒng)都要用人員信息架構(gòu)數(shù)據(jù),如果各自都能維護(hù),勢(shì)必出現(xiàn)不一致,也浪費(fèi)資源。
3)別人家的數(shù)據(jù),自己沒(méi)辦法生產(chǎn)。
4)復(fù)用現(xiàn)成的輪子,API或SDK共享(可能自己也發(fā)明不出來(lái))。
2數(shù)據(jù)傳輸?shù)姆绞?/p>
數(shù)據(jù)傳輸?shù)姆绞?,作為產(chǎn)品經(jīng)理我將其分為:接口傳輸、中間件傳輸、message方式傳輸?shù)取I㈤_(kāi)了說(shuō),比如:MQ(隊(duì)列)、HTTP接口、otter、文件共享傳輸?shù)?。每一種又有細(xì)分的方式和適合的場(chǎng)景。
1、接口
這是一種傳統(tǒng)的問(wèn)答式的傳輸方式,是典型才c/s交互模式。
相當(dāng)于一臺(tái)客戶機(jī),一臺(tái)服務(wù)器(注:這里的客戶機(jī)或服務(wù)器根據(jù)數(shù)據(jù)的提供方和接收方相對(duì)而言的,并不一定是實(shí)際的)。
目前我們常用的http調(diào)用、java遠(yuǎn)程調(diào)用、webserivces都屬于這種方式,只不過(guò),不同的就是傳輸協(xié)議以及報(bào)文格式的區(qū)別。
1)接口的作用
通過(guò)接口,可以調(diào)用成熟的第三方功能插件為我所用(一般就是API接口),也可以根據(jù)實(shí)際需求由開(kāi)發(fā)寫(xiě)具體的接口代碼解決具體場(chǎng)合的信息傳輸問(wèn)題(一般所說(shuō)的http接口)。
對(duì)后端產(chǎn)品經(jīng)理來(lái)說(shuō),http接口的使用場(chǎng)景最多。比如:公司先上線了OA系統(tǒng),后上線了訂單系統(tǒng),訂單系統(tǒng)需要同步OA系統(tǒng)的人員組織結(jié)構(gòu)信息。那么一個(gè)可行做法就是OA系統(tǒng)創(chuàng)建一個(gè)接口,訂單系統(tǒng)請(qǐng)求,獲取最新的人員結(jié)構(gòu)信息。
這個(gè)籠統(tǒng)的方案描述中,包含了這么些信息:創(chuàng)建接口、請(qǐng)求接口、獲取最新信息等,那么分別是什么以及有什么原則呢?下面分別討論。
2)哪一方負(fù)責(zé)創(chuàng)建接口?
在討論需求的時(shí)候,開(kāi)發(fā)會(huì)問(wèn)哪方創(chuàng)建接口呢?有時(shí)候產(chǎn)品經(jīng)理只知道需要建接口,不知道哪個(gè)系統(tǒng)來(lái)建。
可以這樣理解,如果把數(shù)據(jù)源比成一缸水,那么接口就像是鑿的一個(gè)口,口只能是在缸上面的。
所以接口必須是在被請(qǐng)求的數(shù)據(jù)源這邊,由被請(qǐng)求的一方定義接口。
注意,這里的數(shù)據(jù)源是相對(duì)的數(shù)據(jù)源,就是被請(qǐng)求的一方就是數(shù)據(jù)源方。
實(shí)際上可能目標(biāo)數(shù)據(jù)在請(qǐng)求方。比如例子中也可以是OA系統(tǒng)請(qǐng)求訂單系統(tǒng),但是如果這樣的話,接口就是訂單系統(tǒng)創(chuàng)建了。因此確切說(shuō)是被請(qǐng)求的一方創(chuàng)建接口。
通俗的講就像是求婚:男方去求婚帶一百萬(wàn),女方接到后就把姑娘嫁過(guò)去,這是一來(lái)一回。
女方也可以去求婚,只是是直接帶著姑娘去敲開(kāi)男方的門(mén),而后男方才把一百萬(wàn)送到女方,這也是一來(lái)一回。
3)什么是定義接口
定義接口,其實(shí)就是定義缸上的出水口??诘拇笮?、濾網(wǎng)、放水的頻率等,就是個(gè)規(guī)則。
這個(gè)規(guī)則約定了哪些數(shù)據(jù)是需要流過(guò)去,以及流過(guò)去的條件(像門(mén)禁密碼一樣)。
定義接口就是設(shè)定口令、數(shù)據(jù)范圍、推送前的篩選、轉(zhuǎn)化運(yùn)算規(guī)則等,這是接口的核心內(nèi)容。
4)數(shù)據(jù)在哪一方做轉(zhuǎn)義?
某些時(shí)候,數(shù)據(jù)從源頭到應(yīng)用端不是原封不動(dòng)的,而是轉(zhuǎn)化了。比如80分、90分都是及格,可能使用者只需要兩個(gè)值:及格or不及格。
那么這就涉及到是在接收之前就轉(zhuǎn)化為是否及格,還是接收之后自己轉(zhuǎn)化的問(wèn)題。
考慮的依據(jù)主要是:該數(shù)據(jù)獲取之后是否還有其他用處,只要有可能被二次使用,最好是取原數(shù)據(jù)。
提前轉(zhuǎn)化的好處是,流轉(zhuǎn)的數(shù)據(jù)會(huì)變得簡(jiǎn)單直接。但是需要注意的是轉(zhuǎn)化后數(shù)據(jù)量不一定會(huì)少,比如:數(shù)據(jù)源是訂單維度的,而目標(biāo)是轉(zhuǎn)化為訂單+商品維度的數(shù)據(jù),這就可能一條變多條了。
5)是主動(dòng)獲取還是對(duì)方推送
有時(shí)候開(kāi)發(fā)還會(huì)問(wèn)是對(duì)方推,還是我們主動(dòng)去取,這就是接口的post/get方式問(wèn)題。
get是從服務(wù)器方請(qǐng)求數(shù)據(jù),post是向服務(wù)器方傳送數(shù)據(jù)。前面也提到了,接口交互數(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ù)一般是若干條件,比如:賬號(hào)+密碼)。數(shù)據(jù)生產(chǎn)方則按照協(xié)議響應(yīng),給出滿足條件的數(shù)據(jù)到請(qǐng)求方(也就是返回參數(shù))。
所以可以看出來(lái),如果對(duì)時(shí)效要求高的,則建議生產(chǎn)方主動(dòng)推。比如產(chǎn)生一個(gè)新用戶,那么就可以理解把用戶的信息主動(dòng)推送給運(yùn)營(yíng)方使用。
如果是時(shí)效不高或者數(shù)據(jù)量大,則可以按一定頻率主動(dòng)請(qǐng)求,有利于系統(tǒng)負(fù)荷壓力穩(wěn)定。
在具體使用的時(shí)候,如果你對(duì)接的系統(tǒng)比較多,那么建議做一個(gè)公共接口,以后誰(shuí)想用他們自己來(lái)對(duì)接就好了,不然就要來(lái)一個(gè)對(duì)接一次,麻煩還有風(fēng)險(xiǎn)。
另外,選擇post/get,最終由雙方開(kāi)發(fā)權(quán)衡決定,但是一般而言:
get傳送的數(shù)據(jù)量較小,不能大于2KB。
post傳送的數(shù)據(jù)量較大,一般被默認(rèn)為不受限制。get安全性非常低,post安全性較高。
6)接口定義是開(kāi)發(fā)的事情,但產(chǎn)品經(jīng)理需要給出輪廓
在輸出方案的時(shí)候,接口定義的規(guī)則是什么?傳參和返回參數(shù)是什么?重復(fù)傳參時(shí)是跳過(guò)還是再次獲?。ㄒ话愣荚佾@取)?必傳參數(shù)是什么?是否回傳接收結(jié)果給數(shù)據(jù)生產(chǎn)方?這些都是要有大致明確并傳達(dá)給開(kāi)發(fā)測(cè)試的。
比如:每小時(shí)/次取對(duì)方表中第一頁(yè)最新的50條數(shù)據(jù)。超過(guò)的數(shù)據(jù)下個(gè)小時(shí)繼續(xù)取??梢赃@樣設(shè)計(jì):
因?yàn)橐恍╆P(guān)鍵參數(shù)牽扯到業(yè)務(wù)的唯一性維度,這些都在產(chǎn)品經(jīng)理調(diào)研的時(shí)候獲知的,而這些可能開(kāi)發(fā)根本不知道。因此產(chǎn)品經(jīng)理要給出輪廓和大概方向。
7)數(shù)據(jù)流轉(zhuǎn)的時(shí)效
接口創(chuàng)建之后,如果是接收的對(duì)方數(shù)據(jù)庫(kù)中的信息,那么上線之后,要考慮先進(jìn)行數(shù)據(jù)的初始化(保持基礎(chǔ)數(shù)據(jù)一致)。然后確保后續(xù)雙方是同步的。
同步的機(jī)制和要求是在定義方案的時(shí)候就確定的。那么怎么確保同步呢?方法是兩種:觸發(fā)式和定時(shí)任務(wù)。
觸發(fā)式就是一旦一個(gè)參數(shù)值滿足條件,則觸發(fā)同步。
定時(shí)任務(wù)式一般用在不知道數(shù)據(jù)源什么時(shí)候更新,需求方就要設(shè)置一個(gè)定時(shí)任務(wù)的腳本,隔一段時(shí)間查詢一次。請(qǐng)求的頻率需要與更新的頻率相協(xié)調(diào)。
8)總結(jié)接口的特點(diǎn)
優(yōu)點(diǎn):時(shí)效性強(qiáng),可以觸發(fā)式實(shí)時(shí)問(wèn)答。容易控制權(quán)限,通過(guò)傳輸層協(xié)議https,加密傳輸?shù)臄?shù)據(jù),使得安全性提高。通用性比較強(qiáng),無(wú)論客戶端是.net架構(gòu),java,python都是可以的。
缺點(diǎn):服務(wù)器和客戶端必須同時(shí)工作,當(dāng)服務(wù)器端不可用的時(shí)候,整個(gè)數(shù)據(jù)交互是不可進(jìn)行。當(dāng)傳輸數(shù)據(jù)量比較大的時(shí)候,嚴(yán)重占用網(wǎng)絡(luò)帶寬,可能導(dǎo)致連接超時(shí)。使得在數(shù)據(jù)量交互的時(shí)候,服務(wù)變的很不可靠。
9)相關(guān)概念擴(kuò)展
API:即“應(yīng)用程序編程接口”,是一些預(yù)先定義的函數(shù),無(wú)需訪問(wèn)源碼或理解內(nèi)部工作機(jī)制的細(xì)節(jié),即可調(diào)用的對(duì)象。比如和Windows系統(tǒng)溝通,需要調(diào)用Windows提供得API。和新浪微博進(jìn)行溝通,需要調(diào)用新浪微博提供得Api。其實(shí)它就是一個(gè)軟件系統(tǒng)對(duì)其他軟件系統(tǒng)提供得服務(wù)。
openapi:是指對(duì)外開(kāi)發(fā)的接口,比如百度地圖API、facebook的API等。
SDK(“軟體開(kāi)發(fā)工具包”):可以理解為api的集合,也就是封裝后的API為,功能更完善。
http接口:是基于接口的傳輸方式(HTTP協(xié)議)來(lái)命名的,當(dāng)然也有基于其他協(xié)議傳輸?shù)慕涌凇?/p>
比如:
和Windows系統(tǒng)溝通,需要調(diào)用Windows的API(CreateWindowEx,bitblt,等等),是C語(yǔ)言函數(shù)形式的接口。
和.Net框架進(jìn)行溝通,需要調(diào)用.Net提供得Api,是以C#,VB函數(shù)/類(lèi)形式的接口。和新浪微博進(jìn)行溝通,需要調(diào)用新浪微博提供得Api,是以Http請(qǐng)求形式的接口。
API接口的叫法相對(duì)http接口叫法更籠統(tǒng)和概念化一些。因此在寫(xiě)方案的時(shí)候,http接口和API接口都可以,在具體的場(chǎng)景開(kāi)發(fā)都可以理解的。
《奶茶三分甜》,看校園霸道御姐恃寵而驕
值得收藏的短故事《奶茶三分甜,你有十分甜》,無(wú)數(shù)人瘋狂推薦!
小編推薦的三本總裁豪門(mén)高口碑佳作,驚喜登場(chǎng),口碑逆天??女生小說(shuō)...