All Projects → softwaremill → Mqperf

softwaremill / Mqperf

Licence: apache-2.0

Programming Languages

scala
5932 projects

Projects that are alternatives of or similar to Mqperf

Huststore
High-performance Distributed Storage
Stars: ✭ 806 (+560.66%)
Mutual labels:  message-queue, benchmark
best
🏆 Delightful Benchmarking & Performance Testing
Stars: ✭ 73 (-40.16%)
Mutual labels:  benchmark, performance-testing
Gatling Dubbo
A gatling plugin for running load tests on Apache Dubbo(https://github.com/apache/incubator-dubbo) and other java ecosystem.
Stars: ✭ 131 (+7.38%)
Mutual labels:  benchmark, performance-testing
Web Tooling Benchmark
JavaScript benchmark for common web developer workloads
Stars: ✭ 290 (+137.7%)
Mutual labels:  benchmark, performance-testing
Boomer
A better load generator for locust, written in golang.
Stars: ✭ 734 (+501.64%)
Mutual labels:  benchmark, performance-testing
Rspec Benchmark
Performance testing matchers for RSpec
Stars: ✭ 460 (+277.05%)
Mutual labels:  benchmark, performance-testing
IGUANA
IGUANA is a benchmark execution framework for querying HTTP endpoints and CLI Applications such as Triple Stores. Contact: [email protected]
Stars: ✭ 22 (-81.97%)
Mutual labels:  benchmark, performance-testing
Drill
Drill is a HTTP load testing application written in Rust inspired by Ansible syntax
Stars: ✭ 767 (+528.69%)
Mutual labels:  ansible, performance-testing
Sysbench Docker Hpe
Sysbench Dockerfiles and Scripts for VM and Container benchmarking MySQL
Stars: ✭ 14 (-88.52%)
Mutual labels:  benchmark, performance-testing
Macbook Playbook
Ansible playbook to prepare and maintain macOS for development and desktop use
Stars: ✭ 117 (-4.1%)
Mutual labels:  ansible
Typescript Runtime Type Benchmarks
Benchmark Comparison of Packages with Runtime Validation and TypeScript Support
Stars: ✭ 119 (-2.46%)
Mutual labels:  benchmark
Concord
Concord - workflow orchestration and continuous deployment management
Stars: ✭ 117 (-4.1%)
Mutual labels:  ansible
Packer Windoze
Packer templates to create Windows vagrant box images
Stars: ✭ 117 (-4.1%)
Mutual labels:  ansible
Rebus
🚌 Simple and lean service bus implementation for .NET
Stars: ✭ 1,733 (+1320.49%)
Mutual labels:  message-queue
Node Frameworks Benchmark
Simple HTTP benchmark for different nodejs frameworks using wrk
Stars: ✭ 117 (-4.1%)
Mutual labels:  benchmark
Dynamometer
A tool for scale and performance testing of HDFS with a specific focus on the NameNode.
Stars: ✭ 122 (+0%)
Mutual labels:  performance-testing
Scalafx Ensemble
scalafx ensemble
Stars: ✭ 116 (-4.92%)
Mutual labels:  sbt
Sbt Jacoco
JaCoCo Code Coverage plug-in for sbt.
Stars: ✭ 115 (-5.74%)
Mutual labels:  sbt
Ansible Openwisp2 Imagegenerator
Automatically build several openwisp2 firmware images for different organizations while keeping track of their differences
Stars: ✭ 122 (+0%)
Mutual labels:  ansible
Ras Msg
Reliable asynchronous message system ensuring eventually consistency for distributed system.
Stars: ✭ 122 (+0%)
Mutual labels:  message-queue

MqPerf

A benchmark of message queues with data replication and at-least-once delivery guarantees.

Setting up the environment

Prerequisites with tested versions:

  • python 3.7.2 (via pyenv)
  • ansible 2.9.15 (pip install ansible==2.9.5)
  • boto3 1.16.32 (pip install boto3)

Message queues and test servers are automatically provisioned using Ansible on AWS. You will need to have the AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY present in the environment for things to work properly, as well as Ansible and Boto installed.

Metrics are gathered using Prometheus and visualized using Grafana.

Here are the steps needed to test Kafka (other queues are similar). Open the ansible directory in the console and:

  • provision a kafka cluster by running ansible-playbook install_and_setup_kafka.yml. Note to change the size of the instance to the desired one.
  • provision a number of sender and receiver nodes using ansible-playbook provision_mqperf_nodes.yml. Adjust the number and size of nodes depending on the test you want to run. Keep in mind that after each code change, you'll need to remove the fat-jars from the target/scala-2.12 directory and re-run provision_mqperf_nodes.yml.
  • provision the prometheus/grafana server by running ansible-playbook install_and_setup_prometheus.yml. This must be done each time after provisioning new sender/receiver nodes (previous step) so that prometheus is properly configured to scrape the new servers for metrics
  • setup grafana: open the grafana panel on the :3000 port (admin/pass), create a new prometheus data source (local-instance-ip:3000), and import the dashboard from json (prometheus/dashboard.json)
  • modify run-tests.yml with the correct test name, run the test, observe results!

Implementation-specific notes

Kafka

Before running the tests, create the kafka topics by running ansible-playbook kafka_create_topic.yml

Pulsar

The ack property is set on the Bookkeeper level via the CLI or REST or a startup parameter. Got to the docs for more details. Currently, this is not implemented, hence the mq.ack attribute is ignored.

RabbitMQ

  • when installing rabbit mq, you need to specify the erlang cookie, e.g.: ansible-playbook install_and_setup_rabbitmq.yml -e erlang_cookie=1234
  • the management console is available on port 15672 (guest/guest)
  • if you'd like to ssh to the broker servers the user is centos
  • queues starting with ha. will be mirrored

ActiveMQ

  • the management console is available on port 8161 (admin/admin)

ActiveMQ Artemis

  • note that for the client code, we are using the same one as for ActivqMQ (ActiveMq.scala)
  • there is no dedicated management console for ActiveMQ Artemis, however monitoring is possible via exposed Jolokia web app. Jolokia web application is deployed along ActiveMQ Artemis by default. To view broker's data:
    • Navigate to: http://<AWS_EC2_PUBLIC_IP>:8161/jolokia/list - plain JSON content should be visible - to verify if it works.
    • To view instance's state navigate to e.g.: http://<AWS_EC2_PUBLIC_IP>:8161/jolokia/read/org.apache.activemq.artemis:address="mq",broker="<BROKER_NAME>",component=addresses, where: org.apache.activemq.artemis:address="mq",broker="<BROKER_NAME>",component=addresses is the key (" signs are obligatory). To know other keys refer to the previous step.
    • <BROKER_NAME> typically resolves to AWS_EC2_PRIVATE_IP with . replaced with _.
  • configuration changes: bumped Xmx, bumped global-max-size

EventStore

  • configuration changes: see the mq implementation

Oracle AQ support

  • to build the oracleaq module, first install the required dependencies available in your Oracle DB installation

    • aqapi.jar (oracle/product/11.2.0/dbhome_1/rdbms/jlib/aqapi.jar)
    • ojdbc6.jar (oracle/product/11.2.0/dbhome_1/jdbc/lib/ojdbc6.jar)
  • to install a dependency in your local repository, create a build.sbt file:

organization := "com.oracle"
name := "ojdbc6"
version := "1.0.0"
scalaVersion := "2.11.6"
packageBin in Compile := file(s"${name.value}.jar")

Now you can publish the file. It should be available in ~/.ivy2/local/com.oracle/

$ sbt publishLocal

Ansible notes

Zookeeper installation contains an ugly workaround for a bug in Cloudera's RPM repositories (http://community.cloudera.com/t5/Cloudera-Manager-Installation/cloudera-manager-installer-fails-on-centos-7-3-vanilla/td-p/55086/highlight/true). See ansible/roles/zookeeper/tasks/main.yml. This should be removed in the future when the bug is fixed by Cloudera.

FAQ

  • I'm getting: skipping: no hosts matched, why? Probably you are runing ansible from project root. Instead cd to ansible/ (where ansible.cfg is located) and try to run playbook from this location.

Local test

To run locally execute the Sender and Receiver classes with following:

  • parameters:

-Dconfig.file=/tmp/test-config.json

  • environment variables:

RUN_ID=1;HOST_ID=1

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].