城風(fēng)——基于SpringBoot2構(gòu)建社區(qū)商城系統(tǒng)開(kāi)源

項(xiàng)目的緣由

在當(dāng)前互聯(lián)網(wǎng)飛速發(fā)展的大潮下,人們的生活也變的更加便捷。本項(xiàng)目就是在這一背景下產(chǎn)生的,為了方便同一個(gè)社區(qū)下的用戶交友、共享動(dòng)態(tài)、獲得社區(qū)的幫助、了解社區(qū)新聞動(dòng)態(tài)的同時(shí)享受到購(gòu)物的便捷。用戶可以與同一個(gè)社區(qū)的用戶之間進(jìn)行拼團(tuán)購(gòu)物,既能享受到購(gòu)物的優(yōu)惠又能體驗(yàn)到物流的快捷。

項(xiàng)目的演進(jìn)

首先從框架上:

SpringBoot2的誕生已經(jīng)逐漸成為Java后端研發(fā)的主流解決方案,SpringBoot2提供了更多的第三方模塊支持、全面基于Java8、基于Servlet3.0,因而具有更好的性能。至于數(shù)據(jù)訪問(wèn)層,為了更好的控制SQL語(yǔ)句的編寫(xiě),以及后期針對(duì)SQL進(jìn)行優(yōu)化我選擇了更為靈活小巧的MyBatis。

數(shù)據(jù)存儲(chǔ)上:

核心業(yè)務(wù)數(shù)據(jù),如用戶基礎(chǔ)信息、社區(qū)信息、訂單、拼單業(yè)務(wù)信息等,我這里采用關(guān)系型數(shù)據(jù)庫(kù)MySQL,Driud數(shù)據(jù)庫(kù)連接詞監(jiān)控SQL,從而監(jiān)控SQL的運(yùn)行狀況找出SQL的優(yōu)化方案。

首頁(yè)熱點(diǎn)數(shù)據(jù),首頁(yè)熱點(diǎn)數(shù)據(jù)因?yàn)樾枰?jīng)常查詢而且某些數(shù)據(jù)是基本不變的,故而針對(duì)不變的數(shù)據(jù)我這里采用SpringCache做緩存,針對(duì)經(jīng)常變的熱點(diǎn)數(shù)據(jù)我存入Redis,如首頁(yè)物業(yè)公告、社區(qū)公告、最近新聞等信息,采用Redis的Sorted Set和Hash來(lái)存儲(chǔ),進(jìn)而提高性能。

新聞的具體信息,因?yàn)檫@里我更多的是文章的具體展示,Redis所提供的數(shù)據(jù)結(jié)構(gòu)以及MySQL關(guān)系型的特點(diǎn)對(duì)于文章內(nèi)容的存儲(chǔ)都不太友好,因此我這里采用了Mongodb這種文檔型數(shù)據(jù)庫(kù)存儲(chǔ)非結(jié)構(gòu)化數(shù)據(jù)。

商品信息,為了幫助商家更好的維護(hù)商品信息做商品推廣,需要收集用戶的行為、確定賣點(diǎn)、在用戶需要的地方進(jìn)行廣告推薦。這里的功能我采用了ELK技術(shù),在用戶添加商品入購(gòu)物車、下單商品、拼單商品的同時(shí),收集商品的銷售情況進(jìn)行導(dǎo)入ElasticSearch進(jìn)行數(shù)據(jù)的分析與聚合。但是因?yàn)槭占挠脩粜袨樾畔⑻珕我?、更多的用戶行為日志如用戶在某個(gè)頁(yè)面的停留時(shí)長(zhǎng)、每個(gè)商品的UV與PV等信息還待處理、需要更多的推薦算法來(lái)豐富這塊內(nèi)容吧。后期希望可以加上。。。

關(guān)于吞吐量方面:

主要是消息隊(duì)列的應(yīng)用、分布式鎖的應(yīng)用。為了保證數(shù)據(jù)庫(kù)數(shù)據(jù)的正確性、我們需要在用戶進(jìn)行某些操作之后進(jìn)行數(shù)據(jù)狀態(tài)的同步,簡(jiǎn)單的更新操作容易造成業(yè)務(wù)的阻塞、降低并發(fā)量,此外過(guò)多的事務(wù)容易產(chǎn)生更多的數(shù)據(jù)庫(kù)級(jí)別表鎖、行鎖,降低數(shù)據(jù)庫(kù)的性能我這里采用Redisson來(lái)代替事務(wù)的使用,在系統(tǒng)啟動(dòng)的過(guò)程中、拼單、下單等過(guò)程中采用Rabbitmq、Kafka收集數(shù)據(jù)的流動(dòng)情況,異步更新。

認(rèn)證方面:

此系統(tǒng)將用于Android、小程序,前端也將采用Vue,故而這里不再采用傳統(tǒng)的Cookie、Session維護(hù)用戶狀態(tài)信息。JWT生成Token的方式也算是一個(gè)應(yīng)用多年的行業(yè)標(biāo)準(zhǔn)、這里采用與SpringBoot結(jié)合更友好的SpringSecurity來(lái)進(jìn)行權(quán)限的控制與管理。為了更好的擴(kuò)展、這里最好還是應(yīng)該采用RBAC的權(quán)限模型。

總結(jié):


該項(xiàng)目屬于雛形階段可以滿足常用的業(yè)務(wù)并發(fā)量、更多的應(yīng)該考慮業(yè)務(wù)功能的豐富(希望各位能給出建議)、考慮業(yè)務(wù)的拆分、分布式環(huán)境下項(xiàng)目的部署與運(yùn)行(如分布式一致性、分布式事務(wù))、環(huán)境的部署(遷移到Docker、K8S的云環(huán)境中)、數(shù)據(jù)的拆分(分庫(kù)分表)。更大的業(yè)務(wù)量,這里應(yīng)該采用分流、限流算法,SpringCloud下服務(wù)的熔斷降級(jí)等等。例外針對(duì)已有的部分還待改進(jìn)、例如緩存使用的策略、如何防止緩存穿透和緩存雪崩等問(wèn)題

基本界面展示:

以上Java大型互聯(lián)網(wǎng)技術(shù)的視頻免費(fèi)分享給大家。歡迎大家加入java互聯(lián)網(wǎng)架構(gòu)Q裙:815220368,進(jìn)群免費(fèi)領(lǐng)取java資料和免費(fèi)解答,幫助來(lái)提升自己

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容