忻州内厩机械设备有限公司

熱門系統(tǒng)產(chǎn)品
電商交易類產(chǎn)品
渠道/經(jīng)銷商產(chǎn)品
AI人工智能產(chǎn)品
業(yè)務(wù)協(xié)同系統(tǒng)產(chǎn)品
其他產(chǎn)品與服務(wù)
沒有你合適的?
我要定制 >
AI智能合同審核系統(tǒng)
AI智能合同審核系統(tǒng)
應(yīng)用場(chǎng)景廣泛,適用于商業(yè)合同、采購(gòu)合同、合作協(xié)議等多種場(chǎng)景
AI智能標(biāo)書系統(tǒng)
AI智能標(biāo)書系統(tǒng)
AI智能寫作,標(biāo)書全流程管理,多行業(yè)場(chǎng)景適配
AI智能客服系統(tǒng)
AI智能客服系統(tǒng)
AI智能應(yīng)答,全渠道管理,情感交互,知識(shí)庫(kù)迭代
AI智能電商財(cái)務(wù)分析系統(tǒng)
AI智能電商財(cái)務(wù)分析系統(tǒng)
智能財(cái)務(wù)對(duì)賬,全渠道數(shù)據(jù)治理,業(yè)財(cái)一體化管理,動(dòng)態(tài)決策支持
AI商城系統(tǒng)
AI商城系統(tǒng)
AI驅(qū)動(dòng)決策,全渠道智能融合,數(shù)據(jù)驅(qū)動(dòng)精細(xì)化運(yùn)營(yíng)
B2B智能體開發(fā)平臺(tái)
B2B智能體開發(fā)平臺(tái)
低代碼智能體構(gòu)建,B2B交易流程自動(dòng)化,企業(yè)級(jí)系統(tǒng)無縫集成
智能電商對(duì)賬系統(tǒng)
智能電商對(duì)賬系統(tǒng)
全流程自動(dòng)化對(duì)賬,多平臺(tái)數(shù)據(jù)智能整合,實(shí)時(shí)差異預(yù)警追蹤,智能風(fēng)控合規(guī)引擎
AI智能下單系統(tǒng)
AI智能下單系統(tǒng)
AI智能決策引擎,全鏈路自動(dòng)化交易,多端無縫協(xié)同,動(dòng)態(tài)庫(kù)存實(shí)時(shí)同步
電商AI智能體開發(fā)平臺(tái)
電商AI智能體開發(fā)平臺(tái)
業(yè)務(wù)流程自動(dòng)化,智能客服,智能數(shù)據(jù)分析與決策
大模型訂貨平臺(tái)
大模型訂貨平臺(tái)
智能預(yù)測(cè),高效訂貨,數(shù)據(jù)驅(qū)動(dòng),客戶體驗(yàn)

Java大型電商系列教程—JavaElectricalbusiness(序章)

發(fā)布時(shí)間: 2021-01-15 文章分類: 技術(shù)干貨
閱讀量: 0

電商商城系統(tǒng)

本次介紹的項(xiàng)目是自己學(xué)習(xí)整理出來的,可能對(duì)于開源界來說只是一個(gè)小舟,不過還是希望能寫好這個(gè)項(xiàng)目的wiki,面向小白或初級(jí)開發(fā)者,讓大家了解并親自打造自己的電商后臺(tái)系統(tǒng)。

對(duì),本項(xiàng)目已經(jīng)開源,不過還是希望各位大大能認(rèn)真看完本系列后,再去下載源碼,在本系列最后一章會(huì)給出開源地址,謝謝。

大家都知道,一個(gè)真實(shí)的企業(yè)級(jí)項(xiàng)目開發(fā)過程、大型企業(yè)項(xiàng)目開發(fā)的編碼思維、經(jīng)驗(yàn)、技巧、高質(zhì)量的線上作品都是需要耗費(fèi)人力物力和成本,同樣我們的項(xiàng)目也需要你擠出時(shí)間慢慢消化哦!

