软件开发进阶技能之分布式与高并发(三)

简介: 教程来源 本节详解分布式系统核心机制:第七部分聚焦分布式锁,对比Redis(含Redisson)、ZooKeeper、数据库三种实现,强调安全性与可靠性;第八部分阐述微服务治理,涵盖注册发现、配置中心、负载均衡及Sentinel熔断降级限流,助力构建高可用分布式架构。

第七部分:分布式锁 —— 共享资源的安全访问

在分布式环境中,多个进程(或线程)需要互斥地访问共享资源(如库存扣减、定时任务执行),就需要分布式锁。

7.1 基于 Redis 的分布式锁
Redis 的 SET NX EX 命令可以实现简单的锁。

基础版本:

String lockKey = "lock:product:1001";
String requestId = UUID.randomUUID().toString();
// 设置键和值,只有不存在时才成功,并设置过期时间 30 秒
Boolean success = redis.setnx(lockKey, requestId, 30, TimeUnit.SECONDS);
if (success) {
    try {
        // 执行业务逻辑
    } finally {
        // 释放锁:使用 Lua 脚本保证原子性(先判断再删除)
        String script = "if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end";
        redis.eval(script, Collections.singletonList(lockKey), Collections.singletonList(requestId));
    }
}

问题:单点故障。如果 Redis 主从切换,锁可能丢失。Redlock(Redis 作者提出)使用多个独立 Redis 节点,多数派加锁,但争议较大(时钟漂移、GC 停顿导致锁失效)。

推荐:使用 Redisson 框架,它封装了看门狗(Watchdog)自动续期机制,避免锁过期任务未完成。

RLock lock = redisson.getLock("myLock");
lock.lock(10, TimeUnit.SECONDS);
try {
    // ...
} finally {
    lock.unlock();
}

7.2 基于 ZooKeeper 的分布式锁
ZooKeeper 通过临时顺序节点实现锁:每个客户端在锁节点下创建临时顺序节点,序号最小的获得锁。监听前一个节点的删除事件,实现公平锁。

优点:强一致性(ZAB 协议),无单点问题,自带心跳检测防止死锁。缺点:性能比 Redis 低(适合并发量不太高的场景)。

7.3 基于数据库的唯一索引
利用数据库唯一键约束作为锁:执行 INSERT INTO distributed_lock(lock_key, node_id) VALUES ('key', 'node1'),成功表示获得锁,删除即释放。性能差,但简单可靠。

第八部分:服务治理与微服务 —— 管理分布式系统的“千军万马”

当服务数量膨胀到几十上百个,需要一套治理体系来管理服务注册、发现、配置、路由、容错、监控。

8.1 服务注册与发现
服务启动时将自己的地址注册到注册中心(如 Nacos、Eureka、Consul、ZooKeeper),消费者从注册中心获取提供者列表,实现动态感知。

Nacos 使用示例(Spring Cloud Alibaba):

spring:
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
@RestController
public class ConsumerController {
    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/call")
    public String call() {
        // 使用服务名调用,Ribbon 进行负载均衡
        return restTemplate.getForObject("http://service-provider/hello", String.class);
    }
}

8.2 配置中心
集中管理各环境配置,修改配置动态生效(无需重启)。Nacos Config、Apollo、Consul Key/Value 都是主流。

Apollo 示例:

@Value("${timeout:100}")
private int timeout;

// 配置自动热更新
@ApolloConfigChangeListener
public void onChange(ConfigChangeEvent changeEvent) {
    // 刷新相关 Bean
}

8.3 服务调用与负载均衡
除了 RestTemplate + Ribbon,也可以使用声明式 HTTP 客户端 Feign:

@FeignClient(name = "user-service", fallback = UserFallback.class)
public interface UserClient {
    @GetMapping("/user/{id}")
    User getUser(@PathVariable("id") Long id);
}

8.4 熔断、降级、限流 —— Hystrix / Sentinel
这三种手段是保障分布式系统韧性的核心模式。

熔断(Circuit Breaker)
当某个服务调用失败率达到阈值(如 50%),断路器打开,后续请求直接快速失败或走降级逻辑,避免级联故障。经过一段时间,允许少量请求通过测试服务是否恢复(半开状态)。

降级(Fallback)
当服务不可用或系统负载过高时,提供有损的替代响应(如返回缓存数据、友好提示)。降级可在客户端或服务端实现。

限流(Rate Limiting)
限制单位时间内的请求数量,超过阈值则拒绝服务(返回 429 Too Many Requests)或排队等待。常见算法:令牌桶、漏桶、计数器。

Sentinel 实战

@SentinelResource(value = "getUser", blockHandler = "handleBlock", fallback = "getUserFallback")
public User getUser(Long id) {
    // 业务逻辑
}

public User handleBlock(Long id, BlockException ex) {
    // 限流或熔断时的处理
    return new User(-1L, "系统繁忙");
}

public User getUserFallback(Long id, Throwable t) {
    // 所有异常的处理(包括业务异常)
    return new User(-1L, "服务降级");
}

配置限流规则:

List<FlowRule> rules = new ArrayList<>();
FlowRule rule = new FlowRule();
rule.setResource("getUser");
rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
rule.setCount(100);  // 每秒 100 QPS
rules.add(rule);
FlowRuleManager.loadRules(rules);

来源:
https://rvtst.cn/

