标签派单系统架构设计

news2024/11/22 11:53:42

需求描述

项目背景

  1. 根据员工历史成单情况,计算员工对不同类型工单的转化能力。
  2. 根据员工和工单标签匹配进行派单。

业务流程图

规则描述

每10分钟,分城进行一次派单,派单规则可能会动态删减,需要支持动态配置

工单标签说明

一级标签二级标签
客户性别男>女
客户性格温和>冷漠>急躁
客户属性严谨>社会
客户年龄20+> 30+> 40+> 50+> 60+
客户学历初中> 高中> 大专> 大学> 硕士> 博士

员工标签计算方式

  1. BI每月统计员工标签
  2. 员工历史成单情况,每个二级标签排名前40%的人,会有该标签
  3. 每个员工,一级标签,自排序,取第一个,例如: 性别一级标签, 张三,接女性的单,大于男性,就给张三,服务女性标签

派单规则

工单类过滤,都满足才通过

  • 工单时效性, 工单超时判断
  • 工单合法性,工单是否是未派单状态

员工类过滤:都满足才通过

  • 员工,日/月工单上限
  • 员工,开工状态校验
  • 门店,日/月工单上限
  • 员工,工单价值匹配
  • 等10余条规则

排序: 员工接单量排序

架构设计

明确需求,找出复杂度

需求描述基本满足编码要求,但是对于架构设计,还是不够的。还需依据需求,多次沟通,判断质量复杂度,业务复杂度

业务复杂度方面,规则多,逻辑多,且未来2年内变化较大,业务复杂度较高。

质量复杂度方面(高性能,高可用,成本,安全等),需要与产品尽可能沟通,明确。

首先关注的是业务量,业务量越大,对高性能要求越大。历史数据表明,日均1W单。最高1min 200单,属于高性能要求较低

其次关注业务容忍度,影响高可用,公司规定派单系业务故障时间不能超过1min

然后关注成本部分,公司没有特殊要求

最后考虑,安全等问题,这需求不涉及法律法规,公司规定,这里忽略。

通盘考虑,可以判断出, 标签派单系统, 业务复杂度高,质量复杂度较低

根据设计复杂度模型,找出大致架构设计方向

设计复杂度模型

组内人员介绍,派单组3个人,都是java后端开发,公司以由完善的微服务架构

根据复杂度判断结果,依据设计复杂度模型,考虑组内人员情况,公司架构情况,得出架构大致方向:

可扩展方面: 采用微服务架构

高性能,高可用方面: 采用集群+负载均衡

拆解,取舍,细化架构

可扩展设计

架构可扩展设计

微服务拆分,理论上:

  -  3个人维护一个迭代中的系统,1个人维护3个处于维护期的系统。
  -  一次调用不超过5个系统



但是考虑到派单,规则变化较大,封装变化,适度扩展。

拆分的微服务如下:

  • receive_wait_order 接受待派工单, 分城查询待派工单,开发后基本不变
  • dispatch 派单,变化较大
  • score 员工标签配置服务,开发后基本不变。
  • record 记录派单结果,事实统计,为报表提供底层数据

代码可扩展设计

派单系统,规则多,未来变化大,这里采用规则引擎,降低复杂度。

规则引擎对比

规则引擎优点缺点
drools成熟度高,大公司开发需要花时间掌握,成本高
liteFlow支持,多种逻辑关系,xml或yml配置,支持配置中心热更新,掌握成本低没有界面,需要xml等配置
ice支持,多种逻辑关系,有精美界面单独部署,如果二次开发,需要前端技能

结合团队情况 ,大家都是Java后端开发,公司已有配置中心,根据 合适,简单,演进 原则,选择liteFlow,结合已有配置中心。

高性能,高可用设计

日均1W单。最高1min 200单,一次派单预计0.8s,业务需求每10分钟按城市派1轮,推导出,性能要求不高,可接受一定时延,不超过10min分钟

采用任务分解模式,按城市分片

