چرا تأخیر شبکه (Network Latency) اپلیکیشن شما را از پا در میآورد
تأخیر (Latency) یک قاتل خاموش برای سیستمهای توزیعشده و APIها است. یک تأخیر بسیار کوچک در لایه انتقال (transport layer)، مشکلات عظیمی در لایه اپلیکیشن ایجاد میکند. این امر تجربه کاربری در ابزارهای وب بلادرنگ (real-time) و استریمینگ هوش مصنوعی را خراب میکند.
شما نمیتوانید فیزیک اینترنت را نادیده بگیرید.
محدودیت سرعت نور
دادهها از طریق کابلهای فیبر نوری در کف اقیانوسها جابهجا میشوند. نور در شیشه کندتر از خلاء حرکت میکند. سرعت نور در فیبر حدود ۲۰۴,۵۰۰ کیلومتر بر ثانیه است.
اگر دادهای را از توکیو به سانفرانسیسکو ارسال کنید، فاصله تقریباً ۹,۰۰۰ کیلومتر است. قوانین فیزیک، حداقل زمان رفت و برگشت (round-trip time) را حدود ۸۸ میلیثانیه تعیین میکنند. شما نمیتوانید بر این محدودیت غلبه کنید. هرگونه خطای مسیریابی یا ازدحام (congestion)، تأخیر بیشتری را اضافه میکند.
مسیریابی Anycast در مقابل Unicast
در یک شبکه Unicast، هر سرور یک آدرس IP منحصربهفرد دارد. اگر کاربری در لندن به سروری در نیویورک متصل شود، دادهها از طریق چندین گام (hop) غیرقابل پیشبینی جابهجا میشوند. این امر باعث ایجاد جهشهای ناگهانی در تأخیر (latency spikes) میشود.
Anycast این وضعیت را تغییر میدهد. شما یک آدرس IP یکسان را به چندین مرکز داده در لبه (edge datacenters) در سطح جهان اختصاص میدهید.
• روترها کوتاهترین مسیر را از طریق BGP پیدا میکنند. • بستهها به نزدیکترین گره فیزیکی در لبه (edge node) میروند. • برقراری اتصال در لبه انجام میشود، نه در میان اقیانوسها.
این کار محدوده شبکه شما را به کاربران نزدیکتر میکند.
خطر از دست رفتن بستهها (Packet Loss)
بسیاری از مهندسان فکر میکنند ۱٪ از دست رفتن بستهها مشکلی ندارد، اما اینطور نیست.
الگوریتمهای استاندارد TCP مانند Cubic با دیدن تنها یک بسته از دست رفته، دچار اختلال میشوند. آنها پنجره ازدحام (congestion window) را ۳۰٪ کاهش میدهند. اگر از دست رفتن بستهها ادامه یابد، لینک فیبر نوری ۱ گیگابیتی شما مانند یک اتصال قدیمی دایل-آپ عمل خواهد کرد.
اگر بستهها بیش از حد از دست بروند، سیستم به زمان انتظار برای ارسال مجدد (Retransmission Timeout) میرسد. هر بار که این زمان سپری میشود، زمان انتظار دو برابر میشود. یک اختلال کوچک در شبکه میتواند یک اپلیکیشن را برای چندین ثانیه متوقف (freeze) کند.
دو راه برای حل این مشکل
تیمهای مدرن از این دو روش برای حفظ سرعت استفاده میکنند:
- Google BBR: این الگوریتم به جای واکنش نشان دادن به هر بسته از دست رفته، پهنای باند واقعی را اندازهگیری میکند. این کار باعث میشود نرخ انتقال (throughput) حتی در زمان ازدحام جزئی، پایدار بماند.
- پروتکل QUIC: این پروتکل روی UDP اجرا میشود تا از مشکل مسدود شدن صف (head-of-line blocking) جلوگیری کند. اگر یک بسته از دست برود، سایر جریانهای داده به حرکت خود ادامه میدهند. این امر مانع از آن میشود که یک فقدان واحد، کل نشست (session) شما را متوقف کند.
از برخورد با اینترنت به عنوان یک ابر جادویی خودداری کنید. واقعیت فیزیکی دادههای خود را درک کنید.
جامعه یادگیری اختیاری: https://t.me/GyaanSetuAi