TGViewer
DotNet | دات نت DotNet | دات نت @dotnetcode · 1.21K subscribers
Post #3085 1.86K
کالبدشکافی یک مهاجرت بزرگ: چرا ردیت قلب تپنده‌اش را به 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 From the RedditEng community on Reddit Explore this post and more from the RedditEng community
  • 👍 11
  • ❤ 5
  • 🔥 3
  • 👏 1
More from @dotnetcode
  1. Sep 16, 2026ورک‌شاپ «AI Agents in C# (MAF)» در این ورک‌شاپ به بررسی امکانات جدید برنامه‌نویسی با کتابخ…
  2. Jul 10, 2026#مهندس_فکر_کن قسمت:4️⃣ 🎯مصاحبه‌کننده: ءCache Stampede چیست؟ فرض کن یک کلید در Cache داری:…
  3. Jun 12, 20261. Indexes منابع پیشنهادی این چالش که برای من اینها جذاب بوده و هست. A. Designing Data-Int…
  4. Jun 9, 2026آینده هوش مصنوعی و مهندسی کامپیوتر هوش مصنوعی مهندسی را نابود نمی‌کند، اما در سکوت در حال…
  5. Jun 4, 2026تحولی بزرگ در دنیای سی‌شارپ: ویژگی هیجان‌انگیز Union Types در C# 15! بالاخره یکی از جذاب‌ت…
  6. Feb 8, 2026👩‍💻 پستگرس رو ۲.۵ برابر سریع‌تر کن! تصور کن مغز متفکر دیتابیست (Parser) رو بدی دست هوش م…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →