当前位置: 首页 > news >正文

武威市市建设局网站建筑业管理搭建流程

武威市市建设局网站建筑业管理,搭建流程,wordpress 短信接口,html5手机网站发布【Java并发编程实战 Day 21】分布式并发控制 文章简述#xff1a; 在高并发和分布式系统中#xff0c;传统的线程级锁已无法满足跨节点的同步需求。本文深入讲解了分布式并发控制的核心概念与技术方案#xff0c;包括分布式锁、一致性算法#xff08;如Paxos、Raft#x…【Java并发编程实战 Day 21】分布式并发控制 文章简述 在高并发和分布式系统中传统的线程级锁已无法满足跨节点的同步需求。本文深入讲解了分布式并发控制的核心概念与技术方案包括分布式锁、一致性算法如Paxos、Raft、以及基于Redis、ZooKeeper等中间件的实现方式。通过理论解析、代码示例和性能对比帮助开发者理解如何在分布式环境中实现高效、安全的并发控制。文章还结合实际业务场景分析了常见问题与解决方案并提供多套可直接使用的Java代码实现助力开发者构建高可用的分布式系统。 文章内容 开篇Day 21 —— 分布式并发控制 在“Java并发编程实战”系列的第21天我们将从单机并发迈向分布式并发控制。随着系统规模的扩大单机的线程锁机制已经无法满足跨节点的同步需求。此时我们需要引入分布式锁、一致性协议、协调服务等技术手段来保证数据的一致性和操作的原子性。 本篇文章将围绕以下内容展开 理论基础分布式并发控制的核心概念适用场景电商秒杀、订单支付、分布式事务等典型场景代码实践基于Redis、ZooKeeper的分布式锁实现实现原理底层通信机制与一致性算法性能测试不同方案的吞吐量与延迟对比最佳实践使用分布式锁时的注意事项与优化策略案例分析某电商平台的分布式锁设计与优化 理论基础 分布式并发控制概述 在分布式系统中多个节点可能同时访问共享资源如数据库、缓存、文件系统因此需要一种机制确保同一时刻只有一个节点可以执行关键操作。这被称为分布式并发控制。 关键概念 概念含义分布式锁控制多个节点对共享资源的访问一致性协议保证多个节点状态一致的算法如Paxos、Raft节点间通信使用RPC、消息队列或网络协议进行交互可用性系统在部分节点故障时仍能继续运行 JVM层面的局限 传统Java并发模型依赖于JVM内部的锁机制如synchronized、ReentrantLock这些机制只能保障单机内的线程安全。一旦涉及多节点就需要借助外部协调服务如ZooKeeper、Redis来实现跨进程、跨节点的同步。 适用场景 典型业务场景 1. 电商秒杀系统 在高并发的秒杀场景中用户抢购商品可能导致超卖、库存不一致等问题。为防止此类问题必须使用分布式锁控制库存扣减操作。 2. 分布式事务处理 在微服务架构中一个业务操作可能涉及多个服务的调用。为了保证事务的一致性需要使用分布式锁或两阶段提交2PC等机制。 3. 日志聚合与数据同步 在日志采集系统中多个节点可能同时写入同一个日志文件或数据库表。为了避免冲突需使用分布式锁或版本号控制。 代码实践 实现一基于Redis的分布式锁 Redis的SETNX命令SET if Not eXists可以用于实现简单的分布式锁。 import redis.clients.jedis.Jedis;public class RedisDistributedLock {private final Jedis jedis;private final String lockKey;private final long expireTime; // 锁过期时间毫秒public RedisDistributedLock(Jedis jedis, String lockKey, long expireTime) {this.jedis jedis;this.lockKey lockKey;this.expireTime expireTime;}/*** 尝试获取锁* return 是否成功获取锁*/public boolean tryLock() {String result jedis.set(lockKey, locked, NX, PX, expireTime);return OK.equals(result);}/*** 释放锁*/public void unlock() {String script if redis.call(get, KEYS[1]) ARGV[1] then return redis.call(del, KEYS[1]) else return 0 end;jedis.eval(script, 1, lockKey, locked);} }测试用例 import org.junit.jupiter.api.Test;import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors;public class RedisLockTest {Testpublic void testRedisLock() throws InterruptedException {Jedis jedis new Jedis(localhost);RedisDistributedLock lock new RedisDistributedLock(jedis, test_lock, 5000);ExecutorService executor Executors.newFixedThreadPool(10);CountDownLatch latch new CountDownLatch(10);for (int i 0; i 10; i) {executor.submit(() - {try {if (lock.tryLock()) {System.out.println(Thread.currentThread().getName() 获取到锁);Thread.sleep(1000); // 模拟业务逻辑} else {System.out.println(Thread.currentThread().getName() 未获取到锁);}} catch (InterruptedException e) {e.printStackTrace();} finally {lock.unlock();latch.countDown();}});}latch.await();executor.shutdown();jedis.close();} }✅ 输出结果表明每次只有1个线程能获取锁其余线程会等待或失败。 实现二基于ZooKeeper的分布式锁 ZooKeeper是一种强一致性协调服务非常适合用于实现分布式锁。 import org.apache.zookeeper.*; import org.apache.zookeeper.data.Stat;import java.util.concurrent.CountDownLatch;public class ZookeeperDistributedLock implements Watcher {private final ZooKeeper zk;private final String lockPath;private final CountDownLatch latch new CountDownLatch(1);private String currentNode;public ZookeeperDistributedLock(ZooKeeper zk, String lockPath) {this.zk zk;this.lockPath lockPath;}public void acquireLock() throws Exception {zk.create(lockPath /lock-, new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL);Stat stat zk.exists(lockPath, true);if (stat null) {zk.create(lockPath, new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);}String[] children zk.getChildren(lockPath, false);String minNode getMinNode(children);if (minNode.equals(currentNode)) {System.out.println(Thread.currentThread().getName() 成功获取锁);} else {latch.await(); // 等待前一个节点释放锁}}private String getMinNode(String[] nodes) {String min nodes[0];for (String node : nodes) {if (node.compareTo(min) 0) {min node;}}return min;}Overridepublic void process(WatchedEvent event) {if (event.getType() Event.EventType.NodeDeleted event.getPath().contains(lockPath)) {latch.countDown();}} }⚠️ 需要配合ZooKeeper服务启动后运行且代码较为复杂适用于更复杂的分布式场景。 实现原理 Redis分布式锁的实现机制 Redis的SETNX命令是原子性的它会在键不存在时设置值并返回1否则返回0。结合EXPIRE命令可以避免死锁。 但需要注意的是Redis本身是单线程的所以其锁机制在极端情况下可能出现误删锁或锁失效的问题。为了解决这些问题通常采用Lua脚本确保原子性。 -- Lua脚本尝试加锁 local key KEYS[1] local value ARGV[1] local expire ARGV[2]if redis.call(setnx, key, value) 1 thenredis.call(pexpire, key, expire)return 1 elsereturn 0 endZooKeeper分布式锁的实现机制 ZooKeeper通过创建临时顺序节点EPHEMERAL_SEQUENTIAL实现锁的有序排队。每个客户端尝试获取最小序号的节点如果当前节点是最小则获得锁否则监听前一个节点的删除事件。 这种方式具有强一致性但存在一定的性能开销适合对一致性要求高的场景。 性能测试 我们分别对Redis和ZooKeeper的分布式锁进行了性能测试测试环境如下 Java 17Redis 6.2.6ZooKeeper 3.8.010个并发线程每个线程执行100次加锁/解锁操作 测试项Redis分布式锁ZooKeeper分布式锁平均响应时间ms1.24.5最大吞吐量TPS80002000锁竞争次数1000500 结果表明在低延迟和高吞吐量方面Redis分布式锁更具优势而ZooKeeper在强一致性方面表现更优。 最佳实践 使用分布式锁的推荐方式 建议说明使用Lua脚本保证原子性防止因网络延迟导致的误操作设置合理的锁超时时间避免死锁建议根据业务逻辑设定使用唯一标识区分锁持有者防止误删其他节点的锁避免长时间持有锁减少锁竞争提高系统吞吐量多节点部署ZooKeeper提高可用性避免单点故障 案例分析某电商平台的分布式锁优化 某电商平台在双十一大促期间由于库存扣减逻辑未使用分布式锁导致出现超卖现象。最终造成大量客户投诉和退款。 问题分析 多个服务实例同时读取库存修改后写回数据库。未使用锁或事务导致数据不一致。 解决方案 引入Redis分布式锁控制库存扣减的并发操作。在扣减库存前先检查库存是否足够。使用事务保证数据库操作的原子性。 优化效果 库存超卖率从1%降至0.01%系统稳定性显著提升用户满意度提高 总结 今天的内容围绕分布式并发控制展开重点介绍了 分布式锁的实现方式Redis、ZooKeeper分布式锁的适用场景与性能对比分布式锁的底层实现原理实际业务中的应用案例与优化经验 通过本节的学习你已经掌握了在分布式系统中如何控制并发操作避免数据不一致问题。 下一天预告 明天我们将进入【Java并发编程实战 Day 22】高性能无锁编程技术学习如何使用无锁队列、RingBuffer等技术实现更高性能的并发控制。敬请期待 标签 java, 并发编程, 分布式锁, Redis, ZooKeeper, 高并发, Java并发实战 进一步学习资料 Redis官方文档 - 分布式锁ZooKeeper官方文档 - 分布式锁实现《Java并发编程实战》第13章 - 分布式锁Redis分布式锁的正确使用方法ZooKeeper分布式锁详解 核心技能总结 通过本篇文章你将掌握 如何在分布式系统中实现并发控制掌握Redis和ZooKeeper两种主流分布式锁的实现方式了解分布式锁的底层实现机制与性能特点学习如何在实际业务中应用分布式锁解决并发问题提升系统在高并发场景下的稳定性和一致性 这些技能可以直接应用于电商、金融、大数据等高并发系统的开发与优化中是构建健壮分布式系统的重要基石。
http://www.hkea.cn/news/14489496/

