آیا سرورلس واقعی یعنی رهایی از انتخاب پلتفرم؟

بسیاری از توسعه‌دهندگان سیستم‌های ابری نگران‌اند که مهاجرت به زیرساخت‌های سرورلس (Serverless) به‌مرور زمان آن‌ها را در یک ارائه‌دهندهٔ خاص حبس کند. با توجه به تحولات سریع بازار و ریسک‌های وابستگی به تک‌منبع، حفظ استقلالِ کد حیاتی است. راه‌حل در استفاده از الگوهای طراحی دقیق نهفته است: ترکیب معماری تمیز (Clean Architecture)، ماژول‌های Gradle و فریم‌ورک اسپرینگ‌کلاود فانکشن (Spring Cloud Function) به تیم‌ها این امکان را می‌دهد تا منطقِ تجاری را کاملاً مستقل از ابر پیاده‌سازی کنند، در حالی که از مزایای مقیاس‌پذیریِ خودکار و رویداد‌محور بهره‌مند می‌شوند.

فاوا (FaaS) یا میکروسرویس‌های نسلِ بعد

سرورلس به‌معنای حذفِ سرور نیست؛ به‌معنای حذفِ بارِ مدیریتِ زیرساخت، پچ‌کردنِ سیستم‌عامل، اسکنِ کانتینرها برای آسیب‌پذیری‌ها و نگرانی از سخت‌افزار است. منابع بر اساس میزانِ مصرفِ واقعی شارژ می‌شوند و به‌صورت خودکار توسط رویدادها فعال می‌گردند. تفاوتِ اصلی با برنامه‌های مبتنی‌بر کانتینر در سطحِ انتزاع است. در معماریِ میکروسرویس یا مونولیت‌های سنتی، با افزایشِ ترافیک، کلِ کانتینر یا سرویس مقیاس می‌خورد و منابع زیادی را برای بخش‌های غیربحرانی درگیر می‌کند. در مقابل، در الگوی عملکرد به‌عنوان سرویس (FaaS)، هر تابع یک مسئولیتِ واحد دارد، ورودی و خروجیِ مشخصی ارائه می‌دهد و تنها زمانی که رویدادِ خاصی رخ دهد، اجرا می‌شود.

این رویکرد مدیریتِ وظایفِ پس‌زمینه، پردازشِ پیام‌های پیام‌رسانی یا هندل‌کردنِ درخواست‌های HTTP را دگرگون کرده است. اگر یک مسیرِ خاص ناگهان درخواست‌های سنگینی دریافت کند، فقط همان تابعِ خاص مقیاس می‌یابد و کلِ سیستم درگیر هزینهٔ اضافه نمی‌شود. این سطح از کاراییِ منابع، سرورلس را به انتخابی ایده‌آل برای بارهایِ کاریِ متغیر تبدیل می‌کند.

معماری سرورلس و مدیریت رویدادهای مستقل

غلبه بر استارت‌سرد و کاربردهای عملی

یکی از موانع کلاسیک سرورلس، پدیدهٔ استارت‌سرد (Cold Start) بود که به‌طورِ خاص روی برنامه‌های مبتنی‌بر JVM تأثیر می‌گذاشت. ارائه‌دهندگان بزرگی مانند AWS و Azure با ارائهٔ راهکارهای اختصاصی، این چالش را تا حدِ بسیار زیادی کاهش داده‌اند. در اکوسیستمِ AWS، قابلیت SnapStart با آماده‌سازی (Priming) کلاس‌های JVM، زمانِ راه‌اندازیِ اولیه را به صفر می‌رساند و حتی در شرایطِ بحرانی پدیدهٔ p99 نیز قابل‌مشاهده نیست. در Azure نیز لایهٔ Elastic Premium با نمونه‌های همیشه‌فعال، استارت‌سرد را از بین می‌برد. این پیشرفت‌ها، پیاده‌سازیِ REST API روی توابعِ سرورلس را به یک عملیاتِ روزمره و بدونِ دردسر تبدیل کرده‌اند.

مقیاس‌پذیریِ واقعی در اکوسیستمِ اینترنتِ اشیاء

موردِ استفادهٔ دیگر که سرورلس در آن درخششِ بی‌نظیری دارد، پردازشِ کلان‌داده‌های IoT است. شرکت‌های لجستیک و پستِ عمده با حجم‌های عظیمِ رویداد مواجه‌اند. به‌عنوانِ مثال، شرکتِ PostNL در هلند با پردازشِ روزانهٔ 800 میلیون رویدادِ تحویلِ بسته، زیرساختِ مبتنی‌بر AWS را بدون هیچ‌گونهٔ افتِ عملکرد یا قطعی مدیریت می‌کند. این سطح از تراکنش زمانی با توابعِ سرورلس و مکانیزم‌های صف و رویداد یکپارچه می‌شود؛ فرآیندی که اجرایِ کانتینرهای ثابت را از نظرِ اقتصادی نامعقول می‌سازد. همچنین برای کارهایِ زمان‌بندی‌شدهٔ ساده، تبدیلاتِ داده و جریان‌های کلیک (Clickstreams)، سرورلس انتخابی هوشمندانه و بهینه است؛ به‌شرطِ آنکه زمانِ اجرای توابع بسیار طولانی نباشد.

چگونه منطقِ تجاری را برای هر پلتفرمی آماده کنیم؟

کلیدِ اصلی در این معماری، جداسازیِ دقیقِ لایه‌ها است. با پیاده‌سازیِ معماریِ تمیز، تمامِ قوانین و فرآیندهایِ کسب‌وکار در هستهٔ مرکزیِ مستقل تعریف می‌شوند. لایه‌های رابط و استفاده‌کننده وابستگی‌ها را به هسته تزریق می‌کنند و هرگز جریانِ وابستگی به سمتِ بیرونِ هسته رخ نمی‌دهد. وقتی این ساختار با Gradle Modules و Spring Cloud Function ترکیب می‌شود، توابعِ شما دیگر به API‌هأ اختصاصیِ AWS، Azure یا GCP گره نمی‌خورند. به‌جایِ آن، تابع صرفاً یک ورودیِ استاندارد می‌گیرد، منطقِ تجاری را پردازش می‌کند و خروجیِ معادل را برمی‌گرداند.

این تفکیکِ معماری به تیم‌های توسعه اجازه می‌دهد تا بدونِ بازنویسیِ خط‌به‌خطِ کد، توابع را در صورتِ نیاز به پلتفرم‌های دیگر حمل و سازگار کنند. هزینهٔ عملیاتی کاهش می‌یابد، زمانِ توسعه به‌دلیلِ تمرکز بر منطقِ خالصِ کاری کوتاه‌تر می‌شود و سازمان‌ها در برابر تغییراتِ قیمت‌گذاری یا تغییرِ استراتژی‌های فنیِ ابری کاملاً مصون باقی می‌مانند. آیندهٔ توسعهٔ بک‌اند با حفظِ این تعادل میان نوآوریِ زیرساختی و پایداریِ کدِ تجاری به‌سمتِ استانداردیِ فراگیر حرکت خواهد کرد.