import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.framework.recipes.locks.InterProcessMutex;
import org.apache.curator.retry.RetryOneTime;
public class Lock {
private static ExecutorService service;
static final CuratorFramework curator;
//A re-entrant mutex
static final InterProcessMutex zkMutex;
static {
// curator = CuratorFrameworkFactory.newClient("server1:2182,server2:2181,server3:2181", new RetryOneTime(2000));
curator = CuratorFrameworkFactory.newClient("localhost:2181", new RetryOneTime(2000));
curator.start();
zkMutex = new InterProcessMutex(curator,"/mutex");
}
public static void count(int threadNum,final int workers) throws Exception{
final CountDownLatch latch = new CountDownLatch(threadNum);
service = Executors.newFixedThreadPool(threadNum);
long start=System.currentTimeMillis();
for (int i = 0; i < threadNum; ++i) {
service.execute(new Runnable() {
@Override
public void run() {
for (int i = 0; i < workers; ++i) {
try {
zkMutex.acquire();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
zkMutex.release();
} catch (Exception e) {
e.printStackTrace();
}
}
}
latch.countDown();
}
});
}
service.shutdown();
latch.await();
long end=System.currentTimeMillis();
System.out.println("Thread Num:"+threadNum+" workers per Thread:"+workers+" cost time:"+(end-start) +" avg "+ (threadNum*workers)*1000/(end-start));
}
public static void main(String[] args) throws Exception {
Lock.count(1, 500);
Lock.count(10, 500);
Lock.count(20, 500);
Lock.count(30, 500);
Lock.count(40, 500);
Lock.count(50, 500);
Lock.count(60, 500);
Lock.count(70, 500);
Lock.count(80, 500);
Lock.count(90, 500);
Lock.count(100, 500);
}
}
测试条件:
1)zk服务端,三台公司开发机搭建的zk集群,4CPU_4G_40G
2)zk客户端,另外一台开发机 , 4CPU_4G_40G
3)分布式锁使用的是curator框架提供的可重入锁 InterProcessMutex
说明:
1)红色线代表3台zk组成的集群模式,蓝色代表独立模式
2)一次锁的获取与释放代表一次事物
从图中可知,并发的线程数越大,由于zk服务端需要处理排队、watch创建与销毁越频繁,TPS 则越低。
在集群模式下,线程数为1时,tps为309,线程数为100时,tps为44
相同的线程数来说,zk集群相对于独立模式,需要处理集群节点间的状态同步,TPS 比独立模式要低
线程数为1时,集群模式下,tps为309,独立模式下,tps为280
- 大小: 10.5 KB
分享到:
相关推荐
这时,Zookeeper,一个高可用的分布式协调服务,常被用来实现分布式锁。 Zookeeper由Apache基金会开发,它提供了一种可靠的分布式一致性服务,包括命名服务、配置管理、集群同步、领导者选举等功能。Zookeeper基于...
本文介绍了一种基于ZooKeeper的分布式系统架构设计与实现,展示了如何通过分布式服务模型和异步通信来实现服务注册、服务监管、服务加载、通信服务等关键功能,并通过实际项目对所设计架构进行测试验证,证明了该...
Zookeeper是Apache的一个开源项目,它基于Paxos和其他一致性算法,为分布式应用提供了一个高可用、高性能的协调服务。Zookeeper的主要功能包括命名服务、配置管理、集群同步、领导者选举等。它的设计目标是简化...
在本篇博文中,我们将深入探讨如何将Dubbo、Zookeeper和Spring整合在一起,构建一个分布式服务系统。Dubbo是一个高性能、轻量级的开源Java RPC框架,它提供了丰富的服务治理功能;Zookeeper是一个分布式的,开放源码...
本项目通过整合Dubbo、Zookeeper和SpringMVC,构建了一个完整的分布式服务治理框架,以实现高效的服务注册、发现、管理和监控。 首先,我们要理解Dubbo的核心功能。Dubbo提供了服务提供者(Provider)和服务消费者...
在技术实现上,Zookeeper基于一个简单的模型——**ZNode**。ZNode是Zookeeper中的数据节点,类似于文件系统的文件或目录。每个ZNode都有一套版本控制和ACL(访问控制列表),允许对数据进行读写操作,并且可以监听...
基于ZooKeeper的特性,它主要应用于四个领域:通知服务、配置管理、集群管理和分布式锁。在分布式测试中,特别依赖配置管理和集群管理,以实现对测试节点的动态调度和维护配置的一致性。 ActiveMQ是一个开源的消息...
ZooKeeper是一个开源的分布式协调服务,它能够提供高性能、可扩展的服务协调功能,如分布式锁、配置管理、命名服务等。在本研究中,利用ZooKeeper提供的分布式锁和事件监听机制,中间件模型实现了服务的注册、加载、...
综上所述,本研究对基于ZooKeeper服务的数据同步架构进行了深入探讨,提供了一种有效的解决方案,以应对分布式环境下数据同步所面临的各种挑战。这对于分布式系统的设计与优化有着重要的理论意义和实际应用价值。...
本项目是一个基于Dubbo和Zookeeper构建的分布式医疗系统,后端使用SpringBoot框架,它提供了强大的功能和良好的开发体验。下面将详细阐述这个系统中的核心知识点。 1. **Dubbo**: Dubbo是阿里巴巴开源的高性能Java ...
服务于妈妈各项业务线性能测试,acp 1.0开源版本已经发布,主要特性如下:Alimama common performance platform(ACP)是基于Zookeeper的大型分布式性能测试平台,可用于各种业务性能测试。 ACP 1.0开源版本已经发布...
Hadoop作为一个开源框架,使用了MapReduce等技术在分布式存储系统上对数据进行快速定位和检索,从而获得了良好的性能收益。然而,Hadoop生态系统中的组件如HDFS、Hive、HBase、YARN、ZooKeeper和Spark等的组合运用,...
Zookeeper是分布式计算领域广泛使用的一个开源协调服务,它主要用于分布式系统中管理和同步配置信息、命名、提供分布式锁以及群组服务等。由于其在分布式系统中的核心地位,Zookeeper的性能和稳定性直接影响到整个...
Zookeeper是Apache软件基金会的一个开源项目,它提供了一个高可用的分布式协调服务,确保数据的一致性和可靠性。Zookeeper的数据模型类似于文件系统,由一系列znode(节点)组成,每个znode都可以存储数据,并且可以...
#### 三、基于Zookeeper实现分布式锁 1. **基本原理**: - 利用ZooKeeper提供的顺序节点特性,创建一个临时顺序节点。 - 检查是否是最小序号的节点,如果是,则获取锁;如果不是,则监听前一个节点的删除事件。 ...
这是一个基于Java技术栈,利用Spring Boot、Dubbo和Zookeeper构建的分布式博客系统。这个系统展示了如何在现代企业级应用中实现服务化、微服务化和数据管理。 首先,Spring Boot是Spring框架的一个扩展,旨在简化...
Zookeeper 是一个分布式的,开放源码的分布式应用程序协调服务,它是集群的“大脑”。在Dubbo中,Zookeeper作为服务注册中心,服务提供者会将自身服务注册到Zookeeper上,服务消费者通过Zookeeper获取服务提供者的...
Zookeeper是Apache Hadoop项目的一个子项目,它是一个分布式的,开放源码的分布式应用程序协调服务。在Dubbo的环境中,Zookeeper通常作为注册中心使用。在Windows环境下,安装Zookeeper包括下载并解压安装包,修改`...
Zookeeper作为一个分布式应用程序协调服务,提供了对分布式锁、配置管理、命名服务和同步服务的支持。 为了实现DDBS的高效运行,集群软件应满足特定的技术要求。Linux操作系统6.2及以上版本、Zookeeper 3.4.5及以上...
ZooKeeper是一个开源的分布式协调服务,它提供了一种简单的接口来实现同步、配置维护、命名服务和分布式锁等分布式系统中的核心功能。在微服务架构中,ZooKeeper通常被用作注册中心,用于管理分布式环境中各个服务的...