尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

项目架构完整梳理--智能营销分布式平台

项目架构完整梳理--智能营销分布式平台 单机版营销系统现存架构缺陷原有单机架构存在的各类线上问题初期营销系统采用单体单机架构仅能承载少量商户短信触达业务随着业务规模扩张各类稳定性、性能缺陷集中暴露无集群部署服务单点故障一旦宕机所有营销任务全部中断不具备高可用能力定时任务多节点部署后缺少分布式控制机制出现任务重复执行、短信重复推送消息队列消费无幂等设计同一条消息重复消费用户收到多条重复营销 / 验证码短信短信下发接口并发量高时频繁触发第三方通道限流极易引发接口雪崩营销执行日志全部存储 MySQL 单表数据量达到千万级后多条件分页检索速度极慢线上故障排查效率极低渠道密钥、营销限流阈值等配置硬编码在代码内调整规则必须重启服务迭代成本高缓存仅简单使用单层 Redis未做配套防护策略并发场景频繁出现缓存穿透、缓存击穿、缓存雪崩无统一流量控制、熔断隔离机制恶意爬虫高频刷接口会直接打垮下游短信通道服务开发、测试、生产环境依赖本地环境配置环境不一致部署流程繁琐、容易出现线上环境 bug。分布式重构核心目标针对单体架构全部缺陷开展二期分布式微服务重构整体改造目标支持多商户同时运营承载百万级每日短信触达流量搭建高可用集群架构消除单点故障解决重复消息、重复定时任务、缓存并发等稳定性问题冷热数据分层存储海量日志检索提速配置动态化管理修改业务规则无需重启服务增加流量防护、分布式事务能力保证跨服务数据一致性搭建可视化运营看板、全链路日志追踪方便线上问题定位容器化统一部署消除多环境差异简化项目交付流程。分布式营销平台重构开发任务划分基于单体系统暴露的各类缺陷整体分布式改造工作分为七大核心开发任务全部由我负责设计与落地实现统一工程规范与分层架构设计完成整套项目技术栈选型制定控制层、业务层、工具层、中间件封装层、存储层五层代码分层标准统一全局异常处理、接口返回格式、请求鉴权、日志打印规范。微服务治理体系搭建集成 Nacos、Sentinel、Seata 组件实现服务注册发现、统一动态配置、接口流量防护、跨库分布式事务整套能力。多级缓存架构重构抛弃原有单层 Redis 缓存自研 CaffeineRedis 二级缓存方案配套完整策略解决缓存穿透、击穿、雪崩三类并发问题新增接口限流能力。消息队列可靠投递改造重构 RabbitMQ 消息消费链路设计消息幂等校验、多级重试、死信队列机制保障短信消息不丢失、不重复消费。多层存储分层改造实现数据冷热分离核心业务数据留存 MySQL海量执行日志迁移 Elasticsearch营销图片、附件文件交由 MinIO 对象存储管理。营销业务能力重构接入 QLExpress 规则引擎、Quartz 分布式定时任务支持运营后台可视化配置人群筛选、定时营销任务无需修改代码。运维监控与工程化落地搭建数据可视化看板、全链路监控告警体系基于 DockerDocker Compose 完成整套项目容器化改造统一多环境部署流程。营销平台业务模块拆分设计结合整体营销业务流程按照领域边界拆分为 5 个独立业务模块模块之间通过 Feign 远程调用通信职责完全解耦商户客户模块负责商户入驻全流程、客户基础信息维护、用户标签画像、客户人群分组管理是整个平台的数据基础模块为活动模块提供人群筛选数据源。营销活动模块平台核心业务模块支撑运营创建营销活动、选择目标人群、配置即时 / 定时两种触达方式串联缓存、消息、定时任务等组件完成批量触达逻辑。短信渠道模块对接第三方短信服务商统一管理多条发送通道内置发送频率限流、手机号黑名单拦截逻辑异步接收活动下发指令完成短信推送。任务调度模块承载所有定时营销任务持久化存储任务配置集群环境下依靠分布式锁保证任务唯一执行记录每一次任务的执行状态与失败原因。运营可视化模块面向运营人员提供营销数据统计看板、营销规则可视化配置、线上异常告警通知、营销物料文件上传管理功能。业务模块核心职责上下游关系商户客户模块商户入驻全流程、客户基础信息维护、用户标签画像、客户人群分组管理数据基础模块为活动模块提供人群筛选数据源营销活动模块运营创建营销活动、选择目标人群、配置即时 / 定时触达方式串联缓存、消息、定时任务完成批量触达平台核心业务模块串联客户、渠道、调度模块短信渠道模块对接第三方短信服务商、管理多条发送通道、发送频率限流、手机号黑名单拦截、异步推送短信下游执行模块接收活动模块下发指令任务调度模块定时营销任务持久化存储、集群分布式锁保证唯一执行、记录任务执行状态与失败原因支撑模块为活动模块提供定时触发能力运营可视化模块营销数据统计看板、营销规则可视化配置、线上异常告警通知、营销物料文件上传管理面向运营人员的管理端模块项目全栈技术选型与设计思路基础开发框架选型表技术组件用途选型设计思路SpringBoot SpringCloud微服务整体开发框架生态完善无缝兼容 Nacos、Sentinel、Seata 等配套中间件快速完成业务模块拆分与远程调用MyBatisMySQL 持久层框架轻量化、SQL 可控适配业务多表关联、复杂营销统计查询维护成本低QLExpress自定义规则引擎替代硬编码人群筛选逻辑运营可后台动态配置筛选条件无需改代码重启服务Quartz分布式定时任务框架替换 SpringTask 单机定时支持任务持久化、可视化启停适配集群多节点部署场景微服务治理中间件选型表技术组件用途选型设计思路Nacos注册中心 配置中心一套组件兼顾两大能力无需额外集成 Config支持 AP/CP 双模式切换普通业务临时实例保障高可用定时任务持久实例保证数据一致性适配国内业务运维习惯Sentinel流量防护组件轻量无复杂依赖快速实现接口限流、熔断、热点参数防护避免第三方短信通道被高并发打垮Seata AT分布式事务框架适配跨 MySQL 库业务场景活动记录 短信日志双写入保证跨服务操作原子性数据同时提交或回滚缓存体系选型表技术组件用途选型设计思路Caffeine进程本地缓存内存读写速度优于 Redis减少分布式网络 IO作为二级缓存第一层降低 Redis 访问压力Redis分布式缓存承载分布式锁、滑动窗口限流、布隆过滤器、登录 Token 存储、消息幂等标记支撑全平台并发缓存需求消息队列选型表技术组件用途选型设计思路RabbitMQ异步消息队列支持消息持久化、生产者确认、多级重试、死信队列适合短信下发异步削峰保障消息可靠投递分层存储选型表技术组件用途选型设计思路MySQL核心业务存储存放商户、活动、客户等高频读写核心业务数据事务支持完善数据一致性可控Elasticsearch海量日志检索存储承接千万级营销执行日志依靠倒排索引实现多条件、手机号快速检索缓解 MySQL 大表查询压力MinIO对象文件存储统一管理营销海报、客户附件等静态物料替代本地磁盘存储分布式环境可统一访问文件资源运维、可视化、工程化组件选型表技术组件用途选型设计思路SLF4JLogback标准化日志框架统一日志格式携带全链路 TraceId方便故障追踪可对接告警渠道ECharts数据可视化图表搭建营销运营数据看板直观展示发送量、成功率、活动数据DockerDocker Compose容器化部署统一开发、测试、生产环境依赖一键编排整套中间件集群消除环境不一致问题Knife4j在线接口文档自动生成 API 文档前后端对接、内部调试无需单独维护文档整体选型核心设计思想优先选用国内主流微服务生态组件降低团队学习、线上运维成本高并发场景做存储分层冷热数据分离避免单一数据库承载全量数据压力缓存、消息、流量防护配套完整解决方案提前规避缓存并发、消息重复、接口雪崩等线上经典问题容器化标准化交付弱化环境差异提升项目部署、迭代效率。五层代码分层架构设计规范整体工程自上而下划分为五层各层职责边界清晰禁止跨层直接调用实现业务与中间件、存储解耦。分层详情表格分层名称核心职责内部落地实现内容调用约束Controller 控制层对外 HTTP 请求入口请求拦截与参数封装1. Valid 统一参数校验拦截非法请求2. JWT 鉴权拦截器校验登录状态3. 统一 ResultVo 返回体封装4. Knife4j 接口文档注解5. 按商户、活动、短信、任务划分控制器仅能调用 Service 业务层禁止直接操作缓存、MQ、数据库Service 业务层业务流程编排、事务控制、跨模块调用1. 商户入驻、活动创建、短信下发主流程2. QLExpress 规则引擎解析人群筛选条件3. Quartz 定时任务调度逻辑4. Seata 分布式事务控制跨库操作5. Feign 远程调用其他微服务透传 TraceId、Token可调用 Util 工具层、中间件封装层、Mapper 存储层不直接使用 Redis、RabbitMQ 原生 APIUtil 工具层全局通用静态工具无业务逻辑侵入1. 安全工具密码加密、JWT 解析、手机号脱敏2. 缓存工具布隆过滤器、Lua 脚本执行封装3. 文件工具MinIO 上传、Excel 批量导入导出4. 消息工具消息 ID 生成、幂等标识封装5. 通用工具日期转换、对象拷贝、图表数据组装所有层均可静态调用不依赖业务 Bean中间件封装层隔离第三方中间件原生 API统一能力封装1. Redis 模块分布式锁、二级缓存、滑动窗口限流、布隆过滤器2. RabbitMQ 模块消息发送、重试、死信、幂等校验3. Nacos 配置模块动态配置热更新4. Sentinel 防护模块限流、熔断规则封装5. ES 模块日志写入、多条件检索封装仅提供工具类 / Bean 给 Service 调用不处理业务流程Mapper 存储层底层数据持久化对接各类存储介质1. MySQL MapperMyBatis 增删改查、本地事务2. ES Repository营销日志批量写入、分页检索3. MinIO 封装文件上传、资源访问地址生成仅被 Service 层调用只做 CRUD无业务判断逻辑分层执行流程简图项目内各中间件落地功能与设计细节Nacos核心两大能力服务注册与发现所有微服务启动后注册至 Nacos 集群通过 Ribbon 完成客户端负载均衡模块间 Feign 远程调用依靠注册中心完成服务寻址。区分两种实例类型做差异化适配普通业务服务商户、活动、短信临时实例 AP 模式优先保障高可用短暂服务列表不一致不影响核心业务定时调度相关服务持久实例 CP 模式网络分区时禁止修改任务注册信息避免集群重复执行任务。统一动态配置中心短信渠道密钥、接口限流阈值、缓存过期时间、人群筛选参数全部托管在 Nacos配合RefreshScope实现配置热更新修改规则无需重启项目。Redis 分布式缓存整套缓存能力全部封装在中间件层对外屏蔽原生 Redis 命令项目落地场景分布式锁Quartz 定时任务集群多节点触发时加锁保证同一任务仅执行一次二级缓存搭配 Caffeine优先读取进程本地缓存减少 Redis 网络 IO提升接口响应速度布隆过滤器预加载全部有效手机号拦截不存在的无效号码解决缓存穿透Lua 滑动窗口限流针对商户、单手机号限制短信下发频次防止高频刷接口会话管理存储用户登录 Token维护 Token 黑名单实现主动登出消息幂等标记保存已消费消息唯一 ID消费前校验重复消息直接丢弃。RabbitMQ 消息队列用于短信下发异步削峰同步下发改为异步处理缓解活动高峰期并发压力配套可靠性整套方案消息持久化 生产者确认机制避免生产者发送过程丢失消息消费端基于 Redis msgId 做幂等处理杜绝重复推送营销短信多级重试机制业务队列失败自动重试 5 次仍异常转入死信队列死信队列二次兜底重试 3 轮最终持续失败的消息归档入库人工排查。Sentinel 流量防护组件作为项目统一流量控制层嵌入所有对外接口QPS 限流限制单商户、单 IP 短信下发接口并发量熔断降级第三方短信通道接口超时、报错率过高时自动熔断阻断连锁雪崩热点参数限流针对高频轰炸的手机号单独限制发送频次。Seata AT 分布式事务业务场景一次营销活动生成活动记录同时新增多条短信发送日志分属两张 MySQL 库表存在跨库数据一致性问题。实现逻辑基于 AT 模式自动生成 undo_log 回滚日志跨库操作要么全部提交成功要么全部回滚不会出现一半数据入库、一半失败的脏数据。Elasticsearch冷热分层存储设计剥离 MySQL 海量日志压力存储每日千万级营销执行日志基于倒排索引支持手机号、活动 ID、时间区间多条件快速检索业务层封装批量写入、分页查询工具故障排查检索速度大幅提升。MinIO 对象存储替代本地服务器磁盘统一管理静态资源营销活动海报、客户上传附件、批量导入 Excel 文件存储提供统一文件上传、下载、临时访问地址生成工具分布式所有服务均可统一读取资源。Quartz 分布式定时任务替换原生 SpringTask 单机定时能力任务配置持久存入数据库支持后台可视化新增、启停定时营销任务执行前获取 Redis 分布式锁多服务集群部署也不会重复触发任务。Docker Docker Compose标准化工程化部署方案每个微服务单独打包镜像隔离运行环境Compose 脚本统一编排 MySQL、Redis、RabbitMQ、Nacos 全套中间件开发、测试、生产三套环境使用同一套镜像消除环境依赖不一致问题。二级缓存完整架构与并发问题优化方案本项目摒弃传统单层 Redis 缓存采用Caffeine 本地缓存 Redis 分布式缓存二级缓存架构同时配套策略解决缓存穿透、缓存击穿、缓存雪崩三大经典并发问题。二级缓存执行流程接口查询数据优先访问当前进程内 Caffeine 本地缓存本地缓存命中直接返回结果无网络 IO性能最优本地缓存未命中查询 Redis 分布式缓存Redis 命中则回写至 Caffeine 再返回Redis 仍未命中查询 MySQL 数据库DB 查询结果同步写入 Redis 与 Caffeine 两级缓存供后续请求复用。二级缓存各自优势Caffeine 本地缓存内存操作无网络开销响应速度远高于 Redis分担 Redis 集群查询压力减少网络请求次数进程隔离单机流量不会全部打向分布式缓存。Redis 分布式缓存多服务节点共享数据保证集群间缓存一致性支持分布式锁、Lua 限流、布隆过滤器等扩展能力数据持久化服务重启不会丢失缓存热点数据。缓存三大并发问题落地解决方案缓存穿透查询不存在的数据频繁击穿到数据库现象大量无效手机号、不存在的活动 ID 查询绕过缓存直接访问 MySQL拖垮数据库。 解决方案项目启动时将全部有效手机号、活动主键预加载至 Redis 布隆过滤器请求先经过布隆过滤器过滤不存在的数据直接返回空不查询缓存与数据库兜底策略数据库查询为空时在两级缓存写入短期空值短时间拦截重复无效查询。缓存击穿热点 Key 过期并发流量同时打到数据库现象爆款活动、热门人群缓存同时过期大量并发请求瞬间压垮 MySQL。 解决方案热点数据读取时加 Redis 分布式锁同一时刻仅一个请求查询数据库并更新缓存其他请求短暂休眠后重试避免并发穿透对核心热点 key 设置永不过期后台异步定时刷新缓存规避过期击穿场景。缓存雪崩大量 key 同一时间过期数据库瞬间高并发现象批量营销活动缓存设置相同过期时间同一时刻集体失效流量全部打入 DB。 解决方案所有缓存 key 过期时间增加随机偏移量打散过期窗口避免集中失效依托 Sentinel 接口限流缓存失效瞬间限制数据库查询 QPS二级缓存分层失效本地缓存过期时间与 Redis 错开双重缓冲。配套限流能力Lua 滑动窗口限流基于 Redis Lua 脚本实现单商户、单手机号短信下发频次控制Lua 脚本原子执行避免超发并发竞争问题窗口周期、最大下发次数全部通过 Nacos 动态配置无需改代码超出阈值直接拦截不进入后续业务逻辑减轻下游通道压力。RabbitMQ 可靠投递、幂等与多级死信重试设计项目中短信下发、营销日志异步落库全部依托 RabbitMQ 实现异步削峰整套设计围绕「消息不丢失、不重复消费、失败可重试」落地。消息丢失全套防护方案生产者端防丢失开启消息持久化队列、消息均标记持久化Broker 重启消息不丢失开启生产者确认机制 publisher-confirm-typecorrelated 消息投递到交换机、队列成功后 Broker 返回 ack投递失败则本地重试发送本地消息表兜底极端网络异常、Broker 宕机场景未收到 ack 的消息存入本地库定时任务补偿重发。Broker 端防丢失集群部署仲裁队列 Quorum QueueCP 架构写入需要过半节点同步确认网络分区少数节点停止服务避免脑裂丢消息废弃旧版镜像队列。消费端防丢失关闭自动 ack采用手动确认模式业务逻辑执行成功才调用 basicAck处理异常不 ack消息重回队列等待重试不会直接丢弃。消息幂等消费实现解决重复短信问题产生重复消息的场景网络波动导致 ack 丢失、生产者重复投递、死信重试、集群分区重试。 实现方案每条消息生成全局唯一 msgId随消息 body 一同发送消费逻辑第一步查询 Redis以 msgId 为 key若 key 已存在直接丢弃消息返回 ack若不存在执行业务下发逻辑处理完成后写入 Redis 标记已消费设置过期时间与业务数据生命周期对齐。多级重试 死信队列架构业务主队列消息消费异常自动重试最大重试 5 次间隔递增5 次仍失败则转发至一级死信队列一级死信队列独立消费最多兜底重试 3 轮最终持续失败消息写入异常日志库运营后台可查看、手动重发。整体业务价值高并发营销活动同步转异步削峰缓冲避免瞬间压垮短信第三方通道彻底消除重复下发营销短信、重复生成日志问题减少客诉异常消息可追溯、可人工补偿不会无声丢失营销触达任务。冷热分层存储架构设计随着平台长期运行营销活动、客户数据、短信执行日志持续累积如果全部统一存 MySQL会出现单表数据量千万级、查询卡顿、分表维护成本高等问题。因此项目采用冷热数据分离的存储架构按数据访问频率、业务属性拆分存储介质。热数据存储MySQL存储内容商户基础信息、活动配置、客户人群标签、短信渠道配置、交易状态数据。特征业务高频读写活动创建、人群筛选、下发状态变更均会操作要求事务支持数据一致性要求高数据生命周期短仅近 3 个月数据会频繁访问。设计要点按业务领域分库商户库、活动库、渠道库隔离库之间通过 Seata AT 保证分布式事务核心业务表建立合理索引配合二级缓存减少数据库查询压力定时归档旧活动、历史客户数据迁移至归档表缩小主表数据体量。冷数据存储Elasticsearch存储内容全量短信执行日志、营销任务执行记录、失败触达明细。痛点背景每日产生百万级日志全部写入 MySQL 后按手机号、活动 ID、时间段多条件检索时分页缓慢故障排查耗时极长。ES 设计方案采用批量异步写入MQ 消费日志数据批量同步至 ES降低写入 IO按日期建立索引按月拆分方便过期冷索引归档删除基于倒排索引实现多字段全文检索支持模糊匹配、区间筛选检索耗时从数十秒降至毫秒级业务层统一封装 ES 工具类上层业务无需感知分片、索引底层逻辑。文件资源存储MinIO 对象存储存储内容营销海报、客户批量导入 Excel、活动附件、短信素材图片。设计优势摒弃本地服务器磁盘存储集群所有微服务可通过统一地址访问文件支持文件分片上传、临时带时效访问链接适配运营后台下载预览场景可配置文件生命周期策略自动清理过期废弃物料节省存储成本。分层存储带来的收益MySQL 只承载高频核心业务单表数据量可控查询、更新性能稳定海量日志检索压力完全剥离线上排查问题效率大幅提升图片、附件等大文件不占用数据库空间读写分离减轻数据库 IO 压力不同存储介质各司其职按需扩容降低整体存储成本。分布式定时任务实现方案项目初期使用 SpringTask 做定时营销任务集群多节点部署后出现同一任务重复执行、短信批量重复推送的问题因此替换为 Quartz 分布式定时任务框架搭配 Redis 分布式锁做双重保障。Quartz 分布式任务基础设计持久化任务表 所有定时任务配置、执行记录全部落地 MySQL不再存内存服务重启、节点扩容不会丢失任务运营后台可视化新增、启停、修改定时营销任务。集群锁表机制 Quartz 自带数据库锁表多服务节点争抢任务时仅一个节点获取执行权天然规避大部分重复执行场景。任务分层拆分 区分定时人群筛选任务、定时短信下发任务、日志归档任务、缓存刷新任务不同类型任务隔离调度互不阻塞。Redis 分布式锁二次兜底防重复虽然 Quartz 自带集群锁但极端场景下仍存在任务重复触发风险叠加 Redis 分布式锁兜底每个定时任务定义唯一业务 key任务执行开始先尝试获取锁锁设置自动过期时间避免节点卡死导致死锁获取锁成功才执行业务逻辑抢锁失败直接终止本次调度等待下一轮周期。配合 Nacos CP 持久实例保障一致性定时调度服务注册至 Nacos 时采用持久实例模式ephemeralfalse属于 CP 架构网络分区场景下不允许新增、修改定时任务配置防止集群分裂后两边分区各自调度任务出现大规模重复营销下发。任务执行异常处理任务执行报错捕获异常写入执行失败日志入库运营后台可查看失败明细短周期任务自动重试 1 次仍失败记录告警推送长耗时批量营销任务做分片处理避免单次加载全量用户导致内存溢出、执行超时。改造后效果彻底解决集群环境定时任务重复执行问题无重复营销短信、重复人群筛选任务持久化可管控线上调整定时规则通过 Nacos 动态配置无需重启服务。流量防护 Sentinel 落地实践平台对外提供活动创建、批量短信下发、人群查询等高频接口高峰期存在爬虫恶意刷接口、第三方通道超时引发连锁调用阻塞等风险因此引入 Sentinel 做全链路流量防护。核心落地功能接口 QPS 限流对短信下发、人群导出等核心接口配置限流规则按商户维度隔离单商户单日短信下发总量限制接口每秒并发 QPS 限制 阈值统一配置在 Nacos动态修改无需重启服务超出限制直接返回友好提示拒绝无效流量进入业务流程。熔断降级机制短信下发依赖第三方服务商接口存在超时、报错波动风险统计短时间内异常比例、平均响应时长当报错率超过设定阈值自动开启熔断短时间内不再调用下游通道熔断窗口期结束后进入半开状态放行少量请求探测通道是否恢复避免下游通道故障导致大量请求堆积引发服务雪崩。热点参数限流针对手机号做热点防护拦截同一号码高频重复请求限制单个手机号单位时间内短信下发次数防止恶意接口轰炸占用通道资源。业务层适配设计统一全局异常捕获拦截 Sentinel 限流、熔断抛出的异常封装标准化返回结果限流触发时记录告警日志推送通知至运营及时发现恶意流量限流规则区分线上大促和平常业务大促可临时调高阈值弹性适配流量。实际落地收益恶意爬虫、高频刷接口流量被直接拦截节省通道与服务器资源第三方短信通道故障时快速熔断隔离不影响平台其他业务模块正常使用流量可控高峰期服务响应平稳杜绝因瞬时流量突增引发服务卡顿。分布式事务 Seata AT 落地实现营销业务中存在大量跨库操作场景创建营销活动时既要写入活动主库的活动记录又要向短信日志库批量写入待发送记录两个库分属不同微服务本地事务无法保证数据一致性一旦中途报错会出现一边入库、一边丢失数据的脏数据问题因此引入 Seata AT 模式解决分布式事务问题。AT 模式核心执行流程一阶段执行业务 SQL执行业务新增、更新操作前Seata 拦截 SQL查询当前数据快照生成 undo_log 回滚日志写入本地事务表执行业务 DML 并提交本地事务同时记录全局锁释放本地锁。二阶段提交协调器收到所有分支执行成功信号异步删除各库 undo_log 日志流程结束数据永久生效。二阶段回滚任意分支执行异常、超时协调器下发回滚指令各分支读取 undo_log 快照还原数据清除 undo_log保证所有分支全部回滚至操作前状态。项目业务落地场景创建批量营销活动完整流程商户活动信息写入活动库批量生成短信发送明细写入短信日志库两个库操作纳入同一全局事务。若活动入库成功、短信明细写入失败整体全部回滚活动记录不会残留两个库全部写入成功才会正式提交不存在局部数据。工程化适配改造点微服务全部引入 Seata 客户端依赖配置 TC 协调器地址数据源代理改造使用 Seata 封装的 DataSourceProxy实现 SQL 自动拦截全局事务入口方法添加GlobalTransactional注解标记Nacos 统一配置事务超时时间、重试次数线上可动态调整增加 undo_log 表定时清理任务避免事务日志表无限膨胀。落地带来的业务价值彻底解决跨多 MySQL 库的数据不一致问题不会出现有活动无短信任务、短信记录无对应活动的脏数据无需手动编写补偿逻辑降低分布式事务开发维护成本异常场景自动回滚减少人工核对、修复数据的运维工作量。DockerDocker Compose 容器化工程化部署方案项目早期采用传统本地部署方式开发、测试、生产三套环境依赖、配置不一致中间件手动安装配置新人搭建整套环境耗时半天部署上线流程繁琐因此引入容器化完成全环境标准化改造。整体设计思路微服务拆分独立镜像每个业务模块单独构建 Docker 镜像环境依赖全部打包进镜像内部通过 Docker Compose 统一编排业务服务与所有中间件MySQL、Redis、RabbitMQ、Nacos、Elasticsearch、MinIO区分 dev、test、prod 三套 compose 配置文件隔离不同环境的端口、内存参数、开关配置数据卷挂载持久化存储容器销毁不会丢失业务数据、中间件数据。微服务镜像构建规范采用分层构建基础 JDK 镜像为底层依赖包层、资源层、业务 jar 分层缓存大幅提升打包速度镜像内置健康检查脚本容器启动后自动探测服务端口编排工具可根据健康状态做服务重启配置文件不打入镜像使用环境变量 Nacos 外部配置同一镜像可直接部署到多套环境无需重新打包。Compose 编排核心能力统一网络所有容器加入同一自定义网桥服务之间通过容器名称相互访问无需填写服务器 IP资源限制为每个中间件、微服务配置 CPU、内存上限避免单容器抢占整机资源自动重启策略业务服务、核心中间件配置 always 重启服务器重启后自动拉起整套平台一键启停单条 compose 命令即可完成整套营销平台 中间件启动 / 停止环境搭建从半天缩短至 10 分钟。容器化改造解决的原有痛点消除环境差异开发本地、测试、生产使用完全一致的运行环境避免 “本地能跑线上报错”降低运维成本中间件不用手动下载、安装、配置新人上手成本大幅降低扩容便捷新增服务节点仅需复制 compose 配置快速横向扩展集群版本可追溯镜像打上版本标签上线出现问题可快速回滚至历史稳定镜像版本。配套运维规范生产环境容器日志统一挂载输出至宿主机对接 ELK 日志收集定期清理无用镜像、停止的容器释放服务器磁盘空间中间件数据卷定时备份防止磁盘损坏丢失业务数据。架构重构整体落地收益总结基于单体单机营销系统存在的各类性能、稳定性缺陷完成整套分布式微服务架构改造后在高可用、并发承载、运维效率、数据准确性等多维度获得明显提升下面从业务、性能、稳定性、工程运维四个维度总结改造成果。业务承载能力提升原单机架构仅能支撑少量商户日常营销重构后平台可同时承载数十家商户在线运营每日百万级短信触达流量平稳处理业务承载能力提升十倍。支持运营后台可视化配置人群筛选规则、定时营销任务无需修改代码重启服务营销活动迭代上线速度大幅加快运营自主配置能力增强。冷热分层存储分离海量日志故障排查、营销数据统计查询不再卡顿运营人员分析活动效果效率显著提高。系统性能优化成果引入 CaffeineRedis 二级缓存减少大量分布式网络 IO接口平均响应时间由改造前 300ms 下降至 60ms 以内。短信下发同步流程改为 RabbitMQ 异步削峰活动瞬时流量不会直接冲击第三方短信通道高峰无大面积接口超时。千万级营销执行日志迁移 Elasticsearch多条件检索耗时由数十秒缩短至毫秒级线上问题定位速度大幅提升。线上稳定性问题彻底解决微服务集群部署消除单点故障单节点宕机不中断整体营销任务全年服务可用性达到 99.99%。通过分布式锁、Nacos 持久实例、消息幂等三重方案彻底杜绝定时任务重复执行、短信重复推送问题无相关业务投诉。完整缓存防护策略布隆过滤器、分布式锁、过期随机偏移线上不再出现缓存穿透、击穿、雪崩引发的数据库压力突增。Sentinel 限流熔断隔离第三方通道故障Seata AT 分布式事务保证跨库数据一致规避脏数据、服务雪崩风险。工程与运维效率优化全量配置托管 Nacos 实现动态刷新调整短信阈值、通道密钥、缓存参数无需停机重启版本发布风险降低。DockerDocker Compose 容器化统一环境新人搭建完整运行环境从半天缩短至十分钟彻底解决多环境依赖不一致导致的异常问题。统一日志规范 全链路 TraceId配合 ES 检索线上故障排查流程标准化减少运维定位耗时。五层分层代码架构、中间件统一封装业务代码与底层存储、中间件解耦后续迭代新增功能开发成本更低。长期架构扩展性整套微服务分层、存储分层设计具备良好横向扩展能力后续商户、短信流量持续增长时可单独扩容缓存集群、消息队列、微服务节点无需大规模重构底层架构平台具备长期业务扩容支撑能力。
返回列表