最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

07 系統(tǒng)面臨的現(xiàn)實問題:第三方客戶系統(tǒng)的對接耦合性太高,經(jīng)常出問題!

2023-06-05 15:30 作者:儒猿課堂  | 我要投稿

系統(tǒng)面臨的現(xiàn)實問題:第三方客戶系統(tǒng)的對接耦合性太高,經(jīng)常出問題!


1、重新觀察訂單支付的核心流程


經(jīng)過了前幾天的培訓,小猛已經(jīng)對目前訂單系統(tǒng)的整體情況有了一個大致了解,而且也知道了系統(tǒng)目前面臨的一些問題,包括一個訂單在支付之前、支付過程中以及支付完成后退款時面臨的一些技術(shù)隱患。


小猛心想,我這幾天每天晚上整理筆記都到半夜,這些東西都理解的滾瓜爛熟了,應該沒什么問題了。


沒想到今天一早,小猛上班之后,又立馬被明哥叫到了小會議室。


明哥進了會議室,二話不說,立馬在小白板上畫出了一個訂單支付時的核心流程圖。

? ? ? ? ? ?

? ? ? ? ? ? ?

小猛說:明哥,怎么又是這個圖啊?這個流程我已經(jīng)滾瓜爛熟了,問題不是很明顯了么,就是支付之后流程里的步驟太多,耗時太長了,這樣非常影響用戶體驗。


明哥微笑著對小猛說:那你覺得這個流程里真的就什么問題都沒了嗎?


小猛內(nèi)心一陣緊張,趕緊又看了一遍,但是看來看去還是沒發(fā)現(xiàn)什么問題。心虛的說道:我感覺沒什么問題了啊。


2、老司機設計系統(tǒng)的必備經(jīng)驗:跟第三方系統(tǒng)打交道


明哥這個時候就開始給小猛解釋起來了,畢竟也不能讓這孩子太緊張了,一般很多年輕工程師,開發(fā)經(jīng)驗沒那么豐富的,都不會意識到系統(tǒng)可能存在的一些技術(shù)隱患。


在訂單支付的時候,大部分核心步驟,其實都是在自己公司的系統(tǒng)里完成的,比如你更新訂單的狀態(tài),是在自己公司的訂單系統(tǒng)內(nèi)部完成的;你扣減庫存,是找自己公司內(nèi)部的庫存系統(tǒng)完成的;你在增加積分的時候,是找自己公司內(nèi)部的積分系統(tǒng)完成的;你在派發(fā)優(yōu)惠券、紅包的時候,是找自己公司內(nèi)部的營銷系統(tǒng)完成的。


但是這些都做完之后,最關(guān)鍵的一個環(huán)節(jié)呢?


商品的出庫發(fā)貨,你找誰?


一般電商公司內(nèi)部都會有自己的倉儲系統(tǒng),管理各種倉庫和商品的發(fā)貨,通常來說會選擇去找一個距離你用戶最近的一個倉庫,然后從里面調(diào)度一些商品進行發(fā)貨,在發(fā)貨的時候還需要調(diào)用第三方物流公司的系統(tǒng),通知物流公司去倉庫里取貨發(fā)貨。


對于物流公司而言,必然會由自己的物流系統(tǒng)收到貨運通知之后,自動通知自己的快遞員或者運輸隊到對方倉庫里取貨,然后去派發(fā)貨物給購買商品的用戶。


所以明哥在支付訂單的核心流程圖里又補充了幾個步驟。

? ? ? ? ? ?

? ? ? ? ? ??

明哥指著上圖的右側(cè)添加的部分說:以前你以為通知倉儲系統(tǒng)發(fā)貨只是一個非常簡單的事情,但是你看看,現(xiàn)在如果一個用戶購買了商品,要把商品送到他的手上,其實還有不少事要做吧?


小猛不好意思的點點頭,心想自己還是經(jīng)驗太淺了,怎么就沒有去多想想呢。


3、到底什么叫做“系統(tǒng)之間的耦合”?


明哥接著說:沒關(guān)系,其實很多年輕工程師在做開發(fā)的時候,往往思維非常的簡單,很多人主要是關(guān)注自己手頭的一些CRUD的工作。但是在復雜的互聯(lián)網(wǎng)系統(tǒng)里,往往不是CRUD那么簡單。


接下來,我就給你解釋一個在系統(tǒng)設計上的一個概念,叫做“系統(tǒng)之間的耦合”