讓我們來看看我們最熟悉的淘寶架構(gòu)

Java大型電商系列教程—JavaElectricalbusiness(序章)

當(dāng)然,沒有哪個(gè)網(wǎng)站平臺(tái)搭建一開始就是這么豐富的,都是一步一步進(jìn)展起來的。

我們本次也要從核心模塊-演進(jìn)細(xì)節(jié)到核心架構(gòu)-設(shè)計(jì)思想,最后實(shí)現(xiàn)高性能、高并發(fā)、高可用的電商實(shí)戰(zhàn)項(xiàng)目。

本次我們將講的有數(shù)據(jù)庫(kù)及接口、項(xiàng)目初始化、用戶模塊、分類模塊、商品模塊、購(gòu)物車模塊、收貨地址模塊、支付模塊、訂單模塊······

由于是序章,我們先來了解一下,一個(gè)大型Java項(xiàng)目架構(gòu)演進(jìn)解析。

首先從一個(gè)小網(wǎng)站說起,一臺(tái)服務(wù)器就夠了,數(shù)據(jù)庫(kù)與應(yīng)用均部署到一個(gè)服務(wù)器上。

Java大型電商系列教程—JavaElectricalbusiness(序章)

隨著用戶增加,數(shù)據(jù)量增大,硬盤支撐不起,這時(shí)一臺(tái)服務(wù)器已經(jīng)支持不起了。我們可以將應(yīng)用服務(wù)器和數(shù)據(jù)服務(wù)分離,給應(yīng)用服務(wù)器配置更好的CPU、內(nèi)存等,給數(shù)據(jù)服務(wù)器配置更好更快的硬盤,如下圖用了三臺(tái)服務(wù)器以提高性能。

Java大型電商系列教程—JavaElectricalbusiness(序章)

即使文件服務(wù)器宕機(jī),該架構(gòu)依然可以支持使用,隨著訪問的并發(fā)增高,為了降低接口訪問時(shí)間、提高服務(wù)性能,我們需要繼續(xù)優(yōu)化演進(jìn),我們會(huì)發(fā)現(xiàn)有很多數(shù)據(jù)其實(shí)并不需要每次都從數(shù)據(jù)庫(kù)中讀取,于是我們?cè)黾恿司彺妫饕?0%的訪問都集中在20%的數(shù)據(jù)上(28原則),只要緩存得當(dāng),系統(tǒng)的性能也將得到提升,而緩存又分為兩種Local Cache本地緩存、Remote Distributed Cache遠(yuǎn)程單機(jī)緩存(遠(yuǎn)程分布式緩存)下圖為分布式緩存集群(什么樣的業(yè)務(wù)使用遠(yuǎn)程緩存、什么業(yè)務(wù)使用本地緩存)

Java大型電商系列教程—JavaElectricalbusiness(序章)

這個(gè)時(shí)候隨著訪問的QPS不斷提高,服務(wù)器的處理能力有限,例如Tomcat,則其將成為一個(gè)瓶頸,即使購(gòu)買更好的硬件,但總是存在上限且成本也不低,這時(shí)我們就需要做個(gè)服務(wù)器的集群(負(fù)載均衡調(diào)度服務(wù)器),這樣我們就可以橫向擴(kuò)展我們的服務(wù)器,解決服務(wù)器處理能力的瓶頸。

Java大型電商系列教程—JavaElectricalbusiness(序章)

