单点登录、秒杀设计原则、RabbitMQ

目录

单点登录

秒杀设计原则

秒杀流程

RabbitMQ

单点登录


1.流程运行:
(1) 用户第一次登录时,将会话信息(用户Id和用户信息),比如以用户Id为Key,写入分布式Session;
(2) 用户再次登录时,获取分布式Session,是否有会话信息,如果没有则调到登录页;
(3) 一般采用Cache中间件实现,建议使用Redis,因此它有持久化功能,方便分布式Session宕机后,可以从持久化存储中加载会话信息;
(4) 存入会话时,可以设置会话保持的时间,比如15分钟,超过后自动超时;
结合Cache中间件,实现的分布式Session,可以很好的模拟Session会话。
我们在浏览器(Browser)中访问一个应用,这个应用需要登录,我们填写完用户名和密码后,完成登录认证。这时,我们在这个用户的session中标记登录状态为yes(已登录),同时在浏览器(Browser)中写入Cookie,这个Cookie是这个用户的唯一标识。下次我们再访问这个应用的时候,请求中会带上这个Cookie,服务端会根据这个Cookie找到对应的session,通过session来判断这个用户是否登录。如果不做特殊配置,这个Cookie的名字叫做jsessionid,值在服务端(server)是唯一的。

2.分布式session方式实现单点登录
单点登录SSO(Single Sign On)说得简单点就是在一个多系统共存的环境下,用户在一处登录后,就不用在其他系统中登录,也就是用户的一次登录能得到其他所有系统的信任。
所以,单点登录要解决的就是,用户只需要登录一次就可以访问所有相互信任的应用系统。

秒杀设计原则


1.尽量将请求拦截在系统上游 传统秒杀系统之所以挂,请求都压倒了后端数据层,数据读写锁冲突严重,并发高响应慢,几乎所有请求都超时,流量虽大,下单成功的有效流量甚小
2.读多写少的常用多使用缓存 这是一个典型的读多写少的应用场景【一趟火车其实只有2000张票,200w个人来买,最多2000个人下单成功,其他人都是查询库存,写比例只有0.1%,读比例占99.9%】,非常适合使用缓存。

秒杀流程

  • 登录进入商品列表页面,静态资源缓存
  • 点击进入商品详情页面,静态资源缓存,Ajax获取验证码等动态信息
  • 点击秒杀, 将验证码结果和商品ID传给后端,如果结果正确。动态生成随机串UUID,结合用户ID和商品ID存入redis,并将path传给前端。前端获取path后,再根据path地址调用秒杀服务
  • 服务端获取请求的path参数,去查缓存是否在
  • 如果存在,并且Redis还有库存,预减redis库存,看是否已经生成订单,没有的话就将请求入消息队列
  • 从消息队列中取消息:获取商品ID和用户ID,判断数据库库存,然后下单
  • 下单:减库存,生成订单
  • 前端轮询订单生成结果。50ms继续轮询或者秒杀是否成功和失败
  • 把商品存到Redis中(定时把数据库中的数据查询到Redis中)
  • 进入秒杀列表页, 通过negix把商品展示到商品列表页,用户访问商品,通过negix把商品展示到页面(商品列表页和商品详细页面的数据都是从Redis中获取的),用户进行下单,下单之前先检查是否有库存(用negix读取redis中商品的库存)
  • 有库存的话先验证客户是否登录,用授权认证登录,进行抢单,使用Redis队列存储用户抢单信息和ID信息存入队列,避免服务器处理多请求(削峰)
  • 提示用户正在排队,用多线程进行下单,读取队列中的信息进行下单
  • 下单库存递减(redis中的库存,检查相关信息,检查通过了才下单),
  • 添加下单信息,下单成功更新用户排队信息,查询排队信息,已下单
  • 进行支付流程.<每次下单会发送延时队列,包含订单ID,用户ID,商品ID发送给RubbitMQ延时30分钟,30分钟后监听器读取,检查redis中
  • 用户的订单信息,有信息,没支付;;没有信息,已支付关闭支付记录,清理订单信息,回滚数据>

RabbitMQ

1.MQ是什么
MQ全称为Message Queue,消息队列是应用程序和应用程序之间的通信方法。
2.为什么使用MQ--(面试!)
在项目中,可将一些无需即时返回且耗时的操作提取出来,进行异步处理,而这种异步处理的方式大大的节省了服务器的请求响应时间,从而提高了系统的吞吐量。
3.MQ优势

  • 削峰填谷:提升系统的可维护性
  • 异步处理 提升用户体验和系统吞吐量(单位时间内处理请求的数目)
  • 应用解耦 提升容错性和可维护性

 MQ劣势

  • 系统的可用性降低
  • 系统的复杂度提高
  • 一致性问题

4.MQ结构:
rabbit,active,rocketmq,kafka
MQ工作模式
简单模式,
work模式,
Publish/Subscribe发布与订阅模式,
Routing路由模式,
Topics主题模式,
RPC远程调用模式

5.RabbitMQ特点:

  1. 使得简单,功能强大。
  2. 基于AMQP协议。 跨语言 c node.js->mq->java python
  3. 社区活跃,文档完善。
  4. 高并发性能好,这主要得益于Erlang语言。 c 底层语言,性能强。java 好开发。构建一个web .
  5. Spring Boot默认已集成RabbitMQ

