All Projects → kataras → server-benchmarks

kataras / server-benchmarks

Licence: MIT license
🚀 Cross-platform transparent benchmarks for HTTP/2 Web Servers at 2020-2023

Programming Languages

go
31211 projects - #10 most used programming language
C#
18002 projects
javascript
184084 projects - #8 most used programming language
Dockerfile
14818 projects
shell
77523 projects
Batchfile
5799 projects

Projects that are alternatives of or similar to server-benchmarks

mir
Mir is a toolkit for register method handler to http engine router(eg: gin,echo,iris,mux,httprouter) use struct tag info.
Stars: ✭ 42 (-46.15%)
Mutual labels:  echo, gin, iris
web-marisa
🍄 白丝魔理沙网页版
Stars: ✭ 65 (-16.67%)
Mutual labels:  gin, iris
iris-admin
Web admin for iris-go framwork
Stars: ✭ 602 (+671.79%)
Mutual labels:  gin, iris
Goview
Goview is a lightweight, minimalist and idiomatic template library based on golang html/template for building Go web application.
Stars: ✭ 213 (+173.08%)
Mutual labels:  echo, gin
Goweibo
Go Weibo App
Stars: ✭ 243 (+211.54%)
Mutual labels:  echo, gin
Logrus
Hooks for logrus logging
Stars: ✭ 110 (+41.03%)
Mutual labels:  echo, gin
Go Http Metrics
Go modular http middleware to measure HTTP requests independent of metrics backend (with Prometheus and OpenCensus as backend implementations) and http framework/library
Stars: ✭ 128 (+64.1%)
Mutual labels:  echo, gin
Gopherlabs
Go - Beginners | Intermediate | Advanced
Stars: ✭ 205 (+162.82%)
Mutual labels:  echo, gin
Nekobin
Elegant and open-source pastebin service
Stars: ✭ 61 (-21.79%)
Mutual labels:  echo
Audio Steganography Algorithms
A Library of Audio Steganography & Watermarking Algorithms
Stars: ✭ 146 (+87.18%)
Mutual labels:  echo
Echo Pprof
echo-pprof is a wrapper for golang web framework echo to use net/http/pprof easily.
Stars: ✭ 40 (-48.72%)
Mutual labels:  echo
Colorechoforshell
Make 🐚(shell) 's 💬 (`echo`) to be 🌈 easily ✨ Support ✅ sh ➕ bash ➕ zsh ➕ ksh ➕ 🐟
Stars: ✭ 75 (-3.85%)
Mutual labels:  echo
Flask Ask
Alexa Skills Kit for Python
Stars: ✭ 1,877 (+2306.41%)
Mutual labels:  echo
Regrader
VST delay plugin where the repeats degrade in resolution
Stars: ✭ 44 (-43.59%)
Mutual labels:  echo
Istio Micro
istio 微服务示例代码 grpc+protobuf+echo+websocket+mysql+redis+kafka+docker-compose
Stars: ✭ 194 (+148.72%)
Mutual labels:  echo
Echo Logrus
echo-logrus is a middleware that provides logrus logger support for echo.
Stars: ✭ 27 (-65.38%)
Mutual labels:  echo
Fascia
Stars: ✭ 12 (-84.62%)
Mutual labels:  echo
Bst
🔧 Bespoken Tools - Tools for making voice apps faster and better
Stars: ✭ 193 (+147.44%)
Mutual labels:  echo
Phalgo
phalgo 已经更换为 https://github.com/sunmi-OS/gocore phalgo不在维护
Stars: ✭ 110 (+41.03%)
Mutual labels:  echo
Chatskills
Run and debug Alexa skills on the command-line. Create bots. Run them in Slack. Run them anywhere!
Stars: ✭ 171 (+119.23%)
Mutual labels:  echo

Server Benchmarks

A benchmark suite which, transparently, stress-tests web servers and generates a report in markdown. It measures the requests per second, data transferred and time between requests and responses.

Benchmarks: Jun 20, 2020 at 8:17pm (UTC)

Why YABS (Yet Another Benchmark Suite)

It's true, there already enough of benchmark suites to play around. However, most of them don't even contain real-life test applications to benchmark, therefore the results are not always accurate e.g. a route handler executes SQL queries or reads and sends JSON. This benchmark suite is a fresh start, it can contain any type of tests as the tests are running as self-executables and the measuring is done by a popular and trusted 3rd-party software which acts as a real HTTP Client (one more reason of transparency). Contributions and improvements are always welcomed here.

Use case