很多人經(jīng)常聽到“耦合”這個詞,一直搞不懂到底什么叫做耦合?


其實這個東西有非常學術(shù)的說法,但如果按照那個來解釋,應該就沒幾個人能聽懂了。所以我會用非常通俗的語言來給你解釋。


舉個例子,比如在我們的訂單支付流程里,訂單系統(tǒng)其實是要調(diào)用很多其他系統(tǒng)的,比如庫存系統(tǒng)、積分系統(tǒng)、營銷系統(tǒng)、倉儲系統(tǒng),等等。


明哥說著,在圖里畫了好幾個系統(tǒng)之間調(diào)用的紅圈。

? ? ? ? ? ?

? ? ? ? ? ??

好,那么我們現(xiàn)在來思考一個問題,假設促銷系統(tǒng)現(xiàn)在有一個接口,專門是讓你調(diào)用了以后派發(fā)優(yōu)惠券的,現(xiàn)在這個接口接收的參數(shù)有5個,你要是調(diào)用這個接口,就必須給他傳遞5個參數(shù)過去,這個是沒的說的。


現(xiàn)在問題來了,負責促銷系統(tǒng)的工程師某一天突然有一個新的想法,他希望改一改這個接口,在接口調(diào)用的時候需要傳遞7個參數(shù)!


一旦他的這個新接口上線了,你還是給他傳5個參數(shù),那么他那里就會報錯,這個派發(fā)優(yōu)惠券的行為就會失敗!


那在這樣的一個情況下應該怎么辦?


很簡單,你作為訂單系統(tǒng)的負責人,必須要配合促銷系統(tǒng)去修改代碼,既然他要7個參數(shù),那么你就必須得在代碼里調(diào)用他的接口的時候傳遞7個參數(shù)。


并且你還得配合他的新接口去進行測試以及部署上線,你必須得圍繞著他轉(zhuǎn),配合他。


明哥說著,在圖里重新畫了兩個小紅圈,代表訂單系統(tǒng)和促銷系統(tǒng)的接口調(diào)用的修改。

? ? ? ? ? ?

? ? ? ? ? ??

在這種情況下,就說明你的訂單系統(tǒng)跟促銷系統(tǒng)是強耦合的。因為促銷系統(tǒng)任何一點接口修改,都會牽扯你圍著他轉(zhuǎn),去配合他, 耗費你們訂單團隊的人力和時間,說明你們兩個系統(tǒng)耦合在一起了。


要動一起動,要靜一起靜,這就是系統(tǒng)間的耦合。


明哥說到這里停頓了一下,看著小猛問:怎么樣,理解了沒有?


小猛若有所思的看著小白板上的兩個紅圈:有點懂了,又有點沒懂,但是確實感覺對“耦合”這兩個字的理解有那么點意思了。


明哥笑了笑:沒關(guān)系,你之所以感覺沒徹底懂,是因為你沒配合其他團隊的兄弟去干一些修改接口之類的破事兒,當你自己一邊在重構(gòu)訂單系統(tǒng),干的熱火朝天,一邊又被迫去花時間配合營銷團隊修改坑爹的接口的時候。。。


明哥停頓了一下,繼續(xù)說:估計你心里一邊在問候人家的直系親屬,一邊狠狠的在你的筆記本上會寫下幾個字,“坑爹的耦合”!從此以后你對“耦合”就會理解深刻,并且深惡痛絕了。


小猛聽完明哥自帶畫面感的一番描述,哈哈大笑,感覺自己對“耦合”的理解又更深了一點。


4、訂單系統(tǒng)有沒有跟第三方物流系統(tǒng)耦合?


接著明哥提出了一個問題:小猛,你現(xiàn)在思考一下,訂單系統(tǒng)有沒有跟第三方物流系統(tǒng)耦合呢?


小猛看著圖,他發(fā)現(xiàn)按照明哥的說法,訂單系統(tǒng)是跟倉儲系統(tǒng)耦合,而倉儲系統(tǒng)又跟第三方物流系統(tǒng)耦合,那么是不是說明,訂單系統(tǒng)也間接的耦合了第三方物流系統(tǒng)?小猛提出了自己的思考。


明哥點點頭說:非常正確,就是如此,你看圖里我畫的幾個紅圈的地方。

? ? ? ?? ?

? ? ? ? ? ??

