کالبدشکافی یک مهاجرت بزرگ: چرا ردیت قلب تپندهاش را به Go سپرد؟
اخیراً تیم مهندسی Reddit یکی از مهمترین تغییرات زیرساختی چند سال اخیر خود را فاش کرد: بازنویسی سرویس کامنتها (Comment Service) از پایتون به Go.
شاید بپرسید چرا کامنت؟ در ردیت، کامنتها فقط یک لیست ساده متنی نیستند؛ آنها یک ساختار درختی پیچیده و عمیق (Deeply Nested) دارند که پردازش و نمایش آنها در اسکیل میلیونی، یک چالش تمام عیار مهندسی است.
چرا پایتون دیگر پاسخگو نبود؟ (The Bottleneck)
ردیت سالهاست که یک "Python Shop" محسوب میشود. پایتون برای توسعه سریع عالی است، اما وقتی صحبت از High Throughput و محاسبات سنگین در لحظه میشود، کم میآورد:
۱. هزینه بالای ساخت آبجکتها: در پایتون، هر نود (Node) در درخت کامنتها یک آبجکت سنگین است. وقتی قرار است هزاران کامنت را برای یک ترد (Thread) لود کنید، سربار حافظه و CPU وحشتناک میشود.
۲. قفل مفسر جهانی (GIL): پردازش همزمان درخواستها در پایتون به دلیل GIL محدودیت دارد و نمیتوان از تمام هستههای CPU به صورت واقعی (Parallelism) بهره برد.
۳. تایپدهی پویا: در سیستمهای بسیار بزرگ، چک کردن تایپها در زمان اجرا (Runtime) هم سربار دارد و هم ریسک باگ را بالا میبرد.
چرا Go ناجی سیستم شد؟
تیم ردیت تصمیم گرفت برای این سرویس خاص به سراغ Go برود. نتایج خیرهکننده بود:
✅ مدیریت همزمانی (Concurrency): با استفاده از Goroutineها، ردیت توانست درخواستهای واکشی (Fetch) کامنتها را به صورت موازی و بسیار سبک انجام دهد. کاری که در پایتون نیازمند Threadهای سنگین سیستمعامل بود، در Go با چند کیلوبایت حافظه انجام شد.
✅ ساختار دادهای بهینه: برخلاف پایتون، Go اجازه میدهد کنترل دقیقی روی نحوه چیدمان دادهها در حافظه داشته باشید (Memory Layout). این یعنی کاهش فشار روی Garbage Collector و افزایش سرعت پردازش.
✅ کاهش تاخیر (Latency): نتیجه نهایی، کاهش چشمگیر زمان پاسخگویی (Response Time) سرویس کامنت بود، حتی در زمانهایی که ترافیک پلتفرم به اوج میرسد.
درسهایی برای طراحی سیستم (System Design):
این حرکت ردیت یک کلاس درس عالی برای معماران نرمافزار است:
- معماری چند زبانه (Polyglot): لازم نیست کل پلتفرم با یک زبان نوشته شود. ردیت همچنان برای بیزنس لاجیکهای لایه بالا از پایتون استفاده میکند، اما برای لایههای زیرین و پرفشار، Go را وارد کرده است.
- میکروسرویس واقعی: جدا کردن سرویس کامنت، اجازه داد تا فقط "همان بخش" اسکیل شود، بدون اینکه نیاز باشد کل کدبیس تغییر کند.
📊 نتیجه: سرویس جدید با منابع سختافزاری کمتر، ترافیک بیشتری را مدیریت میکند و تجربه کاربری (UX) روانتری را ارائه میدهد.
🔗 مطالعه مقاله فنی کامل در ردیت:
https://www.reddit.com/r/RedditEng/s/2tmpQVQSdv
#Reddit #Golang #SystemDesign #Microservices #Backend #PythonVsGo #HighThroughput
🎺 برای یادگیری بیشتر و دریافت مطالب مفید در زمینه .NET و برنامهنویسی، به کانال ما بپیوندید!
📚💻 @dotnetcode🖥 👨💻
اخیراً تیم مهندسی Reddit یکی از مهمترین تغییرات زیرساختی چند سال اخیر خود را فاش کرد: بازنویسی سرویس کامنتها (Comment Service) از پایتون به Go.
شاید بپرسید چرا کامنت؟ در ردیت، کامنتها فقط یک لیست ساده متنی نیستند؛ آنها یک ساختار درختی پیچیده و عمیق (Deeply Nested) دارند که پردازش و نمایش آنها در اسکیل میلیونی، یک چالش تمام عیار مهندسی است.
چرا پایتون دیگر پاسخگو نبود؟ (The Bottleneck)
ردیت سالهاست که یک "Python Shop" محسوب میشود. پایتون برای توسعه سریع عالی است، اما وقتی صحبت از High Throughput و محاسبات سنگین در لحظه میشود، کم میآورد:
۱. هزینه بالای ساخت آبجکتها: در پایتون، هر نود (Node) در درخت کامنتها یک آبجکت سنگین است. وقتی قرار است هزاران کامنت را برای یک ترد (Thread) لود کنید، سربار حافظه و CPU وحشتناک میشود.
۲. قفل مفسر جهانی (GIL): پردازش همزمان درخواستها در پایتون به دلیل GIL محدودیت دارد و نمیتوان از تمام هستههای CPU به صورت واقعی (Parallelism) بهره برد.
۳. تایپدهی پویا: در سیستمهای بسیار بزرگ، چک کردن تایپها در زمان اجرا (Runtime) هم سربار دارد و هم ریسک باگ را بالا میبرد.
چرا Go ناجی سیستم شد؟
تیم ردیت تصمیم گرفت برای این سرویس خاص به سراغ Go برود. نتایج خیرهکننده بود:
✅ مدیریت همزمانی (Concurrency): با استفاده از Goroutineها، ردیت توانست درخواستهای واکشی (Fetch) کامنتها را به صورت موازی و بسیار سبک انجام دهد. کاری که در پایتون نیازمند Threadهای سنگین سیستمعامل بود، در Go با چند کیلوبایت حافظه انجام شد.
✅ ساختار دادهای بهینه: برخلاف پایتون، Go اجازه میدهد کنترل دقیقی روی نحوه چیدمان دادهها در حافظه داشته باشید (Memory Layout). این یعنی کاهش فشار روی Garbage Collector و افزایش سرعت پردازش.
✅ کاهش تاخیر (Latency): نتیجه نهایی، کاهش چشمگیر زمان پاسخگویی (Response Time) سرویس کامنت بود، حتی در زمانهایی که ترافیک پلتفرم به اوج میرسد.
درسهایی برای طراحی سیستم (System Design):
این حرکت ردیت یک کلاس درس عالی برای معماران نرمافزار است:
- معماری چند زبانه (Polyglot): لازم نیست کل پلتفرم با یک زبان نوشته شود. ردیت همچنان برای بیزنس لاجیکهای لایه بالا از پایتون استفاده میکند، اما برای لایههای زیرین و پرفشار، Go را وارد کرده است.
- میکروسرویس واقعی: جدا کردن سرویس کامنت، اجازه داد تا فقط "همان بخش" اسکیل شود، بدون اینکه نیاز باشد کل کدبیس تغییر کند.
📊 نتیجه: سرویس جدید با منابع سختافزاری کمتر، ترافیک بیشتری را مدیریت میکند و تجربه کاربری (UX) روانتری را ارائه میدهد.
🔗 مطالعه مقاله فنی کامل در ردیت:
https://www.reddit.com/r/RedditEng/s/2tmpQVQSdv
#Reddit #Golang #SystemDesign #Microservices #Backend #PythonVsGo #HighThroughput
📚💻 @dotnetcode
Please open Telegram to view this post
VIEW IN TELEGRAM
Reddit
From the RedditEng community on Reddit
Explore this post and more from the RedditEng community
👍9❤3🔥2👏1