電商平臺多用戶商城系統架構行業現狀
瀏覽全球知名電商機構(天貓 淘寶 亞馬遜 噹噹 阿里巴巴...),包括開源電商軟件(Magento、OpenCart、Xcart、Zencart、Prestashop....),知名的就那幾家或者幾十家乃至幾百家,爲什麼這麼少的可憐?電商技術平臺建設的難度究竟在哪裏?
大多數單位都是慎重的選一款電商軟件(如:Ecshop)來進行二次開發,但是就算這樣,大多企業都停留在修BUG、填前任留下的坑、被所謂的代碼規範給約束的死去活來...
但是隻要提到如淘寶這種多用戶商城系統(也許你會提到.NET、Java,那個成本,也許只有企業領導者才知道到底有多痛!),那少的更是可憐了...
電商平臺多用戶商城系統架構企業困境
中小企業電商想PK亞馬遜、阿里巴巴、天貓、淘寶、京東、噹噹...先不考慮市場、營銷、物流、策劃、貨源,單說說電商技術架構之路,難!難!難!
在中國這片土地上,有不少單位實踐了電商平臺技術架構之路,都想打造自己的電商平臺!卻大多失敗了!
其中不乏各路大神、各路專家、各路前單位(國企公司、上市公司)牛逼哼哼者、精神領袖、意見領袖、暢想領袖、批判領袖、預測領袖...
那麼問題來了,爲什麼企業耗費了這麼多的研發資金,招了華麗麗的明星研發隊伍,就是很少有企業真正的打造出可用的企業滿意的電商平臺呢?
我們知道,企業擁有自主版權的多用戶商城系統的電商平臺是多麼重要!
- 這是企業的固定技術資產!如虎添翼中的“翼”之一!
- 這是企業隨時東山再起的保證之一!
- 這是企業領導者出去吹牛逼、拉投資的產品底氣之一!
電商平臺多用戶商城系統架構博主介紹
博主是1個有8年研發經驗的PHP工程師,話說有人理解PHP爲“拍黃片”,所以非誠勿擾的美女都對PHP工程師滅燈了,幸好博主已經有家室了,妹子們,基友們,你們沒機會了...
博主曾經做過一些年頭的外貿電商公司技術平臺主要架構設計、開發者、顧問...
博主曾經有幸經和國企公司技術大牛、上市公司大牛、行業專家(京東、淘寶)都進行過共同碼代碼的屌絲歲月...
電商平臺多用戶商城系統架構通用原則
本文着重以以下原則來打造一個儘可能“摳門“基礎上的牛逼的牛逼型多用戶商城電商平臺!
- 多:承載的用戶多
- 快:用戶訪問速度快
- 好:功能設計好擴展
- 省:運維省、開發省、硬件省
電商平臺多用戶商城系統架構原則一:多
電商平臺多用戶商城系統架構之承載更多的用戶
核心思想:資源是有限的,用戶是無限的;
破:每個用戶浪費最少的服務器資源(不浪費更好)方可
- 找運維老大(5年+)調優你的服務器參數(Nginx、PHP、Mysql.....)
- Mysql做成讀寫分離,並分別調優
- 程序邏輯按照用戶所屬企業或地區(華東區)爲單位,必須對海量用戶進行Mysql業務分表
- Mysql併發不強、鏈接數很寶貴,盡一切可能不要讓用戶直接和Mysql通信,每個頁面儘可能的少執行SQL語句,儘量走緩存
- 系統搜索、篩選、過濾等耗費Mysql資源的業務功能,儘可能的轉化爲Sphinx搜索或MongoDB、Redis這種緩存服務
- 內存很貴,CPU很重要,儘可能的保證你每條代碼都是性能最好的,儘量的使用最新版本的系統內置方法!(如更省內存的yield)
- 避免惡意蜘蛛爬蟲、惡意採集(Demo1,Demo2)對系統造成不必要的資源浪費,做好Robots(Demo1,Demo2,Demo3)惡意蜘蛛爬蟲爬取頻率限制,或者限制每個用戶訪問頻率以及惡意訪問者加入黑名單封號系統,以便讓更多的真實用戶訪問我們的站!
- 某些業務如果可以容忍更新延遲的話,建議首先在用戶客戶端先JS、Cookie等保存,最後隔10秒或者每10個步驟在一次性批量同步到服務器,這樣可以減少對服務器資源的消耗!
- 業務冗餘數據不建議分散的做在Mysql中,建議做在Redis、MongoDB中,統一管理操作,而且利於大數據統計報表分析!
- 可以保存到用戶客戶端的數據,儘可能的保存到用戶客戶端(Cookie、localStorage、sessionStorage),不要什麼都塞給服務器或者從服務器頻繁讀取...
- 如果平臺有大文件下載服務,記得一定要使用X-Sendfile來下載文件給客戶,節省服務器資源!
電商平臺多用戶商城系統架構原則二:快
電商平臺多用戶商城系統架構之響應速度更加快
核心思想:減少用戶等待服務的時間;
破:資源更少(沒有更好),更小,傳輸更快方可
- 買更好的服務器、更多的CPU、更大的內存、更好的硬盤、更快的寬帶、更好的域名DNS....
- 服務器安裝好全系列最新版 Nginx+PHP(7系列)+Mysql+MongoDb+Redis+Memcached+Sphinx!
- 開發技術選擇YAF(PHP的C語言框架)、YAR(PHP Soap RPC功能C語言級框架)、YAC(PHP C語言級的共享內存框架)、Yaconf(PHP C語言級的常住內存的用戶自定義常量)、Taint(PHP C語言級的XSS過濾框架),儘可能的選擇PHP擴展來實現你的業務!沒事多搜搜pecl,多看看手冊!
- 靜態資源(JS、CSS、小圖標等)一定要放到CDN上,實在窮就用百度等免費的CDN儘可能多的分流靜態文件
- 儘可能的減少用戶請求的資源數目(如CSS、JS可以合併輸出,小圖標可以使用CSS圖片精靈的方式減少請求個數)
- 服務器設置GZIP等儘可能高的壓縮你的資源輸出
- 巧用HTTP協議的狀態碼,配合實現用戶瀏覽器端頁面級緩存,不僅可以更快,而且省很多資源!
- 如果實在避免不了Sql,那麼程序上保證每個Sql語句都必須走索引且是高效的,儘量使複合索引和覆蓋索引!必須避免表鎖!
- 業務儘量以讀爲主,儘量少的寫操作,如果是日誌捕捉、用戶行爲分析這種與核心業務關係不大的寫操作,強烈推薦寫到Redis、MongoDB!
- 一定使用InnoDB引擎(支持行鎖),但是絕對不要使用InnoDB外鍵約束(產生鎖的原因之一),不要使用Event、觸發器(資源殺手)!儘可能少的使用存儲過程(要注意考慮併發)、視圖(大數據測試下發現偶爾不走索引)!
- 放棄PHP默認的低效存儲Session機制,用戶Session存儲更改爲存儲到Redis,而且更有利於Session綜合管理(跨域訪問)
- 一定要使用PJAX技術,不但有AJAX的優點,還利於SEO,利於跨設備,跨平臺,請求資源更小,更快!
- 也許你可以試試MySQL開源存儲引擎TokuDB了,基本可以代替INNODB,而且存儲數據更省空間,插入更快!
- 如果你既覺得MYSQL的LIKE ‘%%’慢,又覺得FULLTEXT對中文支持不友好,還覺得專業搜索引擎Sphinx等技術門檻高,那麼可以試試Mysql插件Mysqlcft試試,完美支持FULLTEXT中文搜索,功能和LIKE‘%%’一樣,速度提升數十倍!
電商平臺多用戶商城系統架構原則三:好
電商平臺多用戶商城系統架構之功能設計好擴展
核心思想:功能更全,更強大,開發更方便,交接更容易;
破:設計靈活、簡單可依賴的系統架構
- 系統一定要基於Module、Hook機制的(如靈活的控制header),每個工程師只需專注自己的Module和靈活的使用系統資源,功能開發就像搭積木一樣快,給出一定的規則後,模塊還可以外包出去...
- 程序類擴展一定要使用工廠模式機制開發(雖然開發過程有點慢,但是使用效率高),隨時可以以業務功能點爲單位廢棄、反轉、升級、排序、擴展、更改功能實現方式等諸多好處
- 每個PHP文件必須使用命名空間特性,避免多人協作時候代碼衝突
- 每個action下可以系統默認以HTTP提交協議來執行默認方法!利用反射簡單高效(POST請求就執行actionPost,GET請求就執行actionGet...最後在每個具體action裏進行switch判斷執行)
- 研發出自己的Cookie分析系統,又利於業務增長等等,業務邏輯參照淘寶、天貓、百度對我們無處不在的用戶喜好分析就知道了
- 開發中儘可能的選擇開源軟件作爲開發支撐,首選PHP擴展或PECL,其次是搜大神寫的、支持率高的PHP文件寫的類庫,最後纔是自己手動發明寫類庫!(如,博主的原創PHP類庫)
- 開發中儘可能的使用最新版本的特性,儘可能的保證項目可以安全無痛部署到最新PHP版本!因爲你可以免費的最快的擁有最新版的好處!(當然也有少許壞處 哈)
- API儘量使用RESTful架構,返回結果儘量全是JSON格式(JSON利於和JS通信,如果追求性能,可以使用igbinary)
電商平臺多用戶商城系統架構原則四:省
電商平臺多用戶商城系統架構成本節省之運維節省
核心思想:讓運維更簡單,更高效,運維成本更低;
破:減少業務複雜度
- 多做備份,選擇有一鍵備份功能的服務器
- 慎重看待集羣,雞蛋放在1個籃子(推薦:利潤不大的時候,不要分開部署) VS 雞蛋放在多個籃子裏(主流:參考攜程事件)...
電商平臺多用戶商城系統架構成本節省之開發節省
核心思想:用最低的技術門檻、最短的開發時間,開發最牛的業務平臺;
破:系統架構模塊化,互不干擾,手冊人手一份
- 做好技術開發共享文檔
- 平臺基礎架構好後,只需稍等PHP的小白也可以按照Module來搭積木,因爲每個模塊既是獨立,也是有Hook聯繫的
電商平臺多用戶商城系統架構成本節省之硬件節省
核心思想:在最經濟的硬件上,儘可能的榨乾軟件性能;
破:程序設計要規劃充分、隨時一鍵部署擴充硬件
- 儘可能的榨乾軟件(Nginx+PHP(7系列)+Mysql+MongoDb+Redis+Memcached+Sphinx)性能,在利潤產生前乃至用戶量未破百萬(保守估算)的時候,完全可以抗住一陣子了!
問題來了,如果電商平臺訪問量到達一定數據規模且有利潤了,上述仍然解決不了我的訪問量大的問題怎麼辦?
說半天也沒有看到博主提到 反向代理 LVS 主從 熱備 F5 DDOS 監控 容災 負載均衡 分佈式啥的....
OK,一句話:4個選擇
- 自己是無敵超能大神,時間多,技術好,精力旺盛...自己全部搞定!
- 招運維團隊花上不小的代價+不小的時間來給你專業定製,架設一套即可!
- 也許你可以用到阿里雲全套服務產品的級別了!背後是經過數次苛刻實踐的淘寶、天貓、阿里巴巴 雙11 雙12 國慶 過年等真正高手團隊打造的產品!
- 可以選擇亞馬遜全套服務產品,和阿里雲有什麼區別呢?老外的技術,你懂的!老外的語言,你也懂的!
哈哈,程序設計時候一定要記得用工廠模式哦,而且很多業務接口、參數靈活處理可配置的,到時候好用雲服務來代替本地服務器低效的運算法則!
真正的把1個平臺做活,是很不容易的!且寫且反思! 如果感興趣,可以關注 ,https://github.com/letwang/HookPHP 既是按照上述理念量身打造的一款平臺型框架。