這時(shí)我們還要思考幾個(gè)問題,所謂負(fù)載均衡的調(diào)度策略是什么,適合什么場(chǎng)景,當(dāng)我們登錄A服務(wù)器,Session信息存儲(chǔ)在A服務(wù)器上,假設(shè)我們的(IPHash)負(fù)載均衡將其信息分散到其他服務(wù)器,但是其不夠分散也不夠均勻,可能造成某些服務(wù)器壓力過大,某些則沒有壓力,這時(shí)機(jī)器網(wǎng)卡的帶寬就可能成為瓶頸,這時(shí)我們使用輪詢或最小連接負(fù)載的策略,可能導(dǎo)致訪問A服務(wù)器后,再訪問B服務(wù)器時(shí)讀取不到Session信息,這時(shí)我們就要解決Session管理的問題,我們使用Session Sticky(粘制會(huì)話)來處理這個(gè)問題。

就比如說每次吃飯都為了保證用的是我們自己的碗筷,只要在飯店中存了我們的碗筷,則每次去這家飯店吃就好了,其處理方式:對(duì)于同一連接中的數(shù)據(jù)包,負(fù)載均衡將其進(jìn)行一個(gè)NAT轉(zhuǎn)換后轉(zhuǎn)發(fā)至后端固定的服務(wù)器進(jìn)行處理,如下圖所示,這種方案解決了session共享問題(缺點(diǎn):服務(wù)器一旦重啟其session將全部消失、負(fù)載均衡服務(wù)器成為一個(gè)有狀態(tài)的服務(wù)器,比較難實(shí)現(xiàn)容災(zāi))

Java大型電商系列教程—JavaElectricalbusiness(序章)

我們?cè)倏纯吹诙€(gè)解決方案,兩個(gè)服務(wù)器通過復(fù)制都保存Browser1的session信息(缺點(diǎn):應(yīng)用服務(wù)器間的帶寬問題,服務(wù)器間要不斷的同步session信息、大量用戶在線時(shí)服務(wù)器占用內(nèi)存過多、不適合做大規(guī)模集群)

Java大型電商系列教程—JavaElectricalbusiness(序章)

再看看第三個(gè)方案,基于cookie,即每次吃飯都帶上自己的碗筷,則去哪家飯店都可以吃飯,用攜帶session信息的cookie去訪問服務(wù)器,其也解決了session共享的問題(缺點(diǎn):cookie長(zhǎng)度有限,且保存在瀏覽器上,安全性沒有保障)

Java大型電商系列教程—JavaElectricalbusiness(序章)

接著再看看第四種解決方案,我們將session做成一個(gè)session服務(wù)器,browser1通過負(fù)載均衡請(qǐng)求服務(wù)器,服務(wù)器將session信息存儲(chǔ)到session服務(wù)器中,當(dāng)想要獲取時(shí)就反向進(jìn)行。(缺點(diǎn):目前session Server是單點(diǎn)的,如何解決單點(diǎn),保證可用性)

Java大型電商系列教程—JavaElectricalbusiness(序章)

我們可以將Session Server也做成集群,其適合用于Session數(shù)量與web服務(wù)數(shù)量大的情況下,更改架構(gòu)后,也要修改應(yīng)用存儲(chǔ)session的業(yè)務(wù)邏輯。 接下來我們?cè)倏纯磾?shù)據(jù)庫(kù),讀寫都要經(jīng)過數(shù)據(jù)庫(kù),當(dāng)用戶量達(dá)到一定量時(shí),數(shù)據(jù)庫(kù)又將成為一個(gè)瓶頸,則我們將如何解決?

我們可以使用數(shù)據(jù)庫(kù)的讀寫分離,主從庫(kù),并通過統(tǒng)一的數(shù)據(jù)訪問模型進(jìn)行訪問,將所有讀操作引入到Slave服務(wù)器,將寫操作引入到主庫(kù)當(dāng)中,由于數(shù)據(jù)庫(kù)讀寫分離,所以應(yīng)用程序也要有相應(yīng)的變化,使用數(shù)據(jù)訪問模塊讓應(yīng)用程序開發(fā)人員不用理會(huì)讀寫分離的存在,這樣多數(shù)據(jù)源讀寫代碼對(duì)我們的業(yè)務(wù)就沒有了侵入(代碼層的演變,如何支持多數(shù)據(jù)源、如何封裝對(duì)業(yè)務(wù)沒有侵入、如何使用現(xiàn)用的ORM框架實(shí)現(xiàn)數(shù)據(jù)讀寫分離、是否更換ORM、其優(yōu)缺點(diǎn)?)

