ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

YCSB Memcached binding 完整使用指南:安装、编译、压测与连接参数详解

YCSB Memcached binding 完整使用指南:安装、编译、压测与连接参数详解 性能测试【免费下载链接】YCSBYahoo! Cloud Serving Benchmark项目地址https://gitcode.com/gh_mirrors/yc/YCSB点击查看免费下载本指南以 YCSB 仓库中的 memcached/README.md 为骨架完整讲解如何将 Yahoo! Cloud Serving BenchmarkYCSB接入 Memcached从服务端安装、YCSB 编译到数据加载load与工作负载运行run再到全部连接参数的语义与默认值并结合 MemcachedClient.java 源码剖析参数是如何被解析、连接是如何建立的以及读写操作底层的数据组织方式。读完本文你将能独立完成一次可复现的 Memcached 基准测试并具备按需调优连接参数的能力。1. 总体流程概览在 YCSB 中每个数据库Memcached、MongoDB、HBase 等都以一个独立 Maven 模块binding的形式提供模块通过实现site.ycsb.DB抽象类接入统一的压测框架。对 Memcached 而言其 binding 模块名为memcached-binding核心实现类为site.ycsb.db.MemcachedClient底层依赖 spymemcached 客户端库与 Jackson 序列化组件见 memcached/pom.xml。一次完整的 Memcached 压测分为四步在宿主机上安装并启动 memcached 服务准备 Java 与 Maven 环境获取 YCSB 源码并编译 memcached binding先用load命令写入数据再用run命令执行工作负载并采集指标。2. 安装并启动 Memcached 服务Memcached 是内存键值缓存服务压测前需要先在目标主机或集群中的每台主机上完成安装。按操作系统分两类安装方式Debian / Ubuntusudo apt-get install memcachedRedHat / CentOSsudo yum install memcached安装完成后默认监听端口为 11211这也是 YCSB 连接参数的默认端口见第 5 节。可使用memcached -u user等参数按需启动本文不再展开系统级运维细节。3. 安装 Java 与 MavenYCSB 基于 Java 构建需要 JDK 与 Maven。YCSB 官方将 Java/Maven 的详细安装步骤统一放在 MongoDB binding 文档的 Step 2 中与本模块共用请参见 mongodb/README.md 中的「Install Java and Maven」一节其中覆盖了JDK 的下载安装rpm 方式或sudo yum install java-develMaven 的下载、解压与 PATH 环境变量配置export M2_HOME/usr/local/maven、export PATH${M2_HOME}/bin:${PATH}通过mvn -version验证环境就绪。4. 获取 YCSB 源码并编译 memcached binding从仓库克隆 YCSB 并单独编译 memcached binding连同其依赖模块一起构建git clone http://github.com/brianfrankcooper/YCSB.git cd YCSB mvn -pl site.ycsb:memcached-binding -am clean package命令说明-pl site.ycsb:memcached-binding指定只构建memcached-binding模块-amalso make表示同时构建其依赖模块主要是core模块clean package执行一次干净打包。从 memcached/pom.xml 可以看到该模块的依赖清单site.ycsb:coreYCSB 核心框架DB 抽象、工作负载、测量等net.spy:spymemcached:2.11.4Memcached Java 客户端负责连接管理与协议交互org.codehaus.jackson:jackson-mapper-asl:1.9.13记录值的 JSON 序列化/反序列化log4j:log4j:1.2.17日志。打包阶段通过 maven-assembly-plugin 生成包含所有依赖的 fat jar供bin/ycsb脚本加载。5. 加载数据并运行压测编译完成后即可使用bin/ycsb脚本对 Memcached 执行基准测试。脚本用法为./bin/ycsb command database [options]其中load表示加载数据阶段run表示执行工作负载阶段。5.1 加载数据load./bin/ycsb load memcached -s -P workloads/workloada outputLoad.txtmemcached数据库名称对应site.ycsb.db.MemcachedClient这个 DB 实现-s压测过程中定时输出状态信息-P workloads/workloada指定工作负载配置文件 outputLoad.txt把加载阶段结果重定向到文件中供后续查看。5.2 运行工作负载run./bin/ycsb run memcached -s -P workloads/workloada outputRun.txt5.3 默认工作负载 workloada 的含义以仓库自带的 workloads/workloada 为例它定义了一个「更新密集型」负载recordcount1000、operationcount1000共 1000 条记录、1000 次操作readproportion0.5、updateproportion0.5读写比例为 50/50典型场景如会话存储 Session storerequestdistributionzipfian请求键服从 Zipfian 分布模拟热点访问readallfieldstrue读操作读取记录全部字段。关于-p参数见第 6 节可以在命令行直接覆盖配置文件中的连接属性例如./bin/ycsb load memcached -s -P workloads/workloada \ -p memcached.hosts127.0.0.1 outputLoad.txt即在不修改配置文件的情况下把 Memcached 服务地址指定为本地127.0.0.1。6. Memcached 连接参数详解YCSB 为 memcached binding 提供了一份可直接参考的样例配置 memcached/conf/memcached.properties。所有参数均可在-P指定的属性文件或命令行-p中设置。下面按「必需 / 可选」两类逐一说明默认值与取值范围均与源码中定义的常量一致见 MemcachedClient.java。6.1 必需参数参数说明memcached.hosts提供 memcached 接口的主机列表逗号分隔。每项可以是 IP 或主机名端口可选未指定端口时默认使用 memcached 标准端口11211源码中DEFAULT_PORT 11211。示例memcached.hosts192.168.1.10,192.168.1.11:112126.2 可选参数参数默认值说明memcached.shutdownTimeoutMillis30000关闭客户端连接时的超时时间毫秒。对应DEFAULT_SHUTDOWN_TIMEOUT_MILLIS。memcached.objectExpirationTimeInteger.MAX_VALUE即2147483647memcached 对象的过期时间。默认值Integer.MAX_VALUE表示基本不过期由DEFAULT_OBJECT_EXPIRATION_TIME定义。memcached.checkOperationStatustrue是否校验每次操作的成功状态。设为false时写操作即使失败也会返回Status.OK可换取更高吞吐但会掩盖错误。memcached.readBufferSize3000000客户端读缓冲区大小字节默认 3,000,000 字节对应DEFAULT_READ_BUFFER_SIZE。memcached.opTimeoutMillis60000单次操作超时毫秒默认 60 秒对应DEFAULT_OP_TIMEOUT。memcached.failureModeRedistribute节点故障时的处理策略取值是net.spy.memcached.FailureMode枚举Redistribute重定向到其他节点、Retry重试、Cancel取消。memcached.protocoltext通信协议。设为binary使用 memcached 二进制协议设为text或省略该字段使用文本协议。以上默认值均可在 MemcachedClient.java 中以DEFAULT_*常量形式查证。6.3 完整配置示例把样例配置 memcached/conf/memcached.properties 中的注释打开后一份完整配置形如# 必需逗号分隔的主机列表端口可选默认 11211 memcached.hosts127.0.0.1 # 可选 memcached.shutdownTimeoutMillis30000 memcached.objectExpirationTime2147483647 memcached.checkOperationStatustrue memcached.readBufferSize3000000 memcached.opTimeoutMillis60000 memcached.failureModeRedistribute通过-P memcached/conf/memcached.properties引用该文件或在命令行用-p逐项覆盖二者效果等价。7. 源码级原理参数如何驱动连接与读写7.1 从 DB 抽象到 MemcachedClientYCSB 核心框架定义了一个site.ycsb.DB抽象类约定read / scan / update / insert / delete五个操作以及init / cleanup生命周期方法见 core/src/main/java/site/ycsb/DB.java。压测客户端通过 DBFactory.newDB() 按数据库名动态加载并实例化对应的 DB 实现类再把所有属性含-P与-p提供的配置通过setProperties注入。MemcachedClient正是这样被选中的 memcached 实现。7.2 init()参数解析与连接建立MemcachedClient.init()在 MemcachedClient.java 中完成三件事调用createMemcachedClient()创建底层 spymemcached 客户端读取memcached.checkOperationStatus并解析为布尔值读取memcached.objectExpirationTime、memcached.shutdownTimeoutMillis。createMemcachedClient()MemcachedClient.java则用ConnectionFactoryBuilder组装连接工厂setReadBufferSize、setOpTimeout分别对应memcached.readBufferSize、memcached.opTimeoutMillismemcached.protocol经valueOf(...toUpperCase())转为ConnectionFactoryBuilder.Protocol枚举省略时为TEXTmemcached.failureMode经FailureMode.valueOf转为枚举省略时为Redistribute对memcached.hosts按逗号切分逐个解析主机[:端口]端口缺省取11211组装为InetSocketAddress列表后交给new net.spy.memcached.MemcachedClient(...)建立连接。值得注意的源码提示该解析逻辑假定「:是主机名/端口的分隔符」因此仅适用于 IPv4 地址IPv6 地址会因包含多个冒号而无法正确解析源码中以 TODO 标注见 MemcachedClient.java。当前仓库的 memcached binding 尚未支持 IPv6 主机配置。7.3 读写操作与 JSON 编码Memcached 本身存储的是纯字节串YCSB 记录是「键 多字段」结构因此该 binding 将一条记录序列化为 JSON 对象后再写入insert调用 spymemcached 的add(key, objectExpirationTime, toJson(values))——仅当键不存在时写入防止重复加载覆盖已有数据update调用replace(...)——仅当键已存在时覆盖二者配合保障 load/run 语义read调用asyncGet(key)异步取回 JSON 字符串再用fromJson()反序列化并按请求的fields子集返回字段值见 MemcachedClient.javadelete调用delete(key)scanMemcached 不支持范围扫描直接返回Status.NOT_IMPLEMENTEDMemcachedClient.java因此不要对 memcached 执行含扫描比例的工作负载。键的构造也有讲究createQualifiedKey将表名与键拼成{table}-{key}的复合键MemcachedClient.java避免不同表间键冲突。7.4 操作状态校验与返回码映射当memcached.checkOperationStatustrue时getReturnCode()MemcachedClient.java会检查 spymemcached 的OperationStatus成功 →Status.OK消息为Temporary failure→ 返回TEMPORARY_FAILURE状态消息为cancelled→ 返回CANCELLED状态其余 → 返回携带原始错误消息的ERROR状态。YCSB 框架本身不使用这些返回码驱动逻辑而是统计各类返回码的次数并呈现在最终结果里参见 DB.java 的类注释。因此该参数决定的是「错误是否会被统计并暴露」建议压测时保持默认true。7.5 cleanup()优雅关闭cleanup()使用memcached.shutdownTimeoutMillis作为超时调用client.shutdown(shutdownTimeoutMillis, MILLISECONDS)优雅关闭连接MemcachedClient.java。注意 YCSB 会为每个客户端线程创建一个 DB 实例见 DB.java 注释因此多线程压测时每个线程拥有独立的 memcached 连接池调大readBufferSize/opTimeoutMillis可缓解高并发下的吞吐瓶颈。8. 一次完整的压测运行示例假设本机已运行 memcached默认端口 11211综合以上所有步骤# 1. 编译 memcached binding mvn -pl site.ycsb:memcached-binding -am clean package # 2. 加载数据指定本机地址写入 1000 条记录 ./bin/ycsb load memcached -s -P workloads/workloada \ -p memcached.hosts127.0.0.1 outputLoad.txt # 3. 运行 50/50 读更新负载 ./bin/ycsb run memcached -s -P workloads/workloada \ -p memcached.hosts127.0.0.1 outputRun.txt结果文件outputLoad.txt与outputRun.txt中会包含吞吐Throughputops/sec、各操作的延迟分布与返回码统计可作为 Memcached 与其它 YCSB 支持数据库横向对比的原始数据。9. 小结与调优建议最小可用配置只需一个参数memcached.hosts其余参数均有合理默认值可直接照抄 memcached/conf/memcached.properties协议选择追求更低解析开销可设memcached.protocolbinary默认text协议更便于抓包排查故障策略单节点测试无影响多节点场景下failureMode决定节点宕机时是重定向、重试还是取消默认Redistribute避免执行含 scan 的负载该 binding 未实现scan会返回NOT_IMPLEMENTED注意 IPv4 限制memcached.hosts当前不支持 IPv6 地址。以上结论均可从 memcached/README.md、memcached/conf/memcached.properties 与 MemcachedClient.java 中直接查证。赞分享性能测试【免费下载链接】YCSBYahoo! Cloud Serving Benchmark项目地址https://gitcode.com/gh_mirrors/yc/YCSB点击查看免费下载相关推荐Apache Arrow Flight SQL JDBC Driver 使用指南安装、连接 URI 与参数详解Apache Arrow Flight SQL JDBC Driver 使用指南安装、连接 URI 与参数详解 导读 本文围绕 Apache Arrow 仓库数据工程大数据序列化数据分析使用 YCSB 对 GridDB 进行 NoSQL 基准测试GridDB Binding 完整配置与运行指南使用 YCSB 对 GridDB 进行 NoSQL 基准测试GridDB Binding 完整配置与运行指南 导读 GridDB 是东芝TOSHIBA Di性能测试Unicorn Engine Java Binding 从源码编译安装与使用实战指南Unicorn Engine Java Binding 从源码编译安装与使用实战指南 本篇技术指南以 bindings/java/README.md https虚拟化逆向工程上一篇Apollo 发布历史保留数据修复指南release-history-retention 手动迁移脚本实战下一篇幻兽帕鲁存档迁移修复完整指南换服不丢角色的关键操作创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表