Skip to content

架构设计

SirrChat 采用模块化架构,提供灵活、可扩展的邮件服务器解决方案。

整体架构

┌─────────────────────────────────────────────┐
│           客户端层                          │
│  (Thunderbird, Outlook, 移动应用)           │
└──────────────┬──────────────────────────────┘


┌─────────────────────────────────────────────┐
│           协议层                            │
│  ┌─────────┐  ┌─────────┐  ┌─────────┐    │
│  │  SMTP   │  │  IMAP   │  │Submission│    │
│  └─────────┘  └─────────┘  └─────────┘    │
└──────────────┬──────────────────────────────┘


┌─────────────────────────────────────────────┐
│           认证层                            │
│  ┌──────────┐  ┌─────┐  ┌─────┐  ┌──────┐ │
│  │Blockchain│  │LDAP │  │ PAM │  │Custom│ │
│  └──────────┘  └─────┘  └─────┘  └──────┘ │
└──────────────┬──────────────────────────────┘


┌─────────────────────────────────────────────┐
│           处理层                            │
│  ┌─────────┐  ┌──────┐  ┌─────────┐       │
│  │  Filter │  │Modify│  │  Check  │       │
│  │  (Sieve)│  │(DKIM)│  │(SPF/etc)│       │
│  └─────────┘  └──────┘  └─────────┘       │
└──────────────┬──────────────────────────────┘


┌─────────────────────────────────────────────┐
│           存储层                            │
│  ┌──────────┐  ┌────────────┐             │
│  │ Database │  │  Storage   │             │
│  │(PG/MySQL)│  │(Local/S3)  │             │
│  └──────────┘  └────────────┘             │
└─────────────────────────────────────────────┘

核心组件

协议处理器

SMTP 服务器

  • 接收和发送邮件
  • 支持 STARTTLS 加密
  • 实现速率限制和反垃圾邮件措施

IMAP 服务器

  • 邮件存储和检索
  • 文件夹管理
  • 邮件搜索功能
  • 支持 IDLE 推送通知

Submission 服务器

  • 邮件提交(端口 587)
  • 强制认证
  • 自动 DKIM 签名

认证模块

区块链认证

go
type BlockchainAuth struct {
    networks map[string]RPCClient
    cache    *AuthCache
}

func (b *BlockchainAuth) Verify(address, signature, message string) bool {
    // 1. 恢复签名者地址
    // 2. 验证地址匹配
    // 3. 检查时间戳有效性
    return verified
}

LDAP 认证

  • 支持 Active Directory
  • 组织单元(OU)映射
  • 属性同步

PAM 认证

  • 系统账户集成
  • 支持各种 PAM 模块

消息处理流水线

收到邮件 → 反垃圾检查 → 病毒扫描 → 过滤规则

存储到数据库 ← DKIM签名 ← 内容修改 ← 用户规则

存储系统

数据库层

  • 用户数据: 账户信息、配额、设置
  • 邮件元数据: 发件人、收件人、主题、时间
  • 索引: 快速搜索和检索

文件存储

  • Maildir格式: 每封邮件一个文件
  • 压缩: 自动压缩旧邮件
  • S3兼容: 可扩展到云存储

数据流

发送邮件流程

1. 客户端连接 (SMTP/Submission)

2. 认证验证

3. 接收邮件内容

4. 验证收件人

5. 应用过滤规则

6. DKIM 签名

7. 队列处理

8. 发送到目标服务器

接收邮件流程

1. 外部服务器连接

2. SPF/DKIM/DMARC 检查

3. 反垃圾邮件检查

4. 应用用户规则(Sieve)

5. 存储到数据库

6. 保存邮件文件

7. 通知客户端(IMAP IDLE)

模块系统

核心模块

  • auth: 认证提供商
  • storage: 存储后端
  • filter: 邮件过滤
  • modify: 内容修改
  • check: 验证检查

扩展点

go
type Module interface {
    Name() string
    Init(config Config) error
    Process(ctx Context, msg *Message) error
}

性能优化

并发模型

  • 协程池: 处理并发连接
  • 异步IO: 非阻塞网络操作
  • 批量处理: 数据库批量操作

缓存策略

  • 认证缓存: 减少区块链 RPC 调用
  • 用户数据缓存: 常用数据内存缓存
  • DNS缓存: 减少 DNS 查询

连接池

  • 数据库连接池: 复用数据库连接
  • RPC连接池: 区块链节点连接复用

安全设计

多层防护

  1. 网络层: TLS 加密
  2. 认证层: 多因素认证支持
  3. 应用层: 输入验证、SQL注入防护
  4. 数据层: 静态数据加密

速率限制

  • 连接速率: 防止连接滥用
  • 发送速率: 防止垃圾邮件
  • 认证尝试: 防止暴力破解

可扩展性

水平扩展

           ┌─────────────┐
           │Load Balancer│
           └──────┬──────┘

        ┌─────────┼─────────┐
        ▼         ▼         ▼
    ┌──────┐  ┌──────┐  ┌──────┐
    │ Node │  │ Node │  │ Node │
    │  1   │  │  2   │  │  3   │
    └───┬──┘  └───┬──┘  └───┬──┘
        │         │         │
        └─────────┼─────────┘

         ┌────────────────┐
         │  Shared Storage│
         │  (Database/S3) │
         └────────────────┘

组件分离

  • 独立部署: SMTP、IMAP 可单独扩展
  • 共享存储: 多实例共享数据
  • 负载均衡: 智能流量分配

监控和日志

指标收集

  • 系统指标: CPU、内存、磁盘
  • 应用指标: 邮件吞吐量、延迟
  • 业务指标: 用户活跃度、存储使用

日志系统

应用日志 → 结构化输出 → 日志聚合 → 分析平台
                         (ELK/Loki)

高可用性

故障转移

  • 主从复制: 数据库主从配置
  • 自动切换: 健康检查和自动故障转移
  • 数据备份: 定期备份和恢复测试

健康检查

go
type HealthCheck struct {
    Database  bool
    SMTP      bool
    IMAP      bool
    Storage   bool
}

更多技术细节:

Released under the GPL 3.0 License.