امروزه با گسترش رایانش ابری، شیوههای سنتی توسعه و استقرار نرمافزار در حال تغییر هستند. معماری serverless یکی از این رویکردهای نوین است که به توسعهدهندگان اجازه میدهد بدون درگیر شدن با مدیریت سرورها و زیرساخت، برنامههای خود را اجرا کنند. در این مقاله بررسی میکنیم که مفهوم رایانش serverless چیست، نحوه عملکرد آن چگونه است و مهمترین مزایا و چالشهای استفاده از این مدل آشنا میشویم.
معماری serverless چیست؟
معماری serverless مدلی از رایانش ابری است که به کمک آن توسعهدهندگان میتوانند برنامههای خود را بدون نیاز به مدیریت سرورها، سیستمعامل و زیرساخت اجرا کنند و این مسئولیتها را بر عهده ارائهدهنده خدمات ابری بگذارند.
در این نوع رایانش ابری، کماکان برنامهها روی سرورها اجرا میشوند، اما بخش مدیریت و نگهداری زیرساخت، بر عهده شرکت ارائهدهنده خدمات ابری است. این ویژگی باعث میشود توسعهدهندگان بیشتر بر توسعه قابلیتهای نرمافزار و منطق کسبوکار تمرکز کنند.
معماری serverless چطور کار میکند؟
در روشهای سنتی، تیمهای فنی باید زیرساخت سرور، بهروزرسانیهای امنیتی، مقیاسپذیری و نگهداری سیستم را مدیریت کنند. با بهکارگیری خدمات serverless، توسعهدهندگان میتوانند این مسئولیتها را به یک ارائهدهنده خدمات ابری محول کرده و بر وظایف اصلی خود تمرکز کنند.
یکی از محبوبترین معماریهای بدون سرور، Function as a Service (به اختصار FaaS) است که در آن توسعهدهندگان کد برنامه خود را بهعنوان مجموعهای از فانکشنها مینویسند. هر فانکشن هنگامیکه توسط یک رویداد فراخوانی شود، کار خاصی را انجام میدهد. پس از مراحل مرسوم تست، توسعهدهندگان فانکشنهای خود را روی یک ارائهدهنده ابری مستقر میکنند.
هنگامی که یک تابع فراخوانی میشود، ارائهدهنده خدمات ابری، تابع را روی یک محیط فعال اجرا میکند، یا اگر محیط فعالی برای اجرای تابع وجود نداشته باشد، ارائهدهنده خدمات ابری یک محیط جدید، معمولاً به شکل کانتینر یا microVM (ماشین مجازی بسیار سبک) ایجاد کرده و کد تابع را در آن اجرا میکند. این فرایند در پسزمینه انجام میشود و برای توسعهدهندگانی که بر نوشتن و استقرار کد تمرکز دارند، شفاف است و تأثیری بر روند کار آنها ندارد.
مزایا و معایب استفاده از معماری serverless چیست؟
استفاده از معماری serverless در سالهای گذشته رشد چشمگیری داشته است. طیف وسیعی از سازمانهای کوچک و بزرگ و استارتآپها به استفاده از این معماری برای برنامههای خود روی آوردهاند. این استقبال از معماری بدون سرور به دلایل زیر اتفاق افتاده است:
- هزینه کمتر: ارائهدهندگان خدمات ابری صرفا برای منابعی که استفاده میشوند از کاربر هزینه دریافت میکنند. در معماری رایانش بدون سرور، معمولاً هزینهها بر اساس میزان استفاده از منابع مانند مدت زمان پردازش و مصرف حافظه محاسبه میشوند؛ هرچند برخی ارائهدهندگان خدمات serverless ممکن است هزینههای پایه یا محدودیتهای خاص را نیز در نظر بگیرند.
- افزایش بهرهوری: رایانش بدون سرور به تیمهای توسعه این امکان را میدهد که به جای مدیریت زیرساخت، بر نوشتن کد تمرکز کنند. در نتیجه توسعهدهندگان زمان بیشتری برای نوآوری و بهینهسازی منطق کسبوکار و عملکرد بخشهای فرانتاند برنامه خواهند داشت.
- توسعه با هر زبان برنامهنویسی: محیطهای خدمات serverless معمولاً چندزبانه هستند و به توسعهدهندگان اجازه میدهند با زبانها و فریمورکهایی که با آنها راحتتر هستند کار کنند؛ مانند Java ،Python ،JavaScript یا محیط اجرایی Node.js.
- سادهتر شدن فرایندهای توسعه و DevOps: رایانش serverless فرایند استقرار را سادهتر و چرخههای DevOps را بهینه میکند؛ زیرا توسعهدهندگان نیازی ندارند زیرساخت لازم برای یکپارچهسازی، تست، تحویل و استقرار نسخههای نرمافزار در محیط تولید را بهطور دستی تعریف و مدیریت کنند.
- کارایی مقرونبهصرفه: برای برخی بارهای کاری خاص مانند پردازشهای کاملاً موازی، پردازش جریان داده یا برخی وظایف پردازش داده، رایانش بدون سرور میتواند هم سریعتر و هم مقرونبهصرفهتر از سایر مدلهای پردازشی باشد.
- کاهش تأخیر (Latency): در برخی پلتفرمهای serverless امکان اجرای کد در نزدیکی کاربر نهایی وجود دارد. این موضوع میتواند باعث کاهش زمان تأخیر در پاسخدهی سیستم شود.
البته استفاده از معماری بدون سرور سراسر مزیت نیست. این معماری که به کمک سازمانهای مختلف آمده، معایبی هم دارد که عبارتاند از:
- کنترل کمتر: در رایانش بدون سرور، سازمانها کنترل سرورها را به یک ارائهدهنده خدمات ابری واگذار میکنند. در نتیجه مدیریت سختافزار و محیطهای اجرایی در اختیار ارائهدهنده قرار میگیرد و توسعهدهندگان کنترل مستقیم کمتری بر زیرساخت دارند.
- نیاز به برقراری امنیت دقیق: در بسیاری از پلتفرمهای serverless، کد کاربران مختلف ممکن است روی زیرساخت مشترک اجرا شود و اگر تنظیمات بهدرستی انجام نشوند، احتمال بروز آسیبپذیریهای امنیتی یا دسترسی غیرمجاز به دادهها وجود دارد. با این حال ارائهدهندگان ابری معمولاً با استفاده از فناوریهایی مانند ایزولیشن کانتینر یا microVM امنیت و جداسازی محیطهای اجرایی را تضمین میکنند.
- تأثیر بر عملکرد: در محیطهای بدون سرور، اگر مدتی هیچ درخواستی برای یک تابع ارسال نشود، پلتفرم ابری ممکن است محیط مربوط به آن را متوقف کند تا منابع آزاد شوند. در این حالت، هنگام فراخوانی مجدد تابع، سیستم باید محیط اجرایی را دوباره آماده کند. این فرایند باعث ایجاد یک تاخیر اولیه در پاسخدهی میشود که به استارت سرد (Cold Start) معروف است.
- پیچیدگی در تست و اشکالزدایی: در رایانش serverless فرایند اشکالزدایی و تست یکپارچگی میتواند پیچیدهتر باشد، زیرا توسعهدهندگان دید شفاف و کاملی نسبت به زیرساخت و فرایندهای پشتصحنه ندارند.
- هزینه بیشتر برای پردازشهای طولانیمدت: مدل اجرای رایانش serverless برای اجرای طولانیمدت کد طراحی نشده است. بنابراین در برخی موارد، اجرای پردازشهای طولانی ممکن است نسبت به استفاده از سرور اختصاصی یا ماشین مجازی هزینه بیشتری داشته باشد.
- محدودیت تأمینکننده: هر ارائهدهنده خدمات ابری قابلیتها و ویژگیهای خاص خود را در سرویسهای serverless ارائه میدهد که معمولاً با سرویسهای سایر ارائهدهندگان سازگار نیستند. این موضوع میتواند مهاجرت به ارائهدهندگان دیگر را دشوار کند.
بهطور کلی شرکتهایی که میخواهند در سریعترین زمان ممکن وارد بازار شوند و برنامههای مقیاسپذیر و سبک بسازند، میتوانند از مزایای معماری بدون سرور بهرهمند شوند.
اما اگر برنامههای کسبوکار شامل تعداد زیادی فرایند مداوم و طولانیمدت است، ماشینهای مجازی یا کانتینر ابری ممکن است انتخاب بهتری باشند. در یک زیرساخت ترکیبی، توسعهدهندگان ممکن است از کانتینرها یا ماشینهای مجازی برای پاسخ به اکثر درخواستها استفاده کنند، اما برخی از تسکهای کوتاهمدت مانند پردازش تصاویر، ارسال ایمیل، پردازش رویدادها یا اجرای وظایف پسزمینه میتوانند با استفاده از رایانش بدون سرور انجام شوند.
موارد استفاده از معماری serverless چیست؟
معماری serverless معمولاً برای بارهای کاری رویدادمحور (event-driven)، پردازشهای مقطعی و سناریوهایی با ترافیک متغیر یا غیرقابل پیشبینی بسیار مناسب است. علاوه بر این، معماری serverless در موارد زیر کاربرد دارد:
- برنامههای مبتنی بر رویداد (Trigger-based): هر برنامهای که با فعالیت کاربران یا رخدادهای مشخصی فعال شود، میتواند بهصورت serverless پیادهسازی شود.
- ساخت APIهای RESTful: با استفاده از گیتویهای API مانند Amazon API Gateway، میتوان APIهایی ساخت که با تقاضا مقیاسپذیر باشند و فقط زمانی منابع مصرف کنند که فراخوانی میشوند.
- پردازش ناهمزمان (Asynchronous Processing): توابع بدون سرور میتوانند وظایف پسزمینه مانند پردازش اطلاعات محصولات یا رمزگذاری ویدیوها پس از آپلود را بدون ایجاد تأخیر انجام دهند.
- پشتیبانی از بررسیهای امنیتی: توسعهدهندگان میتوانند توابعی برای اسکن کانتینرها یا بررسی پیکربندیها و آسیبپذیریها فراخوانی کنند. همچنین این توابع میتوانند در فرایندهای احراز هویت مانند تأیید SSH یا احراز هویت دو مرحلهای نقش ایمنتری ایفا کنند.
- یکپارچهسازی و تحویل مداوم (CI/CD): معماری رایانش بدون سرور میتواند در پایپلاینهای CI/CD برای خودکارسازی وظایفی مانند تست، پردازش رویدادها و استقرار سرویسها به کار رود.
تفاوت معماری مایکروسرویس با معماری serverless چیست؟
مایکروسرویسها به نحوه طراحی و ساختار سیستم اشاره دارند، در حالی که رایانش بدون سرور مدلی برای اجرا و استقرار برنامهها محسوب میشود.

