电商中台订单集成

概述:

核心技术要求:不丢单,分布式订单抓取

订单下拉技术选择,推送还是抓取?目前采取定时抓取的方式,抓取的方式更加合理,因为可以控制订单流入的速度,防止超出后台系统的处理能力.  一般采取按时间分片的方法: 每次任务执行抓取一个时间段内的订单,为了保证订单不丢失,我们会让每个时间片边界有几秒的重叠.

作为订单中台,往往会从多个平台抓取订单, 那么我们可以考虑分配多个服务器来完成订单抓取任务,来提高吞吐量,对于订单多的平台,我们可以多分配多台服务器,对于订单少的平台,一台服务器可以处理多个平台的订单,如何高效地调度任务是一个挑战. 尤其是当多台服务器对应一个平台的时候,我们需要每台服务器并行地抓取不同时间段的订单(订单的顺序)做到不重复遗漏. 一种做法是分配一台服务器做任务调度,那么这台服务器可能会成为单点瓶颈,一旦这台服务器宕机,整个抓取进程就会停滞. 更好的做法是让多台服务器通过ZOOKEEPER自行协商,决定每台服务器应该分配的时间段.

配置管理:

目前采用ZOOKEEPER做订单抓取的配置管理. 对于配置管理,ZOOKEEPER最大的优势是可以集中管理配置信息,并且当配置信息有更改的时候,所有的节点都能自动监听到并保持一致.  目前对于所有的配置选项都支持两级的配置管理,所有平台可以共享配置(平台编号=default) 或者针对某个平台个性化设置(覆盖 默认值)

配置管理ZOOKEEPER数据结构:

ZOOKEEPER路径 ZOOKEEPER数据 节点类型
/tasks/cfg/starttime/[平台编号] 每个平台订单抓取任务的开始时间(精确到秒),比如抓取最近3个月的订单,那开始时间是当前时间-3个月 PERSISTENT
/tasks/cfg/interval/[平台编号] 每个平台订单抓取任务的时间片长度(秒数) PERSISTENT
/tasks/cfg/timeout/[平台编号] 每个平台订单抓取任务的超时时间 PERSISTENT
/tasks/cfg/retries/[平台编号] 每个平台订单抓取任务的重试次数 PERSISTENT
/tasks/cfg/retryintv/[平台编号] 每个平台订单抓取任务出错每次重试的间隔时间 PERSISTENT
/tasks/cfg/taskpernode/[平台编号] 每个平台订单抓取任务在每个节点上并行线程数量 PERSISTENT
/schedulers/assignment/[平台编号]/[服务器节点编号] 空字符串 EPHEMERAL

注:目前服务器和平台的对应无法智能地自动分配,需要在启动服务器前手工在ZOOKEEPER中创建

任务调度算法:

节点间通过ZOOKEEPER协调, ZOOKEEPER的数据结构如下

ZOOKEEPER路径 ZOOKEEPER数据 节点类型
/tasks/runtime/prevcomplete/[平台编号] 任务最新执行时间片的开始时间 PERSISTENT
/tasks/runtime/inprogress/[平台编号]-[任务时间片开始]-[任务时间片结束] 实际任务的开始执行时间 PERSISTENT

获取任务:

  1. 从ZOOKEEPER中获取最近的执行时间/tasks/runtime/prevcomplete/, 如果最近的执行时间为空就获取开始时间
  2. 根据时间片算出下次的执行时间
  3. 保存下次执行时间片的起始和结束时间/tasks/runtime/inprogress/  和当前平台任务新的开始时间. 注意:这里采用了ZOOKEEPER的MULTI命令 保证两次保存为原子性操作(同时成功或失败)当两个不同的节点同时试图获取同一时间片时,只有第一个会保存成功,第二个会抛出KEEPEREXCEPTION.
  4. 如果保存失败则重新获取最近的执行时间(重复步骤1-3),重复N次后如仍然不成功则返回获取抓取任务失败

任务完成:

  1. 删除ZOOKEEPER中的任务/tasks/runtime/inprogress/

异常处理:

每次抓取任务失败会重试一定次数 (/tasks/cfg/retries), 每次重试的间隔时间会逐渐增大(重试次数* [/tasks/cfg/retryintv]),避免频繁重试使网络状况进一步恶化,当重试次数超过限定时则将任务放入一个失败队列并通知管理员,可能需要排查原因并后续人工处理.

另外一种情况是任务获取后在处理过程中由于服务器宕机,抓取线程崩溃等原因导致不能删除/tasks/runtime/inprogress/,即任务并未完成而处理状态未知. 集群中需要通过ZOOKEEPER选举出一个LEADER服务器来监控任务列表(关于ZOOKEEPER LEADER选举在官方的RECEIPE中有详细描述,这里就不再赘述), LEADER中的监控线程处于活跃状态并定期扫描所有 /tasks/runtime/inprogress/节点下的任务,如果任务存在的时间超过一个阀值,就将任务删除,同样放入失败队列待后续处理

时间: 2024-10-19 20:24:20

电商中台订单集成的相关文章

电商网站订单评价得分的星级样式实现

概述: 电商网站中的订单一般都允许评价,比如质量评价和服务评价等,页面上以星星多少表示评价的高低. (以下截图来源于京东) 本文基于自己的理解和实现“五星级评价”,供参考. ---------------------------------------------------------------------------- 前期准备: 从京东订单页面中拷贝了一个图片,此处命名为star-s.png. 图片star-s.png: 图片分析: 像素160×15px,包含5个满星和5个空星,每个星星