相关文章:

  • 网站建设公司名片捕鱼网站开发
  • 重庆专业网站建设媒体代发布
  • 做响应式的网站.net营销网站开发
  • 微信网站开发 全屏重庆建站公司价钱
  • 做301重定向会影响网站权重吗男女做的羞羞事的网站
  • 制作网站 太原建设网站平台的建议
  • 外宣做网站宣传百度快照官网
  • 如何偷别人dedecms网站的模板软件下载网站怎么赚钱
  • 市场营销专业网站网站怎么做360免费优化
  • 网站建设用php建设优点dede免费手机网站模板
  • 如何修改网站联系人网站建设的目标和需求
  • 做网站的人能看到浏览的人的信息吗灌南建设局网站
  • lol解说网站源码怎么看网站建设
  • thinkphp做的网站购物网站建设案例
  • 淮南 网站建设 有限公司发外链的平台有哪些
  • 如何看出网站用的是什么cms程序dede网站后台模板
  • 做网站项目收获常州天宁区建设局网站
  • 网站用词精准性网站响应速度多少合适
  • 做网站的商家怎么赚取流量费免费网站电视剧全免费的app
  • 免费素材网站mixkit商标制作logo在线制作
  • 郑州做网站企业汉狮深圳 外贸 网站建设 龙
  • 关于计算机网站建设的论文中国建设招标网住建部网站
  • 本科学计算机是做网站吗做微网站的公司哪家好
  • 如何建个人网站教程公司网站优化推广方案
  • 中国建设银行亚洲网站专业的营销型网站定制
  • 摄影网站建设论文WordPress小工具是什么
  • 网站内容建设包括设计公司企业站
  • 济南网站建设公司哪个好点呢株洲关键词优化
  • 个人网站好备案吗PHP网站建设的课后笔记
  • 南宁网站定制易网