訂單系統(tǒng)要調(diào)用倉儲系統(tǒng)的接口去發(fā)貨,倉儲系統(tǒng)在接到訂單系統(tǒng)的調(diào)動之后,又要同時去調(diào)用第三方物流系統(tǒng)去生成物流單,通知人家去取貨。


所以在上圖的流程中,必須要等到第三方物流系統(tǒng)返回確認信息之后,倉儲系統(tǒng)才能返回結(jié)果,訂單系統(tǒng)才能結(jié)束對倉儲系統(tǒng)的調(diào)用。


想想看,在這個情況下,訂單系統(tǒng)不就跟倉儲系統(tǒng)、第三方物流系統(tǒng),全部耦合在一起了嗎?


5、跟第三方系統(tǒng)耦合的痛苦:性能差,不穩(wěn)定


接著明哥臉上突然出現(xiàn)了一種非常復雜的表情:痛苦!嫌棄!有厭惡!五味雜陳。。。


為什么這么復雜的情感?明哥接著說:對我們多年設計系統(tǒng)的人來說,跟第三方系統(tǒng)的交互往往是最麻煩的。


因為對于我們自己公司內(nèi)的系統(tǒng),即使他有問題,所有代碼、數(shù)據(jù)庫都在自己公司,你可以去優(yōu)化,你知道他如何運行,你知道問題在哪里,也知道怎么解決。


但是對于第三方系統(tǒng)的調(diào)用,那就不是那么回事了。你不知道他是怎么寫的,甚至他的系統(tǒng)是用Go、C++、PHP寫的都有可能。


那么問題來了,假如你調(diào)用他的接口,結(jié)果他的接口有時候速度很快只要20ms,有時候速度很慢要200ms,有時候調(diào)用很正常,有時候偶爾會調(diào)用失敗幾次,你怎么辦?


你不知道他是如何實現(xiàn)的,不知道他問題在哪里,你更不知道如何解決他的問題,你也沒資格去改動他的代碼。問他們的工程師,人家根本不理你,就說一句:我們系統(tǒng)大部分情況下不是挺好的么!


所以你要記住一點:第三方系統(tǒng),永遠是不能完全信任的,他隨時有可能出現(xiàn)意料之外的性能變差、接口失敗的問題。


這就是你的系統(tǒng)跟第三方系統(tǒng)耦合在一起的痛苦:對方不可控,導致你的系統(tǒng)的性能和穩(wěn)定性也不可控。


6、小猛的頓悟:第三方系統(tǒng)的耦合給訂單系統(tǒng)帶來了不確定性


小明聽到這里,立馬腦子里有一種頓悟的感覺,他跟著說,那豈不是我們的訂單系統(tǒng)調(diào)用倉儲系統(tǒng),接著調(diào)用第三方物流系統(tǒng),很可能被第三方系統(tǒng)給拖累?


萬一他的性能突然降低,我們的系統(tǒng)性能就降低了,萬一他接口突然調(diào)用失敗,我們的這次操作也會失敗,后續(xù)還要考慮重試機制?


明哥點點頭:說的沒錯,所以在我們訂單支付的核心流程里,其實還有這么一個技術(shù)隱患,耦合第三方系統(tǒng)帶來的不確定性,也是需要后續(xù)我們?nèi)ソ鉀Q的。


小猛今天感覺又是慢滿滿的收獲,若有所思的走出了會議室,決定今晚好好的吸收和消化今天學到的東西。


End

專欄版權(quán)歸公眾號儒猿技術(shù)窩所有

未經(jīng)許可不得傳播,如有侵權(quán)將追究法律責任

07 系統(tǒng)面臨的現(xiàn)實問題:第三方客戶系統(tǒng)的對接耦合性太高,經(jīng)常出問題!的評論 (共 條)

分享到微博請遵守國家法律
基隆市| 巢湖市| 广平县| 祁门县| 信宜市| 三亚市| 高邑县| 曲麻莱县| 昌都县| 武夷山市| 蓬安县| 汝阳县| 南充市| 靖宇县| 梧州市| 盐山县| 西乌珠穆沁旗| 晋江市| 旺苍县| 沙湾县| 贡嘎县| 虞城县| 定远县| 新民市| 澜沧| 客服| 亚东县| 来凤县| 临海市| 青神县| 本溪市| 腾冲县| 伊川县| 嘉定区| 伊宁市| 乌兰浩特市| 玛沁县| 陵川县| 永德县| 金华市| 屏东市|