大纲
1.一个订单系统的整体架构、业务流程及负载情况
2.订单系统面临的技术问题一:下订单的同时还要发券、发红包、Push推送等导致性能太差
3.订单系统面临的技术问题二:订单退款时经常流程失败导致无法完成退款
4.订单系统面临的技术问题三:第三方客户系统的对接耦合性太高导致经常出现问题
5.订单系统面临的技术问题四:大数据团队需要订单数据应该怎么对接
6.订单系统面临的技术问题五:秒杀活动时数据库压力太大应该怎么缓解
7.梳理高并发订单系统面临的技术挑战
8.进行系统设计时放大100倍压力找出其技术挑战
1.一个订单系统的整体架构、业务流程及负载情况
(1)电商购物流程
(2)订单系统的核心业务流程
(3)订单系统的非核心业务流程
(4)订单系统的真实生产负载情况
(1)电商购物流程
(2)订单系统的核心业务流程
当用户对购物车中选中的一批商品提交订单时,会先出来一个确认订单的界面。用户得先确认这个订单中的商品、价格、运费是否无误,然后确认订单的快递方式、收件地址是否无误,接着判断是否需要开发票以及发票的抬头是什么。当然,在这个过程中用户可以选择是否需要使用优惠券等。当用户完成这些信息的确认后就可以提交订单了。
于是订单系统最核心的一个环节就出现了,就是根据APP传来的各种信息完成订单的创建。此时需要在数据库中创建对应的订单记录,整个过程如下图示:
当用户正式确认下单后,除了在数据库中创建这个订单外,还会跳转到支付界面,让用户选择支付方式并完成订单的支付。比如跳转到支付宝或微信,让用户在支付宝或微信中完成支付,如下图示:
当用户完成支付后,支付宝或微信之类的支付系统一般会回调订单系统的接口,通知订单系统本次支付已经成功。当订单系统收到支付成功的回调后,需要安排配送发货、需要给用户发放优惠券或者现金红包来鼓励用户继续购物、需要给用户发送推送来通知用户支付成功准备发货(这个推送一般会通过短信通知)。下图就包含了订单支付完成后要做的一些事情:
(3)订单系统的非核心业务流程
订单系统在运行的过程中还会和营销系统、购物车系统、商品系统、配送系统等进行复杂交互。下面就是订单系统在运行时的一些非核心业务流程(订单系统需要具备的基本功能模块):
下单模块主要是用于创建订单,异步模块主要是在支付成功后发放优惠券、发送红包和推送通知,查询模块主要是提供订单查询的功能。
当订单系统完成核心的下单业务流程后,用户通常会查询自己的订单,那么订单系统就需要提供对应的订单查询功能。当用户查询到一个订单列表后,有时会因为各种原因想要退货,因此订单系统还需要退货模块提供退货功能。
此外,订单系统除了自己要提供的功能模块外,还需要跟第三方系统进行对接。比如想要查看订单的配送状态,那么就需要订单系统从第三方物流公司的系统中进行查询。比如运营团队需要根据订单数据进行业务分析,那么就需要订单系统提供订单数据给大数据团队进行报表生成。
最后在类似双11、秒杀等大促场景下,可能大量的用户会等待一些特价促销的商品开卖后进行抢购,此时可能会对订单系统产生一个流量洪峰,甚至影响正常的一些下单功能。因此订单系统往往需要提供一个专门用于抗双11、秒杀等活动的大促模块,专门用于处理特殊活动下的高并发下单请求。
(4)订单系统的真实生产负载情况
首先看订单系统的订单量。假设在一个垂直电商领域第一的APP中,几年时间累计注册的用户数量已有几千万。由于注册的用户不是每个都会天天来逛APP,大部分用户也就是每隔几天会来逛一逛APP。所以根据统计来看,每天活跃用户的数量是一两百万,每天新增订单的数量是几十万。随着该公司的发展,日常情况下的订单数量可能很快就会变成每日百万。当然在一些双11、618大促活动的情况下,目前的订单数量就已经能达到单日百万的级别了。如下图示:
接下来看订单系统的QPS。QPS就是系统每秒的查询数量,这个指标是指订单系统所有核心以及非核心功能模块加起来,每秒钟有多少请求量。对该公司来说,在平常每天的高峰期,大概最多会达到每秒2000的访问量,不算太大。但是如果要是有那种特价商品限时秒杀的活动,那可能就会达到每秒1万以上的访问量。如下图示:
以上就是该公司订单系统的整体压力。可以看到,压力主要在两方面:一方面是订单系统日益增长的数据量,一方面是在大促活动时每秒上万的访问量。
(5)总结
当前订单系统的整体架构是比较简单的,仅仅是让开发好的系统直接连接一台数据库服务器,所有数据都存储在里面。然后也是由这台数据库服务器去抗所有的访问压力,所以现在订单系统在一些大促活动时经常会出现不稳定的情况。
随着数据库中的订单数据越来越多,数据库的读写性能就会越来越差。尤其在大促活动高峰期时,数据库访问压力剧增,读写性能会进一步下降,经常出现请求过慢、请求超时等问题。所以需要在该订单系统的架构