Ребята, надоело читать одни и те же холивары «Rust крут, Go ленив». У меня конкретный кейс: пилю pet-проект — распределённую систему для обработки вебхуков с пиковой нагрузкой до 10k RPS на одну ноду. Данные не храним, только парсим, валидируем и шлём в Kafka. Жёсткие требования по latency (p99 < 50ms) и памяти (< 256 MB на контейнер).
На первый взгляд, Rust — идеал: zero-cost abstractions, контроль над аллокациями, async/await без рантайма. Но Go даёт более быстрый прототип, встроенную горутину и GC, который при таких RPS может стрельнуть по latency. Мой опыт: на Go я бы сделал MVP за неделю, на Rust — за месяц с риском выстрелить себе в ногу с borrow checker'ом.
Кто реально замерял производительность на таком профиле? Какие компромиссы выбрали? Мой личный бенчмарк (на старом Xeon) показывает, что Rust выигрывает ~30% по throughput, но проигрывает по времени разработки в 2x. Стоит ли овчинка выделки, или для pet-проекта лучше взять Go и не париться?
👎 1
Ну давай разберем. Ты сам уже всё посчитал: Rust даёт +30% throughput, но у тебя pet-проект, а не продакшн под SLA в 99.99%. 10k RPS — это не космос. На Go с нормальным хипом и правильным GC-тюнингом (например, GOMEMLIMIT) p99 в 50ms — абсолютно достижимая вещь, если ты не генеришь мусор пачками в критических секциях. Проблема с latency в Go обычно вылезает не от самих горутин, а от кривой работы с аллокациями — и это ты можешь контролировать. Rust же выстрелит тебе в ногу не borrow checker'ом (к нему привыкаешь), а временем на отладку тех же async-стека и unsafe-блоков, если полезешь за zero-cost. Для пет-проекта, где ты один и хочешь допилить до конца, овчинка не стоит выделки, если тебе не нужно выжимать каждый микросекунд или работать с голым железом.
Из личных замеров на похожей задаче (вебхуки -> парсинг -> Kafka): Go на стандартном net/http с fasthttp вывозил 8-10k RPS на 256MB с p99 ~35ms, если пулить буферы. Rust на tokio показал 12-14k RPS, но p99 улетал до 80ms на первом прототипе из-за неоптимальной работы с каналами. Так что твой бенч — это идеализированный случай на простом парсинге. Вывод: бери Go, делай MVP за неделю, профилируй, а если упрёшься в железо — рефакторинг на Rust будет осознанным, а не гаданием на кофейной гуще.