秒杀,高并发,分布式事务

一、秒杀的系统的逻辑架构

 

    通常来说,秒杀系统是独立于其他业务系统之外的

    

 

 

二、秒杀倒计时如何实现

 

    

 

 

三、高并发下如何保证商品数据的一致性(性能、数据安全)

 

    问题:假设有一个商品库存10000件,同时又100000在抢,最后的结果一定是库存变成0,同时生成10000个订单

    

    

 

 

    

 

 

四、分布式事务的实现

 

    为什么需要分布式事务?

        

 

        如上图的微服务架构开发逻辑,一个业务可能会调用多个服务一起完成,每个服务可能都会操作不同的数据库。只所以需要分布式事务,是因为上图中的“事务A”和“事务B”不可能是一个事务,这样一个业务的原子性、一致性等问题就不能得到保证。

 

    分布式事务的解决方案:

        

        1)2pc两端提交协议:

            

            实现逻辑比较简单,但是效率比较差。所以一般互联网项目很少使用。

 

        2)TCC柔性事务:        

            

 

 

        3)基于MQ的数据最终一致性的分布式事务

 

            核心:主事务方将消息放入MQ,通过发送方消息确认,接收方消息确认、消息持久化、队列持久化、补偿机制、集群高可用... 保证消费方一定能在未来的某一刻消费到这条消息。在消费方消费这条消息之前,有可能出现各种问题,这个时候数据库的数据其实处于一个不一致的状态。所以这种方式追求的是最终一致性,允许系统出现一段时间的软状态。

五 高并发的解决方案

前端:

         1.前端页面提供良好的用户反馈,让用户感知到自己的请求已经发送成功,不要再重新发送

         2.提供js手动,控制用户的多次点击行为(比如禁用按钮,弹框提示等)

后端:

1.后端服务器肯定需要进行分布式集群部署,分散请求压力,进行资源隔离.

2.后端入口程序通常通过Nginx进行请求的负载均衡,在Nginx端可以对请求进行分流,限流,整形,过滤,路由,确保后端服务的稳定

3.引入缓存服务器redis,减少数据库的压力,并且可以提高请求的响应速度.提高系统的吞吐量.

4.有些复杂的业务,也可以通过redis的lua脚本进行处理,事后再同步回数据库(在保证效率的前提下,确保消息的一致性和安全性)

5.服务和服务之间有时候可以通过MQ请求削峰处理,减少下游服务器的压力,拉长请求处理的时间,确保下游服务器的稳定,以时间换稳定.

6.业务的分布式处理,可以通过MQ最终一致性分布式事务的方式,这种方式的好处在于,服务和服务之间性能不会产生阻塞影响效率(MQ的最终一致性分布式事务)

7.数据库对于大的数据库最好进行分库分表,并且读写分离,提高系统的吞吐量(最好大部分的请求在redis就处理了)

8.资源请求最好动静态分离,只让Tomcat处理动态请求,静态请求可以部署在静态资源服务器上,比如CDN服务器,Nginx服务器

 

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值