Cloudflare از انتقال شبکه تحویل محتوای خود به استفاده از پروکسی Pingora که به زبان Rust نوشته شده است، خبر داد. پروکسی جدید پیکربندی مبتنی بر سرور NGINX را با اسکریپت های Lua جایگزین می کند و بیش از یک تریلیون درخواست را در روز پردازش می کند. خاطرنشان می شود که انتقال به یک پروکسی تخصصی نه تنها به اجرای ویژگی های جدید و افزایش امنیت به دلیل عملکرد ایمن حافظه اجازه می دهد، بلکه منجر به افزایش قابل توجهی در عملکرد و صرفه جویی در منابع شد - راه حل مبتنی بر Pingora نیازی به استفاده ندارد. از Lua، و بنابراین 70٪ منابع کمتر CPU و 67٪ حافظه کمتر در حالی که همان مقدار ترافیک را پردازش می کند، مصرف می کند.
برای مدت طولانی، سیستمی برای پروکسی ترافیک بین کاربران و سرورهای نهایی مبتنی بر اسکریپت های NGINX و Lua نیازهای Cloudflare را برآورده می کرد، اما با رشد شبکه و افزایش پیچیدگی آن، یک راه حل جهانی ناکافی بود، هم از نظر عملکرد و به دلیل محدودیت در گسترش و اجرای فرصت های جدید برای مشتریان. به طور خاص، چالش هایی در افزودن عملکرد فراتر از یک دروازه ساده و متعادل کننده بار وجود داشت. به عنوان مثال، اگر سرور نتواند درخواستی را پردازش کند، لازم است که درخواست را مجدداً به سرور دیگری ارسال کند و مجموعه دیگری از هدرهای HTTP را برای آن فراهم کند.
به جای معماری که درخواستها را به فرآیندهای کارگر مجزا جدا میکند، Pingora از یک مدل چند رشتهای استفاده میکند که در موارد استفاده از Cloudflare (تمرکز بالای ترافیک از سایتهای مختلف با تغییر آماری بزرگ) توزیع کارآمدتری از منابع بین هستههای CPU را نشان داد. به طور خاص، اتصال درخواستهای نامتعادل توسط nginx به پردازشها منجر به بار نامتعادل بر روی هستههای CPU، و در نتیجه درخواستهای پرمصرف منابع و مسدود کردن I/O باعث کاهش سرعت پردازش درخواستهای دیگر شد. علاوه بر این، اتصال مخزن اتصال به فرآیندهای کنترل کننده اجازه استفاده مجدد از اتصالات از قبل ایجاد شده از سایر فرآیندهای کنترل کننده را نمی دهد، که باعث کاهش کارایی زمانی می شود که تعداد زیادی فرآیند کنترل کننده وجود داشته باشد.
NGINX:
پینگورا:
اجرای Pingora باعث شد تا تعداد نصب اتصالات جدید 160 برابر کاهش یابد و سهم درخواست های استفاده مجدد از 87.1٪ به 99.92٪ افزایش یابد. علاوه بر کاهش اتصالات مجدد و استفاده کارآمدتر از هستههای CPU، بهبود عملکرد پراکسی جدید عمدتاً به دلیل حذف کنترلکنندههای کند Lua مورد استفاده با nginx بود.
زبان Rust برای دستیابی به عملکرد بالا همراه با در دسترس بودن ابزارهایی برای اطمینان از عملکرد ایمن با حافظه انتخاب شد. ذکر شده است که با وجود مهندسین بسیار ماهر Cloudflare و بررسی کدهای نوشته شده به زبان C، امکان جلوگیری از خطاهای منجر به مشکلات حافظه (مثلاً آسیب پذیری در تجزیه کننده HTML) وجود نداشت. در مورد کد جدید، در مورد موارد تجزیه و تحلیل خرابی در Pingora صحبت می کند که معلوم شد نه به دلیل مشکلات در برنامه، بلکه به دلیل خطا در هسته لینوکس و خرابی های سخت افزاری ایجاد شده است.
علاوه بر این، میتوانیم به تفسیر لینوس توروالدز که در کنفرانس منبع باز Summit Europe که این روزها برگزار میشود، در مورد گنجاندن پشتیبانی از زبان Rust در هسته لینوکس اشاره کنیم. وصلههایی برای توسعه درایورهای دستگاه به زبان Rust در هسته 6.0 گنجانده نشده است، اما به گفته لینوس، به احتمال زیاد در هسته 6.1 پذیرفته میشوند؛ او قرار نیست ادغام را به تاخیر بیندازد. به عنوان انگیزه ای برای افزودن پشتیبانی از Rust، علاوه بر تأثیر مثبت بر امنیت، لینوس همچنین از فرصت افزایش علاقه به کار بر روی هسته شرکت کنندگان جدید نام می برد که در زمینه قدیمی بودن قدیمی ها مهم است.
منبع: opennet.ru