项目主要实现了一个模拟京东商城的分布式秒杀系统,
主要使用到了 nacos,用于服务注册,和配置管理,fegin用于远程调用,网关用于路由,sentinel哨兵 用于服务降级熔断,redis用来作缓存,
秒杀商品上架流程:
设置定时任务上架需要秒杀的商品(分布式锁防止重复上架)
封装最新的秒杀商品信息到redis中 商品的基本信息,商品的随机码,结束时间
设置秒杀商品的分布式信号量作为库存扣减的信息
结束
秒杀:
立即抢购
判定登录
合法性校验:秒杀时间,随机码,对应关系,幂等性
获取信号量
创建秒杀号,用户,订单号,商品 ->发送MQ消息
->收货地址确认,支付确认 结束
可以将一定时间内的下单的客户暂存,然后使用一个抽签算法,可以保证一定的公平性/ 不算一个好的办法,后续补充
RabbitMQ没有提供延迟队列的功能,那怎么办呢?那就是!TTL+死信队列组合的方式,实现和延迟队列一样的效果。订单系统在用户下单后发送了一条订单信息到MQ交换机交换机把这条消息根据routing key分发到了一个设置了30分钟过期时间队列中,但是该队列没有消费者,所以这些消息终将过期当消息过期变成死信后,会被转发给该队列绑定的死信交换机并根据死信routing key最终被分配到了一个死信队列中死信队列是有消费者的,这些死信消息将被这些消费者获取之后执行对应的业务逻辑
Nginx在项目里面的作用是搭建域名访问环境,不能把服务器的外网ip暴露给外界,容易被攻击 屏蔽内网服务器信息
nginx 是一个http服务器。可以将服务器上的静态文件展现给客户端。速度更快,并发量会更高
nginx是一个反向代理服务器,可以代理外部网络主机访问内部网络,
nginx实现均衡负载,通过算法来处理请求流量
实现虚拟主机,将多个网站部署在同一服务器上
中间件的个数, 中间件的个数越多,网络交互损失越大,延迟越高并发量就越小
业务逻辑中,重复查表
静态资源没有分离
客户端没有开启缓存
调优:
nginx动静分离,将项目的所有静态资源都放到nginx里(指定返回规则)
提高jvm的内存配置
优化业务逻辑,用redis缓存热点数据,数据库查询次数
优化数据库,对经常查询的数据简历索引,避免全表查询
可以实现对服务器、网络、对象模拟巨大的负载,测试强度和分析整体性能
ElasticSearch是分布式的全文搜索引擎,解决海量数据中查询效率地下的问题
为啥要使用:因为在商城中的数据,将来会非常多,所以采用以往的模糊查询,会放弃索引,导致全表查询,效率很低,如果用ES做一个全文索引,可以提高查询速度。
es采用倒排索引;如查找某个字符, 正排索引是遍历所有的内容, 看哪些里面含有要查找的内容,而倒排索引是将文章内容进行分词之后, 类似于以词作为key, 文章的索引作为value来存储, 搜索的时候就可以以关键字作为key来获取了



