在imooc上克隆名称为wtiscm人的代码。他的介绍如下: 跟着老师吧整个项目做了一边,收获很多;然后把老师视频中提到的MQ消息队列内容加进来了。最后不断整合以及重构,构建了一套分布式秒杀系统,SpringBoot+Dubbo+Zookeeper,利用页面静态化,CDN缓存,Nignx缓存,以及服务端的页面缓存,Redis对象缓存,层层过滤,防止访问直接穿透到数据库;采用异步消息队列分担短时间的数据库读写;利用Dubbo分布式RPC调用降低耦合与容错,保证整个项目可用;更多细节可以看源码,一起讨论,一起学习进步,项目源码:https://github.com/wtiscm/seckill-dubbo
本项目是基于Dubbo的分布式秒杀项目。
项目特性:
秒杀的时候系统的并发量会非常的大,系统要在短短的几秒内完成非常大的访问处理。
并发量大的同时,网络的流量也会瞬间变的很大。
秒杀项目特性下,可能会存在安全性问题,1.可能会存在脚本来进行秒杀,2.可能会提前得到秒杀接口,影响秒杀公平性。
项目要具备CAP中的AP,可用性与分布式容错,保证系统服务可用。
项目功能介绍:
针对短时间并发量访问非常大的情况,我们可以通过横向扩展的方式,增加服务的数量;但是在进行秒杀的时候,会进行大量的数据库读写,这个时候数据库成为瓶颈, 我们需要通过优化使得最终秒杀成功的有限用户进行数据库读写;如果秒杀的商品数量很大的时候,也需要进行大量的数据库读写,这个时候,我们需要把大量的读写操 作放到消息队列中异步处理,数据库可以"慢慢"的读写,分担短时间的处理量。
针对并发量很大带来的流量很大的问题,我们可以给浏览器做静态缓存,页面静态化,服务只返回访问所需要的数据而不是整个页面;或者在CDN部署页面。
针对利用脚本,或者过于频繁秒杀的操作,服务端需要做防刷处理,限定单位时间的秒杀次数;对于秒杀接口,采取隐藏秒杀接口的处理,只有在秒杀进行时,才暴露 秒杀接口。
针对可用性与分布式容错,我们需要双机热备,利用keepalived+Nignx做负载均衡,然后利用Dubbo框架接着实现负载均衡与容错处理。
特性:
利用页面静态化,CDN缓存,Nignx缓存,以及服务端的页面缓存,Redis对象缓存,层层过滤,防止访问直接穿透到DB。
假如实际秒杀产品很多,最终过滤后还有大量的数据库读写,这时采用消息队列,异步处理;浏览器只需要轮询秒杀结果就可以了,这样可以把短时间的大量数据库操作 分担的相对较长的时间,保证数据库可用。
秒杀过程中,需要保证可用性,所以需要对Nignx进行水平扩展,双机热备份;服务提供方也需要按照实际情况水平扩展。
注意事项:
需要对数据库填充初始数据 。
项目启动过程:
启动MySQL,Redis,Zookeeper,RabbitMQ。
需要启动6个服务,注册的Zookeeper注册中心。如果使用IDEA,分别启动 seckill-cache,seckill-goods,seckill-user,seckill-miaosha,seckill-mq,seckill-order 6个 提供方服务;然后启动seckill-controller 服务消费方。 或者把对应的服务提供方,与服务消费方打成jar包,以jar包的形式启动。
http://localhost:8091/seckill/to_login 用户名:13512341234,密码:123456,进行登陆。
引用:
http://dubbo.apache.org/en-us/index.html
https://github.com/apache/dubbo
https://www.keepalived.org/
https://zookeeper.apache.org/
http://nginx.org/en/docs/
https://redis.io/
https://coding.imooc.com/class/168.html
https://blog.csdn.net/jokeMqc/article/details/87933573
https://www.rabbitmq.com/
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。