توضیح تأخیر شبکه در سطح جهانی
تأخیر (Latency)، نرمافزارهای مدرن را از کار میاندازد. یک میلیثانیه تأخیر در لایه شبکه باعث ایجاد چند ثانیه لگ (lag) در اپلیکیشن شما میشود. این امر تجربه کاربری در ابزارهای بلادرنگ (real-time) و استریمینگ هوش مصنوعی را خراب میکند.
اکثر مهندسان به اینترنت به چشم یک ابر جادویی نگاه میکنند. اما واقعیت، فیزیکی و صلب است.
محدودیت سرعت نور دادهها از طریق کابلهای فیبر نوری زیردریایی منتقل میشوند. نور در شیشه کندتر از خلاء حرکت میکند. سرعت نور در فیبر حدود ۲۰۴,۵۰۰ کیلومتر بر ثانیه است.
یک مسیر ۹,۰۰۰ کیلومتری در اقیانوس آرام، حداقل ۸۸ میلیثانیه تأخیر دارد. شما نمیتوانید این محدودیت را بشکنید. قوانین فیزیک، یک حد پایین برای عملکرد شما تعیین میکنند.
Anycast در مقابل Unicast در یک شبکه Unicast، هر سرور یک IP منحصربهفرد دارد. اگر کاربری در لندن به سروری در نیویورک درخواست بفرستد، بستهها (packets) از مسیرهای طولانی و گامهای (hops) زیادی عبور میکنند. این امر باعث ایجاد تأخیر بالا میشود.
Anycast این وضعیت را تغییر میدهد. شما یک IP یکسان را به چندین نقطه لبه (edge location) اختصاص میدهید.
- روترها با استفاده از BGP کوتاهترین مسیر را پیدا میکنند.
- بستهها به نزدیکترین گره (node) فیزیکی میروند.
- اتصال در نزدیکی کاربر برقرار میشود. این کار شبکه شما را به مشتریانتان نزدیکتر میکند.
خطر از دست رفتن بستهها (Packet Loss) بسیاری از مدیران سیستم فکر میکنند ۱٪ از دست رفتن بستهها مشکلی ندارد. اما برای APIهای پرسرعت، این یک فاجعه است.
پروتکلهای استاندارد TCP مانند Cubic، از دست رفتن بستهها را به عنوان ازدحام (congestion) کامل در نظر میگیرند. اگر بستهای از دست برود، سیستم سرعت خود را ۳۰٪ کاهش میدهد. از دست رفتن مکرر بستهها مانع از رسیدن اتصال به سرعت کامل میشود.
اگر اتصال با تایماوت (timeout) مواجه شود، زمان انتظار در هر بار دو برابر میشود. یک افت کوچک میتواند یک اپلیکیشن را برای چند ثانیه متوقف (freeze) کند.
چگونه آن را رفع کنیم؟ تیمهای مدرن از دو ابزار اصلی برای غلبه بر این محدودیتها استفاده میکنند:
- BBR: این الگوریتم به جای واکنش کورکورانه به هر بسته از دست رفته، پهنای باند واقعی را اندازهگیری میکند و سرعت را پایدار نگه میدارد.
- QUIC: این پروتکل روی UDP اجرا میشود. این پروتکل مانع از آن میشود که از دست رفتن یک بسته، تمام جریانهای داده دیگر را متوقف کند. این کار از توقفهایی (freeze) که در TCP سنتی مشاهده میکنید، جلوگیری میکند.
درک این قوانین فیزیکی و مسیریابی به شما کمک میکند تا سیستمهای جهانی سریعتری بسازید.