All Projects → dubbogo → dubbo-go-benchmark

dubbogo / dubbo-go-benchmark

Licence: Apache-2.0 license
benchmark for [apache/dubbo-go](github.com/apache/dubbo-go)

Programming Languages

go
31211 projects - #10 most used programming language
Dockerfile
14818 projects

Projects that are alternatives of or similar to dubbo-go-benchmark

dubbo-go-pixiu
Based on the proxy gateway service of dubbo-go, it solves the problem that the external protocol calls the internal Dubbo cluster. At present, it supports HTTP and gRPC[developing].
Stars: ✭ 385 (+1380.77%)
Mutual labels:  dubbogo, dubbo-go
masc
Microsoft's contributions for Spark with Apache Accumulo
Stars: ✭ 20 (-23.08%)
Mutual labels:  apache
Couchdb Docker
Semi-official Apache CouchDB Docker images
Stars: ✭ 194 (+646.15%)
Mutual labels:  apache
Docker Php
🐳 Docker For PHP developers - Docker images with PHP, Nginx, OpenLiteSpeed, Apache, Lighttpd, and Alpine
Stars: ✭ 236 (+807.69%)
Mutual labels:  apache
Zulip
Zulip server and web app—powerful open source team chat
Stars: ✭ 14,815 (+56880.77%)
Mutual labels:  apache
basepath
Base path detector for Slim 4
Stars: ✭ 36 (+38.46%)
Mutual labels:  apache
Nutch
Apache Nutch is an extensible and scalable web crawler
Stars: ✭ 2,277 (+8657.69%)
Mutual labels:  apache
phoenix-hibernate-dialect
An Apache Phoenix Hibernate dialect
Stars: ✭ 20 (-23.08%)
Mutual labels:  apache
autoindex strapdown
Easily add Markdown README/HEADERs to Apache's directory indexes, rendered by Strapdown.js
Stars: ✭ 34 (+30.77%)
Mutual labels:  apache
Azure Event Hubs
☁️ Cloud-scale telemetry ingestion from any stream of data with Azure Event Hubs
Stars: ✭ 233 (+796.15%)
Mutual labels:  apache
Fancy Index
A responsive Apache index page.
Stars: ✭ 230 (+784.62%)
Mutual labels:  apache
Fake Apache Log Generator
Generate a boatload of Fake Apache Log files very quickly
Stars: ✭ 207 (+696.15%)
Mutual labels:  apache
openwhisk-package-kafka
Apache OpenWhisk package for communicating with Kafka or Message Hub
Stars: ✭ 35 (+34.62%)
Mutual labels:  apache
Lamp
Install LAMP(Linux + Apache + MySQL/MariaDB + PHP ) for CentOS/Debian/Ubuntu
Stars: ✭ 2,456 (+9346.15%)
Mutual labels:  apache
HttpClientMock
Library for mocking Apache HttpClient.
Stars: ✭ 41 (+57.69%)
Mutual labels:  apache
Primary Vagrant
An Apache based Vagrant configuration for helping you get the most out of WordPress Development
Stars: ✭ 192 (+638.46%)
Mutual labels:  apache
Openwhisk Deploy Kube
The Apache OpenWhisk Kubernetes Deployment repository supports deploying the Apache OpenWhisk system on Kubernetes and OpenShift clusters.
Stars: ✭ 231 (+788.46%)
Mutual labels:  apache
Leetcode
Solutions to LeetCode problems; updated daily. Subscribe to my YouTube channel for more.
Stars: ✭ 3,090 (+11784.62%)
Mutual labels:  apache
echarts-handbook
Apache ECharts Handbook
Stars: ✭ 59 (+126.92%)
Mutual labels:  apache
regolith
A WordPress installation template that's a little bit looser than Bedrock
Stars: ✭ 24 (-7.69%)
Mutual labels:  apache

Dubbo-go 3.0 benchmark

1. Repo Structure

