عنوان سخنرانی: Effortless game launches: How League of Legends runs at scale on AWS
کنفرانس: AWS re:Invent 2024
سخنرانان:
Ashwin Raghuraman (Senior Solutions Architect @AWS)
Brian Miller (Engineering Manager @Riot Games)
David Press (Principal Engineer @Riot Games)
لینک ویدیو: https://www.youtube.com/watch?v=1Sgft5IeC-E
این سخنرانی، روایتی جامع از مهاجرت بازیهای افسانهای League of Legends و تاکتیکهای مبارزه تیمی -TFT از زیرساختهای فلزی محلی به فضای ابری AWS ارائه میدهد.
معماری بازیهای Riot از دو بخش اصلی تشکیل شده است: سرورهای پلتفرم که خدمات خارج از بازی مانند احراز هویت، فروشگاه، همسریابی و سیستمهای پیشرفت را با استفاده از سرویسهای وب استاندارد جاوا ارائه میدهند، و سرورهای بازی که تجربه درون بازی با تأخیر پایین را با استفاده از بستههای UDP مدیریت میکنند. سرورهای بازی به دلیل نیاز به تأخیر کم، اجرای شبیهسازی در ۳۰ فریم بر ثانیه و قابلیت آدرسدهی مستقل، الزامات تخصصی دارند.

چالشهای اصلی معماری قبلی شامل موارد زیر بود:
مشکل مقیاسپذیری: نیاز به خرید ظرفیت اضافی برای پیشبینیهای ناقص که منجر به اتلاف هزینه میشد.
محدودیتهای راهکار DDoS: تنها از ۲۵۵ بازی در هر میزبان و دو نسخه همزمان بازی پشتیبانی میکرد.
هزینههای سنگین مجوز ویندوز: نیاز به استفاده از نمونههای اختصاصی EC2 بودهاست.
مدیریت ناوگان عظیم ویندوزی: به دلیل از دست رفتن تخصص، به مشکل بزرگی تبدیل شده بود.
موفقیت بازی Valorant که با معماری ابری-اول روی سرورهای لینوکس و کانتینرها راهاندازی شد، انگیزهای برای مهاجرت لیگ آو لجندز ایجاد کرد. این مهاجرت شامل سه مرحله اصلی بود:
۱. انتقال از مراکز داده محلی به AWS: آخرین مرکز داده در استانبول به پایگاه AWS منتقل شد.
۲. مهاجرت سرورهای بازی از ویندوز به لینوکس: شامل بازنویسی فرضیات مبتنی بر APIهای ویندوز، تست عملکرد و رفع باگهای پلتفرمی مانند مشکل ظروف نامرتب در C++ بود.
۳. پیادهسازی مقیاسبندی خودکار.
برای مقیاسبندی خودکار سرورهای بازی، تیم Riot با چالش پروفایلهای عملکردی متغیر مواجه شد. برخلاف Valorant که عملکردی ثابت در طول مسابقه دارد، لیگ آو لجندز با توزیع دمی بلند از مدت زمان بازیها و افزایش مصرف CPU در اواسط تا انتهای بازی مشخص میشود. TFT نیز رفتار متفاوتی دارد و مصرف CPU در انتهای بازی کاهش مییابد.
تیم Riot با استفاده از شبیهسازی بر اساس دادههای واقعی، الگوریتمهای مختلف متعادلسازی بار را آزمایش کرد و در نهایت الگوریتم Round Robin را انتخاب کرد که واریانس مصرف CPU را به طور قابلتوجهی کاهش داد و امکان افزایش آستانه مقیاسگذاری از ۴۰٪ به حدود ۶۰٪ را فراهم کرد. این بهبود به تنهایی منجر به صرفهجویی سالانه تا ۱۰ میلیون دلار شد.

پس از مهاجرت، Riot توانست حالتهای بازی جدید مانند Swarm با پروفایل عملکردی متفاوت و چهار بازیکن و حالت جدید TFT با محدودیت حافظه به جای CPU را به سرعت راهاندازی کند و پس از اتمام، منابع را مجدداً کاهش دهد. همچنین پلتفرم تأمین بازی (GPP) که بر اساس معماری Valorant ساخته شده بود، به عنوان یک سرویس مشترک برای بازیهای مختلف Riot در دسترس قرار گرفت و حتی در هکاتون Thunderdome، مهندسان توانستند لیگ را روی نمونههای Graviton با هزینه پایین اجرا کنند.
چندین نکته در این ارائه برای من بسیار جذاب و جدید بود. اولین نکته، چالشهای خاص سرورهای بازی مانند نیاز به آدرسدهی مستقل هر سرور و آسیبپذیری در برابر حملات DDoS بود که آن را از سرویسهای وب معمولی متمایز میکند. همچنین الگوریتم Round Robin برای متعادلسازی بار سرورهای بازی و نحوه استفاده از شبیهسازی برای یافتن بهترین الگوریتم، بسیار جالب بود.
نکته جالب دیگر، تفاوت رفتار عملکردی بازیهای مختلف بود. League of Legends با افزایش مصرف CPU در انتهای بازی، TFT با کاهش مصرف در انتها، و Valorant با عملکرد ثابت در طول مسابقه، هر کدام نیازمند استراتژی متفاوتی برای بستهبندی بازیها روی میزبانها هستند.
همچنین مهاجرت سرورهای بازی ۱۵ ساله از ویندوز به لینوکس و باگهای پلتفرمی مانند تفاوت رفتار ظروف نامرتب در C++ بین دو سیستمعامل، نشاندهنده پیچیدگیهای مهاجرت سیستمهای قدیمی است.