Java大型電商系列教程—JavaElectricalbusiness(序章)

當(dāng)我們?cè)L問過大,I/O過大,我們數(shù)據(jù)的讀寫分離又將遇到這幾個(gè)問題,主從庫(kù)復(fù)制時(shí)是否延遲(分機(jī)房部署、跨機(jī)房傳輸),應(yīng)用對(duì)于數(shù)據(jù)源的路由問題,接著我們?yōu)榱颂岣叻?wù)器,增加了CND和反向代理服務(wù)器,使用CDN可以解決不同地方訪問速度問題、反向代理可以在機(jī)房中緩存用戶的資源。

Java大型電商系列教程—JavaElectricalbusiness(序章)

這時(shí)文件服務(wù)器又出現(xiàn)了瓶頸,我們將文件服務(wù)器改為分布式文件服務(wù)器集群,我們要考慮到:如何不影響線上的業(yè)務(wù)訪問,是否需要業(yè)務(wù)部門幫忙清理數(shù)據(jù),是否需要備份服務(wù)器,是否需要重新做域名解析。

Java大型電商系列教程—JavaElectricalbusiness(序章)

這時(shí)我們的數(shù)據(jù)庫(kù)又出現(xiàn)了新的瓶頸,我們選擇專庫(kù)專用的方式,進(jìn)行數(shù)據(jù)庫(kù)的垂直拆分,可以解決寫數(shù)據(jù)、并發(fā)、量大的問題,分庫(kù)后又將帶來一些新的問題:跨業(yè)務(wù)的事務(wù)(分布式事務(wù))

Java大型電商系列教程—JavaElectricalbusiness(序章)

當(dāng)某個(gè)數(shù)據(jù)的訪問量、數(shù)據(jù)量、日志等過大達(dá)到瓶頸時(shí),這時(shí)我們就要進(jìn)行數(shù)據(jù)庫(kù)的水平拆分,我們將User拆分成Users1和Users2,水平拆分即將同一個(gè)數(shù)據(jù)表的數(shù)據(jù)拆分到兩個(gè)數(shù)據(jù)庫(kù)當(dāng)中,這時(shí)我們就解決了單數(shù)據(jù)庫(kù)的瓶頸。

Java大型電商系列教程—JavaElectricalbusiness(序章)

水平拆分后,SQL路由出現(xiàn)一些問題,假設(shè)我們想知道某個(gè)用戶是存在Users1還是Users2中,且由于分庫(kù),主鍵的策略也將有所不同,同時(shí)也將面臨一個(gè)分頁的問題(后臺(tái)管理系統(tǒng)在進(jìn)行展示時(shí)還要考慮分頁的問題),當(dāng)完成后,我們又發(fā)現(xiàn)應(yīng)用服務(wù)器的搜索量上升,這時(shí)我們將應(yīng)用服務(wù)器的搜索功能提取出來做成搜索引擎,同時(shí)部分場(chǎng)景使用NoSQL提高性能。

Java大型電商系列教程—JavaElectricalbusiness(序章)

當(dāng)然以上架構(gòu)還存在部分問題,如負(fù)載均衡服務(wù)器是單點(diǎn),因此也可以將負(fù)載均衡服務(wù)器做成集群,進(jìn)行主從的熱備,同時(shí)做一個(gè)自動(dòng)切換的解決方案。

過程中:安全性、數(shù)據(jù)分析、監(jiān)控、反作弊… 繼續(xù)發(fā)展:SOA架構(gòu)、服務(wù)化、消息隊(duì)列、任務(wù)調(diào)度、多機(jī)房…

