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
分享到:
相关推荐
服务于妈妈各项业务线性能测试,acp 1.0开源版本已经发布,主要特性如下:Alimama common performance platform(ACP)是基于Zookeeper的大型分布式性能测试平台,可用于各种业务性能测试。 ACP 1.0开源版本已经发布...
Dubbo+Zookeeper分布式服务框架 合理的分布式服务划分(common+api+service+web) 资源调度和治理中心(SOA)(dubbo-admin) 服务监控方案(dubbo-monitor) <项目介绍> 该资源内项目源码是个人的毕设,代码都测试ok,...
Java基于Netty实现的高性能分布式IM即时通信系统源码+项目说明.tar 介绍 `RIM`是基于Netty实现的面相开发者的高性能分布式即时通信系统,保证消息的实时性、有序性、可靠性。 ## 技术栈 | 名称 | 作用 | | -------...
> + 一个高性能的RPC框架是不可能使用Python来完成的,Python的速度太感人了 > + 以学习基本原理为目的时,不必在乎过多细节,Python封装好的类库屏蔽掉很多细节 > + 实现同样的功能,Python的代码量相较于C/C++要...
分布式数据库基准测试仪:etcd,Zookeeper,Consul,zetcd,cetcd 它包括github.com/golang/freetype,它部分基于FreeType团队的工作。 绩效分析 最新的测试结果可以在找到 探索etcd,Zookeeper和Consul一致键值...
什么是Apache ZooKeeper 来自“ ZooKeeper是针对分布式应用程序的高性能协调服务。” 它在一个简单的界面中公开了常见的服务,例如命名,配置管理,同步和组服务,因此您不必从头开始编写它们。 您可以现成使用它来...
Eagle是一个分布式的RPC框架,支持灵活的配置,支持分布式追踪,支持、、 等序列化协议,默认序列化使用kryo 。提供Spring 和SpringBoot插件,方便与Spring和SpringBoot集成。 特点 借助实现服务注册和发现。 分布式...
**项目描述**:项目基于 SpringCloud Gateway + Nacos + Sentinel + OpenFeign 作为分布式系统架构,基于 Netty 实现高性能网络通信。主要功能有:一对一聊天以及群组聊天、好友管理、群组管理等。 项目独立完成,...
4.4.2 性能测试工具 285 4.4.3 性能优化措施 292 4.5 Java应用故障的排查 314 4.5.1 常用的工具 314 4.5.2 典型案例分析 331 第5章 数据分析 337 本章主要介绍和解决如下问题: 分布式系统中日志...
4、后端秒杀业务逻辑,基于Redis 或者 Zookeeper 分布式锁,Kafka 或者 Redis 做消息队列,DRDS数据库中间件实现数据的读写分离。 优化思路 1、分流、分流、分流,重要的事情说三遍,再牛逼的机器也抵挡不住高级别的...
项目由业务集群系统+后台管理系统构成,打通了分布式开发及全栈开发技能,包含前后分离全栈开发、Restful接口、数据校验、网关、注册发现、配置中心、熔断、限流、降级、链路追踪、性能监控、压力测试、系统预警、...
一个简单的序列化抽象和一些实现 - 一种为弹性分布式系统提供环境配置的方法 - 一些简单的重用组件 - 有助于多线程和更复杂的网络测试 - 高性能多线程 API、接口和实现 命名和版本控制 通常,包含抽象定义(又名接口...
Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候,才有dubbo这样...
4、后端秒杀业务逻辑,基于Redis 或者 Zookeeper 分布式锁,Kafka 或者 Redis 做消息队列,DRDS数据库中间件实现数据的读写分离。 优化思路 1、分流、分流、分流,重要的事情说三遍,再牛逼的机器也抵挡不住高级别的...
4、后端秒杀业务逻辑,基于Redis 或者 Zookeeper 分布式锁,Kafka 或者 Redis 做消息队列,DRDS数据库中间件实现数据的读写分离。 spring-boot-seckill分布式秒杀系统优化思路 1、分流、分流、分流,重要的事情说三...
分布式锁 分区排队 一致性 一致性算法 paxos zab nwr raft gossip 柔性事务(TCC) 一致性原理 CAP BASE 中间件 数据库 mysql 存储引擎 索引 锁 oracle db2 缓存 redis 数据结构 持久 ...
shiro实现redis分布式session同步,重启服务会话不丢失。7、多系统交互:Dubbo,ActiveMQ多系统交互,ftp/sftp/fastdafs发送文件到独立服务器,使文件服务分离。8、前后端分离:没有权限的文件只用nginx代理即可。9...
FusionInsightHD华为⼤数据平台 华为FusionInsight HD是⼀个分布式数据处理系统,对外提供⼤容量的数据存储、分析查询和实时流式数据处 理分析能⼒。 安全 架构安全、认证安全、⽂件系统层加密 可靠 所有管理节点...
本文从实时大数据的流处理应用出发, 通过分析流媒体视频数据在实时传输中遇到的难点和所需的关键技术, 采用Storm流处理技术实现高性能、低延迟的分布式实时传输系统, 在Linux系统上完成Storm框架的搭建, 设计并实现...
是一种高性能,基于Java的开源RPC框架。由于dubbo只有JAVA版本,若和第三方厂商进行远程调用受到语言的局限性。 simple_server[restful] 轻量级restful接口服务端,无需tomcat部署启动。通过RestfulStart启动接口,...