美团到店商家IM架构演进

如果无法正常显示,请先停止浏览器的去广告插件。
分享至:
1. 美团到店商家IM架构演进 美团核心本地商业
2. 个人介绍 伟伟 美团技术专家,近10年系统设计与建设经验, 目前从事美团到店商家IM相关的研发工作。
3. 目录 • 背景 • 平台化演进 • 稳定性保障 • 总结
4. 目录 • 背景 • 平台化演进 • 稳定性保障 • 总结
5. 业务背景 聚合餐饮、酒店、民宿、门票度假、交通、休闲 娱乐、丽人医美、教育母婴、Life Event以及餐 饮SaaS 、充电宝等丰富业态,为用户提供更丰 富、更便捷的多场景消费体验,帮大家吃得更 好,生活更好。同时通过技术创新为生活服务商 家提供数字化管理系统,帮助商家改善经营流程 并提升经营效率和综合收益。
6. 业务流程 一家门店 一家门店 用户 商家 平台 商家 售前:澄清用户需求,提升转化 售中:提供订单信息沟通 售后:提升客服效率 用户
7. 应用场景 商家咨询 一家足疗店 医师问诊 一家剧本杀店 一家牙科店 官方导购
8. 系统演进路线 智能化 平台化 规模化 线上化 业务阶段:探索期 业务策略:试点打磨产品体验,逐 渐扩展至其他行业 技术策略:简单快速建设新能力、 功能快速扩展至其他行业 业务阶段:进攻期 业务策略:快速扩行业、提升活跃 用户数、提升商家回复率 技术策略:核心服务拆分合并、容 量规划 业务阶段:发展期 业务策略:探索医师问诊、官方导 购等新形态;试点智能化能力 技术策略:核心流程统一和配置化 业务阶段:发展期 业务策略:通过自动问答等智能化 能力提升用户体验和商家效率;持 续探索新业务形态 技术策略:架构平台化演进、集成 智能化能力
9. 系统挑战(迭代效率) 接入行业多、行业差异大 系统扩展难 文本 发送者 案例 线下券 接收者 用户、商户、 手艺人、匿 名用户 用户、商户、 手艺人、匿 名用户 语音通话 用户 商户 团单 用户、商户、 手艺人、匿 名用户 用户、商户、 手艺人、匿 名用户 套餐 预约礼 行业 全部 全部 全部 触发时机 账号手动触 发 用户挂断语 音通话后发 送 账号手动发 送 个性流程 识别手机号/ 微信号并发 起预约 更新通话记 录 点击交互 无 唤起语音通 话 表情 定金收款 消息类型100+ 无 跳转团详页 流程 = 消息类型 X 涉众 X 场景 消息发送流程步骤多
10. 系统挑战(质量保障) 业务质量诉求高 系统复杂 未读率 回复时长 30s 1min 5min 10min 回复越慢,用户流失越多(系统不丢消息) 核心接口圈复杂度高
11. 目录 • 背景 • 平台化演进 • 稳定性保障 • 总结
12. 整体思路 发送 消息 流程 1 • 新老功能不断变更,补丁式代码,多种架构模式并存 模块B 模块C 模块D 发送 消息 流程 3 发送 消息 流程 4 发送 消息 流程 5 • 核心主流程功能不断扩展、频繁变更、交付要求高 扩展 流程1 模块A 发送 消息 流程 2 配置 管理 扩展 流程2 扩展 流程3 扩展 流程4 统一流程 统一领域模型 服务拆分 接口重构 (业务流程抽象、服务分层) (流程统一、配置化) 扩展 流程5
13. 服务拆分(业务流程抽象) 业务用例 业务流程(从业务用例出发,按照涉众、功能点进行划分)
14. 服务拆分(业务流程划分) 商户 业务流程 商家权限 用户 功能设置 数据报表 消息权限 用户/商户 聊天页 会话页 消息收发 架构原则 • 纵向强隔离:按业务流程、质量属性、 商家权限 商家设置 用户权限 消息发送 消息查询 性能要求高 一致性要求高 性能要求高 QPS:数百 QPS:数万 变更频率低 变更频率低 变更频率低 一致性要求高 性能要求高 变更频率高 变更频率低 关注点分离(基于功能相关性、变化频率、质量属性做拆分) 功能变化频率垂直拆分 • 横向弱依赖:限流、降级、模型转换 • 扁平化:服务内部逻辑水平分层
15. 服务拆分(服务分层) 架构原则:层与层交互必须通过接口 api、rpc、job、mq 接口层 流程服务 用例层 防腐接口 领域服务 工厂、仓库、实体、值对象、领域事件 数据 DB、RPC、KV 访问层 通用能力沉淀至领域层 流程层通过复用领域层能力扩展场景 演进策略: • 从上往下:沉淀复用能力、系统内部重构、测试保证重构质量 • 从下往上:提供各层能力、编排业务流程
16. 服务拆分(实施模式) 拆迁者模式 修缮者模式 A A C A’ C B 遗留系统 C B’ 遗留系统 A’ C’ B D A D B D’ B’ 遗留系统 新架构 C’ D 新架构 D’ A B C B 遗留系统 C B D 遗留系统 A’ C C’ B D 遗留系统 C’ C’ B’ D D’ 新架构 D’ C C B’ B D A A A C 绞杀者模式 A A D’ D D’
17. 服务拆分(模式抽象、小步快跑) 整体策略 垂直合并 基础模式提炼 模式试点 水平合并 模式推广 水平拆分 任务拆解:粒度足够小,不长期占用资源 周期较长,变动范围大,资源风险大 项目风险 架构变动,影响面大,质量风险大 无架构演进经验,质量难保证 风险控制 执行计划:先试点再推广,非核心→核心 过程跟踪:分级验收(整体→里程碑→步骤),阶段复盘
18. 服务拆分(架构方法总结) 阶段一 (单体服务) 涉众A 涉众B 服务 DB 新业务 (探索业务) 阶段二(按系统用例进行纵向划分) 2.2 路径级 2.1 涉众级 涉众A 涉众B 服务 服务 DB 涉众A 服务 2.3 用例级 涉众B 服务 阶段三 (流程和领域水平拆分) 服务 涉众A 服务 DB 涉众B 服务 服务 DB 重流程轻领域 (大部分业务) 关注点分离(基于功能相关性、变化频率、质量属性做拆分) 涉众A 涉众B 涉众C 流程服务 流程服务 流程服务 服务 领域层服务 领域层服务 DB DB 流程复杂、领域复杂 (复杂交易平台)
19. 流程统一(流程抽象) 用户发商户文本 • • • 商户发用户团单 文本内容审核 门店开通权限 黑名单 用户风控/发送频次 • 文本消息生成 机审 • • 门店权限校验 • • • 用户发手艺人 文本 发消息统一流程 用户权限校验 • • • 手艺人 权限校验 = 门店开通权限 • 手艺人开通权限 • 黑名单 权限校验 收发权限校验 消息ID生成 文本拼装 • • • 团单消息生成 门店开通权限 黑名单 商家回复权限 • 消息保存 内容审核 • + • • 内容审核 内容合法性校验 + 消息ID生成 团单信息查询 团单拼装 • • • • • • • • + 消息表保存 会话表更新 会话未读数更新 • • 消息内容获取与拼装 商家长连推送 商家push • • 手机号预约 微信号预约 商家超时通知 • • • 短信触达 微信通知 IVR 用户长连推送 点评公众号 消息推送 手艺人 消息表保存 会话表更新 …… 消息保存 预约 消息推送用户 消息保存 消息ID生成 文本拼装 消息生成 消息表保存 会话表更新 …… 消息保存 文本消息生成 机审 消息推送商家 • • + 消息及关联实体变更 手艺人长连推送 手艺人通知 消息推送 手艺人 超时通知 预约 • • + 接收方及发送方多端触达 手机号预约 微信号预约 • • • 短信触达 微信通知 IVR 后置扩展 消息发送成功后触发流程
20. 流程统一(领域划分) = 发消息统一流程 • • • • 权限校验 用户与商户聊天 用户与手艺人聊天 机器人自动回复 …… • • • • + 黑名单 发送频次 商家回复权限 …… 流程 权限域 内容审核 • • + 机器审核 …… + 消息生成 • • • • • 消息ID生成 文本拼装 图片拼装 商品拼装 …… 内容安全域 消息保存 • • + + 消息推送 消息表保存 …… • • • 消息域 • • • 商家长连推送 用户长连推送 …… 触达域 用户与商户聊天 用户与手艺人聊天 …… 机器人自动回复 …… …… 领域层 权限域 内容安全域 消息域 预约 机器人自动回复 …… 流程 流程层 消息发送统一流程 后置扩展 触达域 门店开通权限 …… 机器审核 消息保存 …… …… 用户长连 用户push 黑名单 …… …… …… …… …… 商户长连 商家push …… …… …… …… …… …… …… ……
21. 配置化(扩展点设计) 扩展点识别 配置规则选取 统一流程 扩展点实现 权限实现 统一身份识别 权限校验 开始 门店开通 手艺人权限 黑名单 用户限频 内容审核 按照 (发送者,接收者,场景,消息类型) 查询规则 审核实现 风险词 风控 找到? Y 返回规则集 消息ID生成 N 屏蔽实现 消息屏蔽 内容拼装 消息存储 推送文案拼装 消息推送 发送方可见 接收方可见 内容拼装实现 文本 图片 商品 表情 推送实现 用户长连 商户长连 商户push 用户push 按照 (发送者,接收者,默认场景,消息类型) 查询规则 找到? N 告警,返回兜底规则集 Y 告警,返回规则集
22. 配置化(统一模型) 消息类型众多,展示差异,数据源差异 统一模型 消息气泡模板 渲染 消息气泡 开发时注册 一家婚纱摄影店 展示时下发模板ID 后端 案例 线下券 套餐 消息气泡 气泡A 前端 模板库 气泡B 气泡C 模板1 气泡D 气泡E 模版2 预约礼 公共属性 扩展属性 ID key1:value1 属性1 key2:value2 id:标识 模型定义 属性2 表情 属性3 扩展属性(map) 定金收款 属性元模型 扩展属性集 attribute1 key:英文标识 desc:描述 attribute2 数据存储 公共属性(结构化) 扩展属性(非结构化json)
23. 配置化架构 管理域与运行域分离,从发消息和查消息视角进行全链路管理 查消息场景 发消息场景 用户与商户聊天 用户手艺人聊天 医师图文问诊 …… …… 机器回复 聊天历史查询 会话列表查询 商品列表查询 …… 商品 消息类型(100+) 文本 图片 表情 团单 …… …… …… 运行域 管理域 查消息 模型管理 配置管理 发布管理 发消息 统一身份定义 配置定义 配置下发 消息类型定义 配置变更 变更管理 扩展能力实现 统一接口模型 场景定义 配置模板 正确性校验 扩展点定义 统一取数模型 账号类型定义 扩展实现采集 监控告警 统一流程 统一数据存储 扩展实现选择 兜底规则 气泡模板下发
24. 目录 • 背景 • 平台化演进 • 稳定性保障 • 总结
25. 整体思路 服务隔离 模块隔离 IM 分级标准 web socket … 消息 量 … 网络抖动 监控 资源隔离 基础设施隔离 商户 量 行业 时段 redis 规则维度 消息 类型 端 控制影响范围 保障核心链路 监控 (故障隔离) (消息数据一致性) (立体化)
26. 故障隔离(隔离层次) 一家婚纱摄影店 服务隔离 (垂直拆分、水平拆分) 模块隔离 (包隔离、水平分层、主辅分离) 资源隔离 (存储、线程池、读写) 聊天页 消息中心 核心,一致性要求高 非核心,一致性要求低 峰值QPS:数百 峰值QPS:数万 基础设施隔离 (泳道、IDC、set化) 隔离的层次 场景多、功能多,重要性、质量属性差异大 重点:服务垂直拆分 重点:核心流程主辅分离 分场景不同的存储选型、独立线程池、CQRS 核心业务重点保障
27. 故障隔离(服务隔离) 涉众、功能相关性 用户入口1 商家入口1 功能设置1 用户入口2 商家入口2 功能设置2 用户入口3 商家入口3 功能设置3 用户端-入口 商家端-入口 商家端-设置 变化频率、质量要求 扩展场景1 消息发送 消息查询 扩展场景1 扩展场景2 消息发送 扩展场景2 消息查询 扩展场景3 扩展场景3 用户/商家端-消息 消息扩展场景 消息查询 消息发送 • 变化频率高 • 变化频率低 • 变化频率高 • 核心 • 非核心 • 非核心 • QPS:数百 • QPS:数万 • QPS:数百 涉众:流量、登录态、安全要求差异 变化频率:同一功能的不同模块变化频率差异 功能相关性:功能内聚,不同功能变更频率差异 质量要求:核心非核心、流量大小
28. 故障隔离(主辅隔离) 核心非核心混杂,步骤多 核心流程,稳定不变 辅助流程,自由扩展 权限校验 …… 长连推送 …… …… 权限校验 内容审核 消息生成 …… …… …… 内容审核 消息存储 预约 短信通知 消息生成 …… 电话通知 …… 微信通知 预约 短信通知 延迟通知 电话通知 长连推送 微信通知 发送MQ 消息存储 MQ …… 主流程 辅流程
29. 消息数据一致性 重试 1.推送消息 IM 2.推送失败 3.写入重试队列 加锁防并发 web socket 频繁断线重连 网络抖动 web socket redis 多次回调 2.重连成功回调 IM 3.读取队列 4.重试推送 web socket IM IM sever websocket 1.获取锁(setnx) messageId:12344 message:今天开门了 2.重推 用户重连触发重试 IM client 2.拉取聊天记录 1.重连成功 5.移除队列 redis client 1.onConnect事件 多次重推 推送失败写入队列 前端重拉 推送消息 redis 3.释放锁(delete) 吗 前端基于消息ID去重
30. 立体化监控 分层监控 分级监控 业务场景多,行业差异大 分级标准 Web端 (请求量、完全加载时间……) 商户 预约 量 量 消息 预约 量 价值 监控 前端 Native端 体量差异 规则维度 (网络成功率、Crash……) 全 链 路 监 控 行业 时段 消息 类型 业务指标 (消息发送量、会话查询量、预约量……) 应用层 端 级别 行业 时段 规则 P0 行业A 全时段 5分钟内流量周同比下降50% 周一至周五 30分钟内流量周同比下降50% 周一至周五 30分钟内总量低于50 应用 行业B (请求量、并发量、响应时间、成功率……) 行业C 行业D 中间件(MySQL、redis) 流量差异 P1 (并发量、慢查询、大key……) 行业F 系统层 行业G 基础设施(HULK容器) (gc、cpu……) 行业E P2 行业H 行业I
31. 稳定性保障总结 事前 事中 (降低概率) (快速发现,减小影响) (防止复发) 故障隔离 容量管理 容错管理 监控 自动化测试 一致性保证 性能保证 告警 依赖管理 安全管理 部署容灾 日志 预案 指标巡检 故障演练 根因分析 方案设计 最佳实践 变更管理 故障处理SOP 代码规范 code review 团队分工 系统能力 流程机制 事后 复盘系统 case复盘
32. 目录 • 背景 • 平台化演进 • 稳定性保障 • 总结
33. 总结 平台化演进 稳定性保障 服务隔离 模块隔离 模块A 模块B 模块C 资源隔离 模块D 基础设施隔离 故障隔离 服务拆分 (业务流程抽象、服务分层) web socket IM 网络抖动 redis 扩展 流程1 配置 管理 扩展 流程2 扩展 流程3 扩展 流程4 扩展 流程5 消息数据一致性 统一流程 商户 统一领域模型 … 量 分级标准 消息 … 量 核心接口重构 (流程统一、配置化) 监控 规则维度 行业 时段 消息 类型 端 立体化监控
34. Q&A

Home - Wiki
Copyright © 2011-2024 iteam. Current version is 2.137.1. UTC+08:00, 2024-11-17 18:42
浙ICP备14020137号-1 $Map of visitor$