ارتباط اول: الگوهای مهاجرت است. Riot از الگوی خفهکننده-Strangler برای مهاجرت تدریجی استفاده کرد و ابتدا سرورهای پلتفرم و سپس سرورهای بازی را به صورت منطقهبهمنطقه منتقل نمود.
ارتباط دوم: مقیاسپذیری و کشش الاستیک است. Riot با استفاده از مقیاسبندی خودکار EC2، توانست حالتهای بازی موقت مانند Swarm را با سه برابر ظرفیت معمول راهاندازی کند و پس از پایان، منابع را کاهش دهد. این همان مفهوم کشسانی-Elasticity در محاسبات ابری است که در درسهای معماری نرمافزار مطرح میشود.
ارتباط سوم: بهینهسازی عملکرد است. استفاده از شبیهسازی برای یافتن بهترین الگوریتم متعادلسازی بار و کاهش واریانس مصرف CPU، نمونهای از بهینهسازی عملکرد در سطح زیرساخت است. صرفهجویی ۱۰ میلیون دلاری سالانه نشاندهنده اهمیت این بهینهسازیهاست.
ارتباط چهارم: مدیریت تغییر و ریسک است. مهاجرت تدریجی، برنامه بازگشت به حالت قبل، و نظارت مستمر بر عملکرد، همگی نشاندهنده رویکرد محافظهکارانه و مبتنی بر ریسک Riot در مدیریت تغییر است.
چند سوال و نکته انتقادی برای من ایجاد شد:
سوال اول: آیا الگوریتم Round Robin برای همه مناطق و با ترکیب قهرمانی مختلف که رفتار عملکردی متفاوتی دارند، به یک اندازه کارایی دارد؟ ارائه اشاره کرد که مناطق مختلف رفتار متفاوتی دارند، اما مشخص نکرد که آیا الگوریتم انتخابشده برای همه مناطق بهینه است یا صرفاً یک میانگین قابل قبول ارائه میدهد.
سوال دوم: Riot چگونه تشخیص میدهد که یک میزبان خاص به آستانه ۸۰٪ CPU رسیده است و چه مکانیسمی برای جلوگیری از فراتر رفتن از این آستانه وجود دارد؟ با توجه به اینکه بازیها به تدریج گرانتر میشوند، پیشبینی این که آیا میزبان در آینده از آستانه عبور خواهد کرد یا خیر، چالشبرانگیز به نظر میرسد.
نکته انتقادی: مهاجرت از ویندوز به لینوکس با وجود صرفهجویی در هزینه مجوز، پیچیدگیهای زیادی داشت که میتوانست از طریق رویکردهای تدریجیتر مانند اجرای ترکیبی کاهش یابد. باگ ظروف نامرتب که پس از انتشار زنده شناسایی شد، نشاندهنده نیاز به تستهای گستردهتر در محیطهای پیشتولید است.
سوال سوم: آیا پلتفرم GPP برای بازیهای جدیدی که از موتورهای متفاوت (غیر از Unreal) استفاده میکنند، قابل استفاده است یا نیاز به سفارشیسازی دارد؟ ارائه اشاره کرد که بازیهای R&D از GPP استفاده کردهاند، اما مشخص نیست که آیا این پلتفرم برای موتورهای سفارشی نیز به همین راحتی قابل تطبیق است یا خیر.
این ارائه برای من بسیار جذاب بود و نشان داد که مهاجرت سیستمهای بزرگ و قدیمی به ابر، با وجود چالشهای فراوان، کاملاً شدنی است و میتواند مزایای قابلتوجهی از جمله کاهش هزینه، افزایش چابکی و امکان آزمایش حالتهای جدید بازی را به همراه داشته باشد.
مهمترین درسی که گرفتم، اهمیت اندازهگیری و شبیهسازی قبل از پیادهسازی تغییرات بزرگ است. Riot با استفاده از دادههای واقعی و شبیهسازی، توانست بهترین الگوریتم را انتخاب کند و ریسک مهاجرت را کاهش دهد. همچنین همکاری نزدیک با تیم AWS و استفاده از سرویسهای مدیریتشده، نشاندهنده اهمیت شراکت استراتژیک در سفر ابری است.
«اين مطلب، بخشي از تمرينهاي درس معماري نرمافزار در دانشگاه شهيدبهشتي است»
AWS re:Invent 2024. (2024). Effortless game launches: How League of Legends runs at scale on AWS. Retrieved from https://www.youtube.com/watch?v=1Sgft5IeC-E
Riot Games Technology Blog. (n.d.). Running Online Services at Riot. Retrieved from https://technology.riotgames.com/