自營商城架構雜談

minororange發表於2020-08-25

前言

自營商城在技術層面來說是比較簡單的系統,難點一般都在業務邏輯,只要業務邏輯理通順了,技術實現起來並不難。但是做一個可靠的系統還是需要一定的功夫打磨,畢竟再簡單的系統如果沒有一定的規劃與架構,後續維護與擴充套件也是一個頭疼的問題。以下是我從事商城開發一年多的個人經驗,分享給大家一起探討學習。

技術棧架構圖

架構圖

詳細說明

後臺

自營商城最開始開發一般都是小團隊進行開發,後臺不會有前端工程師的參與,我個人非常推薦使用 ElementUI 進行後臺開發(原始引入的方式,非打包),後臺程式設計師參考官方文件就能寫出很好看的 UI,結合上 Vue 對於一些複雜的表單頁面也會比 jQuery 好寫很多。

前臺

前臺是商城的重要組成部分,一般會先由設計部出設計稿,評審透過後再交給前端進行開發。

  • 商城是一個非常需要 SEO 的網站,所以在技術選型上優先考慮使用框架模板引擎作為基礎,對於一些不需要 SEO 的頁面(購物車,個人中心)可以使用 Vue 渲染。

  • 對於靜態資源的引入會涉及到 CDN 快取的問題,所以使用 Webpack 對靜態資源(css,js)進行打包,而後結合 Laravel mix 進行版本更迭。

  • axios 是替代原有 jQuery ajax 的,他擁有非常完善的請求機制,程式碼層面也更加語義化。

  • Promise:商城中會涉及到第三方平臺資料上報,有時候部分業務邏輯在前臺是非同步的,這時候就需要用到 Promise。

伺服器

軟體

伺服器基本架構還是 LNMP,但是對於完善的系統應該還需要一些工具的輔助。

  • Redis:作為快取驅動、佇列驅動、鎖、Session驅動 等

  • Supervisor: 守護佇列程式

  • Shell:切割日誌、伺服器備份等

  • ElasticSearch:前臺搜尋引擎、日誌收集等

程式碼

在傳統的 MVC 上,多加一層 service ,用於放置業務邏輯,結合公司實際業務需求也可繼續劃分。

  • Middleware: 用於許可權校驗、日誌採集等全域性性的邏輯

  • Job: 不影響主流程的業務邏輯都應該使用佇列,例如客戶註冊成功傳送郵件,客戶註冊是主流程,只要客戶註冊資料寫入資料庫成功,就可以跟客戶端返回成功,發郵件使用非同步進行處理。這樣既最佳化了業務流程,也最佳化了程式碼結構

  • Event: 事件是 Job 的升級版,業務初始邏輯可能是客戶註冊成功傳送郵件,後面產品經理又加需求:客戶註冊成功要發優惠券,如果去註冊邏輯那裡再派發個優惠券任務是不是顯得不夠優雅(如果產品經理又雙叒叕加邏輯,揍他),這時候就可以使用事件來代替了,只用在主流程結束後派發一個事件,然後再給事件定義監聽者即可

  • Exception: 我很少在業務邏輯中看到有人寫專門的異常類,但是我十分推薦大家使用異常,每個業務邏輯都應該有自己的異常類,一個方法只有異常跟正常,上層只用放心呼叫、處理異常就行,不需要關心方法的返回值(返回值必然是成功)

資料庫管理

migration 是一個十分符合版本管理的工具,以前使用 SQL 檔案進行資料庫管理,往往會有資料庫跟線上不一致的情況,而且執行起來也麻煩,自從用上了 migration ,一行命令輕鬆遷移(點一下用一年,超快遷移不要錢),結合上 seed,能夠對資料庫結構與初始資料進行一個很好的統一。

依賴管理

0202年了,還有人把 vendor 資料夾納入版本管理(氣冷抖)

之前接手一個專案, vendor 資料夾納入了版本管理,並且更改了框架底層程式碼(之前程式設計師說沒辦法只能改底層,後續出了一堆莫名奇妙的 Bug),說多了都是淚。對於第三方依賴儘量不要去改底層,如果真的是有問題,可以單獨拿出來(或者給作者提 issue),一旦更改了第三方依賴,等於說放棄了版本升級、官方 Bug 修復,一切都只能自己來,耗時又費力還不一定搞的好。

許可權管理

這裡指的是後臺系統的許可權,商城系統比較簡單,使用一般的 RBAC 即可。

異常通知

針對專案中的各種異常,可結合公司辦公 IM 軟體進行告警,企業微信和釘釘都有群機器人,結合 Laravel 的 Exception Handler 進行異常告警,發現 Bug 的速度大大提升(偷偷改 Bug ,業務還不知道)

定時任務

主要用於訂單超時處理、日誌切割、資料備份等

程式碼更新

在部署伺服器程式碼更新完後,更新第三方依賴,打包靜態資源,然後 rsync 同步到生產伺服器,減少生產伺服器當機時間。

深圳求職中,坑位介紹可私信,筆芯

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章