Кейс · Бэкенд · Rust
flag-store: фича-флаги с процентным rollout
Сервис фича-флагов на Rust: флаги по окружениям, правила по атрибутам пользователя, процентный rollout без случайности, журнал аудита и SSE-поток изменений. Корзина пользователя это первые 8 байт SHA-256 от флага и id по модулю 10000, поэтому ответ стабилен, а рост процента никого не выключает. Доли в базисных пунктах, float нигде нет.
- Rust
- axum
- tokio
- SQLite
- SSE
- SHA-256
- proptest
- musl
- distroless
- Docker
- GitHub Actions
01 · Как выглядит
Скриншоты


02 · О проекте
Что это и зачем
Сервис фича-флагов на Rust: флаги по окружениям, правила по атрибутам пользователя, процентный rollout без случайности, журнал аудита и SSE-поток изменений. Корзина пользователя это первые 8 байт SHA-256 от флага и id по модулю 10000, поэтому ответ стабилен, а рост процента никого не выключает. Доли в базисных пунктах, float нигде нет.
Ограничения
Чтение и evaluate открыты: закрывать их нужно на уровне прокси.
SQLite с одним соединением под мьютексом: горизонтально не масштабируется.
Сборка и тесты выполнялись в контейнере rust:1-alpine, на ПК cargo не ставился.
Проект работает на небольшом VPS с демо-данными: без отказоустойчивости и резервных копий.
Что внутри
- Детерминированный rollout: SHA-256(флаг, id) по модулю 10000; один пользователь всегда получает один ответ
- 3 property-теста: стабильность, монотонность по проценту, равномерность на 20 000 пользователей с допуском 2 п.п.
- 15 тестов; образ 11,6 МБ, 2,7 МиБ RAM в покое и 3,5 МиБ после 200 evaluate
- SSE-поток изменений с hello, change и resync; журнал аудита с автором и состоянием до и после
03 · Как запустить
Запуск одной командой
git clone <репозиторий по запросу> flag-store
cd flag-store
cargo run --release04 · Код
Репозиторий приватный
Исходники лежат в приватном репозитории. Напишите в Telegram, открою доступ.
Запросить код