揭秘開發(fā)巨系統(tǒng)時的設計問題:如何保證系統(tǒng)的健壯性和可擴展性?

大家好,我是小米,一個熱愛技術分享的程序員。我今天想和大家聊一聊關于系統(tǒng)設計中的一些問題,這些問題都是我在公司開發(fā)“巨系統(tǒng)”中遇到的。
我們的系統(tǒng)最初是一個簡單的電商平臺,但隨著業(yè)務的發(fā)展,我們不得不將系統(tǒng)拆分為統(tǒng)一訂單系統(tǒng)、統(tǒng)一會員系統(tǒng)、貨源系統(tǒng)等多個平臺組成的一個復雜的系統(tǒng),我將其稱為“巨系統(tǒng)”。然而,由于業(yè)務增長迅速,我們的技術部門需要進行“敏捷開發(fā)”,在時間和任務的壓力下,我們可能會忽視系統(tǒng)的健壯性和可擴展性,甚至忘記了設計模式的五大基礎原則(SOLID)。
我曾多次和架構師發(fā)哥溝通這個問題,并提出了一些關于系統(tǒng)設計的“警告”和“風險”。今天我想和大家分享一下其中的一些問題,特別是貨源系統(tǒng)和分銷系統(tǒng)的設計問題。
假適配器模式的貨源
貨源系統(tǒng)對接多個采購平臺,豐富電商平臺的商品。我的理解是,貨源系統(tǒng)就像設計模式中的適配器模式,它可以在內部處理不同貨源的數(shù)據(jù)、字段等不一樣的兼容性,以確保電商平臺不必關心貨源的具體細節(jié),只需要關心是哪種貨源、是哪種商品類型。
但是,我們接收貨源系統(tǒng)的兩個供應商時,他們告訴我們:“商品ID在A貨源是字符類型,在B貨源是數(shù)字類型,你們的電商平臺需要處理一下?!碑敃r我很震驚,“這不是你們貨源系統(tǒng)的責任嗎?”但是對方告訴我,其他系統(tǒng)對接他們的貨源也是這樣的。
這個問題讓我意識到,設計系統(tǒng)就像寫代碼一樣,時時刻刻提醒自己“高內聚,低耦合”,保持代碼的純粹性。你現(xiàn)在的“省事”是為系統(tǒng)埋了一個“雷”,不要為了眼前的“省事”和“時間”而讓后期“費事費時間”。
不守規(guī)矩的分銷
分銷系統(tǒng)的設計是為了統(tǒng)一管理分銷員、商品和傭金計算等,電商平臺需要在用戶登錄、分銷商品和下單時訪問分銷系統(tǒng),計算傭金,最終通過分銷系統(tǒng)發(fā)放傭金并提現(xiàn)。
在測試過程中,我們發(fā)現(xiàn),測試人員購買分銷商品下單后,始終沒有分銷金額。經過開發(fā)人員的排查,發(fā)現(xiàn)分銷商品下單時存儲的分銷員ID是統(tǒng)一會員系統(tǒng)的會員ID,而分銷系統(tǒng)的會員ID卻是分銷系統(tǒng)自己設計的ID,沒有采用統(tǒng)一會員系統(tǒng)的ID,導致分銷系統(tǒng)無法正確地計算傭金。
這個問題也讓我意識到,在系統(tǒng)設計中,需要考慮各個模塊之間的協(xié)作和依賴,尤其是在分布式系統(tǒng)中更加重要。不同模塊之間的數(shù)據(jù)傳輸和格式必須保持一致性,否則會導致無法正確地傳遞數(shù)據(jù),從而影響整個系統(tǒng)的運行。
此外,在系統(tǒng)設計中,還需要考慮到系統(tǒng)的可擴展性和容錯性。當系統(tǒng)面臨高并發(fā)、大數(shù)據(jù)量等情況時,必須考慮采用分布式、緩存、負載均衡等技術手段,以保證系統(tǒng)的高可用性和穩(wěn)定性。
總結
總之,系統(tǒng)設計是一個需要細心和耐心的過程。在設計系統(tǒng)時,需要考慮到各個模塊之間的協(xié)作和依賴關系,遵循設計模式的五大基礎原則(SOLID),保持代碼的純粹性和高內聚、低耦合,同時考慮系統(tǒng)的可擴展性和容錯性。只有這樣,才能設計出高效、穩(wěn)定、可靠的系統(tǒng)。
END
如有疑問或者更多的技術分享,歡迎關注我的微信公眾號“知其然亦知其所以然”!
