由于Java是開源的,最近幾年Hadoop等開源產(chǎn)品越來越成熟,而且是基于Java的,所以最終選擇Java最后后臺開發(fā)語言,現(xiàn)在前端是自己的前端工程師寫的JS,后期準備改成前端是PHP,中間是Go語言,B2B2C多用戶商城平臺后臺服務器是JAVA,因為PHP寫前端很厲害,不過這個也是后期了。
控制層:
這幾年springMVC發(fā)展的非?;穑议_發(fā)效率比較高,struts系列已經(jīng)完全沒落了,所以現(xiàn)階段選擇SrpingMVC。
視圖層:
這個我個人認為哪一個都差不多,jsp、freemarker也好,最終都是生成的html。
數(shù)據(jù)庫設計:
1、關鍵的一個是絕對不能有外鍵強關聯(lián),我看到類似用hibernate、JPA產(chǎn)品的一些公司,全部都是強關聯(lián),那你以后想刪除一些數(shù)據(jù),那真是噩夢的,這個還不用說,查詢性能方面影響也是巨大的。
2、分庫分表。這個必須要支持的,做B2B2C多商家商城系統(tǒng)互聯(lián)網(wǎng)數(shù)據(jù)量是非常的巨大的,如果開始就不能支持分庫分表,那么后期會至少花上千萬去做這事,最好一個例子就是當當網(wǎng),當年很多是單庫的,到現(xiàn)在部分表也沒有實現(xiàn)分庫分表,它們只能使用一些分區(qū)表架構,分區(qū)表本身就存在很大問題,比如擴展性、數(shù)據(jù)量過億都是問題?。。?!
數(shù)據(jù)庫選擇:最好還是myslq
1、輕量;
2、開源(阿里的alisql就是MySQL改個名字);
3、功能能滿足電商需求;
搜索:選擇lucene較好,原因是他封裝的較好;
權限:對于電商來說不應該設計的過于復雜,我認為主要就兩張表就夠了,一個是角色Role表,一個是資源Resources表,然后用戶和角色通過中間表關聯(lián)下就OK了,角色里面有資源,很簡單的邏輯,security、shiro這兩款的權限框架都能做出這個需求。
緩存:目前使用Redis,我看到有的公司使用的是memcache,這個10年前,就這樣,功能非常的簡陋不說,主要一個問題是會有死緩存,就是緩存怎么也清空不了,這個你想想就知道多悲劇了,商家修改了價格,怎么也改不了,最后只能關閉機器重啟。還有的公司使用的還是hibernate提供的ehcache,這個大家自行了解即可,關鍵是他做集群有問題,搞電商不可能是單機的,剛上線至少是2臺服務器。
靜態(tài)化:目前頁面高并發(fā)部分做靜態(tài)化,可以實現(xiàn)全站80%都是靜態(tài)頁面,數(shù)據(jù)從集群redis緩存中讀取。
服務化:目前使用dubbo,阿里的東西還是經(jīng)受住很大考驗的,即時老外的東西再好,也沒有這樣的場景去考驗,所以都還是理論階段,這個讓國人蠻自豪的!但是最近一兩年springCloud也是非?;?,我們也在考慮換到springCloud!
關于到底使用dubbo還是SpringCloud,其實都有各自的理由,dubbo有實際的線上經(jīng)驗,SpringCLoud是一家軟件公司開發(fā)的,沒有自己的實際線上經(jīng)驗,而且SpringCloud這家公司每次升級產(chǎn)品都是不向前兼容。
如果你需要自己做一些分布式的治理,那么選擇SpringCloud還不錯。否則選擇dubbo也是不錯的選擇!
圖片服務器:這個也是非常重要的環(huán)節(jié),目前我們測試系統(tǒng)都有5個G的圖片了?。。?!線上估計會是以T計算的,必須獨立的圖片服務器的。
集群、負載、分布式:前面的分庫分表、服務化、圖片服務器都是為集群、負載、分布式做準備的,集群需要基于CDN做動態(tài)切換,服務器用Nginx做負載,業(yè)務層用dubbo做分布式服務。
下面整理下整個架構吧:
展示層/控制層:SpringMVC;
持久層:mybatis;
數(shù)據(jù)庫:MySQL/Oracle,支持主從復制、讀寫分離、多機備份、支持分庫分表;
緩存機制:redis,CDN圖片緩存,也是支持熱備份、高并發(fā)的;
靜態(tài)化機制:系統(tǒng)頁面做靜態(tài)化,提高訪問速度;
圖片服務器:購買專用服務器,用nginx做負載;
搜索引擎: 分布式Lucene;
服務器:Linux;
中間件:tomcat、nginx,還有其他N多的支持集群部署的安裝間接軟件,就不一一列舉了;
圖片服務器:通過nginx做的,SFTP方式統(tǒng)一上傳;
集群方案:多機tomcat,seesion統(tǒng)一管理,圖片統(tǒng)一管理。這些需要一套解決方案;
服務器要求:linux/windows,16G內存,空間100G以上;
最后對于JAVA領域商城的開發(fā),其實在PHP、.NET語言中,已經(jīng)有非常多的成熟同類產(chǎn)品了,比如shopnc、ecshop等等等,但是PHP的邏輯都是寫在前臺文件中,這個就跟JAVA中的邏輯都是寫在了JSP中一樣,這樣雖然便于開發(fā),但是后期二次開發(fā)、維護都不方便。另外.NET語言大家都是知道的,它是不開源的,這個我覺得不敢用的,哪天你遇到致命bug了,沒法從底層排查,這也是為什么銀行、金融、電商很多行業(yè)不用這個語言原因了。
另外對于JAVA開發(fā)方面,其實如果有好的架構,JAVA程序員只寫邏輯,前端只寫前端,數(shù)據(jù)庫DBA只關注DBA,這樣的話,開發(fā)起來會非常的方便。我們團隊目前也是花了很長時間,也借鑒了很多成熟的框架,研發(fā)了一套適合商城開發(fā)的一套架構。
文章來源:博客園
<數(shù)商云(www.zhimaihui.cn)是國內知名企業(yè)級電商平臺提供商,為企業(yè)級商家提供最佳的系統(tǒng)開發(fā)(多種模式電商平臺搭建:B2B/B2B2C/B2C/O2O/新零售等)、供應商系統(tǒng)搭建及電商解決方案服務>
評論