2017年双十一交易额( 二 )

  • 数据库连接数:应对双11,应用服务器连接池大批扩容,警惕底层数据库、Redis等连接数瓶颈
  • 1.3.3 外部服务
    • 短信:外部短信延迟与送达率问题,可以搭建短信平台,多家渠道做路由和切换分流(短信平台架
    构?)
    • 支付:银行支付与回调延迟,搭建支付中心,对接多支付渠道
    • 快递对接:快递服务对接(快递100)
    • 外部云存储:云存储文件访问,流量扩容(大家所使用的存储?nfs的架构与事故)
    • CDN:外部静态文件访问提速服务(使用过的项目?)
    2 应对措施该小节从中台的各个团队角度,介绍双11期间的一些应对措施和遇到的问题 。
    2017年双十一交易额

    文章插图

    2.1 业务中台2.1.1 订单中心1)异步化
    场景:
    大促期间新增许多需要获取订单状态的服务,比如应对双11而临时增加的数据中台订单大屏展示等
    解决:
    异步化,并对消息队列调优,多队列分流
    问题:
    注意异步化引发的乱序问题,一是传输阶段,二是消费阶段
    图解:
    rabbitmq传输:队列级别顺序保障,单消费者消费一个队列可以严格保障顺序性,需要扩充队列数提
    升性能
    2017年双十一交易额

    文章插图

    kafka传输:分区级别顺序保障,只能保障投放和传输阶段的顺序性
    2017年双十一交易额

    文章插图

    consumer:1对1消费存在性能问题,接收消息后对key做二次分发,放入多个内存队列,开启多线程
    消费
    2)过期订单
    双11抢单是最常见的场景,抢单不支付会占据大批量资源,如商品库存 。如何取消过期订单是架构师必
    须面对的问题 。主要有以下几种方案:
    扫表实现
    原理:
    通过定时任务轮询扫描订单表,超时的批量修改状态
    优点:
    • 实现非常简单
    缺点:
    • 大量数据集,对服务器内存消耗大 。
    • 数据库频繁查询,订单量大的情况下,IO是瓶颈 。
    • 存在延迟,间隔短则耗资源,间隔长则时效性差,两者是一对矛盾 。
    • 不易控制,随着定时业务的增多和细化,每个业务都要对订单重复扫描,引发查询浪费
    java延迟队列实现
    通过DelayQueue,每下一单,放入一个订单元素并实现getDelay()方法,方法返回该元素距离失效还
    剩余的时间,当<=0时元素就失效,就可以从队列中获取到 。启用线程池对数据监听,一旦捕获失效订
    单,取出之后,调用取消逻辑进行处理 。
    2017年双十一交易额

    文章插图

    优点:
    • 基于jvm内存,效率高,任务触发时间延迟低 。
    缺点:
    • 存在jvm内存中,服务器重启后,数据全部丢失 。
    • 依赖代码硬编码,集群扩展麻烦
    • 依赖jvm内存,如果订单量过大,无界队列内容扩充,容易出现OOM
    • 需要代码实现,多线程处理业务,复杂度较高
    • 多线程处理时,数据频繁触发等待和唤醒,多了无谓的竞争


    消息队列实现
    原理:
    设置两个队列,每下一单放一条进延迟队列,设定过期时间 。消息一旦过期,获取并放入工作队列,由


    特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。