Java开源生鲜电商平台-OMS订单系统中并发问题和锁机制的探讨与解决方案(源码可下载)

Java开源生鲜电商平台-OMS订单系统中并发问题和锁机制的探讨与解决方案(源码可下载) 说明:Java开源生鲜电商中OMS订单系统中并发问题和锁机制的探讨与解决方案: 问题由来     假设在一个订单系统中(以火车票订单系统为例),用户A,用户B都要预定从成都到北京的火车票,A.B在不同的售票窗口均同时查询到了某车厢卧铺中.下铺位有空位.用户A正在犹豫订中铺还是下铺,这时用户B果断订购了下铺.当用户A决定订下铺时,系统提示下铺已经被预订,请重新选择铺位.在这个系统场景中,我们来探讨一下,火车票

Java生鲜电商平台-电商订单系统全解析

Java生鲜电商平台-电商订单系统全解析 今天分享将会分为以下三个环节来阐述: 1.订单系统的介绍 2.订单系统的解构 3.垂直电商订单系统设计思路 一.什么是订单系统? 订单管理系统(OMS)是物流管理系统的一部分,通过对客户下达的订单进行管理及跟踪,动态掌握订单的进展和完成情况,提升物流过程中的作业效率,从而节省运作时间和作业成本,提高物流企业的市场竞争力.顾名思义,电商系统就是用户.平台.商户等对于订单的管控.跟踪的系统,衔接着商品中心.wms.促销系统.物流系统等,是电子商务的基础模块:

Java开源生鲜电商平台-Java后端生成Token架构与设计详解(源码可下载)

Java开源生鲜电商平台-Java后端生成Token架构与设计详解(源码可下载) 目的:Java开源生鲜电商平台-Java后端生成Token目的是为了用于校验客户端,防止重复提交. 技术选型:用开源的JWT架构. 1.概述:在web项目中,服务端和前端经常需要交互数据,有的时候由于网络相应慢,客户端在提交某些敏感数据(比如按照正常的业务逻辑,此份数据只能保存一份)时,如果前端多次点击提交按钮会导致提交多份数据,这种情况我们是要防止发生的. 2.解决方法: ①前端处理:在提交之后通过js立即将按钮

java架构师、高性能、高并发、高可用、高可扩展、性能优化、集群、电商网站架构

15套java架构师.集群.高可用.高可扩展.高性能.高并发.性能优化.Spring boot.Redis.ActiveMQ.Nginx.Mycat.Netty.Jvm大型分布式项目实战视频教程 视频课程内容包含: 高级Java架构师包含:Spring boot.Spring  cloud.Dubbo.Redis.ActiveMQ.Nginx.Mycat.Spring.MongoDB.ZeroMQ.Git.Nosql.Jvm.Mecached.Netty.Nio.Mina.性能调优.高并发.to

企业级电商项目P2P金融项目实战,企业架构师培训视频课程

15套java架构师.集群.高可用.高可扩 展.高性能.高并发.性能优化.Spring boot.Redis.ActiveMQ.Nginx.Mycat.Netty.Jvm大型分布 式项目实战视频教程 视频课程包含: 高级Java架构师包含:Spring boot.Spring  cloud.Dubbo.Redis.ActiveMQ.Nginx.Mycat. Spring.MongoDB.ZeroMQ.Git.Nosql.Jvm.Mecached.Netty.Nio.Mina.性能调优.高并发.

中小型企业级电商涉及相关系统总结

随着全球信息化进程的不断发展和深入,电子商务日渐盛行,B2C模式开始崛起,越来越多的企业正在或计划建立自己的在线商务渠道,B2C电子网站必将雨后春笋般涌现.相对于大的电子商务平台,垂直细分类的B2C电子商务网站也有自己的优势.在专业化的背景下,垂直细分的电子商务网站能够给消费者提供更细致.更专业化的服务,同时,独立的网站也更有利于打造属于自己的电子商务品牌. 对于一个企业电子商务网站而言,电子商务平台不仅仅就是一个可以发布信息和购买东西的网站,原有网站的简单的宣传和信息发布功能已经不适应现代社会

电商系统中的商品模型的分析与设计—续

前言     在<电商系统中的商品模型的分析与设计>中,对电商系统商品模型有一个粗浅的描述,后来有博友对货品和商品的区别以及属性有一些疑问.我也对此做一些研究,再次简单的对商品模型做一个介绍. 从SPU.SKU开始     首先我们需要澄清上篇中的这两个概念,在上篇文章中"货品"是指一种概念物品,这种物品并不是一个具体的实物,当它具备具体的属性.价格时,才是一种实物,也就是商品."商品"就是库存中一个具体的实物.例如:iphone6,就是一种货品,但用户

java架构师课程、性能调优、高并发、tomcat负载均衡、大型电商项目实战、高可用、高可扩展、数据库架构设计、Solr集群与应用、分布式实战、主从复制、高可用集群、大数据

15套Java架构师详情 * { font-family: "Microsoft YaHei" !important } h1 { background-color: #006; color: #FF0 } 15套java架构师.集群.高可用.高可扩展.高性能.高并发.性能优化.Spring boot.Redis.ActiveMQ.Nginx.Mycat.Netty.Jvm大型分布式项目实战视频教程 视频课程包含: 高级Java架构师包含:Spring boot.Spring  clo