feat: rate limiting, shared DB instance, TCP_NODELAY fix
- Add rate limiter to TCP and HTTP servers - Share single LSMTree between TCP and HTTP servers - Replace unsafe cast[string]/cast[seq[byte]] with safe helpers - Stabilize gossip UDP socket with exponential backoff - Fix TCP_NODELAY via low-level setSockOptInt(IPPROTO_TCP) (asyncnet.setSockOpt(OptNoDelay) uses SOL_SOCKET and fails) - Apply TCP_NODELAY to server and websocket sockets
This commit is contained in:
@@ -11,6 +11,11 @@ BaraDB поддържа множество протоколи за клиент
|
||||
|
||||
Бинарният протокол използва big-endian кодиране за всички многобайтови стойности.
|
||||
|
||||
### Оптимизации на Връзката
|
||||
|
||||
- **TCP_NODELAY** — Включен както на сървърните, така и на клиентските сокети за минимизиране на латентността при малки съобщения (заявки, acks). Това деактивира алгоритъма на Nagle, гарантирайки че пакетите се изпращат незабавно без буфериране.
|
||||
- **Rate Limiting** — Token-bucket rate limiter е интегриран на ниво протокол. Заявки надвишаващи лимита получават код за грешка 429.
|
||||
|
||||
### Жизнен Цикъл на Връзката
|
||||
|
||||
```
|
||||
@@ -107,6 +112,18 @@ BaraDB поддържа множество протоколи за клиент
|
||||
|
||||
Базов URL: `http://localhost:9470/api/v1`
|
||||
|
||||
### Rate Limiting
|
||||
|
||||
Всички query endpoints (`/query`, `/batch`) са защитени от token-bucket rate limiter:
|
||||
- **Глобален лимит** — Конфигурира се чрез `BARADB_RATE_LIMIT_GLOBAL` (по подразбиране: 10,000 заявки/минута)
|
||||
- **Per-client лимит** — Конфигурира се чрез `BARADB_RATE_LIMIT_PER_CLIENT` (по подразбиране: 1,000 заявки/минута)
|
||||
- **Идентификация на клиент** — Използва `X-Forwarded-For` хедър когато е зад прокси, иначе използва глобален ключ
|
||||
|
||||
При rate limiting, сървърът връща HTTP 429 с:
|
||||
```json
|
||||
{"error": "Rate limit exceeded"}
|
||||
```
|
||||
|
||||
### Endpoints
|
||||
|
||||
#### Health
|
||||
|
||||
Reference in New Issue
Block a user