├── 3.0
│   ├── dubbo // dubbo stress test with hessian serialization
│   │   ├── client
│   │   │   ├── client.go
│   │   │   ├── dubbogo.yml
│   │   │   └── user.go
│   │   ├── server
│   │   │   ├── dubbogo.yml
│   │   │   ├── server.go
│   │   │   ├── user.go
│   │   │   └── user_provider.go
│   │   └── stress
│   │       ├── client.go
│   │       ├── dubbogo.yml
│   │       └── user.go
│   └── triple // triple stress test with pb serialization
│       ├── api
│       │   ├── samples_api.pb.go
│       │   ├── samples_api.proto
│       │   └── samples_api_triple.pb.go
│       ├── client
│       │   ├── dubbogo.yml
│       │   └── main.go
│       ├── server
│       │   ├── dubbogo.yml
│       │   └── main.go
│       └── stress
│           ├── dubbogo.yml
│           └── main.go
├── bugreport // bug report
│   └── para200-tps5000-client-error.txt 

2. Stress Test Typology

stress -> client -> server

3. How to run

First, you should have 3 cloud server, under same local network. Build stress client and server binary file, with GOOS=linux GOARCH=amd64 if necessary, and push these three file to each server, with dubbogo.yml.

  1. exec server
  2. exec client
  3. exec stress with Environment:
    • export tps=5000 # your expect ups
    • export payload=0 # your expect payload length for request, you can set to 10k or 50k or any number you like.
    • export parallel=20 # your expect parallel gr number.
    • the stress binary file would print real tps and rt(ns)
  4. Collect CPU usage, rt and tps data.

Pay attention that sometime the parallel is too small to meet your expect tps, for example, with 4c8g machine, you set parallel to 1 and set tps to 5000, the result tps is not as you expected, and you should increase parallel to 10 or other larger number.

4. Environments in AdaptiveService Benchmark

  1. Random Timeout
    • export RAND_SEED=3 # random seed
    • export TIMEOUT_RATIO=0.05 # your expected timeout ratio
    • export TIMEOUT_DURATION=5s # your expected timeout duration
  2. Random Offline
    • export RAND_SEED=3 # random seed
    • export OFFLINE_RATIO=0.05 # your expected server offline ratio
    • export MIN_ONLINE_DURATION=5s # your expected minimum online duration
    • export MAX_ONLINE_DURATION=10s # your expected maximum online duration (optional)
    • export MIN_OFFLINE_DURATION=3s # your expected minimum offline duration
    • export MAX_OFFLINE_DURATION=8s # your expected maximum offline duration (optional)

5. Collect Metrics

First, you should copy a file prometheus.yml from /3.0/deploy/docker/prometheus/prometheus.yml.example and change your-computer-ip to your computer's real ip, e.g. 192.168.1.40

Then, switch to the directory /3.0/deploy/docker/ and run the following command:

docker compose -f docker-compose.yml up -d

Finally, run server and client with dubbogo-local.yml. You can login to the prometheus with localhost:9090 and check the metrics.

The metrics beginning with dubbo_go_benchmark_consumer is collected on client side, while beginning with dubbo_go_benchmark_provider is on server side. You can also filter metrics of specific instances or protocols or methods using label instance, protocol and method.

Some Important Expression or Metrics

  • Remaining capacity (predicted): dubbo_go_benchmark_consumer_adaptive_service_remaining
  • Number of inflight: dubbo_go_benchmark_provider_adaptive_service_inflight
  • TPS: rate(dubbo_go_benchmark_consumer_request_count[1s])
  • QPS: rate(dubbo_go_benchmark_provider_request_count[1s])
  • RT at 99.9%: dubbo_go_benchmark_consumer_request_duration_ns{quantile="0.999"} (Nano seconds)
  • Duration of processing Fibonacci using Triple at 99.9%: dubbo_go_benchmark_provider_request_duration_ns{quantile="0.999", method="Fibonacci", protocol="tri"} (Nano seconds)
  • Number of successful requests every 3 second: rate(dubbo_go_benchmark_consumer_request_success[3s]) or rate(dubbo_go_benchmark_provider_request_success[3s])
    • Number of timeout requests every 5 second: rate(dubbo_go_benchmark_consumer_request_timeout[5s])
  • Number of requests dropped due to reach limitation: dubbo_go_benchmark_consumer_request_reach_limitation or dubbo_go_benchmark_provider_request_reach_limitation
  • Number of requests dropped due to server offline: dubbo_go_benchmark_consumer_request_offline_dropped or dubbo_go_benchmark_provider_request_offline_dropped
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].