我使用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,总共有四种类型。

    1. GetBenchmark – 基准测试原子分布式缓存的获取操作。

 

    1. PutBenchmark – 基准测试原子分布式缓存的存储操作。

 

    1. PutGetBenchmark – 基准测试原子分布式缓存的同时进行存储和获取操作。

 

    1. PutTxBenchmark – 基准测试事务性分布式缓存的存储操作。

 

    1. PutGetTxBenchmark – 基准测试事务性分布式缓存的同时进行存储和获取操作。

 

    1. SqlQueryBenchmark – 基准测试缓存数据上的分布式SQL查询。

 

    1. SqlQueryJoinBenchmark – 基准测试带有连接操作的分布式SQL查询。

 

    1. SqlQueryPutBenchmark – 基准测试同时进行缓存更新的分布式SQL查询。

 

    1. AffinityCallBenchmark – 基准测试关联调用操作。

 

    1. ApplyBenchmark – 基准测试应用操作。

 

    1. BroadcastBenchmark – 基准测试广播操作。

 

    1. ExecuteBenchmark – 基准测试执行操作。

 

    1. RunBenchmark – 基准测试运行任务操作。

 

    1. PutGetOffHeapBenchmark – 基准测试离堆原子分布式缓存的存储和获取操作。

 

    1. PutGetOffHeapValuesBenchmark – 基准测试离堆原子分布式缓存的存储值操作。

 

    1. PutOffHeapBenchmark – 基准测试离堆原子分布式缓存的存储操作。

 

    1. PutOffHeapValuesBenchmark – 基准测试离堆原子分布式缓存的获取值操作。

 

    1. PutTxOffHeapBenchmark – 基准测试离堆事务性分布式缓存的存储操作。

 

    1. PutTxOffHeapValuesBenchmark – 基准测试离堆事务性分布式缓存的存储值操作。

 

    1. SqlQueryOffHeapBenchmark – 基准测试离堆缓存数据上的分布式SQL查询。

 

    1. SqlQueryJoinOffHeapBenchmark – 基准测试离堆带有连接操作的分布式SQL查询。

 

    1. SqlQueryPutOffHeapBenchmark – 基准测试离堆同时进行缓存更新的分布式SQL查询。

 

    1. 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文件的形式输出,并且打开后会以以下方式显示。

image.png

平均而言,启用事务时操作数量从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

bannerAds