溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

java B2B2C源碼電子商務(wù)平臺(tái) -----客戶端負(fù)載均衡策略

發(fā)布時(shí)間:2020-08-11 01:31:58 來源:ITPUB博客 閱讀:130 作者:bootb2b2c 欄目:編程語言

最近公司要開發(fā)商城,讓我多方咨詢,最后看了很多,要不就是代碼、表字段注釋不全,要不就是 bug多,要么就是文檔缺少,最后決定自己開發(fā)一套商城。

下面是開發(fā)的一些心得體會(huì),權(quán)且記錄下來,給自己做個(gè)記錄把。

 

 

之前一直都是在從事電商相關(guān)和互聯(lián)網(wǎng)金融開發(fā),處理過億級(jí)數(shù)據(jù)量,所以被目前這家公司看重。

由于 Java 是開源的,最近幾年 Hadoop 等開源產(chǎn)品越來越成熟,而且是基于 Java 的,所以最終選擇 Java 最后后臺(tái)開發(fā)語言,現(xiàn)在前端是自己的前端工程師寫的 JS,后期準(zhǔn)備改成前端是 PHP ,中間是 Go 語言,后臺(tái)服務(wù)器 JAVA,因?yàn)? PHP 寫前端很厲害,不過這個(gè)也是后期了。

 

 

控制層:這幾年 SpringBoot 發(fā)展的非?;穑议_發(fā)效率比較高, SpringMVC 系列已經(jīng)完全沒落了,所以現(xiàn)階段選擇 SpringBoot 。

 

視圖層: 這個(gè)我個(gè)人認(rèn)為哪一個(gè)都差不多, jsp 、 freemarker 也好,最終都是生成的 html 。

 

 

數(shù)據(jù)庫 設(shè)計(jì):

    1、關(guān)鍵的一個(gè)是絕對不能有外鍵強(qiáng)關(guān)聯(lián) 我看到類似用 hibernate 、 SpringData 產(chǎn)品的一些公司,全部都是強(qiáng)關(guān)聯(lián),那你以后想刪除一些數(shù)據(jù),那真是噩夢的,這個(gè)還不用說,查詢性能方面影響也是巨大的。

   2、分庫分表。這個(gè)必須要支持的,做互聯(lián)網(wǎng)數(shù)據(jù)量是非常的巨大的,如果開始就不能支持分庫分表,那么后期會(huì)至少花上千萬去做這事,最好一個(gè)例子就是當(dāng)當(dāng)網(wǎng),當(dāng)年很多事單庫的,到現(xiàn)在也沒有實(shí)現(xiàn)分庫分表,它們只能使用一些分區(qū)表 架構(gòu) ,分區(qū)表本身就存在很大問題,比如擴(kuò)展性、數(shù)據(jù)量過億都是問題!?。?!

3 、處理秒殺,作為互聯(lián)網(wǎng)項(xiàng)目,秒殺那也是必須要能支持才可以的。

 

 

 

數(shù)據(jù)庫選擇:最好還是 myslq,1、輕量,2、開源(阿里的alisql就是 MySQL 改個(gè)名字), 3、功能能滿足電商需求

 

搜索:選擇 ElasticSearch 較好,原因是他封裝的較好

權(quán)限對于電商來說不應(yīng)該設(shè)計(jì)的過于復(fù)雜,我認(rèn)為主要就兩張表就夠了,一個(gè)是角色 Role表,一個(gè)是資源Resources表,然后用戶和角色通過中間表關(guān)聯(lián)下就OK了,角色里面有資源,很簡單的邏輯,security、shiro這兩款的權(quán)限框架都能做出這個(gè)需求。

 

