在工作期间,笔者有幸参与了下单链路的开发、维护工作,在这期间有经历下单从0到1的搭建,也有随着业务发展不得不进行系统重构的经验。“提交订单”这一词大家应该都是再熟悉不过了,不管你是不是软件研发人员,还是普通使用电商APP购买商品的用户,只要你在购买商品时必然会遇到。既然“提交订单”这么频繁的被使用到,作为任何电商APP来说,那么它的稳定性就尤为重要。
创新互联主营南和网站建设的网络公司,主营网站建设方案,App定制开发,南和h5小程序设计搭建,南和网站营销推广欢迎南和等地区企业咨询
那么站在技术视角看下单链路,会发现几个特点
本篇文章就挑几个在日常研发中可能会遇到比较明显的问题,以及是怎么进行应对的。
告警机制,这个大家最熟悉不过的了,作为技术人的对这可以说是又爱又恨吧。即讨厌线上频繁告警的打扰,又担心真正发生告警时的定位难。常见的主流监控,Zabbix、Promethues、Open-Falcon等主要监控的指标还是以应用维度为主,主要监控指标如下。
如图,类似于这种告警应该是比较熟悉的。那么这里的问题也很明显,下游接口异常到底影响的是哪个链路呢?针对这种特定业务场景,如订单结算页、提交订单,这类接口级别的监控又该怎么做呢?那首先简单介绍下在一次下单请求中可能遇到的问题
!由于热门商品、大促等活动节日的存在,所以下单链路会经常出现这类告警
普通业务异常:例如当前APP版本不支持XXX新业务,非法请求核心参数缺失
非预期异常:新上线的业务代码整出了异常导致下单阻断
在用户购买东西时,首先会看到订单结算页面,这个上面会展示商品价格,售后保障,到货时效,优惠信息等,这时用户在确认条款后会提交订单,那么在订单生成后订单详情看到的理论是需要和在结算页看到的信息是完全一致的。但是由于结算页和提交订单是分开的请求,那么这个时间GAP以及实现差异终究可能会带来不一致的情况发生。如果是普通库存的话,给用户直接重新展示订单结算页也还行,要是抢购商品的话,那这个体验就会有比较大的影响。
订单的数据是相当复杂的,需要依赖商品、库存、营销、商家等数据信息,不同的业务场景对生成的订单数据就会存在一定的要求。
那么这件事情的必要性,就在于可以在系统上线之前,通过回归测试及流量回放验证来及时发现是依赖方接口导致的问题还是自身系统代码bug带来的影响。
那么问题来了,既然决定好好治理,那么怎么治理呢?怎么以最小的人力、技术成本实现这些治理呢?这个时候大量参考了现在同行业内针对下单场景稳定性相关的方案。现在就逐一介绍以上问题最终选择的解决方案。
针对接口级的定制化告警,采用了自定义日志埋点的方式,格式如下:
{current_time}|{trace_id}|{span_id}| {function_name}|{rt}|{error_code}|{error_message}|{user_id}
这里简单画个图,直观的体现下需要关注下单链路中哪些指标
现在介绍一下每个指标的作用:
网关QPS > 自身QPS,可以考虑是否网关侧发生了限流
当自身QPS下降过高
网关QPS没什么波动,那么这个时候考虑网关问题
网关QPS也同步下降,前置导购链路流量问题,如商详/购买浮层 是否发生阻断性异常
如果是浅库存抢购,这个指标不会有太大波动
接口被刷了,这个指标也不会有太大波动,且会出现OPERATION_TOO_FREQUENTLY频次限流错误码
!通过将接口每次请求的埋点日志输出到指定文件中,后续经过监控组采集以及分析得到了如下几个主要的大盘:
从图中可很直观的发现当前有哪些原因导致的下单失败,如版本过低限制、库存售罄、下单频次过高等原因,这样就能很直观的发现
另外还设计了基于机器IP的过滤,这种做法的好处是,在发布过程中,如果下单出现了任何阻塞性异常,都可以很快的感知到,从而可以快速做到SOP响应处理。
对于链路中的业务弱依赖接口,这里不会有错误码体现,这里依然还是借助于监告警机制。
这里主要日常监控观察主要会注重成功量QPS,特别是发布期间完全可以依赖于这些指标数据。例如发布期间这个时候在抢购,有了这个就能做到心中有数了。这里简单说明一下成功量就是接口业务执行成功的含义。
有了如上的这些指标数据,那么基于这些做告警机制就成了顺理成章的事情啦,目前已经有如下指标告警:
然后再将这些告警机制接入飞书、短信等通知,那么哪怕是在周末外出游玩的时间,有任何下单链路的异常告警,只需要打开手机看一眼就能快速定位到问题的根因所在了,岂不美哉?
以上就是针对下单告警机制的精细化处理了,除此之外,有了这些数据后,也对其它一些指标数据也进行了完善,如:
商品改价这个在电商中应该是比较常见的,那么如果是在秒杀时改价,那么此时提示用户“商品价格”变更可能对用户的体感就没那么好。针对这类问题可以采用商品信息+版本号机制。
用户在订单结算页看到的商品数据版本会交由客户端携带至提交订单,此时提交订单可以校验该版本的生效时间是XX秒内,确保这个时间内订单提交不受改价影响,这样可以给到用户一个较好的购买体验。这个XX时间就需要业务来进行权衡了。
通过以上的UML图可以看到,由于确认订单和创单是两次请求,那么保证数据防篡改是第一要求,而且有了这个验签机制后,用户自己通过简单传参刷创单接口就变得更加困难了。对于迭代版本中新增生成sign的参数,这边主要采用version版本的方式,不同的version对应参与生成version的参数有所不同。
有了防篡改的保障后,那么接下来就只需要在下单资源扣减之前,针对这些核心数据进行一致性校验即可,如订单金额、展示给用户的售后标签等等。这样的话在出现不一致时可以给到用户友好的提示,并且对可以及时进行告警通知。
一致性校验节点旨在创单落库节点前给恒久不变的规则(如:订单支付金额 = 应收金额 - 优惠 )提供下单前的兜底校验及可选告警措施。不太适合落地多变的规则。如果是多变规则需要写到对应业务模块以异常形式告出。大家自行判断所属业务属于哪一种。
订单数据完整性校验致力于保障订单在整个生命周期中数据的正确性。为用户打造一站式的校验、预警解决方案。提供以下能力:
适用的场景:
在下单的稳定性治理过程中,从面对线上告警的盲目无措,逐渐演进到面对日常迭代变更、突发流量场景的镇定自若。在日常工作中,持续关注、发现线上潜在的问题以及不合理的设计,然后尽量通过合理机制&实现来进行保障。作为一名研发人员,不能确保不犯错,但能尽最大努力及时发现错误,敬畏生产。几套打完收工,可以手握小茶壶,静看风波了。
网站题目:下单稳定性治理
本文链接:http://www.mswzjz.cn/qtweb/news18/532968.html
攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能