利用已有消息队列kafka,receive_wait_order 每10分钟发送派单消息, 消息体为:需要派单的城市

一次派单预计耗时0.8s,单台dispatch 派单QPS 1.25, 3台dispatch QPM 225,满足业务需求

3台dispatch 同一个消费组进行消费,来实现按城市分片派单。

其他服务没有高性能要求,但又高可用要求,均选择2台。

存储设计

结构化数据,采用Mysql 存储,大多数表数据量较小,不用特殊处理

但是派单结果表 1天1W单,1年365W ,未来场景考虑, 派单结果表采用 按年分表

分表采用Sharding-JDBC ,SDK嵌入record项目无需考虑高性能,高可用

最终结构图

  • receive_wait_order 接受待派工单, 分城查询待派工单,开发后基本不变
  • dispatch 派单,变化较大
  • score 员工标签配置服务,开发后基本不变
  • record 记录派单结果,事实统计,为报表提供底层数据

业务架构图

系统架构图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/567465.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

抖音seo源码开发,技术交付及故障。服务等响应

抖音seo源码开发、抖音seo源码部署、抖音seo源码开源交付及故障响应 什么是抖音SEO? 抖音SEO主要是指通过一系列优化措施,提高抖音短视频在抖音搜索结果页的排名,从而增加短视频曝光量和观看量的过程。SEO的实现需要涉及多个方面&#xff0c…

MySQL基础一篇打通,图文并茂

准备工作 直接使用MySQL提供的数据,下载MySQL示例数据库 MySQL示例数据库模式由以下表组成: Customers:存储客户的数据。Products:存储比例模型车列表。ProductLines:存储产品系列类别列表。Orders:存储…

【前端工程化】Git入门指南:轻松掌握从安装到操作!

git入门指南 安装和基本配置Bash,CMD和GUI用户名和邮箱的配置 Git仓库本地Git仓库文件状态的划分文件状态检测git忽略文件的配置(了解)文件更新提交git校验和-日志和版本回退git loggit resetgit reflog 远程仓库远程仓库的操作获取远程仓库远…

整合Springboot+MybatisPlus+达梦数据库

1、安装Windows环境的达梦数据库可视化软件 这里不做安装介绍 安装步骤很简单,提供的软件也很全面,特别是数据库迁移工具,支持市面上许多主流的大型数据库,例如:Oracle、SQLServer、MySQL、DB2、PostgreSQL、Informix…

Axure 原型模板素材哪里下载

1、Axure 原型模板素材哪里下载 如果你想要下载 Axure 原型模板素材,可以前往即时设计资源广场进行一键复用。在即时设计资源广场,你可以免费使用所有的 Axure 原型模板素材,而且没有文件数量、团队或项目数量的限制。这大大降低了资源共享的…

医疗平台,专攻医学软件方向,病历云、影像学、实验室检验

一、开源项目简介 JEHC 本开源平台重点打造医疗(专攻医学软件Web方向,病历云,影像学,实验室检验等等),IOT方向,工作流Workflow等。 JEHC-CLOUD基于Spring Cloud 2.X版本,采用前后…

当BIM遇见建筑,设计灵感无限,欣赏有趣的BIM建筑

人们常用“罗马是怎样建成的”来形容建成伟大城邦的复杂和艰辛,也因此,优秀的建筑是如何通过科学严密的设计建成,就成了值得研究的经验。随着国际化交流合作的日益增多,以及BIM先驱者标准院的技术经验引进,BIM在我们的…

zigbee 无线发送数据,呼吸灯

控制端代码: #include "hal_defs.h" #include "hal_cc8051.h" #include "hal_int.h" #include "hal_mcu.h" #include "hal_board.h" #include "hal_led.h" #include "hal_rf.h" #include &…

【服务器数据恢复】IBM服务器虚拟磁盘文件被误删除的数据恢复案例

