《用户通知体系全流程实战》
第2章 通知体系架构设计

2、通知体系架构设计

通知体系作为用户触达的核心基础设施,其架构设计直接决定了系统的扩展性、稳定性与运维效率。本节将围绕整体架构图与四大核心模块(发送、路由、模板、日志)展开详细解析。

📐 通知体系整体架构图

通知体系架构总览 📥 统一接入层 🧭 路由模块 📤 发送模块 📝 模板模块 📋 日志模块 💾 持久化存储层(MySQL + Redis + 消息队列) 反馈

▲ 通知体系分层架构,各模块职责清晰、解耦协作

📌 核心模块划分

通知体系由四大核心模块构成,各模块独立部署、通过消息队列异步通信,保障高可用与水平扩展能力。

模块名称 核心职责 关键技术
📤 发送模块 负责将通知推送到各渠道(短信、邮件、App Push、站内信) 渠道适配器模式、连接池、重试机制
🧭 路由模块 根据用户偏好、通知类型、优先级进行智能分发 规则引擎、策略模式、灰度发布
📝 模板模块 管理通知内容的模板化渲染与版本控制 模板引擎(Thymeleaf/Freemarker)、缓存
📋 日志模块 全链路日志采集、监控告警、数据报表 ELK、Prometheus、链路追踪

📤 发送模块内部流程

📨 消息队列 ⚙️ 发送核心 (重试/限流/熔断) 📱 短信 📧 邮件 📡 运营商 📬 SMTP

▲ 发送模块通过适配器模式对接不同渠道,支持动态扩展

🧭 路由模块决策流程

📩 通知请求 ⚖️ 规则引擎 (类型/优先级/偏好) 📱 即时推送 📧 邮件聚合 发送队列 延迟队列

▲ 路由模块根据规则引擎决策,将通知分发到不同策略队列

📋 模块间协作关系

  • 🔹 发送模块 从消息队列消费任务,调用渠道适配器完成推送,并将结果写入日志模块
  • 🔹 路由模块 根据用户画像与通知类型,将通知请求分发到对应的发送队列或延迟队列
  • 🔹 模板模块 提供模板渲染服务,发送模块在推送前调用模板模块获取最终内容
  • 🔹 日志模块 采集全链路数据,支持实时监控与事后分析

📦 核心模块代码示例(发送模块重试机制)

// 发送模块重试策略示例
public class SendRetryHandler {
    
    private static final int MAX_RETRY = 3;
    private static final long BASE_DELAY = 1000L; // 1秒
    
    public SendResult sendWithRetry(NotificationTask task) {
        SendResult result = null;
        for (int attempt = 1; attempt <= MAX_RETRY; attempt++) {
            try {
                result = channelAdapter.send(task);
                if (result.isSuccess()) {
                    log.info("发送成功, taskId={}, attempt={}", task.getId(), attempt);
                    return result;
                }
            } catch (ChannelException e) {
                log.warn("发送失败, taskId={}, attempt={}, error={}", 
                         task.getId(), attempt, e.getMessage());
                if (attempt == MAX_RETRY) {
                    // 写入死信队列
                    deadLetterQueue.push(task);
                    return SendResult.fail("超过最大重试次数");
                }
                // 指数退避
                Thread.sleep(BASE_DELAY * (1L << (attempt - 1)));
            }
        }
        return result;
    }
}

💡 架构要点:各模块通过消息队列解耦,发送模块采用适配器模式支持新渠道快速接入,路由模块使用规则引擎实现灵活分发策略,模板模块通过缓存提升渲染性能,日志模块全链路追踪保障可观测性。