Devotd Github
NewDeveloper tools

arjaythedev/twelve-dollar-server-challenge — $12 Server API Benchmark

A challenge to implement the same SQLite-backed API in several languages on a $12-per-month server and compare how many users each can handle.

Repositoryarjaythedev/twelve-dollar-server-challenge ↗

A challenge to implement the same SQLite-backed API in several languages on a $12-per-month server and compare how many users each can handle.

GitHub description: Implement one small API on SQLite in any language; we benchmark it on a $12 server (1 vCPU, 2 GB)

stars
★ 508
Forks
255
Language
C
License
MIT
Read original source ↗View on GitHub ↗

arjaythedev/twelve-dollar-server-challenge is a challenge to implement the same small API in multiple languages and frameworks on a $12-per-month server with 1 vCPU and 2 GB RAM, and to compete over how many users can be served. Participants build the API using SQLite, and submissions must pass the defined tests. The repository's primary language is C, and it is released under the MIT license.

According to the README, the project benchmarks 8 languages using each language's default settings and unoptimized code. Submissions are evaluated with k6 load tests on the same server, and using Nginx is optional. The score is the maximum number of users that holds through a 5-minute duration, with the conditions of p95 response time under 500 milliseconds, p99 under 1 second, and an error rate below 1 percent. The API specification and data structure are fixed, caching between requests is forbidden, and writes must be committed to the database before the response is returned, so that the comparison conditions line up. The repository contains 42 checks and a k6 load test script, and the scores and capacity measurements for each submission are recorded as JSON.

That said, the comparison is limited to the defined web API. Because the repository centers on rules and test scripts, it is not a project that compares the algorithmic implementations themselves in depth. Results from default settings and unoptimized code are closer to reference material for a low-spec server, and they do not explain the performance of each implementation once it has been sufficiently tuned.