چرا Discord بخشهایی از زیرساخت خود را از Go به Rust منتقل کرده است؟🦀
در دنیایی که نیاز به امنیت، عملکرد و قابلیت اطمینان هر روز بیشتر میشود، Rust دیگر یک انتخاب خاص نیست، بلکه در حال تبدیل شدن به استانداردی جدید در معماری نرمافزار است.

در سالهای اخیر، Rust به یکی از محبوبترین زبانهای برنامهنویسی در میان مهندسان ارشد نرمافزار و معماران سیستم تبدیل شده است. در حالی که Go به دلیل سادگی و سرعت توسعه همچنان طرفداران خود را دارد، Rust با ایمنی حافظه بینظیر، عملکرد قابل پیشبینی و اکوسیستم پویا، بهویژه در سیستمهای حساس و پرترافیک، به گزینهای برتر تبدیل شده است. نمونه بارز این تغییر رویکرد، تصمیم دیسکورد برای بازنویسی سرویس کلیدی “Read States” از Go به Rust است که در مقالهای توسط جسی هووارث در سال ۲۰۲۰ شرح داده شده است. در این پست، دلایل این مهاجرت، مزایای Rust و روند روبهرشد پذیرش آن در صنعت بررسی میشود.
لینک مقاله اصلی :
https://discord.com/blog/why-discord-is-switching-from-go-to-rust
چرا Rust؟ روند روبهرشد در میان مهندسان ارشد
Rust به دلیل ویژگیهای منحصربهفردش بهسرعت در حال جایگزینی Go در پروژههای پیچیده است. مهندسان ارشد به دلایل زیر به این زبان روی میآورند:
✅ ایمنی حافظه و همزمانی در زمان کامپایل: Rust با سیستم مالکیت (Ownership) و Borrow Checker، خطاهایی مانند استفاده پس از آزادسازی (Use-After-Free) یا شرایط رقابتی (Data Races) را در زمان کامپایل حذف میکند. این ویژگی برای پروژههای حساس مانند runtime امن IoT تیم Azure مایکروسافت حیاتی بود، جایی که وقفههای ناشی از GC یا باگهای همزمانی قابلتحمل نبودند.
✅ عملکرد پایدار و بدون افت: بدون نیاز به جمعآوری زباله (GC)، Rust باینریهای Native تولید میکند که عملکردی قابل پیشبینی دارند. این ویژگی در سرویسهای پرترافیک مانند Read States دیسکورد، تاخیرهای لحظهای را حذف کرد.
✅ نگهداری بلندمدت: ابزارهایی مانند Cargo، پیامهای خطای دقیق و استانداردهای کدنویسی قوی، کدهای Rust را خوانا و پایدار نگه میدارند، که در پروژههای طولانیمدت ارزشمند است.
✅ اکوسیستم پویا: crates.io با رشد بیش از ۲٫۱ برابر در سال و بیش از ۴۳۰ میلیون دانلود در یک روز در سال ۲۰۲۴، نشاندهنده بلوغ کتابخانههای Rust در حوزههایی مانند WebAssembly، بلاکچین و سیستمهای ابری است.
✅ پذیرش گسترده در صنعت: پروژههایی مانند Firecracker (آمازون)، Solana (بلاکچین) و سیستمهای IoT مایکروسافت، Rust را به دلیل ایمنی و کنترل دقیق انتخاب کردهاند.
سرویس Read States دیسکورد: چالشهای Go
سرویس Read States در دیسکورد وظیفه ردیابی وضعیت خوانده شدن پیامها و کانالها را بر عهده دارد. این سرویس در هر اتصال، ارسال یا خواندن پیام فعال میشود و باید تاخیری بسیار پایین داشته باشد تا تجربه کاربری روان بماند. نسخه Go این سرویس در اکثر مواقع سریع بود، اما هر چند دقیقه با تاخیرهای ناگهانی (Latency Spikes) مواجه میشد که به مدل حافظه و GC مربوط بود.
مشکلات Go:
❓ ساختار داده و مقیاس: Read States شامل میلیاردها شیء است که برای هر کاربر و کانال یک نمونه دارند. این اشیاء در یک کش LRU با میلیونها نمونه ذخیره میشوند و صدها هزار بهروزرسانی در ثانیه دارند.
❓ جمعآوری زباله: در Go، حافظه پس از اخراج از کش بلافاصله آزاد نمیشود. GC هر ۲ دقیقه یکبار اجرا میشود و کل کش را اسکن میکند، که باعث تاخیرهای قابلتوجه میشد.
❓تلاشهای بهینهسازی: تنظیم درصد GC بیاثر بود، زیرا تخصیص حافظه به اندازه کافی سریع نبود. کاهش اندازه کش LRU تاخیرهای GC را کم کرد، اما به دلیل افزایش بارگذاری از پایگاه داده Cassandra، تاخیرهای ۹۹th Percentile افزایش یافت.
با وجود بهینهسازیهای متعدد، عملکرد Go همچنان ناکافی بود. دیسکورد که پیشتر از Rust در بخشهایی مانند کدگذاری ویدئو (Go Live) و NIFهای Elixir استفاده کرده بود، تصمیم گرفت این سرویس را به Rust منتقل کند.
✴️ ورود Rust به صحنه
تیم Discord پیشتر در بخشهایی مثل رمزنگاری و پردازش ویدئو از Rust استفاده کرده بود، و تصمیم گرفت یک نسخهی کامل از Read States را با Rust بازنویسی کند.
📊 نتایج شگفتانگیز بودند
✅ بدون GC → مدیریت حافظه در زمان کامپایل (مدل Ownership)
✅ تأخیر یکنواختتر → حذف spikes ناشی از GC
✅ ایمنی حافظه در زمان کامپایل → بدون نیاز به چکهای runtime
✅ پشتیبانی قوی از async → با استفاده از tokio و async/await
📈 نتایج نهایی:
✅ بهبود چشمگیر درصدهای ۹۹٪ و ۹۹.۹٪ در زمان پاسخدهی
✅ تاخیر: تاخیرهای دورهای حذف شدند، میانگین زمان پاسخ به میکروثانیه و حداکثر زمان برای @mentions به میلیثانیه رسید.
✅ منابع: مصرف CPU و حافظه بهطور چشمگیری کاهش یافت.
✅ افزایش ظرفیت کش: برخلاف Go، افزایش ظرفیت کش LRU به ۸ میلیون Read State عملکرد را بهبود داد، زیرا Rust نیازی به GC نداشت.
🧠 جمعبندی برای مهندسین نرمافزار/داده
زبان Rust بهدلایل زیر به انتخاب مهمی برای سیستمهای mission-critical تبدیل شده است:
🔹 مدیریت حافظه بدون GC
🔹 پرفورمنس بالا و قابل پیشبینی
🔹 ایمنی حافظه و همزمانی در زمان کامپایل
🔹 اکوسیستم async در حال رشد (tokio، actix و…)
🏢 شرکتهایی مثل AWS، Microsoft، Discord با مهاجرت به Rust، این مسیر را هم فنی و هم راهبردی میدانند.
💡 اما باید واقعبین بود:
⚠️ اکوسیستم Rust هنوز به بلوغ کامل نرسیده
⚠️ منحنی یادگیری بالا دارد
⚠️ توسعه آن نسبت به Go و Python سخت تر است.
اما در حوزههایی مثل:
🚀 طراحی زیرساخت داده
🔁 پایپلاینهای پردازش مقیاسپذیر
💡 سامانههای real-time و سنگین
زبان Rust یک انتخاب اجتناب ناپذیر شده است.
در صنعت نیز، Rust در پروژههایی مانند Firecracker، Solana و سیستمهای IoT مایکروسافت به دلیل ایمنی و عملکرد بالا پذیرفته شده است. به گفته یکی از متخصصان:
مهاجرت سرویس Read States از Go به Rust نمونهای موفق از پذیرش فناوریهای نوظهور برای حل مشکلات عملکرد است. Rust با حذف تاخیرهای GC، بهبود عملکرد و ارائه ایمنی حافظه، تجربه کاربری بهتری برای دیسکورد فراهم کرد. در دنیایی که امنیت، عملکرد و قابلیت اطمینان اهمیت روزافزونی دارند، Rust نهتنها یک انتخاب خاص، بلکه استانداردی جدید در معماری نرمافزار است.