日常做一些系统设计的思考,还是很开心的~

我先写一个大纲,待会补全一下,其实高并发分可用区设计到最后很多都大道至简。

系统需要支持常见的 JWT、OAuth2.0 和 SSO 技术。并与 APISIX 网关集成实现统一鉴权。

flowchart TD
    Client[客户端应用] --> APISIX(API网关层APISIX)
    APISIX -->|认证请求| AuthService(认证服务集群)
    APISIX -->|用户管理请求| UserService(用户中心服务集群)
    APISIX -->|权限校验| AuthzService(授权服务集群)
    
    AuthService --> Redis[(分布式缓存Redis集群)]
    AuthService --> MQ[(消息队列Kafka/RabbitMQ)]
    AuthService --> AuthDB[(认证数据存储)]
    
    UserService --> UserDB[(用户数据存储)]
    UserService --> Redis
    
    AuthzService --> Redis
    AuthzService --> PermissionDB[(权限数据存储)]
    
    MQ --> LogService(日志服务)
    MQ --> AuditService(审计服务)
    
    subgraph 监控与运维
    Prometheus(监控系统)
    Grafana(可视化面板)
    Alerting(告警系统)
    end
    
    APISIX --> Prometheus
    AuthService --> Prometheus
    UserService --> Prometheus

系统关键组件设计

  1. [API 网关层(APISIX)](#API 网关层(APISIX))

  2. 认证服务集群

  3. 用户中心服务集群

  4. 授权服务集群

API 网关层(APISIX)

职责:请求路由、统一认证鉴权、流量控制、负载均衡

设计要点:

  • 集成JWT验证插件,实现无状态认证
  • 实现请求限流和熔断,防止DDoS攻击
  • 请求日志收集与分析
  • TLS/SSL终止,确保传输安全
  • 多区域部署,就近接入

认证服务集群

职责:用户认证、令牌管理、SSO 实现、OAuth2.0 授权

关键设计

  • 无状态设计,支持水平扩展
  • 多种认证方式支持:账号密码、手机号、社交账号、证书等
  • 多因素认证(MFA)支持
  • 令牌生成、验证、刷新、撤销
flowchart LR
    Start((开始)) --> Login{登录方式}
    Login -->|账号密码| ValidateCredentials[验证凭证]
    Login -->|OAuth2.0| OAuthFlow[OAuth流程]
    Login -->|SSO| SSOFlow[SSO流程]
    
    ValidateCredentials --> CheckMFA{需要MFA?}
    CheckMFA -->|是| PerformMFA[执行多因素认证]
    CheckMFA -->|否| GenerateToken[生成令牌]
    PerformMFA --> GenerateToken
    
    OAuthFlow --> GenerateToken
    SSOFlow --> GenerateToken
    
    GenerateToken --> CacheToken[缓存令牌]
    CacheToken --> ReturnToken[返回令牌给客户端]
    ReturnToken --> End((结束))

用户中心服务集群

职责:用户信息管理、用户组织关系管理、基础信息维护

关键设计

  • 用户数据分片存储
  • 冷热数据分离策略
  • 数据同步与一致性保障
  • 用户元数据管理

授权服务集群

职责:权限控制、资源访问策略

关键设计

  • 基于RBAC(角色)和ABAC(属性)的混合权限模型
  • 权限缓存与实时更新机制
  • 权限决策点(PDP)和策略执行点(PEP)分离
  • 细粒度访问控制支持

数据存储设计

  1. 分层存储架构

  2. 数据分片与扩展

  3. 缓存策略

分层存储架构

flowchart TD
    subgraph 缓存层
    LocalCache[本地缓存]
    RedisCluster[Redis集群]
    end
    
    subgraph 数据库层
    MasterDB[(主库)]
    SlaveDB1[(从库1)]
    SlaveDB2[(从库2)]
    SlaveDBn[(从库n...)]
    end
    
    subgraph 冷数据层
    ArchiveDB[(归档库)]
    ObjectStorage[(对象存储)]
    end
    
    LocalCache --> RedisCluster
    RedisCluster --> MasterDB
    MasterDB -->|复制| SlaveDB1
    MasterDB -->|复制| SlaveDB2
    MasterDB -->|复制| SlaveDBn
    MasterDB -->|归档| ArchiveDB
    ArchiveDB --> ObjectStorage

数据分片与扩展

  • 用户数据水平分片
    • 基于用户ID哈希值进行分片
    • 分片策略支持动态调整
    • 分片间数据迁移能力
  • 读写分离优化
    • 写操作路由至主库
    • 读操作路由至就近从库
    • 延迟敏感查询路由至主库

缓存策略

  • 多级缓存设计
    • L1: 应用内存缓存(用户权限、配置信息)
    • L2: 分布式Redis缓存(会话信息、令牌)
    • L3: 数据库查询缓存
  • 缓存一致性保障
    • 基于消息队列的缓存失效通知
    • 双写一致性策略
    • TTL机制与主动更新相结合

高可用设计

  1. 服务高可用

  2. 数据高可用

服务高可用设计

  • 无状态设计:所有服务实例无状态化,便于水平扩展
  • 多区域部署:跨地域部署,容灾能力提升
  • 自动伸缩:根据负载指标自动扩缩容
  • 熔断降级:核心功能保障策略
  • 限流保护:基于用户级别、IP级别、接口级别的多维度限流

数据高可用设计

  • 数据多副本:关键数据多副本存储
  • 数据备份策略
    • 实时增量备份
    • 定时全量备份
    • 跨区域备份
  • 故障自动转移:主库故障自动切换至从库

性能优化设计

  1. 认证性能优化
  2. 高并发请求处理

认证性能优化

这一块包括 令牌设计优化、认证流程优化

令牌设计优化

  • 使用紧凑型JWT格式
  • 关键信息缓存,避免重复解析
  • 令牌分级,不同场景使用不同有效期

认证流程优化

  • 高频路径异步化处理
  • 批量验证机制
  • 预验证策略

高并发请求处理

这一块,又包括 请求处理优化、资源隔离。

请求处理优化

  • 非阻塞I/O模型
  • 连接池复用
  • 请求合并
  • 结果缓存

资源隔离

  • 关键服务独立部署
  • 多租户资源隔离
  • 弹性资源分配

安全设计

  1. 数据加密
  2. 攻击防范
  3. 审计与合规

数据加密

  • 传输层全链路TLS加密
  • 敏感数据存储加密
  • 密码单向哈希存储(bcrypt/Argon2)

攻击防范

  • 账号锁定机制
  • 异常行为检测
  • IP信誉评估
  • 验证码与人机识别

审计与合规

  • 完整操作日志链
  • 关键操作双因素验证
  • 权限变更审计
  • 定期安全评估

运维与监控

  • 全链路监控
    • API调用链跟踪
    • 认证流程性能监控
    • 资源使用率监控
    • 异常行为监测
  • 智能告警
    • 基于阈值的主动告警
    • 异常模式识别
    • 告警聚合与抑制
    • 自动化响应机制