R
Rust
@rust_code8.1K подп.
3.4Kпросмотров
42.7%от подписчиков
20 марта 2026 г.
📷 ФотоScore: 3.8K
👣👣 Discord объяснил, почему часть инфраструктуры переходит с Go на Rust Discord начал переносить отдельные компоненты с Go на Rust, потому что при их масштабе главная цена - это предсказуемость задержек и эффективность памяти. Речь не про "мода на Rust", а про конкретные технические потолки, в которые упираются большие real-time системы. Контекст - почему это вообще стало проблемой Discord - это нагрузка с постоянными пиками и жёсткими требованиями к latency. Когда у тебя миллионы одновременных соединений, сообщения в реальном времени, голосовые сессии и огромные объёмы событий, любая нестабильность по времени ответа превращается в пользовательские лаги и дорогую инфраструктуру. Что в Go стало упираться на масштабе Discord 1) GC и хвостовые задержки Go использует сборщик мусора. Он стал очень хорошим, но у больших сервисов с активными аллокациями и большими heap-объёмами GC всё равно может: - создавать краткие паузы или "подёргивания" - давать спайки по p99 и p999 latency - делать поведение менее предсказуемым именно в моменты пиков На небольших сервисах это часто незаметно. На real-time инфраструктуре, где важны хвостовые перцентили, это начинает быть системной проблемой. 2) Цена аллокаций и давление на память Go удобен, но он поощряет стиль, где аллокации происходят "само собой". На горячих путях это приводит к: - росту heap - большему количеству работы GC - большему потреблению RAM - а значит - к большему числу машин и более высокой стоимости 3) Потребность в более низком уровне контроля В некоторых компонентах Discord понадобился контроль над: - тем, когда и как выделяется память - буферами и их жизненным циклом - layout данных - оптимизациями "вплоть до байта" Go как язык намеренно ограничивает такие вещи ради простоты и скорости разработки. Когда система доросла, Discord понадобилось больше "ручек". Почему именно Rust 1) Нет GC - стабильнее latency Rust не использует сборщик мусора. Память освобождается детерминированно через владение и области видимости. Результат - меньше неожиданных спайков по времени ответа, особенно на больших heap-нагрузках. 2) Контроль над аллокациями и структурой данных Rust позволяет проектировать горячие пути так, чтобы: - уменьшать количество аллокаций - переиспользовать буферы - держать данные в более cache-friendly структурах - снижать overhead на каждом запросе/событии 3) Производительность уровня системного программирования с безопасностью Discord явно не хочет возвращаться в мир "C/C++ и вечных memory bugs". Rust даёт: - системную производительность - защиту от use-after-free, data races и многих классов ошибок памяти на уровне компилятора Главный нюанс - Discord не "выкинул Go" Важная мысль из текста Discord: это не религия, а прагматика. Обычно выглядит так: - Go остаётся отличным для продуктовой логики, быстрых сервисов, разработки и поддержки - Rust применяют там, где есть жёсткий performance budget - горячие пути, сетевые компоненты, обработка больших объёмов событий, инфраструктурные библиотеки То есть это "гибридная стратегия", а не миграция всего подряд. Что это говорит о рынке 1) Go закрепился как язык для скорости разработки Если цель - быстро писать и менять микросервисы, Go остаётся одним из лучших выборов. 2) Rust всё чаще становится языком инфраструктуры Когда компания вырастает и начинает платить миллионы за лишние миллисекунды и гигабайты RAM, Rust становится экономически выгодным. 3) Критерий выбора меняется с "удобно" на "предсказуемо" На больших масштабах выигрывает не тот, кто чуть быстрее в среднем, а тот, у кого меньше хвостовых задержек и меньше сюрпризов под нагрузкой. История Discord - это не про - "Go плохой". Это кейс о том, что на hyperscale появляются другие ограничения. Go - отличный default для backend. Rust - сильный инструмент для performance-critical инфраструктуры, где важны p99/p999, память и контроль над горячими путями. https://discord.com/blog/why-discord-is-switching-from-go-to-rust/
3.4K
просмотров
3953
символов
Нет
эмодзи
Да
медиа

Другие посты @rust_code

Все посты канала →