分布式小技巧

欢迎你来读这篇博客,这篇博客主要是关于分布式小技巧
其中包括了关于我的见解和收集的知识分享。

序言

正文

一致性 Hash 问题

hash 问题

  • 雪崩效应:微小的改变,散列后不可区分性的改变
  • 严格雪崩准则

hash 冲突解决

  • 开放寻址
  • 拉链法

分布式场景 hash 的价值

  • 负载均衡
  • 分布式存储

普通 hash 算法的问题:当一个节点宕机后,之前的 hash 都要重新计算,缩容和扩容都会有这种问题,用户的会话都会丢失,大量请求的情况下,大量的用户体验不佳

一致性 Hash

  • hash 槽成环,每个服务器负责一段
  • 虚拟节点,每个服务器负责多个虚拟节点

nginx 一致性 hash

集群时钟同步问题

在集群环境中,各服务器时钟的一致性是保障系统正常运行的关键基础。若服务器间时钟不同步,可能导致日志时序混乱、分布式事务异常、任务调度错误等一系列问题,影响集群整体协同工作效率。

  • 目标
    • 确保集群内所有服务器时间高度一致(偏差控制在合理阈值内)
    • 保障时钟同步系统的高可靠性和稳定性
    • 实现时钟同步的自动化管理与监控

优化方案设计

3.1 分层级时钟同步架构
3.1.1 核心层(主时钟服务器)
  • 部署 2-3 台主时钟服务器(避免单点故障)
  • 通过不同网络线路与多个权威时间源同步:
    • 国家授时中心服务器
    • 公共 NTP 服务器(如 ntp.aliyun.com、cn.pool.ntp.org 等)
  • 主时钟服务器之间相互同步,形成内部时间共识
3.1.2 区域层(二级时钟服务器)
  • 按集群功能区域划分二级时钟节点
  • 每个区域内所有业务服务器提供时间同步服务
  • 定期向核心层主时钟服务器同步时间
3.1.3 节点层(业务服务器)
  • 所有业务服务器根据所属区域,向对应的区域的二级时钟服务器同步时间
  • 保持与集群时间基准的一致性
3.2 同步机制与技术实现
  • 协议选择:采用 NTPv4 协议进行高精度时间同步
  • 同步频率
    • 核心层:15-30 分钟同步一次
    • 区域层:30-60 分钟同步一次
    • 节点层:1-2 小时同步一次
  • 精度控制:全网时间偏差控制在 ≤ 100ms
3.3 监控与告警体系
  • 部署专门的时间监控系统,实时检测各节点时间状态
  • 设置多级告警阈值:
    • 警告阈值:时间偏差 > 50ms
    • 严重阈值:时间偏差 > 100ms
  • 告警方式:系统告警、邮件通知、短信提醒
  • 日志记录:详细记录每次同步时间、偏差值、成功 / 失败状态
3.4 容错与应急处理
  • 自动切换机制:主时钟服务器异常时,自动切换至备用节点
  • 本地缓存策略:各服务器配置本地时钟缓存,通信中断时可维持时间准确性
  • 手动校准流程:制定标准化手动校准操作手册,供应急场景使用
  • 网络容错:主备时钟服务器使用不同网络路径,避免单点网络故障
3.5 自动化运维支持
  • 使用 Ansible 等配置管理工具批量部署和更新时钟同步配置
  • 集成到 CI/CD 流程,新加入集群的服务器自动完成时钟同步配置
  • 定期生成时钟同步状态报告,分析同步质量和潜在问题
  • 自动化校验机制,定期检测同步配置有效性

4. 实施步骤

  1. 部署核心层主时钟服务器并配置与权威时间源的同步
  2. 配置主时钟服务器之间的相互同步机制
  3. 部署区域层二级时钟服务器并配置与核心层的同步
  4. 批量配置所有业务服务器与对应区域时钟服务器的同步
  5. 部署监控系统并配置告警阈值
  6. 制定运维手册和应急处理流程
  7. 进行全面测试与优化

5. 预期效果

  • 集群内所有服务器时间偏差控制在 100ms 以内
  • 时钟同步系统可用性达到 99.99%
  • 实现时钟异常的快速发现与自动恢复
  • 降低人工运维成本,提高集群整体可靠性

分布式 ID

  • UUID
    • UUID 有多种,常见的是 UUIDv4,乱序的
    • 目前数据库 DB 常用 UUIDv7 做主键
  • 独立数据库自增 ID
    • 类似发号器
  • 雪花算法
  • 基于 Redis 的 Incr 获取全局唯一 id

分布式任务调度

  • Elastic-job
  • xxl-job

Session 共享

  • IP-hash,会话沾滞
  • Session 复制
  • 基于 redis 去做分布式 session 共享
  • 现在基本上都是无 session 了

参考资料

启示录

富贵岂由人,时会高志须酬。

能成功于千载者,必以近察远。


分布式小技巧
https://allendericdalexander.github.io/2025/04/01/distributed_trick/
作者
AtLuoFu
发布于
2025年4月1日
许可协议