6.RabbitMq重复消费
RabbitMQ解决消息幂等性问题--重复消费问题
1:如果消费端 程序业务逻辑出现异常消息会消费成功吗?
不会成功,默认一直重试。
rabbitmq 默认情况下 如果消费者程序出现异常的情况下,会自动实现补偿机制(重试机制)是 队列服务器 发送补偿请求,不是生产者
2:充实实现原理:
@RabbitListener 底层 使用Aop进行拦截,如果程序没有抛出异常,自动提交事务
如果Aop使用异常通知拦截 获取异常信息的话,自动实现补偿机制 ,该消息会缓存到rabbitmq服务器端进行存放,一直重试到不抛异常为为止。
修改重试机制策略 ,默认是一直重试
消费者如果保证消息幂等性,不被重复消费(解决方案)
产生原因:网络延迟传输中,会造成进行MQ重试中,在重试过程中,可能会造成重复消费。
解决办法:
使用全局MessageID判断消费方使用同一个,解决幂等性。
生产端设置消息ID
消费端判断消息ID

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
购买提醒:全程代码实战,本系列课程建议有Java开发经验2年以上的学员观看和购买。录制本套教程的初衷,通过从业10年接触过很多的技术开发人员,尤其在面试一些技术人员的时候,发现他们的技术知识更新较慢,很多人渴望接触到高并发系统和一些高级技术架构,为了帮助更多人能够提升自己和接触到这类技术架构,并满足企业的人才需求,利用业余时间我开始录制这套教程。通过录制教程有很多学员给我反馈信息,给了我很大的鼓舞,当然也有吐槽,我想说的是技术是没有边界的,脱离一线业务场景去谈技术,都是耍流氓的。如对我录制的教程内容有建议请及时交流。本套课程历经1年时间研发,案例来源于真实业务场景抽离,由从业10年企业一线架构师实录,没有基础不建议购买。购买后提供企业级多方位指导,通过本套案例可以让你学习目前主流的微服务技术架构和多种企业级高并发和海量数据、高可用、分布式、支付、多语言、前后端分离等技术的综合应用解决方案。在开始本课程前给大家科普几个概念: 高并发是指在比较短的时间内有大量的访问者访问目标系统,系统负载饱和或者过载宕机。 高并发的应用,我们应该都有用过或者见过,比如天猫、京东、拼多多、亚马逊的秒杀抢购还有12306的抢票。我们在体验应用的时候,可能并不会像到这种高并发系统背后的技术实现难度。高并发系统都存在这几种问题,高并发读、高并发写、访问高峰突发性、反馈结果的即时性。在抢购的时候,尤其是抢购火车票的时候,我们经常会疯狂的刷库存,几亿用户产生非常大的高并发读; 通过以上的科普相信大家对课程有一个基本的认知了,本套教程以应用最为广泛的电商系统为标本,给大家构建一个亿级微服务秒杀系统,让大家跟着我的步骤能学习行为背后的原理。本课程采用全新的微服务架构,运用了很多工业界企业解决方案和高级技术,带大家手把手实现一个高性能,高并发,高可用等的亿级微服务秒杀系统,本课程会包含很多高级的内容,比如微服务架构、分布式部署方案、多线程、支付、多语言、全链路性能压力测试等,让大家在实战中学习知识,在实战中不断进步。该课程是一个完整的微服务架构秒杀系统项目代码,案例具有很高的商业价值,大家可以根据自己的业务进行修改,便可以使用。本套课程可以满足世面上绝大多数企业级的业务场景,本课程全部代码可以直接部署企业,普通集群,支撑**并发;集群规模大,支撑亿级并发。本课程包含的技术: IDEA集成开发工具 SpringBoot2.0.2.RELEASE SpringCloudFinchley.RELEASE Thymeleaf(模板引擎技术) 微信支付 支付宝支付 银联支付 分布式数据库Mycat MySQL Druid RabbitMQ 分布式事务 分布式锁 事件驱动 多线程 MyBatis QuartzEhcache Redis Hystrix 单点登陆CAS Nginx Lua Restful AOP技术 性能压力测试Jemter VUE+jQuery+Ajax+NodeJS Python Go语言课程亮点: 1.与企业无缝对接、真实工业界产品 2.主流支付全覆盖(微信、支付宝、银联) 3.前后端分离(主流技术架构) 4.实现高并发请求和实现高可用架构解决方案 5.多语言(Java、Go、Python) 6.亿级微服务秒杀系统(支撑海量数据) 7.大型系统分布式部署方案 8.全链路性能压力测试  9.分布式事务解决方案 10.事件驱动设计解决方案 11.多线程技术的实战应用 12.高并发下的服务降级、限流实战 13.分布式架构师下实现分布式定时调度 14.集成MyBatis实现多数据源路由实战 15.集成Redis缓存实战 16.Eureka注册中心 17.OpenFeign声明式服务调用 18.Hystrix服务熔断降级方式 19.基于Hystrix实现接口降级实战 20.集成SpringCloud实现统一整合方案 21.全程代码实操,提供全部代码和资料 22.提供答疑和提供企业技术方案咨询购买提醒: 我本人在企业从业10年,因为热爱,所以坚持,下一个10年依然会在企业一线服务,因此对于课程中的技术点可以提供全方面的业务场景解决方案。我本人并非培训机构脱离一线业务场景的讲师,从业多年接触过大量的真实业务场景案例,后面会逐步通过教程案例分享我多年的实战经验,送给同行一句话:技术是服务于业务的,脱离一线业务场景就是耍流氓。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值