2 Star 28 Fork 11

王世磊 / ShoppingKill

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
EPL-1.0

商品秒杀系统(已上线)

商城地址:https://kill.wslhome.top

后台管理:https://admin.wslhome.top

项目V1.0版本已上线,该项目是今年毕设项目。

喜欢就给个♥,欢迎各位大佬打赏

作者:sirwsl

博客:https://www.wslhome.top

CSDN: https://blog.csdn.net/qq_40432886

欢迎交流:sirwsl@163.com

WX:sirwsl

使用说明

1、前端部署说明

前端文件在resources资源目录下的html文件中,运行时候把整个html文件夹直接copy或者cut出来

注:项目在打包时候是去除html文件的,只包含后端文件

前端部署Tomcat或者Nginx,直接把整个html文件夹复制到www或者对应目录下,然后配置tomcat或者nginx进行启动

nginx配置参见项目中的nginx.conf

注意:前端端口设置8081,如果更改前端端口,请更改对应的com.wsl.shoppingkill.config.request下的跨域设置

访问:必须使用localhost,访问地址如下

http://localhost:8081/html/user/index.html   #商城主页
http://localhost:8081/html/admin/login.html  #后台管理

2、后端部署说明

后端必须运行80端口,否则需要更改前端文件的请求路径比较麻烦

可以用idea直接运行,也可以打成jar包 Java -jar运行

你也可以使用docker运行,参见dockerfile

知识点

  • springboot+Mybatis-plus搭建
  • redis、zookeeper、mq集群
  • redis缓存、jetCache缓存
  • RabbitMq消息通知、死信、延迟队列使用
  • zookeeper分布式锁
  • 自定义注解
  • 统一封装返回
  • 切面使用
  • 设计模式使用
  • 事物、回滚使用
  • docker、nginx使用
  • 图片服务器OSS使用
  • stram、lambda使用
  • 多线程、线程池使用
  • 定时任务使用
  • 短信验证、邮件服务使用
  • JWT验证TOKEN令牌使用
  • 雪花算法分布式算法使用
  • 拦截器、Log4j日志使用
  • 还有很多的工具类、组件使用
  • 数据库连接池Druid使用
  • MapStruct实体转化工具使用
  • 然后部署时候CDN之类的使用
  • ... ...

效果

PS:不过多展示图片,需要看效果自己访问kill.wslhome.top 或 admin.wslhome.top 前端首页 商城 后台主页 后台活动 后台主页 我的订单

简介

项目主要针对秒杀系统进行实现,前后端分离项目,其中设计到技术主要为SpringBoot、Zookeeper、Redis、rabbitMQ。 添加一键部署,mybatis-plus逆向生成 其中融入短信通知(榛子云)、邮件通知(boot-starter-mail)、短信验证(kaptcha)、一二级缓存(JetCache)、跨域登录(jjwt)、数据库连接(druid),还包括自定义注解、切面编程等相关东西

一、项目概况

采用SpringBoot+中间件实现在高并发业务场景下商品的的限时抢购秒杀系统,本题目基于线上电商平台,以高可靠、高负载、高并发来实现商品的限时抢购系统。

二、目录说明

.
├── Dockerfile   docker配置文件
├── README.md
├── doc
│   ├── ER
│   ├── api  接口文档
├── shopping-kill.iml
├── sql
│   ├── shoppingkill-num.sql
│   └── shoppingkill.sql  项目sql
├── src
│   ├── main
│   │   ├── java
│   │   │   └── com
│   │   │       └── wsl
│   │   │           └── shoppingkill
│   │   │               ├── Application.java  启动类
│   │   │               ├── common   公共一些工具 日志切面  异常封装
│   │   │               ├── component   一些自定义组件
│   │   │               ├── config   配置类
│   │   │               ├── controller  C层
│   │   │               ├── domain   实体
│   │   │               ├── mapper  mapper层
│   │   │               ├── obj     VO|BO|Param|DTO
│   │   │               ├── service  实现接口层
│   │   │               └── serviceImpl 实现层
│   │   └── resources
│   │       ├── application.yml  配置文件
│   │       ├── config  配置文件
│   │       ├── ftl    邮件模版-未优化
│   │       ├── log4j.properties 日志配置
│   │       ├── mapper  sql的xml 文件
│   │       └── templates
│   │           ├── admin  商城后台
│   │           ├── static  静态资源
│   │           └── user  商城前端
│   └── test  测试文件
|
└── target  生产
 

三、完成进度

参见doc下的完成进度表

四、主要技术

(一)、整体架构:

1、Redis主从架构:

本系统为保证系统的高可用、高负载、和容灾性,通过redis集群主从复制实现,在集群环境中master会自动将数据同步到slave,可以进行读写分离,从而实现分载master的读操作压。master是以非阻塞的方式为slave提供服务,通过redis主从架构进一步实现负载均衡与故障恢复,从而提高系统的容灾性。

2、Zookeeper集群架构:

通过Zookeeper集群架构实现了应用的简单性,可靠性、可拓展性、透明性。Zookeeper基本更进一步提高了系统的整体容灾性能。

