https://github.com/lichess-org/lila-http
Handle some https://lichess.org/tournament load
https://github.com/lichess-org/lila-http
lichess
Last synced: about 2 months ago
JSON representation
Handle some https://lichess.org/tournament load
- Host: GitHub
- URL: https://github.com/lichess-org/lila-http
- Owner: lichess-org
- License: agpl-3.0
- Created: 2021-12-27T10:07:44.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2025-03-01T11:13:19.000Z (4 months ago)
- Last Synced: 2025-03-31T06:11:24.882Z (3 months ago)
- Topics: lichess
- Language: Rust
- Homepage:
- Size: 381 KB
- Stars: 36
- Watchers: 6
- Forks: 11
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
## lila-http
Take some of the HTTP load away from lila. WIP!
### Arena tournaments
Clients connected to a [tournament page](https://lichess.org/tournament/winter21)
request new data about the tournament every 4s or so, with XHR HTTP requests.Each player requests information about a different leaderboard page: the one they're in.
When a tournament has 17k connected clients, like it happened during the
[Agadmator Arena](https://lichess.org/@/Lichess/blog/our-recent-server-issues/FdKHVehW),
then [lila](https://github.com/ornicar/lila) has to serve about 5k tournament update requests
per second.It's too much. Even tho most of the data is cached by lila, these requests are authenticated
and have a cost. lila usually serves at most 2k requests per second, and is not designed to
suddenly serve 5k/s more.So, the plan is to have a new service handle these tournament update requests.
It gets info about ongoing tournaments from lila, and propagates it to the clients.### lila-ws, and now lila-http
Much like [lila-ws](https://github.com/ornicar/lila-ws) moved the websocket traffic away from lila,
lila-http handles some of the heavy HTTP traffic.It may be expanded to other areas than just the arena tournaments in the future.
### Optional service
One goal of lila-http is to be optional. Lichess should work just fine without it.
It means that lila and lila-http can handle the same requests in the same way.This simplifies dev environments, which won't need to install lila-http,
and makes production more resilient to lila-http restarts or outages.This goal is a nice-to-have, not a must-have, and might be dropped in the future
if it proves to be too inconvenient.### Why Rust
It could have been done in scala, like lila-ws. But I saw this as an opportunity to learn rust,
which I know is a fantastic language.### Why not [language]
I value strong static typing very highly, and both scala and rust have it. Haskell would be an other option.
Go, not so much.