源本科技 | 码上会

分布式与高可用

2026/04/05
3
0

分布式系统高效可靠的 ID 生成策略

分布式 ID 需满足全局唯一、趋势递增、高可用、高吞吐,主流方案有多种。UUID 简单但无序、长度长,不适合做数据库主键。雪花算法(Snowflake)最常用,由时间戳 + 机器 ID+ 序列号组成,纯内存生成、性能极高、趋势递增。数据库号段模式,提前批量分配 ID 段,避免频繁访问 DB。Redis 自增利用原子 INCR,适合中小规模。美团 Leaf、百度 UidGenerator 是工业级方案,整合号段 + 雪花算法,兼顾性能与可靠性。高并发分布式系统优先选雪花算法或号段模式。

分布式服务注册与发现的实现

服务注册发现是微服务核心,解决服务地址动态管理问题。核心组件是注册中心,常用 Nacos、Eureka、Consul、Zookeeper。流程:服务提供者启动时,将自身 IP、端口、接口信息注册到注册中心,并定时发送心跳保活;服务消费者从注册中心拉取服务列表,缓存到本地;注册中心定时检查服务健康状态,剔除故障实例。消费者直接通过负载均衡调用提供者,无需硬编码地址。实现了服务动态扩缩、故障自动剔除,是微服务架构的基础。

分布式系统数据一致性解决方案

分布式数据一致性分强一致和最终一致,基于 CAP/BASE 理论。强一致性用 2PC、3PC、Raft/Paxos 协议,适合对一致性要求极高的场景,但性能差、可用性低。最终一致性是主流,方案有 TCC、SAGA、本地消息表、可靠消息最终一致性、Seata 分布式事务。TCC 适合核心交易,SAGA 适合长事务,本地消息表简单可靠,Seata 整合多种模式,易用性强。实际业务优先保证可用性和性能,采用最终一致,极端场景才用强一致方案。

高可用系统的设计策略

高可用核心是避免单点、快速故障恢复。首先做冗余设计,服务集群部署、数据主从 / 多副本。其次容错机制:限流控制流量峰值,熔断防止故障扩散,降级舍弃非核心功能,超时 + 重试避免阻塞。然后负载均衡,分发请求到多节点,防止单节点压垮。还有灾备策略,同城双活、异地多活,避免机房故障。配合灰度发布、滚动更新、自动扩缩容、完善监控告警,实现故障自动发现、自动恢复,保证系统 99.99% 以上可用性。

反应式编程模型及应用场景

反应式编程是基于数据流、异步非阻塞、事件驱动的编程模型,基于观察者模式 + 迭代器模式 + 函数式编程,支持背压(流量控制)。它不阻塞线程,CPU 利用率极高,适合高并发 IO 场景。Java 生态用 Reactor、RxJava、Spring WebFlux 实现。核心特点:异步、非阻塞、流式处理、背压可控。应用在 API 网关、消息中间件、实时数据处理、高并发 IO 密集型服务、直播 / 推送等流式场景,能大幅提升系统吞吐量和资源利用率。

WebSocket 全双工通信原理及应用

WebSocket 是基于 TCP 的全双工长连接协议,解决 HTTP 单向、短连接、轮询低效问题。原理:先通过 HTTP 请求发起握手,服务端响应升级协议,之后建立持久连接,客户端和服务端可双向主动发送数据,无需等待请求。通过心跳包保活,数据以帧格式传输,开销极小。相比 HTTP 轮询,延迟低、流量少、性能高。应用场景:在线聊天、实时消息推送、直播弹幕、协同编辑、金融行情、游戏实时通信等需要即时交互的场景。

高并发系统性能与可用性优化

高并发优化分性能和可用性两方面。性能:多级缓存(本地缓存 +Redis+ 分布式缓存),减少 DB 压力;异步化(消息队列、CompletableFuture)削峰解耦;池化技术(线程池、连接池)复用资源;分库分表、读写分离、索引优化提升数据库性能。可用性:无状态设计方便水平扩容;限流、熔断、降级保护核心服务;集群 + 负载均衡避免单点;自动扩缩容应对流量波动;完善监控、告警、灰度发布,快速定位故障。多手段结合,实现高吞吐、低延迟、高稳定。