[JAVA] J'ai mesuré les performances de la grille de données en mémoire Apache Ignite à l'aide de Yardstick.

introduction

Un benchmark appelé "Yardstick Apache Ignite (mètre-ignite)" est fourni pour mesurer les performances d'Ignite. Ce benchmark est écrit au-dessus du framework Yardstick. Yardstick est un cadre pour l'écriture de benchmarks et est utilisé pour créer des benchmarks pour les systèmes en cluster et d'autres systèmes distribués.

Mesurons les performances d'Ignite à l'aide de Yardstick.

Je fais référence à ce qui suit.

https://apacheignite.readme.io/docs/perfomance-benchmarking

environnement

Nous avons construit les trois serveurs suivants sur VirtualBox. Chaque serveur est CentOS7 avec 1 cœur et 3 Go de mémoire.

igniteserver1: serveur pour le cluster Ignite (192.168.10.71) igniteserver2: serveur pour le cluster Ignite (192.168.10.72) igniteserver3: Serveur pour Yardstick (192.168.10.73)

Ignite est déjà installé dans chaque environnement. Puisque Yardstick utilise celui inclus dans Ignite, il n'y a pas de construction d'environnement.

Veuillez vous référer à l'article suivant pour savoir comment installer Apache Ignite.

Premiers pas avec In-Memory Data Grid Apache Ignite (Java)

Benchmark préparé

Il existe 24 points de repère standard fournis pour Ignite: Cette fois, je vais essayer 2 à 5 benchmarks.

Il existe 2 types de types Atomic et transaction x 2 types put / put + get = 4 à exécuter.

  1. GetBenchmark - benchmarks atomic distributed cache get operation.
  2. PutBenchmark - benchmarks atomic distributed cache put operation.
  3. PutGetBenchmark - benchmarks atomic distributed cache put and get operations together.
  4. PutTxBenchmark - benchmarks transactional distributed cache put operation.
  5. PutGetTxBenchmark - benchmarks transactional distributed cache put and get operations together.
  6. SqlQueryBenchmark - benchmarks distributed SQL query over cached data.
  7. SqlQueryJoinBenchmark - benchmarks distributed SQL query with a Join over cached data.
  8. SqlQueryPutBenchmark - benchmarks distributed SQL query with simultaneous cache updates.
  9. AffinityCallBenchmark - benchmarks affinity call operation.
  10. ApplyBenchmark - benchmarks apply operation.
  11. BroadcastBenchmark - benchmarks broadcast operations.
  12. ExecuteBenchmark - benchmarks execute operations.
  13. RunBenchmark - benchmarks running task operations.
  14. PutGetOffHeapBenchmark - benchmarks atomic distributed cache put and get operations together off-heap.
  15. PutGetOffHeapValuesBenchmark - benchmarks atomic distributed cache put value operations off-heap.
  16. PutOffHeapBenchmark - benchmarks atomic distributed cache put operations off-heap.
  17. PutOffHeapValuesBenchmark - benchmarks atomic distributed cache get value operations off-heap.
  18. PutTxOffHeapBenchmark - benchmarks transactional distributed cache put operation off-heap.
  19. PutTxOffHeapValuesBenchmark - benchmarks transactional distributed cache put value operation off-heap.
  20. SqlQueryOffHeapBenchmark -benchmarks distributed SQL query over cached data off-heap.
  21. SqlQueryJoinOffHeapBenchmark - benchmarks distributed SQL query with a Join over cached data off-heap.
  22. SqlQueryPutOffHeapBenchmark - benchmarks distributed SQL query with simultaneous cache updates off-heap.
  23. PutAllBenchmark - benchmarks atomic distributed cache batch put operation.
  24. PutAllTxBenchmark - benchmarks transactional distributed cache batch put operation.

Paramètres du Yardstick

Si vous avez installé Ignite dans "/ opt / apache-ignite", le Yardstick est dans "/ opt / apache-ignite / benchmarks".

Le cluster Ignite est automatiquement démarré à partir de Yardstick et n'a pas besoin d'être démarré.

