Nuxeo benchmark infrastructure runs on Google Kubernetes Engine (GKE).
The benchmark infrastructure is composed of:
Everything is deployed with the help of Helmfile and Helm Charts, the definition and settings are accessible here for the benchmark environment.
MongoDB and Elasticsearch are running on a dedicated Kubernetes node.
There’s one Kafka node for one Nuxeo node, both running on the same dedicated Kubernetes node.
Each Kubernetes node is composed of GKE e2-standard-16 with 16 vCPU and 64 GB Memory.
The benchmark is driven by continuous integration jobs (Jenkins).
Here is a list of tools used to perform the benchmark:
Nuxeo benchmark infrastructure runs on Amazon Web Service (AWS).
The benchmark infrastructure is composed of:
This is a mix of static and dynamic parts:
All these nodes are setup according to our recommendation.
The benchmark is driven by continuous integration jobs (Jenkins).
Here is a list of tools used to perform the benchmark:
All machines are on Amazon and runs on the same availability zone (AZ).
Node | ec2 instance type |
---|---|
Database | c4.2xlarge |
Nuxeo | c4.xlarge |
Elasticsearch | c4.xlarge |
Redis | cache.m3.large |
Kafka | c4.xlarge |
Jenkins slave | c3.xlarge |
c4.2xlarge
:
c4.xlarge
:
cache.m3.large
c3.xlarge
:
Running a benchmark with the default setting requires 8 machines:
And when using Kafka there is an additional machine.
Operating system used:
The number of nodes in the Nuxeo Cluster can be configured (default is 2)
The Nuxeo is installed using a zip archive, there are additional packages installed:
amazon-s3-online-storage
: used to store binaries into S3nuxeo-platform-importer
: used during the bench to generate random files.In addition to the backend template, the perf
template is used.
This template is provided in the default distribution and rely on Elasticsearch for fulltext search and most of the
page provider.
Nuxeo run with the latest Oracle JVM 1.8, the heap size is set to 80% of total memory (5.84g for a C4.xlarge with 7.5g), the flight recoder option is active:
JAVA_OPTS
=-server -Xms5984m -Xmx5984m -Dfile.encoding=UTF-8 -Dmail.mime.decodeparameters=true -Djava.util.Arrays.useLegacyMergeSort=true -Xloggc:"/opt/nuxeo/logs/gc.log" -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Dcom.sun.management.jmxremote.autodiscovery=true -Dcom.sun.management.jdp.name=Nuxeo -XX:+UnlockCommercialFeatures -XX:+FlightRecorder -Djava.net.preferIPv4Stack=true -Djava.awt.headless=true
Create a cluster of 3 nodes using the proper Elasticsearch version.
The heap size is set to 50% of the available memory (3.75g)
Nuxeo uses the perf
template that set
elasticsearch.index.translog.durability=async
for all indexes (since
2018-08-13).
Default S3 bucket.
HTTP Listener
Stickiness: LBCookieStickinessPolicy, expirationPeriod='86400'
Health check
HTTP:8080/nuxeo/runningstatus
5 seconds
20 seconds
2
Elasticache cluster with a single node using Redis 2.8.
Since 2018-08-22 we can run reference benchmark with Kafka.
Nuxeo is then configured to leverage Kafka instead of Redis:
Also for MongoDB we switch the KeyValueStore from Redis to MongoDB, this way Redis can be completely disable.
The Kafka cluster is a single node (definitely not a production setup):
Database are setup using the recommended setup and tuning from our documentation.
Default setup for a 16g server:
The configuration must be updated to follow new dependencies visit the Change log page for more information.