分享大型Java多用戶商城系統開發歷程

近公司要搞商城,讓我多方諮詢,最後看了不少,要不就是代碼、表字段註釋不全,要不就是bug多,要麼就是文檔缺乏,最後決定本身開發一套商城。php

下面是開發的一些心得體會,權且記錄下來,給本身作個記錄把。前端

 

本人QQ:4407509,有問題能夠聯繫本人java

以前一直都是在從事電商相關和互聯網金融開發,處理過億級數據量,因此被目前這家公司看重。mysql

因爲Java是開源的,最近幾年Hadoop等開源產品愈來愈成熟,並且是基於Java的,因此最終選擇Java最後後臺開發語言,如今前端是本身的前端工程師寫的JS,後期準備改爲前端是PHP,中間是Go語言,後臺服務器是JAVA,由於PHP寫前端很厲害,不過這個也是後期了。linux

 

 

控制層:這幾年springMVC發展的很是火,並且開發效率比較高,struts系列已經徹底沒落了,因此現階段選擇SrpingMVC。nginx

 

視圖層:網上已經有很是多的測試過JSP、freemarkder、velocity等,結果性能:velocity>freemarker>jsp,開發速度:velocity>freemarker>jsp程序員

 

 

數據庫設計:redis

    一、關鍵的一個是絕對不能有外鍵強關聯我看到相似用hibernate產品的一些公司,所有都是強關聯,那你之後想刪除一些數據,那真是噩夢的,這個還不用說,查詢性能方面影響也是巨大的。spring

   二、分庫分表,這個必需要支持的,作互聯網數據量是很是的巨大的,若是開始就不能支持分庫分表,那麼後期會至少花上千萬去作這事,最好一個例子就是噹噹網,當年不少事單庫的,到如今也沒有實現分庫分表,它們只能使用一些分區表架構,分區表自己就存在很大問題,好比擴展性、數據量過億都是問題!!!!sql

 

數據庫選擇:最好仍是myslq,一、輕量,二、開源(阿里的alisql就是MySQL改個名字),三、功能能知足電商需求

 

搜索:選擇lucene較好,緣由是他封裝的較好,權限對於電商來講不該該設計的過於複雜,我認爲主要就兩張表就夠了,一個是角色Role表,一個是資源Resources表,而後用戶和角色經過中間表關聯下就OK了,角色裏面有資源,很簡單的邏輯,security、shiro這兩款的權限框架都能作出這個需求。

 

緩存:目前使用Redis,我看到有的公司使用的是memcache,這個10年前,就這樣,功能很是的簡陋不說,主要一個問題是會有死緩存,就是緩存怎麼也清空不了,這個你想一想就知道多悲劇了,商家修改了價格,怎麼也改不了,最後只能關閉機器重啓。還有的公司使用的仍是hibernate提供的ehcache,這個你們自行了解便可,關鍵是他作集羣有問題,搞電商不多是單機的,剛上線至少是2臺服務器。

 

靜態化:目前使用velocity的靜態化,能夠實現全站60%都是靜態頁面,數據從集羣redis緩存中讀取。

 

服務化:目前使用dubbo,阿里的東西仍是經受住很大考驗的,即時老外的東西再好,也沒有這樣的場景去考驗,因此都仍是理論階段,這個讓國人蠻自豪的!

 

 

圖片服務器:這個也是很是重要的環節,目前咱們測試系統都有5個G的圖片了!!!!線上估計會是以T計算的,以爲是須要獨立的圖片服務器的。

 

集羣、負載、分佈式:前面的分庫分表、服務化、圖片服務器都是爲集羣、負載、分佈式作準備的,集羣須要基於CDN作動態切換,服務器用Nginx作複雜,業務層用dubbo作分佈式服務。

 

下面整理下整個架構吧:

    展現層/控制層:springMVC,在spring中作讀寫分離

    持久層:mybatis

    數據庫MySQL/Oracle,支持主從複製、讀寫分離、多機備份、支持分庫分表

    緩存機制:redis,CDN圖片緩存,也是支持熱備份、高併發的

    靜態化機制:velocity

    圖片服務器:購買佔用服務器,用nginx作負載

    

    安全框架 springSecurity 
    搜索引擎: Lucene 
    中文分詞:IKAnalyzer 

    服務器:Linux

    中間件:tomcat、nginx,還有其餘N多的支持集羣部署的安裝間接軟件,就不一一列舉了

    圖片服務器:經過nginx作的,SFTP方式統一上傳

    集羣方案:多機tomcat,seesion統一管理,圖片統一管理。這些須要一套解決方案。

    服務器要求:linux/windows,4G內存,空間20G以上

    

   最後對於JAVA領域商城的開發,其實在PHP、.NET語言中,已經有很是多的成熟同類產品了,好比shopnc、ecshop等等等,可是PHP的邏輯都是寫在前臺文件中,這個就跟JAVA中的邏輯都是寫在了JSP中同樣,這樣雖然便於開發,可是後期二次開發、維護都不方便。另外.NET語言你們都是知道的,它是不開源的,這個我以爲不敢用的,哪天你遇到致命bug了,無法從底層排查,這也是爲何銀行、金融、電商不少行業不用這個語言緣由了。

  

  另外對於JAVA開發方面,其實若是有好的架構,JAVA程序員只寫邏輯,前端只寫前端,數據庫DBA只關注DBA,這樣的話,開發起來會很是的方便。咱們團隊目前也是花了很長時間,也借鑑了不少成熟的框架,研發了一套適合商城開發的一套架構。等到之後有機會能夠開源出來給你們。

 

網址:www.redpigmall.net,本人QQ:4407509,有問題能夠聯繫本人

相關文章
相關標籤/搜索