{"id":16726324,"url":"https://github.com/brunobonacci/clojure-http-servers-benchmark","last_synced_at":"2025-08-02T07:36:16.590Z","repository":{"id":147148378,"uuid":"132958390","full_name":"BrunoBonacci/clojure-http-servers-benchmark","owner":"BrunoBonacci","description":"Chasing the long tail of Clojure HTTP servers.","archived":false,"fork":false,"pushed_at":"2021-10-27T08:57:31.000Z","size":2541,"stargazers_count":2,"open_issues_count":1,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-15T15:29:33.740Z","etag":null,"topics":["benchmark","clojure","garbage-collection","http-server","latency","tail-latency"],"latest_commit_sha":null,"homepage":"","language":"Clojure","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/BrunoBonacci.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-05-10T21:56:56.000Z","updated_at":"2020-06-05T19:43:06.000Z","dependencies_parsed_at":"2023-06-09T21:15:06.409Z","dependency_job_id":null,"html_url":"https://github.com/BrunoBonacci/clojure-http-servers-benchmark","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/BrunoBonacci/clojure-http-servers-benchmark","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BrunoBonacci%2Fclojure-http-servers-benchmark","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BrunoBonacci%2Fclojure-http-servers-benchmark/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BrunoBonacci%2Fclojure-http-servers-benchmark/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BrunoBonacci%2Fclojure-http-servers-benchmark/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/BrunoBonacci","download_url":"https://codeload.github.com/BrunoBonacci/clojure-http-servers-benchmark/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BrunoBonacci%2Fclojure-http-servers-benchmark/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":268348675,"owners_count":24236301,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-02T02:00:12.353Z","response_time":74,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["benchmark","clojure","garbage-collection","http-server","latency","tail-latency"],"created_at":"2024-10-12T22:52:52.686Z","updated_at":"2025-08-02T07:36:16.528Z","avatar_url":"https://github.com/BrunoBonacci.png","language":"Clojure","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Clojure HTTP servers benchmark\n\nChasing the long tail of Clojure HTTP servers.\n\n## Preface\n\n*This work is not intended as a critique to the excellent work that\nthe library authors have done. Each of the HTTP server libraries\ncompared here have excellent performance characteristics, they are\nvery stable and widely used to power loads of HTTP based services all\naround the world.*\n\n*This project aims to examine the _long tail_ for a very specific\ncase.  The case we are going to look here fits the model of a\n**service-to-service** communication for a backend service. Where we\nassume long running persistent connections, and continuous throughput\nof requests.  This particular case is very different from front facing\nservices with bursty and erratic request throughput.*\n\n*Therefore before jumping into conclusions, please think about the\nspecifics of your case and if unsure collect metering data and use\nthis or other test harnesses on your services to verify the behaviour\nof these libraries in your particular case.*\n\nThe aim of the _long tail_ analysis is to understand the impact of the\nlibrary in a vanilla case. Settings and configuration might not apply\nin your project when extensive business logic is applied which\nsubstantially change the scenario.\n\nNOTE: **I'm aware of the similar work from Peter Taoussanis\n[clojure-web-server-benchmarks](https://github.com/ptaoussanis/clojure-web-server-benchmarks)**\nWhile Peter's work is targeted to find the peak performances in a\nnumber of different setup, my work only looks at the tail latency for\na specific case.\n\n## Results\n\n* See [latest report](./results/2018-05-05_17-05-42/README.md)\n\n[![latency](./results/2018-05-05_17-05-42/simple-get/simple-get-latency.png)](./results/2018-05-05_17-05-42/README.md)\n\n* All [reports](./results/)\n\n## How to run\n\nTo run the tests yourself you need a few packages to be installed and\navailable in the PATH:\n\n  * Install the [Java JDK](http://www.oracle.com/technetwork/java/javase/downloads/index.html)\n  * Install [leingen](https://leiningen.org)\n  * Install [wrk2](https://github.com/giltene/wrk2)\n  * Install [neofetch](https://github.com/dylanaraps/neofetch/wiki/Installation)\n  * Install [planck-repl](http://planck-repl.org/)\n\nthen clone the repo:\n\n    git clone ...\n    cd clojure..\n    ./bin/run-all.plk\n\nby default it runs a the test for 5 minutes with a warm up time of 10\nseconds.  To change these values create a file called `config.edn`\nwith the following content:\n\n    {:duration \"3h\" :warm-up-time \"120s\"}\n\nthen run it with:\n\n    ./bin/run-all.plk -c config.edn\n\nThe script will build and run all the tests for all the servers.\nOnce completed the resulting data will be available in the folder `./results`\nunder a folder with the timestamp of when the test was started.\n\nYou can generate the graphs with:\n\n    pip3 install --user --upgrade hdr-plot\n    ./bin/plot-all.sh ./results/yyyy-mm-dd_hh-mm-ss/\n\n## License\n\nCopyright © 2018 Bruno Bonacci - Distributed under the [Apache License v 2.0](http://www.apache.org/licenses/LICENSE-2.0)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrunobonacci%2Fclojure-http-servers-benchmark","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbrunobonacci%2Fclojure-http-servers-benchmark","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrunobonacci%2Fclojure-http-servers-benchmark/lists"}