فشردهسازی دلتا چگونه نیاز پهنای باند سرورهای بتل رویال ۱۰۰ نفره را کاهش میدهد؟
با انتقال تنها تغییرات وضعیت بازی به جای ارسال کامل اطلاعات، فشردهسازی دلتا به سرورهای چندنفره عظیم اجازه میدهد تا ۱۰۰ بازیکن را با نرخ ۶۰ هرتز همگامسازی کنند، بدون اینکه زیر بار پهنای باند گیگابیتی از کار بیفتند.
به قلم کامران احمدی
این خبر را به اشتراک بگذارید
- معماران شبکه
- مهندسانی که بر روی بهینهسازی تعادل بین بار CPU سرور و پهنای باند خروجی تمرکز دارند.
- شرکتکنندگان ورزشهای الکترونیکی
- بازیکنانی که اثرات جانبی فشردهسازی را از طریق تأخیر و عدم همگامسازی تجربه میکنند.
- ارائهدهندگان زیرساخت ابری
- سرویسهای میزبانی که سختافزار فیزیکی و هزینههای خروج داده بازیهای چندنفره عظیم را مدیریت میکنند.
دیدگاههایی که این گزارش پوشش نداده
- ارائهدهندگان خدمات اینترنت (ISP) که بار تجمعی میلیونها گیمر همزمان را مدیریت میکنند.
- مهندسانی که روی مدلهای گام قفل شده قطعی (Deterministic Lockstep)، به عنوان جایگزینی برای همگامسازی وضعیت، کار میکنند.
نکات کلیدی
- یک سرور ۱۰۰ نفره که دادههای فشردهنشده را با نرخ ۶۰ هرتز ارسال میکند، تقریباً به ۴۸۰ مگابیت بر ثانیه پهنای باند خروجی نیاز دارد.
- فشردهسازی دلتا این مشکل را با انتقال تنها دادههایی که از آخرین بسته تأیید شده تغییر کردهاند، حل میکند.
- تکنیکهایی مانند کوانتیزاسیون و رمزگذاری هافمن، اندازه دادههای ارسالی را بیشتر کاهش میدهند.
- صرفهجویی در پهنای باند به بهای استفاده بسیار بالاتر از CPU و RAM در سمت سرور تمام میشود.
یک سرور ۱۰۰ نفره که با نرخ ۶۰ هرتز تیک میزند، در هر ثانیه ۶۰۰۰ بهروزرسانی وضعیت مجزا تولید میکند. اگر موتور بازی مجبور باشد دادههای کامل موقعیت، چرخش و سرعت هر بازیکن در لابی را ارسال کند—تقریباً ۱۰۰ بایت برای هر موجودیت—سرور باید ۶۰۰ کیلوبایت در ثانیه را فقط به یک کلاینت بفرستد. با مقیاسبندی این مقدار برای کل لابی، آن مسابقه واحد به ۶۰ مگابایت در ثانیه، یا ۴۸۰ مگابیت در ثانیه، پهنای باند خروجی پیوسته نیاز دارد. با نرخهای استاندارد خروج داده در هاستینگ ابری، اجرای یک مسابقه بتل رویال به تنهایی از نظر مالی فاجعهبار خواهد بود و حجم عظیم دادهها حتی قبل از شروع بازی، رابطهای شبکه سرورهای استاندارد را اشباع میکند.[2]
سازوکاری که از این فروپاشی ریاضی جلوگیری میکند، فشردهسازی دلتا است. سرور به جای پخش یک تصویر کامل از جهان ۶۰ بار در ثانیه، تنها دادههایی را منتقل میکند که از آخرین بهروزرسانی تأیید شده توسط کلاینت، تغییر کردهاند. اگر بازیکنی ثابت ایستاده باشد، مختصات موقعیت او به طور کامل از بسته بعدی حذف میشود. اگر در یک خط مستقیم قابل پیشبینی حرکت کند، سرور ممکن است بردار سرعت را فقط یک بار ارسال کند و به کلاینت اجازه دهد تا بقیه حرکت را به صورت محلی برونیابی کند تا زمانی که ورودی جدیدی تغییر کند.[1]
این رویکرد اساساً اقتصاد و امکانپذیری فنی محیطهای چندنفره عظیم را تغییر میدهد. طبق مستندات انجمن توسعهدهندگان Valve، معماریهای اولیه بازیهای چندنفره توسط مودمهای دایالآپ محدود شده بودند که نمیتوانستند بیش از ۵ تا ۷ کیلوبایت در ثانیه را مدیریت کنند. با پیادهسازی فشردهسازی دلتا—تکنیکی که توسط جان کارمک در طول توسعه Quake ۳ رایج شد—توسعهدهندگان حجم دادههای بهروزرسانی استاندارد را از صدها بایت به کسری از آن کاهش دادند و امکان همگامسازی محیطهای پیچیده سهبعدی را بر روی شبکههای بسیار محدود فراهم کردند.[1]
خط لوله فشردهسازی با کوانتیزاسیون (Quantization) آغاز میشود. یک عدد ممیز شناور استاندارد (Floating-point)، که مختصات دقیق یک بازیکن در فضای سهبعدی را دیکته میکند، ۳۲ بیت داده را اشغال میکند. همانطور که گلن فیدلر، مهندس شبکهسازی، توضیح میدهد، ارسال کامل این فلوت ۳۲ بیتی برای هر حرکت جزئی بسیار ناکارآمد است. در عوض، موتورها دادهها را کوانتیزه میکنند و دقت زیر میلیمتری را که چشم انسان نمیتواند روی مانیتور درک کند، حذف میکنند. مختصاتی مانند ۱۲۳.۴۵۶۷۸۹ کوتاه میشود و اندازه پایه عدد را قبل از شروع مقایسه دلتای واقعی به طور قابل توجهی کاهش میدهد.[2]
خط لوله فشردهسازی با کوانتیزاسیون (Quantization) آغاز میشود.
هنگامی که دادهها کوانتیزه شدند، موتور از رمزگذاری هافمن (Huffman Encoding) برای دلتاهای حاصل استفاده میکند. کدگذاری هافمن یک الگوریتم فشردهسازی با طول متغیر است که کوتاهترین دنبالههای بیتی ممکن را به رایجترین مقادیر اختصاص میدهد. در یک بازی تیراندازی رقابتی، رایجترین تغییر در سرعت عمودی یک بازیکن در طول یک تیک ۱۶ میلیثانیهای، صفر است. تحت رمزگذاری هافمن، آن صفر را میتوان به عنوان یک بیت واحد منتقل کرد. اگر ۸۰ بازیکن در یک لابی ۱۰۰ نفره در حال پریدن نباشند، سرور دقیقاً ۸۰ بیت—فقط ۱۰ بایت—صرف بهروزرسانی وضعیت عمودی آنها برای کل سرور میکند.[3]
برای اینکه این سیستم کار کند، سرور یک تاریخچه چرخشی از وضعیتهای تأیید شده برای هر کلاینت متصل را حفظ میکند. وقتی کلاینت بسته ۱۰۴ را دریافت میکند، یک تأییدیه (Acknowledgement) به سرور ارسال میکند. سپس سرور دلتای بین بسته ۱۰۴ و وضعیت فعلی در بسته ۱۰۸ را محاسبه کرده و تنها تفاوت را منتقل میکند. اگر بستهای به دلیل لرزش شبکه (Network Jitter) از دست برود، سرور به سادگی دلتای بعدی را در برابر آخرین وضعیت خوب شناخته شده محاسبه میکند و تضمین میکند که کلاینت در نهایت هندسه صحیح را دریافت کند، بدون اینکه مجبور به همگامسازی مجدد کامل و پرهزینه پهنای باند شود.[1]
این معماری بدون مصالحه سختافزاری قابل توجه نیست. فشردهسازی دلتا مستلزم آن است که سرور وضعیت تاریخی هر کلاینت را در حافظه نگه دارد، که سربار CPU و RAM را در دستگاه میزبان به شدت افزایش میدهد. یک سرور موتور Source که با نرخ تیک ۱۰۰ هرتز کار میکند، تقریباً ۵۰ درصد بار CPU بیشتری نسبت به سروری که با ۶۶ هرتز کار میکند، تولید میکند؛ عمدتاً به دلیل هزینه محاسباتی مقایسه هزاران وضعیت تاریخی با فریم فعلی برای تولید بستههای دلتای سفارشی برای هر بازیکن.[1]
با وجود هزینه محاسباتی، صرفهجویی در پهنای باند برای ورزشهای الکترونیکی مدرن غیرقابل مذاکره است. بدون فشردهسازی دلتا، نیاز ۴۸۰ مگابیت در ثانیه برای یک لابی ۱۰۰ نفره باعث از دست رفتن آبشاری بستهها و تأخیر غیرقابل بازی برای هر کسی بدون اتصال فیبر تجاری میشد. با کاهش نیاز پهنای باند برای هر کلاینت به تقریباً ۱۵ تا ۳۰ کیلوبایت در ثانیه، فشردهسازی دلتا به ناشران اجازه میدهد تا دهها مسابقه همزمان را روی یک دستگاه میزبانی کنند و مدل بتل رویال رایگان را از نظر فیزیکی و مالی در سراسر جهان امکانپذیر سازند.[4]
بررسی عمیق دیدگاهها
مهندسان سرور
مهندسان هزینه CPU فشردهسازی را در مقابل صرفهجویی در پهنای باند متعادل میکنند.
برای معماران شبکه، فشردهسازی دلتا نشاندهنده یک مصالحه مستقیم بین پهنای باند و قدرت محاسباتی است. ذخیره وضعیت تاریخی ۱۰۰ کلاینت و محاسبه دلتاهای فردی برای هر بازیکن در هر ۱۶ میلیثانیه، نیاز به سربار عظیم CPU دارد. مهندسان باید دائماً تنظیم کنند که سرور تا چه حد تاریخچه را نگه دارد؛ نگهداری تعداد زیادی وضعیت، RAM را مصرف میکند، در حالی که نگهداری تعداد کمی، سرور را مجبور میکند هنگام افت بستهها، تصاویر کامل ارسال کند و پهنای باند را به شدت افزایش دهد.
بازیکنان رقابتی
بازیکنان اثرات جانبی فشردهسازی را از طریق عدم همگامسازی و درونیابی تجربه میکنند.
از دیدگاه بازیکن، فشردهسازی دلتا و کوانتیزاسیون تهاجمی میتواند گهگاه به صورت لکنت بصری یا 'عدم همگامسازی' (Desync) ظاهر شود. اگر بستهای حاوی یک دلتای حیاتی از دست برود، کلاینت باید موقعیت دشمن را برونیابی کند تا بسته تأیید شده بعدی برسد. در بازیهای تیراندازی سریع، این درونیابی میتواند باعث شود حریف کمی تلهپورت کند، که منجر به ثبت نشدن ضربات و سرخوردگی در مسابقات با ریسک بالا میشود.
چرا مهم است
بدون فشردهسازی دلتا، پهنای باند مورد نیاز برای میزبانی یک مسابقه ۱۰۰ نفره، اجرای بازیهای چندنفره عظیم را از نظر مالی غیرممکن میکرد. این تکنیک شبکهسازی با کاهش بیش از ۹۰ درصدی حجم دادهها، ستون فقرات نامرئی صنعت مدرن ورزشهای الکترونیکی (Esports) رایگان (Free-to-Play) را تشکیل میدهد.
منابع
[1]Valve Developer Communityمعماران شبکهSource Multiplayer Networking
مطالعه در Valve Developer Community →
[2]Gaffer on Gamesمعماران شبکهState Synchronization
مطالعه در Gaffer on Games →
[3]Wikipediaارائهدهندگان زیرساخت ابریData compression
مطالعه در Wikipedia →
[4]تیم سردبیری کوهستانشرکتکنندگان ورزشهای الکترونیکیتحلیل تیم سردبیری کوهستان
مطالعه در تیم سردبیری کوهستان →
نظرات
هر زاویه. هر روز.
دریافت بازی و ورزشهای الکترونیک اخبار همراه با پوشش کامل منابع و تحلیل دیدگاهها، مستقیم در صندوق ورودی شما.

