[JAVA] Ich habe die Leistung des speicherinternen Datengitters Apache Ignite mit Yardstick gemessen.

Einführung

Zur Messung der Leistung von Ignite wird ein Benchmark namens "Yardstick Apache Ignite (Yardstick-Ignite)" bereitgestellt. Dieser Benchmark basiert auf dem Yardstick Framework. Yardstick ist ein Framework zum Schreiben von Benchmarks und wird zum Erstellen von Benchmarks für Cluster-Systeme und andere verteilte Systeme verwendet.

Lassen Sie uns die Leistung von Ignite mit Yardstick messen.

Ich beziehe mich auf Folgendes.

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

Umgebung

Wir haben die folgenden drei Server auf VirtualBox erstellt. Jeder Server ist CentOS7 mit 1 Kern und 3 GB Speicher.

igniteserver1: Server für Ignite-Cluster (192.168.10.71) igniteserver2: Server für Ignite-Cluster (192.168.10.72) igniteserver3: Server für Yardstick (192.168.10.73)

Ignite ist bereits in jeder Umgebung installiert. Da Yardstick den in Ignite enthaltenen verwendet, gibt es keine Umgebungskonstruktion.

Weitere Informationen zum Installieren von Apache Ignite finden Sie im folgenden Artikel.

Erste Schritte mit In-Memory Data Grid Apache Ignite (Java)

Vorbereiteter Benchmark

Für Ignite stehen 24 Standard-Benchmarks zur Verfügung: Dieses Mal werde ich 2 bis 5 Benchmarks ausprobieren.

Es gibt 2 Arten von Atomic und Transaktion x 2 Arten von put / put + get = 4 Arten, die ausgeführt werden müssen.

  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.

Maßstabseinstellungen

Wenn Sie Ignite unter "/ opt / apache-ignite" installiert haben, befindet sich der Yardstick unter "/ opt / apache-ignite / Benchmarks".

Der Ignite-Cluster wird automatisch von Yardstick aus gestartet und muss nicht gestartet werden.

Ändern Sie die Einstellungen in "ignite-remote-config.xml", um eine Remoteverbindung zum Ignite-Cluster herzustellen und den Benchmark auszuführen.

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>

Ändern Sie dann die Benchmark-Einstellungen. Es gibt eine Beispieldatei mit dem Namen "Benchmark-remote-sample.properties". Kopieren Sie sie, um eine Einstellungsdatei zu erstellen.

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

Geben Sie die IP-Adresse des Ignite-Knotens in das Feld SERVER_HOSTS der Eigenschaftendatei ein.

SERVER_HOSTS=192.168.10.71,192.168.10.72

Fügen Sie einen Benchmark zum Ausführen hinzu. Erstellen Sie unter Bezugnahme auf "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,\
"

Ermöglicht das SSH in jeden Ignorierknoten vom Server, auf dem Yardstick ausgeführt wird (er scheint als Treiber bezeichnet zu werden).

# ssh-keygen -t rsa
(Geben Sie keine Passphrase ein)

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

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

Starten Sie den Benchmark mit "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.

Wenn ich den Benchmark ausführe, ärgere ich mich ohne ifconfig wie oben, also installiere Net-Tools.

# yum install -y net-tools

Wenn Sie es mit Strg-C beenden, bleibt der Knoten Ignorieren aktiv. Wenn Sie den Benchmark in diesem Status erneut ausführen, werden auch die verbleibenden Ignorierknoten dem Cluster beigetreten. Wenn Sie also die Beendigung erzwingen, müssen Sie die Ignorierknoten einzeln stoppen.

In Visor scheinen drei Server zu laufen. Ich dachte, einer wäre der Kunde, aber das scheint nicht der Fall zu sein.

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

Bei "Cache -a" wird der Cache wie unten gezeigt auf allen drei Servern gespeichert. Dies bedeutet, dass sich der Treiberserver ebenfalls im Ignoriercluster befindet und das Ziel der Leistungsmessung zu sein scheint.

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


Wenn die Ausführung des Benchmarks abgeschlossen ist, wird das Ergebnis automatisch als Grafik ausgegeben.

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

Es wird als HTML-Datei ausgegeben und wie unten gezeigt angezeigt.

image.png image.png image.png

Bei Put liegt der Durchschnitt bei 38.000 Vorgängen (blau). Wenn Sie jedoch Transaktionen aktivieren, sehen Sie, dass der Durchschnitt bei etwa 11.000 (rot) liegt. Da der Benchmark von Anfang an enthalten war, war es einfach, die Leistung zu messen. Dieses Mal habe ich es mit den Standardparametern ausgeführt, aber in Zukunft möchte ich verschiedene Änderungen vornehmen und die Änderungen in der Leistung überprüfen.

YCSB (Yahoo Cloud Serving Benchmark)

YCSB (Yahoo Cloud Serving Benchmark) scheint ebenfalls Ignite zu unterstützen.

Die Ergebnisse der Benchmark mit YCSB sind unten aufgeführt. 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

Ich habe die Leistung des speicherinternen Datengitters Apache Ignite mit Yardstick gemessen.
Greifen Sie von einem Java-Client aus auf das speicherinterne Datenraster Apache Ignite zu
Ich habe versucht, den Profiler von IntelliJ IDEA zu verwenden
Ich habe versucht, die Server-Push-Funktion von Servlet 4.0 zu verwenden
Rails6: Geben Sie die Anfangsdaten von ActionText mit seed ein
[Enum] Verwenden Sie Rails Enum, um die Lesbarkeit von Daten zu verbessern
[Apache Tomcat] Die Geschichte der Verwendung von Apache OpenWebBeans zum Aktivieren von CDI
Datenverarbeitung mit Apache Flink
Ich habe versucht, Apache Wicket zu verwenden
Ich habe versucht, die Cache-Funktion des Application Container Cloud Service zu verwenden
Versuchen Sie es mit der Zweipunktmessfunktion von Firebase Performance Monitoring. [Android]