本項目是和小夥伴開發的一套基於SpringBoot2的社區商城系統。主要是爲了方便用戶交友的同時拼單購物。本項目目前還屬於雛形,但基本的業務已經實現了大概。基於該系統的前端採用Vue構建。同時兼顧Android和小程序端,前端展現正在開發過程當中,後續會展出。前端
在當前互聯網飛速發展的大潮下,人們的生活也變的更加便捷。本項目就是在這一背景下產生的,爲了方便同一個社區下的用戶交友、共享動態、得到社區的幫助、瞭解社區新聞動態的同時享受到購物的便捷。用戶能夠與同一個社區的用戶之間進行拼團購物,既能享受到購物的優惠又能體驗到物流的快捷。github
SpringBoot2的誕生已經逐漸成爲Java後端研發的主流解決方案,SpringBoot2提供了更多的第三方模塊支持、全面基於Java八、基於Servlet3.0,於是具備更好的性能。至於數據訪問層,爲了更好的控制SQL語句的編寫,以及後期針對SQL進行優化我選擇了更爲靈活小巧的MyBatis。算法
核心業務數據,如用戶基礎信息、社區信息、訂單、拼單業務信息等,我這裏採用關係型數據庫MySQL,Driud數據庫鏈接詞監控SQL,從而監控SQL的運行情況找出SQL的優化方案。spring
首頁熱點數據,首頁熱點數據由於須要常常查詢並且某些數據是基本不變的,故而針對不變的數據我這裏採用SpringCache作緩存,針對常常變的熱點數據我存入Redis,如首頁物業公告、社區公告、最近新聞等信息,採用Redis的Sorted Set和Hash來存儲,進而提升性能。sql
新聞的具體信息,由於這裏我更多的是文章的具體展現,Redis所提供的數據結構以及MySQL關係型的特色對於文章內容的存儲都不太友好,所以我這裏採用了Mongodb這種文檔型數據庫存儲非結構化數據。數據庫
商品信息,爲了幫助商家更好的維護商品信息作商品推廣,須要收集用戶的行爲、肯定賣點、在用戶須要的地方進行廣告推薦。這裏的功能我採用了ELK技術,在用戶添加商品入購物車、下單商品、拼單商品的同時,收集商品的銷售狀況進行導入ElasticSearch進行數據的分析與聚合。可是由於收集的用戶行爲信息太單1、更多的用戶行爲日誌如用戶在某個頁面的停留時長、每一個商品的UV與PV等信息還待處理、須要更多的推薦算法來豐富這塊內容吧。後期但願能夠加上。。。apache
主要是消息隊列的應用、分佈式鎖的應用。爲了保證數據庫數據的正確性、咱們須要在用戶進行某些操做以後進行數據狀態的同步,簡單的更新操做容易形成業務的阻塞、下降併發量,此外過多的事務容易產生更多的數據庫級別表鎖、行鎖,下降數據庫的性能我這裏採用Redisson來代替事務的使用,在系統啓動的過程當中、拼單、下單等過程當中採用Rabbitmq、Kafka收集數據的流動狀況,異步更新。編程
此係統將用於Android、小程序,前端也將採用Vue,故而這裏再也不採用傳統的Cookie、Session維護用戶狀態信息。JWT生成Token的方式也算是一個應用多年的行業標準、這裏採用與SpringBoot結合更友好的SpringSecurity來進行權限的控制與管理。爲了更好的擴展、這裏最好仍是應該採用RBAC的權限模型。小程序
該項目屬於雛形階段能夠知足經常使用的業務併發量、更多的應該考慮業務功能的豐富(但願各位能給出建議)、考慮業務的拆分、分佈式環境下項目的部署與運行(如分佈式一致性、分佈式事務)、環境的部署(遷移到Docker、K8S的雲環境中)、數據的拆分(分庫分表)。更大的業務量,這裏應該採用分流、限流算法,SpringCloud下服務的熔斷降級等等。例外針對已有的部分還待改進、例如緩存使用的策略、如何防止緩存穿透和緩存雪崩等問題
基於Redisson構建分佈式鎖
基於RabbitMQ實現延遲消息投遞,提升系統的吞吐量
數據庫層優化
長sql加入ehcache緩存
用戶認證信息加入memcached緩存
採用spring cache緩存熱點數據
熱點數據預加入Redis(如商品的庫存信息),採用Redis預減操做,而後採用定時任務同步緩存及數據庫
Kafka收集訂單信息,ElasticSearch進行數據分析,產生熱賣商品並推薦
本項目多處使用Java8提供的新特性。包括lambda表達式、Stream流編程,並結合Guava的工具類庫,恩,it is very nice.
本身之前作過一段時間的Android開發,於是對於後臺方面徹底是初窺門徑,開發本系統主要仍是但願可以維護一個完整項目的同時學習更多的知識。
本身對於後端的許多技術仍然屬於懵懂階段、對於一些技術的學習仍是泛而不精。所以該項目必然存在諸多問題,但願各位不吝賜教。
本項目仍然屬於單體架構,後續會推出SpringCloud版本
本項目持續維護,感謝各位提出的issues。