Modifiez les paramètres dans «ignite-remote-config.xml» pour vous connecter à distance au cluster Ignite et exécuter le test de performance.

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>

Modifiez ensuite les paramètres de référence. Il existe un exemple de fichier appelé "benchmark-remote-sample.properties", donc copiez-le pour créer un fichier de paramètres.

cp -p benchmark-remote-sample.properties benchmark-remote-test.properties
vi benchmark-remote-test.properties

Entrez l'adresse IP du nœud Ignite dans le champ SERVER_HOSTS du fichier de propriétés.

SERVER_HOSTS=192.168.10.71,192.168.10.72

Ajoutez un benchmark à exécuter. Créez en vous référant à "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,\
"

Vous permet de SSH dans chaque nœud Ignorer du serveur qui exécute Yardstick (il semble s'appeler Driver).

# ssh-keygen -t rsa
(N'entrez pas de phrase de passe)

# ssh-copy-id [email protected]
# ssh-copy-id [email protected]

# ssh [email protected]
# ssh [email protected]

Démarrez le benchmark avec "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.

Quand je lance le benchmark, je me fâche sans ifconfig comme ci-dessus, donc installez net-tools.

# yum install -y net-tools

Si vous le tuez avec Ctrl-C, le nœud Ignorer reste actif. Si vous réexécutez le test de performance dans cet état, les nœuds Ignore restants rejoindront également le cluster, donc si vous forcez l'arrêt, vous devez arrêter les nœuds Ignorer individuellement.

En regardant Visor, il semble que trois serveurs fonctionnent. Je pensais que l'un serait le client, mais cela ne semble pas être le cas.

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 |
+--------------------------------------+

En regardant "cache -a", le cache est stocké dans les trois serveurs comme indiqué ci-dessous. Cela signifie que le serveur de pilotes est également dans le cluster Ignorer et semble être la cible de la mesure des performances.

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       |
+------------------------------------------------------------------------------------------------------------+


Lorsque l'exécution du benchmark est terminée, le résultat est automatiquement généré sous forme de graphique.

<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.

Il est généré sous forme de fichier HTML et s'affiche comme indiqué ci-dessous.

image.png image.png image.png

Avec Put, la moyenne est de 38 000 opérations (bleu), mais lorsque vous activez les transactions, vous pouvez voir que la moyenne est d'environ 11 000 (rouge). Le benchmark étant inclus dès le début, il était facile de mesurer la performance. Cette fois, je l'ai exécuté avec les paramètres par défaut, mais à l'avenir, j'aimerais apporter divers changements et vérifier les changements de performances.

YCSB (Yahoo Cloud Serving Benchmark)

YCSB (Yahoo Cloud Serving Benchmark) semble également prendre en charge Ignite.

Les résultats du benchmark utilisant YCSB sont affichés ci-dessous. Apache® Ignite™ and Apache® Cassandra™ Benchmarks: The Power of In-Memory Computing https://www.gridgain.com/resources/blog/apacher-ignitetm-and-apacher-cassandratm-benchmarks-power-in-memory-computing

Recommended Posts

J'ai mesuré les performances de la grille de données en mémoire Apache Ignite à l'aide de Yardstick.
Accédez à la grille de données en mémoire Apache Ignite à partir d'un client Java
J'ai essayé d'utiliser le profileur d'IntelliJ IDEA
J'ai essayé d'utiliser la fonction Server Push de Servlet 4.0
Rails6: saisissez les données initiales d'ActionText à l'aide de seed
[Enum] Utilisez des rails enum pour améliorer la lisibilité des données
[Apache Tomcat] L'histoire de l'utilisation d'Apache OpenWebBeans pour activer CDI
Traitement des données avec Apache Flink
J'ai essayé d'utiliser Apache Wicket
J'ai essayé d'utiliser la fonction de cache d'Application Container Cloud Service
Essayez d'utiliser la fonction de mesure en deux points de Firebase Performance Monitoring. [Android]