架构实战案例解析
王庆友
前 1 号店首席架构师
18817 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 23 讲
架构实战案例解析
15
15
1.0x
00:00/00:00
登录|注册

13 | 高可用架构案例(一):如何实现O2O平台日订单500万?

你好,我是王庆友。在上一讲中,我和你介绍了高可用系统的设计原则和常见手段。今天呢,我会通过一个实际的案例,告诉你具体如何落地一个高可用的架构,让你能够深入理解和运用这些高可用手段。

项目背景介绍

先说下项目的背景。这是一个小程序点餐平台,用户在小程序上点餐并支付完成后,订单会先落到订单库,然后进一步推送到门店的收银系统;收银系统接单后,推送给后厨系统进行生产;同时返回小程序取餐码,用户可以凭取餐码去门店取餐或收取外卖。
这个项目服务于一家大型的餐饮公司,公司在全国有大量的门店,他们准备搞一个长期的大型线上促销活动,促销的力度很大:用户可以在小程序上先领取优惠券,然后凭券再支付 1 元,就可以购买价值数十元的套餐。
结合以往的经验,以及这次的促销力度,我们预计在高峰时,前端小程序请求将会达到每秒 10 万 QPS,并且预计首日的订单数量会超过 500 万。在这种高并发的情况下,我们为了保证用户的体验,系统整体的可用性要达到 99.99%
你可以先了解一下这个点餐平台的具体架构:
这里呢,我具体说下系统主要的调用过程,以便于你更好地理解它:
小程序前端通过 Nginx 网关,访问小程序服务端;
小程序服务端会调用一系列的基础服务,完成相应的请求处理,包括门店服务、会员服务、商品服务、订单服务、支付服务等,每个服务都有自己独立的数据库和 Redis 缓存;
订单服务接收到新订单后,先在本地数据库落地订单,然后通过 MQ 同步订单给 OMS 履单中心;
门店的收银系统通过 HTTP 远程访问云端的 OMS 履单中心,拉取新订单,并返回取餐码给 OMS,OMS 再调用小程序订单服务同步取餐码;
小程序前端刷新页面,访问服务端获得取餐码,然后用户可以根据取餐码到门店取餐或等待外卖。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了一个O2O平台的高可用架构案例,通过实际项目详细讲解了如何应对高并发场景下的系统设计和改造措施。文章首先介绍了项目背景和主要调用过程,然后详细阐述了针对高并发场景下的系统改造措施,包括缓存的使用、一体化监控、系统压测等方面的具体措施。通过这些改造,成功实现了500万日订单和系统4个9的可用性目标。整体而言,本文通过实际案例生动地展示了高可用系统设计的具体手段和实施过程,对于系统架构设计和性能优化有很好的借鉴意义。文章内容涵盖了缓存的应用、一体化监控系统的建设以及系统压测等关键技术,为读者提供了丰富的实践经验和技术指导。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《架构实战案例解析》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(30)

  • 最新
  • 精选
  • zeor
    老师您好 请问下单时怎么保证超卖 请指教具体方案和实现

    作者回复: 办法很多,这里举两个例子: 悲观锁, select for update 提前锁定库存 乐观锁 库存记录有个字段标识它的版本,读库存的时候,获取版本信息,比如1。后面更新的时候,检查记录的版本是不是还是1,如果不是,则写失败,如果是,则写成功,同时更新版本为2。

    2020-03-21
    3
    7
  • 正在减肥的胖籽。
    下单后,订单放到redis中,如果redis数据写入失败?有做补偿吗?需要请教老师你们redis和数据库之间的数据怎么保证一致性?如果不保持一致性那其他系统是否就拉取不到订单?

    作者回复: 一种是把redis作为前置数据库,如果下单时,缓存写入失败,等于业务失败。当缓存写入后,如果缓存崩溃,这个问题不大,可以通过持久化缓存数据,重启后恢复。 如果只是把redis当做缓存来用,我比较推荐写db的时候立即更新缓存或删除缓存,保证缓存和db数据的一致性。

    2020-03-20
    5
    5
  • lyshrine
    请问老师,CAT的全程是什么?

    作者回复: Central Application Tracking,一个开源的应用监控组件,国内用的比较广泛。

    2020-03-21
    4
  • 每天晒白牙
    很期待老师说的监控提前预警的方案 老师我请教个和监控报警相关的问题,就是我们自己通过 prometheus+grafana 搭建了一套简单的业务监控报警,主要通过在代码中埋点,现在报警短信有点多,但里面有些报警也并不是很严重,所以就忽略了,但有时又会错过严重的报警短信,从而影响线上问题,所以后面把报警的阈值提高了,但感觉这样又有风险。 想听听老师对监控报警这的最佳实战,比如怎么实现监控报警的生命周期管理?怎么通过程序化的方式来分析报警,减少人力消耗等

    作者回复: 监控数据一般有收集,分析和告警的过程,你这里缺乏后端的监控数据的分析系统,需要结合各种规则做综合判断后才告警。

    2020-03-20
    2
    4
  • 旅途
    感谢老师的分享!很少见到这个量级web全链路改造的分析,收获很大,但是还是有几个问题不太明白 1.将应用服务放入docker中,部署的设备有没有水平扩展或者扩容?还是只是用的原来的设备不过是docker部署了更多份? 2.oms需要消费的消息会变多,oms也扩容了吧? 3.机器规模已经达到了数百台量级,前端的请求分发,为什么没有先使用lvs进行四层以下的分发,是因为qps还不够大吗?

    作者回复: 1. 我们用的是云主机,供应商提供了K8s+docker环境,我们把服务部署在这个环节就可以,总体上资源利用率会更高。 2. oms 也部署了更多机器 3. lvs部署和运维起来比较复杂,别埋技术坑,nginx比较容易上手,效果也不错。

    2020-05-26
    3
  • 探索无止境
    老师您好,有两个问题请教! 第一个是文中提到小程序前端需要跟推送中心保持长连接,那如何有千万的用户,那服务端要保持上千万的长连接,这一块会不会有问题?或者需要做什么优化处理? 第二个是收银系统如果是一个BS架构的客户端,那是不是就可以跟履单系统部署在同一个云厂商的服务器上,因为是同个云厂商的服务器,是不是就不需要考虑移动和电信的双线路了,不知道理解是否有问题? 请老师指正!

    作者回复: 很好的思考。 1. 小程序在完成下单支付后,会和推送中心建立长连接,这时它会有返回取餐码的预期,获取到取餐码后断掉连接,整个连接的时间一般在几秒。 2. 门店的收银系统通过中心的代理服务器访问云端,这个代理服务器部署在商户自己的IDC机房,这个代理服务器和云厂商的有双线路。POS收银系统不是浏览器界面,是一个桌面应用。

    2020-04-13
    3
  • 阿固
    老师好!对Nginx这块的部署有点拿捏不定,我想到两方案: 方案一 1.每个有公网IP的服务器上安装Nginx(upstream配置相同) 2.在DNS域名商指定步骤1中的公网IP指向一个域名 方案二 1.内网部署Nginx,使用keepalived做高可用集群 2.在DNS域名商指一个公网IP指向域名 老师会从哪些角度考虑,能详细讲一下请求从域名到Nginx集群这一段的架构吗?

    作者回复: Nginx配置细节,专业的运维会比较清楚,这里我不敢误导你。

    2020-03-30
    2
  • 刺客
    硬核,非常棒,贴近实战,要多读几遍,有机会和老师做同事那将是人生幸事呀

    作者回复: 谢谢夸奖,坐标上海,有兴趣勾兑下,哈哈。

    2020-10-16
    2
    1
  • 小洛
    请教老师您几个问题: 1、OMS履单中心的作用,因为我们公司的业务就是推送给消息给收银,这个消息就放在订单服务里面去做了,所以重新部署个OMS履单中心 对后续的业务架构有什么帮助吗? 2、因为加了OMS履单中心,同步订单方面 看方案是采用了往MQ里面 写入订单数据 然后再落库吗?如果订单数据量很多几百万 那么OMS是不是要部署很多台机器去消费MQ然后落订单数据,是不是可以直接用订阅binlog 备份数据库就行了?

    作者回复: 是需要很多个消费者,这是业务功能,不是纯粹数据同步,不能订阅binlog,binlog太底层了意味强耦合。 不是订单中心所有数据变动,oms都会关心,比如本来就是oms反馈取餐码给订单中心,oms自然不关心binlog。

    2020-03-27
    1
  • 约书亚
    请教几个问题: 1. nginx和LB那里没看懂,是怎么一种结构关系呢,LB将请求分流到nginx?改造之后有多个LB了,还是改造后没有云服务商的LB了? 2. 这么多工作,要在大促前提前多久开始进行?

    作者回复: 包括系统改造,压测,,做了有3个月。 不使用云服务商提供的LB,流量从统一的口子进来后,由Nginx集群接管,再由各个Nginx路由到web应用。

    2020-03-26
    1
收起评论
显示
设置
留言
30
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部