緩存:目前使用 Redis ,我看到有的公司使用的是 memcache,這個(gè)10年前,就這樣,功能非常的簡陋不說,主要一個(gè)問題是會(huì)有死緩存,就是緩存怎么也清空不了,這個(gè)你想想就知道多悲劇了,商家修改了價(jià)格,怎么也改不了,最后只能關(guān)閉機(jī)器重啟。還有的公司使用的還是hibernate提供的ehcache,這個(gè)大家自行了解即可,關(guān)鍵是他做集群有問題,搞電商不可能是單機(jī)的,剛上線至少是2臺(tái)服務(wù)器。

 

靜態(tài)化:目前使用 前端 靜態(tài)化,可以實(shí)現(xiàn)全站 60%都是靜態(tài)頁面,數(shù)據(jù)從集群redis緩存中讀取。

 

服務(wù)化:目前使用 SpringCloud , 雖然 阿里的 dubbo 確實(shí)做得非常好,但是目前市場來看 SpringCloud 有取代的趨勢,另外 SpringCloud 提供了更多的服務(wù)治理方案。

 

圖片服務(wù)器:這個(gè)也是非常重要的環(huán)節(jié),目前我們測試系統(tǒng)都有 1 5個(gè)G的圖片了?。。。【€上估計(jì)會(huì)是以T計(jì)算的,覺得是需要獨(dú)立的圖片服務(wù)器的。

 

集群、負(fù)載、分布式:前面的分庫分表、服務(wù)化、圖片服務(wù)器都是為集群、負(fù)載、分布式做準(zhǔn)備的,集群需要基于 CDN做動(dòng)態(tài)切換,服務(wù)器用Nginx做復(fù)雜,業(yè)務(wù)層用 SpringCloud 做分布式服務(wù)。

 

下面整理下整個(gè) 架構(gòu) 吧:

    展示層/控制層 : SpringBoot ,在 spring 中做讀寫分離

    持久層:mybatis

     數(shù)據(jù)庫 MySQL / Oracle ,支持主從復(fù)制、讀寫分離、多機(jī)備份、支持分庫分表

    緩存機(jī)制:redis,CDN圖片緩存,也是支持熱備份、高并發(fā)的

    靜態(tài)化機(jī)制: 系統(tǒng)頁面做靜態(tài)化,提高訪問速度

    圖片服務(wù)器:購買 專用 服務(wù)器,用 nginx做負(fù)載

    

   
    搜索引擎: 分布式 ElasticSearch
   

    服務(wù)器: Linux

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

    圖片服務(wù)器:通過nginx做的,SFTP方式統(tǒng)一上傳

    集群方案:多機(jī)tomcat,seesion統(tǒng)一管理,圖片統(tǒng)一管理。這些需要一套解決方案。

    服務(wù)器要求:linux/windows,4G內(nèi)存,空間20G以上

    

 

 

   最后對于JAVA領(lǐng)域商城的開發(fā),其實(shí)在 PHP 、 .NET語言中,已經(jīng)有非常多的成熟同類產(chǎn)品了,比如shopnc、ecshop等等等,但是PHP的邏輯都是寫在前臺(tái)文件中,這個(gè)就跟JAVA中的邏輯都是寫在了JSP中一樣,這樣雖然便于開發(fā),但是后期二次開發(fā)、維護(hù)都不方便。另外.NET語言大家都是知道的,它是不開源的,這個(gè)我覺得不敢用的,哪天你遇到致命bug了,沒法從底層排查,這也是為什么銀行、金融、電商很多行業(yè)不用這個(gè)語言原因了。

  

  另外對于JAVA開發(fā)方面,其實(shí)如果有好的 架構(gòu) , JAVA程序員只寫邏輯,前端只寫前端, 數(shù)據(jù)庫 DBA只關(guān)注DBA,這樣的話,開發(fā)起來會(huì)非常的方便。我們團(tuán)隊(duì)目前也是花了很長時(shí)間,也借鑒了很多成熟的框架,研發(fā)了一套適合商城開發(fā)的一套架構(gòu)。等到以后有機(jī)會(huì)可以開源出來給大家。

 

 

 


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI