mfsd

1、推送im服务怎么做的

  • im服务使用的技术是sockjs,整个服务有预处理消息的MQ服务和路由发送消息的push服务组成
  • push服务主要解决的问题
  • 1、保持检测客户端的在线状态以及推送消息的准确送达
  • 2、多实例环境下进行message推送时怎么路由消息到客户端连接的实例
  • MQ服务主要解决的问题
  • 1、接收业务服务的消息推送请求
  • 2、群发消息的处理 2、订单粒度读写锁是做什么用的

3、订单系统的设计

  • 主要从两个方面去做设计,一个是从需求出发,进行服务的划分,实现订单的流程处理;另外一个是从订单数据出发,做一些数据的处理划分
  • 订单系统根据业务需求划分不同的服务,订单收单下单、订单调度、订单配送、订单回传、订单监控,商家模块
  • 基础服务:用户、定位、商户门店、原单、骑手运力、区域运力、第三方配送、
  • 预下单:对接业务系统接收订单,并且预先处理平台对订单的配送能力,
  • 下单:从rabbitMQ消费消费订单数据,完成配送的下单操作。生成个订单数据,和订单各个订单任务
  • 订单表的分表
  • 将订单数据分为b端数据和c端数据,并做了冷数据和热数据处理(?)
  • 热数据进行分表,b端数据是根据单号进行商家id,来源平台id分表;c端数据是根据配送单号真的骑手id进行分表;

4、保证订单系统不丢单

  • 写数据库、接收和发送订单过程
  • 1、关键逻辑不使用读写分离,避免同步异常导致后续流程订单反查失败
  • 2、关键逻辑不使用查询缓存,避免同步异常导致后续流程订单反查失败
  • 3、订单补偿不直接使用MQ,比如修改订单状态失败时通过消息队列补偿,中间件问题可能会引起丢单
  • 4、处理消息时失败,需要重试

5、分布式事务

  • 数据最终一致性设计主要使用两种方法实现,一种是通过接口调用实现实时同步操作,另一种是使用消息通道以事件响应的方式进行异步处理

  • 系统优化

  • 写数据库时,减小事务粒度,避免锁表,注意慢sql

  • 关注数据异构的性能和稳定性,在网络抖动问题时也能稳定

  • 幂等性

  • 千万级订单系统

  • 主要是数据库的问题,基本架构太过于依赖数据库

  • 下单服务处理接单慢

  • 数据库压力大

  • 数据异构延迟高

  • 缓存数据质量差

  • 方案

  • 服务拆分,接单服务独立、订单引擎、订单管道处理后续订单业务

  • 双写和数据补偿的方式处理缓存,缓存添加过期控制数据量

  • 具体方案

  • 接单服务时,在事务中创建订单、和订单首任务(写缓存、减库存、发送订通知、其他流程)

  • 接单服务的数据库使用一主多从,写入是随机写入任意数据库

  • 订单任务有任务引擎生成并执行,再首任务执行成功之后插入后续的任务,需要注意失败的任务重试

5、秒杀系统设计

  • 特点:
  • 定时开始,流量大
  • 相对于用户量,库存很少
  • 业务流程相对简单,一般是下单减库存
  • 设计出发点
  • 系统隔离,不影响其他业务系统
  • 技术隔离
  • 前端,cdn缓存静态资源,秒杀开始时间由有后端控制,在秒杀快开始之前通过js发送到前端
  • 请求接入,过滤海量秒杀请求,识别机器请求,做好限流工作
  • 应用层,做好请求削峰;通过集群分担请求,通过缓存和队列减轻处理压力;注意超卖问题
  • 数据库隔离
  • 使用额外的表或者库,结束再同步到主业务系统中