Measure the performance of application(s) between different versions or implementations (or web frameworks).

This suite can be further customized, through its tests.yml file, in order to test personal or internal web applications before their public releases.

Installation

The only requirement for the benchmark tool is the Go Programming Language.

$ go get github.com/kataras/server-benchmarks@master
$ go install github.com/codesenberg/bombardier@master

Depending on your test cases you may want to install Node.js and .NET Core too.

How to run

  1. Navigate to your tests directory, the one which includes a tests.yml file
  2. Open a terminal and execute: server-benchmarks
  3. Wait for the executable server-benchmarks (or server-benchmarks.exe for windows) to finish
  4. That's all, now open the the results from the generated RESULTS.md file.

Advanced usage

  • Read the tests from the ./tests.dev.yml file
  • Wait 3 seconds between tests
  • Output the results to the ./dev directory
  • Write the results to a remote google spreadsheet table, which you can convert to a graph later on (as shown above).
$ server-benchmarks --wait-run=3s -i ./tests.dev.yml -o ./dev -g-spreadsheet $GoogleSpreadsheetID -g-secret client_secret.json

Run using Docker

The only requirement is Docker.

$ docker run -v ${PWD}:/data kataras/server-benchmarks

Benchmarks

The following generated README contains benchmark results from builtin tests between popular HTTP/2 web frameworks as of 2022.

Note: it's possible that the contents of this file will be updated regularly to accept even more tests cases and frameworks.

System

Processor AMD Ryzen 9 4900HS with Radeon Graphics
RAM 15.42 GB
OS Microsoft Windows 11 Pro
Bombardier v1.2.4
Go go1.19beta1
.Net Core 6.0.300

| Node.js | v18.2.0 |

Last updated: Jun 20, 2022 at 8:17pm (UTC)

Terminology

Name is the name of the framework(or router) used under a particular test.

Reqs/sec is the avg number of total requests could be processed per second (the higher the better).

Latency is the amount of time it takes from when a request is made by the client to the time it takes for the response to get back to that client (the smaller the better).

Throughput is the rate of production or the rate at which data are transferred (the higher the better, it depends from response length (body + headers).

Time To Complete is the total time (in seconds) the test completed (the smaller the better).

Results

Test:Static

📖 Fires 1000000 requests, receives a static message as response.

Name Language Reqs/sec Latency Throughput Time To Complete
Iris Go 284059 438.34us 49.58MB 3.52s
Chi Go 275525 451.01us 48.18MB 3.62s
Echo Go 267815 466.16us 46.64MB 3.74s
Kestrel C# 263479 472.72us 44.68MB 3.80s
Gin Go 263399 472.70us 45.98MB 3.80s
Martini Go 233051 534.43us 40.68MB 4.29s
Koa Javascript 131274 0.93ms 29.24MB 7.50s
Buffalo Go 78963 1.58ms 13.78MB 12.66s
Express Javascript 41078 3.02ms 11.54MB 24.22s

Test:Parameterized

📖 Fires 550000 requests with a dynamic parameter of string, receives a hello text based on the parameter as response.

Name Language Reqs/sec Latency Throughput Time To Complete
Iris Go 277099 449.55us 53.07MB 1.99s
Chi Go 272434 456.62us 52.21MB 2.02s
Echo Go 261467 476.01us 50.14MB 2.10s
Gin Go 259308 480.32us 49.70MB 2.12s
Kestrel C# 233843 534.73us 43.34MB 2.36s
Martini Go 225790 551.37us 43.29MB 2.44s
Koa Javascript 114667 1.08ms 27.21MB 4.78s
Buffalo Go 76747 1.63ms 14.71MB 7.17s
Express Javascript 37110 3.32ms 11.11MB 14.69s

Test:REST

📖 Fires 200000 requests with a dynamic parameter of int, sends JSON as request body and receives JSON as response.

Name Language Reqs/sec Latency Throughput Time To Complete
Iris Go 238954 521.69us 64.15MB 0.84s
Gin Go 229665 541.96us 62.86MB 0.87s
Chi Go 228072 545.78us 62.61MB 0.88s
Echo Go 224491 553.84us 61.70MB 0.89s
Martini Go 198166 627.46us 54.47MB 1.01s
Kestrel C# 163486 766.90us 47.42MB 1.23s
Buffalo Go 102478 1.22ms 28.14MB 1.95s
Koa Javascript 48425 2.56ms 15.39MB 4.14s
Express Javascript 23622 5.25ms 9.04MB 8.41s

License

This project is licensed under the MIT License.

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