因此任何一個(gè)高大上的項(xiàng)目技術(shù)架構(gòu)和開發(fā)技術(shù)實(shí)現(xiàn)不是一蹴而就的。

 

文章來源:51CTO,作者:AwakeningCode;

編者:云朵匠 | 數(shù)商云(微信ID:shushangyun_com)

【數(shù)商云www.zhimaihui.cn】致力于提供企業(yè)級(jí)的電子商務(wù)平臺(tái)建設(shè)服務(wù),長(zhǎng)期為大中型企業(yè)打造數(shù)據(jù)化、商業(yè)化、智能化的電子商務(wù)建設(shè)方案,同時(shí)我們還提供B2B電子商務(wù)平臺(tái)、B2B2C多用戶商城系統(tǒng)、B2C電子商務(wù)系統(tǒng)、跨境進(jìn)口電商平臺(tái)、供應(yīng)商管理系統(tǒng)、新零售電商平臺(tái)、直播電商系統(tǒng)等一系列系統(tǒng)定制開發(fā)服務(wù)。

點(diǎn)贊 | 1

數(shù)商云是一家全鏈數(shù)字化運(yùn)營(yíng)服務(wù)商,專注于提供SCM/企業(yè)采購(gòu)/SRM供應(yīng)商/DMS經(jīng)銷商/渠道商等管理系統(tǒng),B2B/S2B/S2C/B2B2C/B2C等電商系統(tǒng),從“供應(yīng)鏈——生產(chǎn)運(yùn)營(yíng)——銷售市場(chǎng)”端到端的全鏈數(shù)字化產(chǎn)品和方案,致力于通過數(shù)字化和新技術(shù)為企業(yè)創(chuàng)造商業(yè)數(shù)字化價(jià)值。

添加企業(yè)微信獲取更多資料
添加企業(yè)微信獲取更多資料
相關(guān)文章

評(píng)論

剩余-200
發(fā)表
最新資訊

最新資訊

更多 >
推薦閱讀

推薦閱讀

填寫以下信息, 免費(fèi)獲取方案報(bào)價(jià)
姓名
手機(jī)號(hào)碼
企業(yè)名稱
  • 建筑建材
  • 化工
  • 鋼鐵
  • 機(jī)械設(shè)備
  • 原材料
  • 工業(yè)
  • 環(huán)保
  • 生鮮
  • 醫(yī)療
  • 快消品
  • 農(nóng)林牧漁
  • 汽車汽配
  • 橡膠
  • 工程
  • 加工
  • 儀器儀表
  • 紡織
  • 服裝
  • 電子元器件
  • 物流
  • 化塑
  • 食品
  • 房地產(chǎn)
  • 交通運(yùn)輸
  • 能源
  • 印刷
  • 教育
  • 跨境電商
  • 旅游
  • 皮革
  • 3C數(shù)碼
  • 金屬制品
  • 批發(fā)
  • 研究和發(fā)展
  • 其他行業(yè)
需求描述
填寫以下信息馬上為您安排系統(tǒng)演示
姓名
手機(jī)號(hào)碼
你的職位
企業(yè)名稱

恭喜您的需求提交成功

尊敬的用戶,您好!

您的需求我們已經(jīng)收到,我們會(huì)為您安排專屬電商商務(wù)顧問在24小時(shí)內(nèi)(工作日時(shí)間)內(nèi)與您取得聯(lián)系,請(qǐng)您在此期間保持電話暢通,并且注意接聽來自廣州區(qū)域的來電。
感謝您的支持!

您好,我是您的專屬產(chǎn)品顧問
掃碼添加我的微信,免費(fèi)體驗(yàn)系統(tǒng)
(工作日09:00 - 18:00)
專屬顧問圖片
電話咨詢 (工作日09:00 - 18:00)
客服熱線: 4008 868 127
售前熱線: 189 2432 2993
掃碼即可快速撥打熱線