30k-45k req/s/core is the measured range in bench/RPS (cold-SQLite floor to LRU-cached hot-set ceiling). No inline caveats here on purpose -- anyone who wants the fine print goes and reads the harness.
39 lines
1.0 KiB
Markdown
39 lines
1.0 KiB
Markdown
# C3 - Cached Content Conduit
|
|
|
|
My super simple CDN built for distributing my own (text) content.
|
|
|
|
Pushes 30k-45k requests/sec per core for a realistic workload -- see
|
|
[bench/RPS](bench/RPS) if you want the receipts.
|
|
|
|
## Running in Docker
|
|
|
|
```
|
|
docker compose up -d
|
|
```
|
|
|
|
The runtime image is `distroless` (no shell, no package manager, ~24MB),
|
|
so managing packages happens via `docker exec` running the `ccc` binary
|
|
directly rather than an interactive shell:
|
|
|
|
```
|
|
docker compose exec ccc /usr/local/bin/ccc create demo
|
|
```
|
|
|
|
To add a file, it needs to exist inside the container first. Drop it in
|
|
the `./staging` dir, which is bind-mounted to `/staging`:
|
|
|
|
```
|
|
cp app.js staging/
|
|
docker compose exec ccc /usr/local/bin/ccc add demo /staging/app.js 1.0.0
|
|
```
|
|
|
|
(Alternatively `docker cp` a file straight into the container if you'd
|
|
rather not use the staging mount.)
|
|
|
|
## License
|
|
|
|
AGPL-3.0-only - see [LICENSE](LICENSE). If you run a modified version
|
|
of this as a network service, you must make the modified source
|
|
available to its users.
|
|
|