相关文章
|
1月前
|
SQL 安全 算法
软件开发进阶技能之性能与安全调优(四)
本节聚焦安全调优:严守最小权限原则,缩减攻击面。涵盖SQL注入(禁用拼接,用PreparedStatement/MyBatis #{})、XSS(输出编码+框架自动转义)、命令注入(白名单校验);JWT安全(强密钥、合理过期、防算法混淆);会话固定防护与bcrypt加盐哈希密码存储。
|
1月前
|
消息中间件 NoSQL 中间件
软件开发进阶技能之分布式与高并发(二)
教程来源 https://oplhc.cn/ 消息队列(MQ)是分布式系统核心中间件,以异步通信实现服务解耦、流量削峰与最终一致性。支持可靠投递、幂等消费与死信处理,广泛应用于秒杀、日志收集等高并发场景。
|
1月前
|
Prometheus 监控 NoSQL
软件开发进阶技能之分布式与高并发(五)
教程来源本节详解高并发秒杀系统设计与可观测性实践:通过CDN静态化、Redis原子扣减、MQ异步下单、唯一键防重等实现抗洪峰、零超卖;并集成Prometheus监控、SkyWalking链路追踪、ELK日志分析,构建完整可观测体系。
|
1月前
|
SQL 监控 关系型数据库
软件开发进阶技能之数据库进阶(五)
教程来源 https://zlpow.cn/ 本节详解数据库高可用核心方案:主从复制(异步/半同步原理、搭建与延迟治理)、自动故障转移(MHA/Orchestrator)及读写分离实践,并涵盖监控指标、慢查询分析与配置调优,助力系统稳定扛住高并发。
|
7月前
|
SQL 监控 测试技术
2025年数据库性能压测工具对比与重点测试方案选型指南
文章围绕2025年数据库性能压测展开,介绍主流方案分为SaaS化平台、自建工具和一体化服务三类,对比它们在成本、易用性等方面的差异。阐述行业背景、趋势、核心问题与挑战,给出不同场景下的选型建议及最佳实践路径,还解答了常见选型问题。
|
1月前
|
存储 监控 开发工具
阿里云日志服务SLS全流程对接与深度使用指南
本文是一篇详尽的阿里云日志服务SLS技术科普文章,从核心概念、服务开通、资源创建、数据采集、SDK集成、查询分析、可视化告警、安全权限到成本优化,全面讲解SLS的对接与使用。文章包含Logtail采集、Python/Java SDK代码示例、SPL与SQL查询等实操内容,帮助用户从零构建企业级日志管理平台,实现日志的统一归集、实时分析与智能运维。
|
1月前
|
人工智能 安全 机器人
【AI 尝鲜实验室】上新 | QwenPaw:本地优先的多渠道个人 AI 助手,让 AI 分身住进你的钉钉与飞书
QwenPaw 是 AgentScope 团队开源的本地优先个人 AI 助手(GitHub 17.4k+ Stars,Apache-2.0 协议),非普通 ChatBot,而是具备长期记忆、多渠道接入(钉钉/飞书/微信/Discord)、本地跑模型、多 Agent 协作能力的“AI 分身”。本实验通过阿里云计算巢一键云端部署,浏览器安全代理即可快速配置使用。
|
1月前
|
人工智能 自然语言处理 物联网
阿里云百炼大模型服务平台模型部署指南:流程与常见问题
阿里云百炼大模型部署流程参考,涵盖三种计费方式(预置吞吐PTU、模型单元、Token用量)的对比与适用场景,本文说明了各计费模式的费用计算、扩缩容规则及产品约束。部署后可通过OpenAI兼容接口、DashScope及Assistant SDK调用,并提供了代码示例。文章还解答了自有模型上传、权限不足、计费切换等常见问题。此外,2026年阿里云推出多项AI优惠:Qwen3.7-Max限时5折、HappyHorse视频模型8折、Token Plan多档套餐,以及轻量应用服务器38元/年起等云产品普惠权益,助力用户低成本落地AI应用。
|
1月前
|
人工智能 Java 应用服务中间件
AgentForge —— 让一句话变成一个生产可用的 Agent
AgentForge是阿里飞猪自研的“Agent工厂”平台,支持非技术同学5分钟零代码造出真Loop Agent,Node/Java工程师可直接部署生产级Agent团队。平台内置ANVIL框架、FECHO网关、fliggy-memory-sdk等核心技术,打通BUC鉴权、Aone容器、钉钉、SchedulerX等集团生态,实现“一句话描述→自动装备→云端运行→多Agent编排”全链路闭环。
469 1
|
1月前
|
人工智能 运维 监控
AI编程方案解析:DeepSeek V4-Pro对接Claude Code全指南:配置、实测与问题排查
在AI编程与自动化运维领域,Claude Code凭借完善的工具调用能力、全流程任务执行逻辑,成为众多开发者和运维人员的常用工具。但原生接入高阶模型存在使用成本偏高、账号稳定性不足、限流频发等问题,寻找高性价比的替代模型成为行业普遍需求。2026年DeepSeek V4-Pro凭借强大的推理能力、超长上下文以及原生协议兼容性,成为适配Claude Code的优选方案。与此同时,OpenClaw、Hermes Agent两类主流AI智能体框架,依托阿里云轻量应用服务器可实现快速部署,搭配阿里云百炼Token Plan还能进一步统筹模型调用、控制使用成本。本文将围绕模型对接、Agent选型部署、订
392 0
AI编程方案解析:DeepSeek V4-Pro对接Claude Code全指南:配置、实测与问题排查

热门文章

最新文章