برنامههای بدون سرور میتوانند بر اساس اصول معماری مایکروسرویس طراحی شوند و در بسیاری از موارد، این رویکرد توصیه میشود. با این حال، استفاده از رایانش Serverless برای مایکروسرویسها الزامی نیست و ممکن است برخی یا همه سرویسهای یک سیستم مایکروسرویس بدون بهرهگیری از معماری رایانش بدون سرور پیادهسازی شوند. به عبارت دیگر، Serverless یک مدل اجرایی است و مایکروسرویسها یک سبک طراحی؛ بنابراین میتوانند مستقل از هم یا همراه با هم پیادهسازی شوند.
جمعبندی
در این مطلب بررسی کردیم که معماری Serverless چیست و چگونه کار میکند. معماری رایانش بدون سرور رویکردی نوین در توسعه و اجرای نرمافزار است که با واگذاری مدیریت زیرساخت به ارائهدهندگان خدمات ابری، به توسعهدهندگان اجازه میدهد تمرکز خود را بر طراحی قابلیتها و منطق کسبوکار قرار دهند. این مدل با ویژگیهایی مانند مقیاسپذیری خودکار، پرداخت بر اساس میزان مصرف و سادهتر شدن فرایندهای استقرار، به گزینهای جذاب برای بسیاری از سازمانها و استارتآپها تبدیل شده است. با این حال، محدودیتهایی مانند وابستگی به ارائهدهنده، پیچیدگی در تست و احتمال بروز تأخیر در اجرای اولیه نیز باید در نظر گرفته شود.
در نهایت، انتخاب استفاده از رایانش serverless به نوع بار کاری، نیازهای فنی و مقیاس سیستم بستگی دارد و در بسیاری از پروژهها میتواند در کنار معماریهای دیگر مانند کانتینرها یا ماشینهای مجازی، بخشی از یک زیرساخت ترکیبی باشد.