城風——基于SpringBoot2構建社區(qū)商城系統(tǒng)開源

本項目是和小伙伴開發(fā)的一套基于SpringBoot2的社區(qū)商城系統(tǒng)异赫。主要是為了方便用戶交友的同時拼單購物椅挣。本項目目前還屬于雛形头岔,但基本的業(yè)務已經(jīng)實現(xiàn)了大概∈笾ぃ基于該系統(tǒng)的前端采用Vue構建峡竣。同時兼顧Android和小程序端,前端展示正在開發(fā)過程中量九,后續(xù)會展出适掰。

項目地址:

https://github.com/fuyunwang/ChengFeng1.5

項目的緣由

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

項目的演進

首先從框架上:

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

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

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

首頁熱點數(shù)據(jù),首頁熱點數(shù)據(jù)因為需要經(jīng)常查詢而且某些數(shù)據(jù)是基本不變的桑李,故而針對不變的數(shù)據(jù)我這里采用SpringCache做緩存踱蛀,針對經(jīng)常變的熱點數(shù)據(jù)我存入Redis,如首頁物業(yè)公告、社區(qū)公告贵白、最近新聞等信息率拒,采用Redis的Sorted Set和Hash來存儲,進而提高性能禁荒。

新聞的具體信息,因為這里我更多的是文章的具體展示,Redis所提供的數(shù)據(jù)結構以及MySQL關系型的特點對于文章內(nèi)容的存儲都不太友好,因此我這里采用了Mongodb這種文檔型數(shù)據(jù)庫存儲非結構化數(shù)據(jù)猬膨。

商品信息,為了幫助商家更好的維護商品信息做商品推廣,需要收集用戶的行為、確定賣點呛伴、在用戶需要的地方進行廣告推薦勃痴。這里的功能我采用了ELK技術谒所,在用戶添加商品入購物車、下單商品沛申、拼單商品的同時劣领,收集商品的銷售情況進行導入ElasticSearch進行數(shù)據(jù)的分析與聚合。但是因為收集的用戶行為信息太單一铁材、更多的用戶行為日志如用戶在某個頁面的停留時長尖淘、每個商品的UV與PV等信息還待處理、需要更多的推薦算法來豐富這塊內(nèi)容吧著觉。后期希望可以加上村生。。固惯。

關于吞吐量方面:

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

認證方面:

此系統(tǒng)將用于Android汛骂、小程序,前端也將采用Vue罕模,故而這里不再采用傳統(tǒng)的Cookie、Session維護用戶狀態(tài)信息帘瞭。JWT生成Token的方式也算是一個應用多年的行業(yè)標準淑掌、這里采用與SpringBoot結合更友好的SpringSecurity來進行權限的控制與管理。為了更好的擴展蝶念、這里最好還是應該采用RBAC的權限模型抛腕。

總結:

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

基本界面展示:

image
image
image

image
image
image

接口文檔:

文檔地址:

https://github.com/fuyunwang/ChengFeng1.5/wiki

例子:

image

基于Kibana進行簡單的數(shù)據(jù)統(tǒng)計:

image

技術包括

  1. SpringBoot 2.1.3
  2. Spring Security+JWT
  3. Spring Boot Cache
  4. Spring Boot Mail
  5. MyBatis+PageHelper
  6. MySQL+Druid
  7. Spring Data Mongodb
  8. Spring Data ElasticSearch
  9. Redis+Redisson
  10. RabbitMQ
  11. Kafka
  12. Memcached
  13. FastDFS
  14. Quartz
  15. Ehcache
  16. Thymeleaf
  17. Hibernate Validator
  18. Guava+apache commons+jackson+joda time
  19. Swagger
  20. Tomcat+Nginx
  21. CentOS 7

要點

  1. 基于Redisson構建分布式鎖

  2. 基于RabbitMQ實現(xiàn)延遲消息投遞,提高系統(tǒng)的吞吐量

  3. 數(shù)據(jù)庫層優(yōu)化

    1. 長sql加入ehcache緩存

    2. 用戶認證信息加入memcached緩存

    3. 采用spring cache緩存熱點數(shù)據(jù)

    4. 熱點數(shù)據(jù)預加入Redis(如商品的庫存信息),采用Redis預減操作,然后采用定時任務同步緩存及數(shù)據(jù)庫

  4. Kafka收集訂單信息,ElasticSearch進行數(shù)據(jù)分析,產(chǎn)生熱賣商品并推薦

寫在后面

本項目多處使用Java8提供的新特性扯饶。包括lambda表達式恒削、Stream流編程,并結合Guava的工具類庫尾序,恩钓丰,it is very nice.

自己以前做過一段時間的Android開發(fā),因而對于后臺方面完全是初窺門徑每币,開發(fā)本系統(tǒng)主要還是希望能夠維護一個完整項目的同時學習更多的知識携丁。

自己對于后端的許多技術仍然屬于懵懂階段、對于一些技術的學習還是泛而不精兰怠。因此該項目必然存在諸多問題梦鉴,希望各位不吝賜教。

本項目仍然屬于單體架構揭保,后續(xù)會推出SpringCloud版本

本項目持續(xù)維護肥橙,感謝各位提出的issues。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末秸侣,一起剝皮案震驚了整個濱河市存筏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌味榛,老刑警劉巖椭坚,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異搏色,居然都是意外死亡善茎,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進店門继榆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來巾表,“玉大人,你說我怎么就攤上這事略吨〖遥” “怎么了?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵翠忠,是天一觀的道長鞠苟。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么当娱? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任吃既,我火速辦了婚禮,結果婚禮上跨细,老公的妹妹穿的比我還像新娘鹦倚。我一直安慰自己,他們只是感情好冀惭,可當我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布震叙。 她就那樣靜靜地躺著,像睡著了一般散休。 火紅的嫁衣襯著肌膚如雪媒楼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天戚丸,我揣著相機與錄音划址,去河邊找鬼。 笑死限府,一個胖子當著我的面吹牛夺颤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播谣殊,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼拂共,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了姻几?” 一聲冷哼從身側(cè)響起宜狐,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蛇捌,沒想到半個月后抚恒,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡络拌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年俭驮,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片春贸。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡混萝,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出萍恕,到底是詐尸還是另有隱情逸嘀,我是刑警寧澤,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布允粤,位于F島的核電站崭倘,受9級特大地震影響翼岁,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜司光,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一琅坡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧残家,春花似錦榆俺、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至碾盐,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間揩局,已是汗流浹背榨惰。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工爷狈, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人简软。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像滤灯,于是被迫代替她去往敵國和親虑省。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,060評論 2 355

推薦閱讀更多精彩內(nèi)容