در یک سامانه پرترافیک، همیشه مشکل از حمله یا خطای نرمافزاری شروع نمیشود.
گاهی همهچیز درست کار میکند؛ کاربران واقعی هستند، درخواستها معتبرند و سرویسهای بالادستی هم پاسخ میدهند. اما حجم ترافیک ناگهان بالا میرود، پاسخ یک سرویس کند میشود و هزاران درخواست همزمان در انتظار میمانند.
CPU به مرز اشباع نزدیک میشود. حافظه بالا میرود. تعداد درخواستهای در حال پردازش بیشتر و بیشتر میشود.
در چنین شرایطی، بدترین تصمیم این است که سیستم تا لحظه آخر همه درخواستها را بپذیرد و بعد یکباره از دسترس خارج شود.
Survival Mode فینو برای همین لحظه طراحی شده است.
مسئله فقط «ترافیک زیاد» نیست
فرض کنید یکی از سرویسهای شما ناگهان بهجای ۲۰۰ میلیثانیه، در ۵ ثانیه پاسخ دهد.
اگر در هر ثانیه هزاران درخواست جدید وارد شود، تعداد زیادی اتصال بهصورت همزمان منتظر پاسخ باقی میمانند. این درخواستها ممکن است CPU زیادی مصرف نکنند، اما همچنان حافظه، socket و منابع سیستم را درگیر میکنند.
حالا اگر در همین زمان یک جهش ترافیکی هم اتفاق بیفتد، ممکن است ماشین به محدودهای برسد که دیگر فرصت بازیابی نداشته باشد.
در نهایت ممکن است:
- حافظه سیستم تمام شود،
- سیستمعامل پردازش را متوقف کند،
- نود از دسترس خارج شود،
- و حتی بخشی از ظرفیت خوشه نیز موقتاً تحت تأثیر قرار بگیرد.
فینو بهجای انتظار برای رسیدن به این نقطه، فشار را از خود سیستم تشخیص میدهد.
فینو وضعیت واقعی ماشین را میبیند
Survival Mode بهصورت مداوم وضعیت CPU و RAM را پایش میکند و بر اساس میزان فشار، وضعیت سیستم را در چند سطح مدیریت میکند:
Normal همهچیز عادی است و درخواستها بدون محدودیت اضافی پردازش میشوند.
Elevated فشار سیستم در حال افزایش است. فینو بعضی کارهای غیرضروری را کاهش میدهد و از بزرگتر شدن صفها جلوگیری میکند.
Critical سیستم به محدوده خطر نزدیک شده است. فینو شروع به کاهش کنترلشده بخشی از ترافیک کماولویت میکند.
Lifeboat منابع سیستم به محدوده بسیار بحرانی رسیدهاند. در این مرحله هدف دیگر پردازش حداکثر ترافیک نیست؛ هدف این است که سیستم زنده بماند و مهمترین درخواستها همچنان سرویس بگیرند.
همه درخواستها ارزش یکسانی ندارند
یکی از مهمترین تفاوتهای Survival Mode فینو با یک Rate Limit ساده این است که فینو صرفاً درخواستها را بهشکل تصادفی حذف نمیکند.
در شرایط بحرانی، درخواستها بر اساس ارزش و نوع سرویسدهی آنها تفکیک میشوند.
بهصورت کلی:
- ترافیک Best-effort زودتر کاهش داده میشود.
- درخواستهایی که از Quota استفاده میکنند، محافظت بیشتری دریافت میکنند.
- مصرفکنندگانی که دارای Guaranteed Capacity هستند، بالاترین اولویت را دارند.
یعنی اگر منابع محدود شوند، فینو تلاش نمیکند با همه مشتریان یک رفتار یکسان داشته باشد.
بهجای آن، منابع باقیمانده را به مهمترین ترافیک اختصاص میدهد.
این رفتار در سامانههای درآمدی اهمیت زیادی دارد؛ چون در یک بحران زیرساختی، از دست دادن همه درخواستها معمولاً بدترین گزینه ممکن است.
محافظت از مسیر مالی، قبل از اینکه دیر شود
فینو فقط یک Proxy نیست.
هر درخواست میتواند به عملیات مالی مانند بررسی اعتبار، رزرو موجودی و ثبت مصرف منجر شود.
Survival Mode تلاش میکند درخواستهایی را که قرار است کنار گذاشته شوند، قبل از ورود به عملیات مالی سنگینتر متوقف کند.
در نتیجه یک درخواست حذفشده:
- وارد فرآیند Reserve نمیشود،
- منابع مالی بلااستفاده نگه نمیدارد،
- نیازی به Refund بعدی ندارد،
- و فشار اضافهای روی مسیر مالی ایجاد نمیکند.
این موضوع باعث میشود در زمان بحران، خود هسته درآمدی فینو نیز تا حد امکان سالم و سبک باقی بماند.
کاهش بار، نه خاموش کردن سرویس
هدف Survival Mode این نیست که با بالا رفتن CPU، همهچیز را قطع کند.
رفتار آن تدریجی است.
در فشار متوسط، فقط بخشی از عملیات غیرضروری کاهش پیدا میکند.
در فشار بیشتر، بخشی از ترافیک کماهمیت کنار گذاشته میشود.
و فقط در شرایط بسیار بحرانی، محدودیتهای جدیتر اعمال میشوند.
درخواستهایی که در اثر Survival Mode رد میشوند، پاسخ موقت 503 Service Unavailable همراه با Retry-After دریافت میکنند تا کلاینت بتواند کمی بعد دوباره تلاش کند.
بنابراین هدف اصلی این است:
کاهش کنترلشده سرویس، بهجای از دست رفتن کامل سرویس.
بازگشت به حالت عادی خودکار است
یکی از مشکلات سیستمهای محافظتی این است که ممکن است بعد از فعال شدن، در همان وضعیت باقی بمانند.
Survival Mode فینو اینطور عمل نمیکند.
به محض کاهش مصرف CPU و RAM، سیستم بهصورت خودکار به سطح پایینتر برمیگردد.
برای جلوگیری از تغییر مداوم بین حالتها نیز از Hysteresis استفاده میشود؛ یعنی سیستم برای خروج از یک وضعیت بحرانی منتظر کاهش واقعی و پایدار فشار میماند.
پس اگر CPU برای چند لحظه از ۹۰٪ به ۸۸٪ کاهش پیدا کند، سیستم فوراً تصور نمیکند بحران تمام شده است.
این رفتار باعث میشود سیستم در مرزهای فشار دچار نوسان نشود.
چرا این قابلیت برای یک زیرساخت درآمدی مهم است؟
برای یک سرویس معمولی، Down شدن به معنی از دسترس خارج شدن چند API است.
برای یک Revenue Infrastructure، مسئله بزرگتر است.
هر درخواست ممکن است مستقیماً با موارد زیر مرتبط باشد:
- درآمد،
- اعتبار مشتری،
- کیف پول،
- سهمیه،
- هزینه تأمینکننده،
- و ثبت مالی تراکنش.
در چنین سیستمی، «زنده ماندن» خود زیرساخت بخشی از صحت مالی آن است.
Survival Mode فینو برای همین طراحی شده:
وقتی منابع فراواناند، حداکثر ترافیک را پردازش کن.
وقتی منابع محدود میشوند، هوشمندانه انتخاب کن.
و وقتی شرایط بحرانی میشود، مهمترین سرویسها را زنده نگه دار.
زیرساخت خوب فقط سریع نیست؛ باید بلد باشد زنده بماند
بیشتر Benchmarkها درباره شرایط عادی صحبت میکنند:
چند درخواست در ثانیه؟ چقدر latency؟ چند هسته CPU؟
اما محیط واقعی همیشه عادی نیست.
گاهی upstream کند میشود. گاهی traffic spike اتفاق میافتد. گاهی یک مشتری بزرگ ناگهان چند برابر مصرف میکند. و گاهی چند مشکل همزمان رخ میدهد.
در این لحظات، تفاوت یک سیستم معمولی با یک زیرساخت Production-grade مشخص میشود.
Finno Survival Mode تلاش میکند قبل از اینکه سیستم سقوط کند، تصمیم بگیرد چگونه زنده بماند.
نه با خاموش کردن همهچیز؛ بلکه با حفظ مهمترین بخشهای سرویس.
Finno — Revenue Infrastructure designed to survive real production traffic.