服务器数据恢复环境: IBM X系列服务器柏科某型号存储。服务器上部署VMware ESXi虚拟主机,存储上存放虚拟机文件。 虚拟主机采用的Windows Server操作系统,部署宏桥和索菲2套应用,数据库是SQL Server。 虚拟磁盘:数据盘…

已经有MySQL了,干嘛还要学MongoDB?

三分钟的时间,通过本文你将学会 1.MongoDB主要特征 2.MongoDB优缺点,扬长避短 3.何时选择MongoDB?为啥要用它? 4.MongoDB与MySQL关键字对比 5.下载与安装MongoDB 6.Java整合MongoDB,实现增删改查 MongoDB和MySQ…

PyTorch-TensorBoard

一、介绍: TensorBoard:是一组用于数据可视化的工具。 SummaryWriter:类,用于提供一个高级API,并在给定目录中创建事件文件,向其中添加摘要和事件。 1. SummaryWriter(log_dir):log_dir表示Tens…

MySQL 索引(w字)

目录 关于索引 关于磁盘 磁盘 ​扇区 结论 MySQL 与磁盘交互基本单位 MySQL 整体轮廓 结论 关于索引 建立测试表 关于 Page 为何IO交互要是 Page 理解单个Page 理解多个Page ​页目录 复盘一下 ​B树 ​B树 聚簇索引 VS 非聚簇索引 总结(重点) …

就业内推 | 地产行业招运维,最高30k*15薪,有住房交通补贴

01 宝能 🔷招聘岗位:网络运维高级工程师 🔷职责描述: 1、负责集团各数据中心和职场网络的设计规划、实施落地和持续优化; 2、负责集团网络的日常运维工作,如服务请求和变更的处理、网络相关故障解决&#…

JSP详解

JSP的概念: 概念:Java Serve Pages Java服务端页面 一种动态的网页技术,其中可以定义Html、css、js等静态内容。还可以定义Java代码的动态内容。 JSPHtmljava JSP的存在使我们可以不用在servlet里面用输出流一行一行的写字符串&#xff0…

拿下7家大厂offer后,整理出来的笔记.....

我第一次接触自动化是在2016年。那时刚毕业一年有余,组内一直做手工功能测试,大概在2018年9月,部门领导要求测试组引入自动化。组内之前从没有开展过任何自动化,测试主管安排了一个刚入职不久的研究生同事去研究。 当时自己内心还…

Jmeter性能测试 -3数据驱动实战

什么是数据驱动? 从数据文件中读取测试数据,驱动测试过程的一种测试方法。数据驱动可以理解为更高级的参数化。 特点:测试数据与测试代码分离;数据控制过程 好处:降低开发和维护成本,减少代码量&#xf…

原型设计工具

常见原型图设计工具 Sketch(国内外通用) 仅支持mac系统,无window系统软件。 Figma(国外) Figma是一个基于浏览器的协作式UI设计工具。 即时设计(国内) 墨刀(国内) 墨刀采用简便的拖拽连线操作,作为一款在线原型设计软件,墨刀支持云端保存…

Docker 设置国内镜像源

Docker 镜像加速 国内从 DockerHub 拉取镜像有时会遇到网络问题,此时可以配置国内的镜像加速来下载。Docker 官方和国内很多云服务商都提供了国内加速器服务,例如如下: 科大镜像:https://docker.mirrors.ustc.edu.cn/网易&#…

SpringSecurity 硅谷通用权限系统:权限管理

由于项目需要 快速入门一下 看的是这篇 比较新比较快 硅谷通用权限系统:权限管理 一、权限管理 1、权限管理介绍 每个系统的权限功能都不尽相同,各有其自身的业务特点,对权限管理的设计也都各有特色。不过不管是怎样的权限设计,大…

Flutter 笔记 | Flutter 容器组件

Padding 这个组件最能体现Flutter与其他UI框架的一个不同点,那就是在其他UI框架中padding基本都是作为组件的一个属性,例如在html中常见的布局标签都有padding属性,Android中也是如此,但是在Flutter中组件并没有一个叫padding的属…