我使用Yardstick来评估In-Memory数据网格Apache Ignite的性能
首先
为了对Ignite进行性能测试,提供了一个名为”Yardstick Apache Ignite”(yardstick-ignite)的基准测试工具。这个基准测试工具是基于Yardstick Framework开发的。Yardstick是一个用于编写基准测试的框架,用于创建集群化系统和其他分布式系统的基准测试。
让我们使用Yardstick工具来评估Ignite的性能。
我参考了以下内容。
环境
(Note: The word “环境” means “environment” in Chinese.)
我在VirtualBox上搭建了以下3台服务器。
每台服务器都是基于CentOS7操作系统,配置为1核心,3GB内存。
Igniteserver1:用于Ignite集群的服务器(192.168.10.71)
Igniteserver2:用于Ignite集群的服务器(192.168.10.72)
Igniteserver3:用于Yardstick的服务器(192.168.10.73)
每个环境都已经安装了Ignite。因为Yardstick已经包括在Ignite中,所以不需要进行环境配置。
请参考以下文章,了解Apache Ignite的安装方法。
尝试使用Apache Ignite内存数据网格(Java)进行初次体验。
被提出的基准测试
我們提供了以下24個Ignite的標準基準測試。這次我們將試著執行2到5個基準測試。
执行的是两种类型的操作:Atomic和事务,其中包括两种操作:put和put+get,总共有四种类型。
-
- GetBenchmark – 基准测试原子分布式缓存的获取操作。
-
- PutBenchmark – 基准测试原子分布式缓存的存储操作。
-
- PutGetBenchmark – 基准测试原子分布式缓存的同时进行存储和获取操作。
-
- PutTxBenchmark – 基准测试事务性分布式缓存的存储操作。
-
- PutGetTxBenchmark – 基准测试事务性分布式缓存的同时进行存储和获取操作。
-
- SqlQueryBenchmark – 基准测试缓存数据上的分布式SQL查询。
-
- SqlQueryJoinBenchmark – 基准测试带有连接操作的分布式SQL查询。
-
- SqlQueryPutBenchmark – 基准测试同时进行缓存更新的分布式SQL查询。
-
- AffinityCallBenchmark – 基准测试关联调用操作。
-
- ApplyBenchmark – 基准测试应用操作。
-
- BroadcastBenchmark – 基准测试广播操作。
-
- ExecuteBenchmark – 基准测试执行操作。
-
- RunBenchmark – 基准测试运行任务操作。
-
- PutGetOffHeapBenchmark – 基准测试离堆原子分布式缓存的存储和获取操作。
-
- PutGetOffHeapValuesBenchmark – 基准测试离堆原子分布式缓存的存储值操作。
-
- PutOffHeapBenchmark – 基准测试离堆原子分布式缓存的存储操作。
-
- PutOffHeapValuesBenchmark – 基准测试离堆原子分布式缓存的获取值操作。
-
- PutTxOffHeapBenchmark – 基准测试离堆事务性分布式缓存的存储操作。
-
- PutTxOffHeapValuesBenchmark – 基准测试离堆事务性分布式缓存的存储值操作。
-
- SqlQueryOffHeapBenchmark – 基准测试离堆缓存数据上的分布式SQL查询。
-
- SqlQueryJoinOffHeapBenchmark – 基准测试离堆带有连接操作的分布式SQL查询。
-
- SqlQueryPutOffHeapBenchmark – 基准测试离堆同时进行缓存更新的分布式SQL查询。
-
- PutAllBenchmark – 基准测试原子分布式缓存的批量存储操作。
- PutAllTxBenchmark – 基准测试事务性分布式缓存的批量存储操作。
设置Yardstick
如果将Ignite安装在”/opt/apache-ignite”目录下,Yardstick将位于”/opt/apache-ignite/benchmarks”目录中。
由于Ignite集群是由Yardstick自动启动的,所以不需要手动启动。
为了通过远程连接到Ignite集群并执行基准测试,需要更改“ignite-remote-config.xml”文件的设置。
cd /opt/apache-ignite/benchmarks/config
vi ignite-remote-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--
Ignite Spring configuration file to startup grid.
-->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<import resource="ignite-base-config.xml"/>
<bean id="grid.cfg" class="org.apache.ignite.configuration.IgniteConfiguration" parent="base-ignite.cfg">
<property name="discoverySpi">
<bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
<property name="ipFinder">
<bean
class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder">
<property name="addresses">
<list>
<!-- In distributed environment, replace with actual hosts IP addresses. -->
<value>192.168.10.71:47500</value>
<value>192.168.10.72:47500</value>
</list>
</property>
</bean>
</property>
</bean>
</property>
</bean>
</beans>
接下来,将更改基准测试的设置。
有一个名为“benchmark-remote-sample.properties”的示例文件,可以将其复制并创建配置文件。
cp -p benchmark-remote-sample.properties benchmark-remote-test.properties
vi benchmark-remote-test.properties
将Ignite节点的IP地址放入属性文件的SERVER_HOSTS项目中。
SERVER_HOSTS=192.168.10.71,192.168.10.72
添加执行基准测试。
根据 “benchmark.properties” 创建参考。
# Run configuration.
# Note that each benchmark is set to run for 300 seconds (5 min) with warm-up set to 60 seconds (1 minute).
CONFIGS="\
-cfg ${SCRIPT_DIR}/../config/ignite-remote-config.xml -nn ${nodesNum} -b ${b} -w ${w} -d ${d} -t ${t} -sm ${sm} -dn IgnitePutBenchmark -sn IgniteNode -ds ${ver}atomic-put-${b}-backup,\
-cfg ${SCRIPT_DIR}/../config/ignite-remote-config.xml -nn ${nodesNum} -b ${b} -w ${w} -d ${d} -t ${t} -sm ${sm} -dn IgnitePutGetBenchmark -sn IgniteNode -ds ${ver}atomic-put-get-${b}-backup,\
-cfg ${SCRIPT_DIR}/../config/ignite-remote-config.xml -nn ${nodesNum} -b ${b} -w ${w} -d ${d} -t ${t} -sm ${sm} -dn IgnitePutTxBenchmark -sn IgniteNode -ds ${ver}tx-put-${b}-backup,\
-cfg ${SCRIPT_DIR}/../config/ignite-remote-config.xml -nn ${nodesNum} -b ${b} -w ${w} -d ${d} -t ${t} -sm ${sm} -dn IgniteGetAndPutTxBenchmark -sn IgniteNode -ds ${ver}tx-getAndPut-${b}-backup,\
"
我们将从运行Yardstick的服务器(称为Driver)通过SSH登录到每个 Ignore 节点上。
# ssh-keygen -t rsa
(パスフレーズは入力しない)
# ssh-copy-id root@192.168.10.71
# ssh-copy-id root@192.168.10.72
# ssh root@192.168.10.71
# ssh root@192.168.10.72
使用「benchmark-run-all.sh」开始运行基准测试。
[root@igniteserver3 config]# ../bin/benchmark-run-all.sh ./benchmark-remote-test.properties
<02:20:00><yardstick> Creating output directory
../bin/benchmark-run-all.sh: line 73: ifconfig: command not found
<02:20:00><yardstick> Copying yardstick to the host 192.168.10.71
Warning: Permanently added '192.168.10.71' (ECDSA) to the list of known hosts.
执行基准测试时,如果没有ifconfig命令的话会报错,所以需要安装net-tools工具。
# yum install -y net-tools
如果使用Ctrl-C强制终止,”Ignore”节点将保持启动状态。如果在这种情况下重新执行基准测试,之前残留的”Ignore”节点也会加入到集群中,因此,如果强制终止发生,需要单独停止”Ignore”节点。
当我在Visor上查看时,似乎有3台服务器正在运行。
我本以为其中1台是客户端,但事实并非如此。
visor> top
Hosts: 3
+============================================================================================================================+
| Int./Ext. IPs | Node ID8(@) | Node Type | OS | CPUs | MACs | CPU Load |
+============================================================================================================================+
| 10.0.2.15 | 1: 0908F8F4(@n0) | Server | Linux amd64 3.10.0-693.2.2.el7.x86_64 | 1 | 02:42:4A:05:5B:CD | 55.00 % |
| 127.0.0.1 | | | | | 08:00:27:76:F3:CF | |
| 172.17.0.1 | | | | | 08:00:27:E3:4A:44 | |
| 192.168.10.71 | | | | | | |
+---------------+------------------+-----------+---------------------------------------+------+-------------------+----------+
| 10.0.2.15 | 1: 02A9366F(@n1) | Server | Linux amd64 3.10.0-693.2.2.el7.x86_64 | 1 | 08:00:27:76:F3:CF | 51.33 % |
| 127.0.0.1 | | | | | 08:00:27:7F:64:16 | |
| 192.168.10.72 | | | | | | |
+---------------+------------------+-----------+---------------------------------------+------+-------------------+----------+
| 10.0.2.15 | 1: 97EFB660(@n2) | Server | Linux amd64 3.10.0-693.2.2.el7.x86_64 | 1 | 08:00:27:64:78:7A | 90.33 % |
| 127.0.0.1 | | | | | 08:00:27:76:F3:CF | |
| 192.168.10.73 | | | | | | |
+----------------------------------------------------------------------------------------------------------------------------+
Summary:
+--------------------------------------+
| Active | true |
| Total hosts | 3 |
| Total nodes | 3 |
| Total CPUs | 3 |
| Avg. CPU load | 65.56 % |
| Avg. free heap | 83.00 % |
| Avg. Up time | 00:03:58 |
| Snapshot time | 2018-08-25 02:48:02 |
+--------------------------------------+
当使用「cache -a」命令查看时,可以看到以下内容,三个服务器都存储了缓存。这意味着,Driver服务器也加入了Ignore集群,看来它成为了性能测量的对象。
Cache 'atomic(@c0)':
+-----------------------------------------------------------+
| Name(@) | atomic(@c0) |
| Nodes | 3 |
| Total size Min/Avg/Max | 305670 / 333334.33 / 350590 |
| Heap size Min/Avg/Max | 0 / 1.00 / 3 |
| Off-heap size Min/Avg/Max | 305670 / 333333.33 / 350587 |
+-----------------------------------------------------------+
Nodes for: atomic(@c0)
+============================================================================================================+
| Node ID8(@), IP | CPUs | Heap Used | CPU Load | Up Time | Size | Hi/Mi/Rd/Wr |
+============================================================================================================+
| 02A9366F(@n1), 10.0.2.15 | 1 | 29.76 % | 40.33 % | 00:06:43.146 | Total: 305670 | Hi: 0 |
| | | | | | Heap: 0 | Mi: 0 |
| | | | | | Off-Heap: 305670 | Rd: 0 |
| | | | | | Off-Heap Memory: 0 | Wr: 0 |
+--------------------------+------+-----------+----------+--------------+----------------------+-------------+
| 0908F8F4(@n0), 10.0.2.15 | 1 | 24.59 % | 45.00 % | 00:06:43.395 | Total: 343743 | Hi: 0 |
| | | | | | Heap: 0 | Mi: 0 |
| | | | | | Off-Heap: 343743 | Rd: 0 |
| | | | | | Off-Heap Memory: 0 | Wr: 0 |
+--------------------------+------+-----------+----------+--------------+----------------------+-------------+
| 927AB38D(@n2), 10.0.2.15 | 1 | 20.24 % | 88.00 % | 00:00:34.269 | Total: 350590 | Hi: 0 |
| | | | | | Heap: 3 | Mi: 0 |
| | | | | | Off-Heap: 350587 | Rd: 0 |
| | | | | | Off-Heap Memory: 0 | Wr: 0 |
+------------------------------------------------------------------------------------------------------------+
当基准测试执行完毕后,结果会自动以图形方式显示出来。
<03:08:51><yardstick> Driver is stopped on localhost
<03:08:51><yardstick> Server is stopped on 192.168.10.71
<03:08:51><yardstick> Server is stopped on 192.168.10.72
<03:08:52><yardstick> Collecting results from the host 192.168.10.71
<03:08:53><yardstick> Collecting results from the host 192.168.10.72
<03:08:54><yardstick> Creating charts
Moving chart directory to the /opt/apache-ignite/benchmarks/output/results-20180825-024401 directory.
以HTML文件的形式输出,并且打开后会以以下方式显示。

平均而言,启用事务时操作数量从38,000下降到大约11,000(红色)。由于基准测试已经包含在内,我们能够轻松地对性能进行测试。虽然本次我们使用了默认参数进行执行,但未来我想尝试做一些更改,以确认性能的变化。
YCSB(雅虎云服务基准)
据说YCSB(Yahoo云服务基准测试)也支持Ignite。
以下是使用YCSB进行的基准测试结果:
Apache® Ignite™和Apache® Cassandra™的基准测试:内存计算的强大之处
https://www.gridgain.com/resources/blog/apacher-ignitetm-and-apacher-cassandratm-benchmarks-power-in-memory-computing