3、RabbitMQ集群架构:

通过RabbitMQ集群化部署实现系统的高可靠高可用,对于限时抢购系统,rabiitMq更加提供了高可用、高并发的成熟方案。

4、OSS存储:

在系统的整体架构中,OSS存储将单个对象分离为meta、data两部分,并将二者分离存储,OSS实现了Region级资源快速调度能力,在用户有突发带宽、Qps需求而旧数据所在集群无法满足时,可以按前缀、或者按比例将一个桶的新写入数据在一个Region内不同集群,甚至不同的AZ见调度从而快速满足用户需求。通过镜像会员实现Region级容灾。从而在满足与资源存储的基础上提供限时抢购系统的性能。

5、CDN加速:

由于CDN几乎覆盖国内的所有线路,对于可靠性来说,不会因为限时抢购系统Qps锅盖,意外而导致网站的内容无法访问,由于是全国化多节点覆盖,在意外节点发生故障后,对网站的访问会自动导向其他健康节点,从而实现整体的稳定性。通过CDN的使用,极大减轻服务器压力,提高网站的访问速度。

6、网站集群化部署:

通过网站的集群化部署,能够更好的实现负载均衡,提高系统的并发量。

(二)、实现框架:SpringBoot+MySQL+MybatisPlus+BootStrap

1、RabbitMQ:通过rabbitmq的使用,在系统中进行短信推送、邮件推送、订单管理等模块中更好的实现了系统的解耦,以异步方式进行操作,使得系统更加平稳运行。通过消息队列的应用,在高并发场景下进行限流,从而保证系统的可运行,起到削峰作用。

2、Zookeeper:

通过zookeeper分布式锁的应用,保证数据在并发环境下的数据一致性与安全性,通过实现读写所,从而更好的提高系统的性能。

3、Redis:

系统中通过运用redis缓存用户基本信息除外,通过将商品进行提前加入缓存,进一步提升读写性能,通过redis缓存的运用提高用户访问量,同时引入JetCache采用两级缓存redis+ caffeine,从而防止缓存雪崩、缓存击穿的场景出现。

(四)、其余技术:

1、SnowFlake

雪花算法,系统中订单生成以及相关的id采用雪花算法替代传统的UUID进行实现,通过41bit的时间戳、10bit的工作机器id与12bit的序列号实现64bit的大整数,实现每秒20万id生成,从而在并发环境中提高系统性能。

2、Druid

在系统数据库连接采用druid代替传统的jdbc连接方式,通过连接池的方式实现,更好的实现数据的增删查改。通过druid可视化界面,更好的对sql性能进行整体监控。

3、Nginx

通过运行nginx代替创痛的Tomcat服务器,在网站集群化部署的过程中实现负载均衡,在高并发的环境下,网络稳定性对其影响非常笑,通过nginx负载均衡,更好的是的网站能够承担高在压力且稳定。

4、Docker

在docker中更好的为系统提供了持续部署与测试。docker可以通过确保从开发到产品发布整个过程环境的一致性来解决这个问题Docker容器通过相关配置,保持容器内部所有的配置和依赖关系始终不变。其在安全性上docker内部容器在部署时实现应用程序将的完全分割与隔离,更好的保证系统的安全性。

Eclipse Public License - v 1.0 THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. 1. DEFINITIONS "Contribution" means: a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and b) in the case of each subsequent Contributor: i) changes to the Program, and ii) additions to the Program; where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program. "Contributor" means any person or entity that distributes the Program. "Licensed Patents" mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program. "Program" means the Contributions distributed in accordance with this Agreement. "Recipient" means anyone who receives the Program under this Agreement, including all Contributors. 2. GRANT OF RIGHTS a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form. b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder. c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program. d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement. 3. REQUIREMENTS A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that: a) it complies with the terms and conditions of this Agreement; and b) its license agreement: i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose; ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits; iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange. When the Program is made available in source code form: a) it must be made available under this Agreement; and b) a copy of this Agreement must be included with each copy of the Program. Contributors may not remove or alter any copyright notices contained within the Program. Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution. 4. COMMERCIAL DISTRIBUTION Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense. For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages. 5. NO WARRANTY EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement , including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations. 6. DISCLAIMER OF LIABILITY EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 7. GENERAL If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed. All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive. Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved. This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation.

简介

商品秒杀系统(限时抢购系统),包含商城展示与后台管理,主要技术有:springboot、redis、zookeeper、rabbitmq、sms通知、email通知。该项目为21年毕设设计项目,其中融入基本目前所使用的框架与技术。PS:The system includes the display and backstage management of the mall. The main technologies are: springboot, redis, zookeeper, rabbitmq, SMS notification and email notification. The project is a 21-year completed design project, ... 展开 收起
EPL-1.0
取消

贡献者

全部

近期动态

加载更多
不能加载更多了
Java
1
https://gitee.com/sirwsl/ShoppingKill.git
git@gitee.com:sirwsl/ShoppingKill.git
sirwsl
ShoppingKill
ShoppingKill
master

搜索帮助

14c37bed 8189591 565d56ea 8189591