معماری بدون سرور یا Serverless Architecture به عنوان یک تحول اساسی در دنیای فناوری اطلاعات شناخته میشود. این نوع معماری به برنامهنویسان و توسعهدهندگان این امکان را میدهد تا بدون نیاز به مدیریت سرورها، تمرکز خود را بر روی کد و ویژگیهای نرمافزاری قرار دهند. با گسترش رایانش ابری، معماری Serverless به سرعت در حال جایگزین کردن روشهای سنتی است و بسیاری از شرکتها و استارتاپها از این روش برای بهبود عملکرد و کاهش هزینهها بهره میبرند.
معماری بدون سرور چیست؟
معماری بدون سرور یک رویکرد رایانش ابری است که در آن توسعهدهندگان برنامهها را بدون مدیریت زیرساختهای سرور میسازند، زیرا تأمین و مقیاسبندی منابع توسط ارائهدهندهی ابری انجام میشود. سیستم کد را به محض وقوع رویدادها اجرا میکند و تنها بر اساس زمان پردازشی که در طول اجرا مصرف میشود، هزینه میگیرد، بنابراین به راحتی میتواند بر اساس تقاضا مقیاسپذیر باشد. اگرچه سرورها همچنان در این مدل وجود دارند، نام “بدون سرور” به این دلیل انتخاب شده است که مسئولیتهای مدیریت سرور تا حد زیادی از توسعهدهندگان برنامهها جدا شده و آنها میتوانند تمرکز خود را بر روی منطق کسبوکار به جای زیرساختها قرار دهند.
چگونگی عملکرد معماری Serverless
سرورها به کاربران این امکان را میدهند که با یک برنامه ارتباط برقرار کنند و از آن استفاده کنند. اما مدیریت سرورها زمانبر و هزینهبر است. تیمها باید سختافزار سرور را نگهداری کنند، بهروزرسانیهای نرمافزاری و امنیتی را انجام دهند و پشتیبانگیریها را برای مواقع بروز مشکل آماده کنند. اما در معماری بدون سرور، این مسئولیتها به ارائهدهنده خدمات ابری واگذار میشود و توسعهدهندگان میتوانند فقط روی نوشتن کد برنامه خود تمرکز کنند.
یکی از مدلهای محبوب معماری بدون سرور، مدل “عملکرد بهعنوان سرویس” (FaaS) است. در این مدل، توسعهدهندگان برنامه خود را به صورت مجموعهای از توابع مستقل مینویسند. هر تابع وقتی که یک رویداد خاص اتفاق میافتد (مثلاً دریافت یک ایمیل یا یک درخواست HTTP)، کار خاصی انجام میدهد. سپس، این توابع به همراه شرایطی که آنها را فعال میکند، به حساب یک ارائهدهنده ابری (مثل AWS یا Google Cloud) فرستاده میشوند.
زمانی که یک تابع فراخوانی میشود، ارائهدهنده ابری این تابع را یا روی یک سرور فعال اجرا میکند، یا اگر هیچ سروری در دسترس نباشد، یک سرور جدید به طور خودکار راهاندازی میکند تا تابع اجرا شود. این فرآیند به طور کامل از دید توسعهدهنده پنهان است و او فقط روی نوشتن کد و ارسال آن به سرویس ابری تمرکز دارد.
علیرغم اینکه در واقعیت سرورها همچنان وجود دارند، اسم “بدون سرور” به این دلیل است که تمام کارهای مربوط به مدیریت و نگهداری سرورها از دوش توسعهدهندگان برداشته شده و بر عهده سرویسدهندگان ابری گذاشته میشود.
در واقع، معماری بدون سرور این امکان را برای توسعهدهندگان فراهم میآورد که فقط هزینه زمان پردازش و حافظه مصرفی در هنگام اجرای توابع خود را پرداخت کنند، و نه هزینه نگهداری سرورها.
اولین پلتفرم معروف FaaS، AWS Lambda از سوی آمازون بود که در سال ۲۰۱۴ معرفی شد. از آن زمان، پلتفرمهای دیگری مانند Google Cloud Functions و Azure Functions توسط گوگل و مایکروسافت معرفی شدند که به توسعهدهندگان امکان ساخت برنامههای Serverless را میدهند.
مفاهیم اساسی در معماری بدون سرور
اگرچه معماری بدون سرور نیاز به مدیریت سرور را از بین میبرد، اما هنوز هم منحنی یادگیری قابل توجهی وجود دارد، بهویژه اگر شما بخواهید چندین تابع را بههم متصل کرده و جریانهای کاری پیچیدهای در یک برنامه بسازید. بنابراین آشنایی با این مفاهیم اساسی معماری بدون سرور میتواند مفید باشد:
فراخوانی (Invocation)
فراخوانی به اجرای یک تابع واحد اشاره دارد. هر بار که یک رویداد یا درخواست باعث اجرای یک تابع میشود، آن را “فراخوانی” مینامیم.
Duration
Duration به زمانی اشاره دارد که طول میکشد تا یک تابع بدون سرور اجرا شود. این زمان از لحظه شروع اجرای تابع تا اتمام آن محاسبه میشود.
Cold Start
Cold Start به تأخیر ایجاد شده زمانی اشاره دارد که یک تابع برای اولین بار اجرا میشود یا پس از یک مدت زمان عدم فعالیت، دوباره فراخوانی میشود. این تأخیر معمولاً به دلیل راهاندازی محیط اجرایی جدید برای تابع است.
Concurrency Limit
Concurrency Limit به حداکثر تعداد نمونههای تابع اشاره دارد که میتوانند بهطور همزمان در یک محدوده خاص اجرا شوند. اگر تابع تعداد نمونههایش از این حد بیشتر شود، ارائهدهنده سرویس ممکن است آن را محدود کند یا تاخیر ایجاد کند.
زمان خروج (Timeout)
زمان خروج به حداکثر زمانی اشاره دارد که یک ارائهدهنده سرویس به یک تابع اجازه میدهد تا قبل از آنکه آن را متوقف کند اجرا شود. بیشتر ارائهدهندگان یک زمان خروج پیشفرض و یک زمان خروج Maximum مشخص میکنند.
این مفاهیم پایهای، اصول اولیه معماری بدون سرور را تشکیل میدهند. توجه داشته باشید که هر ارائهدهنده خدمات ابری ممکن است از اصطلاحات مختلفی استفاده کند و محدودیتهای خاص خود را برای توابع بدون سرور تعیین کند، اما این لیست مفاهیم پایهای را مشخص میکند که در اکثر پلتفرمها مشترک است.
معماری میکروسرویس و ارتباط آن با Serverless
معماری میکروسرویس یک الگوی طراحی است که در آن برنامهها به قسمتهای کوچکتری به نام “میکروسرویسها” تقسیم میشوند. این معماری به صورت گسترده در مدلهای سرورلس قابل استفاده است. در معماری Serverless، هر میکروسرویس به طور مستقل اجرا میشود و تنها زمانی که به آن نیاز باشد منابع مصرف میکند. این تطابق بین میکروسرویسها و معماری بدون سرور به توسعهدهندگان این امکان را میدهد که بخشهای مختلف برنامهها را به صورت مستقل و بدون نیاز به مدیریت سرورهای پیچیده پیادهسازی کنند.
فرایند انجام کارها در معماری serverless
معماری بدون سرور (Serverless) باعث میشود که توسعهدهندگان بدون نگرانی از مدیریت سرورها، برنامهها را مستقر کنند. در اینجا نحوه عملکرد آن به طور ساده توضیح داده شده است:
- نوشتن کد تابع: در ابتدا، توسعهدهنده کد را برای توابع مختلف مینویسد. این توابع معمولاً هر کدام کار خاصی را انجام میدهند و به صورت مستقل عمل میکنند.
- بارگذاری به پلتفرم FaaS: پس از نوشتن کد، توابع به پلتفرم FaaS بارگذاری میشوند. این پلتفرمها بهطور خودکار کد را اجرا میکنند بدون اینکه توسعهدهنده نگران مدیریت سرورها باشد.
- زیرساخت مدیریتشده: تمام مسائل مربوط به مدیریت سرورها مانند تأمین منابع، مقیاسبندی و بهروزرسانیها بر عهده سرویسدهنده ابری است. توسعهدهنده نیازی به نگرانی در مورد این مسائل ندارد.
- اجرای توابع بر اساس رویدادها: توابع تنها زمانی اجرا میشوند که یک رویداد خاص (مثل درخواست HTTP، بارگذاری فایل یا تغییر در پایگاهداده) اتفاق بیفتد. این رویدادها باعث میشوند که تابع اجرا شود.
- انجام وظایف مختلف: توابع میتوانند کارهای مختلفی انجام دهند، مانند پردازش دادهها، اجرای منطق پشتصحنه، اتصال به پایگاهدادهها یا فراخوانی توابع دیگر.
- کانتینرهای موقت: وقتی یک تابع اجرا میشود، برای آن یک کانتینر موقت ایجاد میشود که بعد از اتمام کار، از بین میرود. این فرآیند به طور خودکار توسط سرویسدهنده ابری مدیریت میشود.
- صورتحساب بر اساس زمان پردازش: هزینهها فقط بهطور مستقیم بر اساس زمان پردازش توابع محاسبه میشود، نه بر اساس هزینههای نگهداری سرورها.
۶ مزیت معماری بدون سرور
معماری بدون سرور در حال تغییر روند توسعه نرمافزار است و راهی برای استارتاپها فراهم میکند تا کارایی و نوآوری را به حداکثر برسانند. با حذف نیاز به مدیریت سرورها، رایانش بدون سرور به شرکتها این امکان را میدهد که بر روی توسعه برنامههای بدون سرور و کدهای پشتیبان تمرکز کنند بدون آنکه پیچیدگیهای مدیریت سختافزار سرور را تجربه کنند.
کاهش هزینههای عملیاتی
استفاده از چارچوب بدون سرور به کاهش هزینههای عملیاتی منجر میشود. بدون نیاز به تأمین و مدیریت سرورهای فیزیکی، شرکتها در هزینههای سختافزار و نگهداری صرفهجویی میکنند. مدلهای FaaS که توسط ارائهدهندگان ابری ارائه میشوند، این امکان را فراهم میکنند که شما تنها برای منابع محاسباتی مصرفشده هزینه بپردازید و از اتلاف مالی مرتبط با ظرفیت سرورهای بلااستفاده جلوگیری کنید.
افزایش مقیاسپذیری
توابع بدون سرور مقیاسپذیری بیشتری دارند. پلتفرمهای بدون سرور بهطور خودکار منابع محاسباتی را با توجه به نیاز برنامههای بدون سرور تنظیم میکنند و مقیاسبندی بدون نیاز به مداخله دستی را ممکن میسازند. این انعطافپذیری تضمین میکند که برنامههای بدون سرور بتوانند بارهای مختلف را مدیریت کنند و این ویژگی برای استارتاپهایی که با ترافیک پیشبینینشده مواجه هستند، ایدهآل است.
توسعه سریعتر
محیطهای بدون سرور روند توسعه نرمافزار را تسریع میکنند. توسعهدهندگان میتوانند روی نوشتن منطق کسبوکار تمرکز کنند و نیازی به نگرانی در مورد تنظیمات زیرساخت نداشته باشند. مدلهای خدمات بدون سرور راهحلهای کد پشتیبان آماده برای توسعه وب اپلیکیشنها ارائه میدهند و فرآیند ایجاد و استقرار را تسریع میکنند.
انعطافپذیری
انعطافپذیری که رایانش بدون سرور ارائه میدهد، مزیت دیگری است. توسعهدهندگان میتوانند توابع بدون سرور یا برنامههای کامل بدون سرور را به سرعت مستقر کنند و به راحتی ویژگیهای جدید را آزمایش کنند بدون آنکه نیاز به برنامهریزی یا ریسک زیاد باشد. این چابکی به استارتاپها این امکان را میدهد که به سرعت به تغییرات بازار یا بازخورد کاربران واکنش نشان دهند.
بدون نیاز به نگهداری
در معماری بدون سرور، ارائهدهندگان ابری نگهداری محیط بدون سرور را بر عهده دارند. استارتاپها نیازی به اختصاص منابع برای مدیریت سرورها ندارند، زیرا زیرساخت، پچهای امنیتی و بهروزرسانیها همه توسط ارائهدهنده ابری انجام میشود. این امر منجر به عملیاتی بدون نیاز به نگهداری برای برنامهها و توسعه برنامههای بدون سرور میشود.
دسترسپذیری بالا
پلتفرمهای بدون سرور برای فراهم کردن در دسترسپذیری بالا برای برنامههای بدون سرور طراحی شدهاند. با استفاده از ماهیت توزیعشده رایانش بدون سرور، برنامههای وب از کاهش زمان خرابی و افزایش تابآوری بهره میبرند، زیرا چارچوب بدون سرور تضمین میکند که منابع محاسباتی همیشه زمانی که نیاز باشد در دسترس هستند.
موارد استفاده از معماری Serverless
در اینجا به برخی از موارد استفاده معماری بدون سرور اشاره میکنیم که میتواند در مقاله شما مفید باشد:
چتباتها و دستیارهای مجازی
معماری بدون سرور که تعاملات کاربر را از طریق رابطهای صوتی یا سیستمهای پیامرسانی کنترل میکند، امکان ساخت و استقرار سریع چتباتها و دستیارهای مجازی را فراهم میآورد.
پردازش دادههای بلادرنگ
بدون نیاز به مدیریت زیرساخت، توابع بدون سرور میتوانند دادههای جریانی را از چندین منبع تجزیه و تحلیل کرده و تجزیه و تحلیل، نظارت و هشدارهای بلادرنگ فراهم کنند.
پشتیبانی از وبسایتها و موبایل
پشتیبانی بدون سرور یک راهحل مقرون بهصرفه و مقیاسپذیر برای برنامههای وب و موبایل است که شامل احراز هویت، تعاملات پایگاه داده و درخواستهای API میشود.
وظایف زمانبندیشده و Cron Jobs
توابع بدون سرور میتوانند طبق برنامههای زمانی فعال شوند و کارهایی مانند پشتیبانگیری از دادهها، Cron Jobs، تولید گزارشها و نگهداری دورهای را خودکارسازی کنند.
الگوهای طراحی برنامههای سرورلس
معماری سرورلس الگوهای طراحی مختلفی را معرفی کرده است که به حل مسائل خاص در محیط سرورلس بهطور کارآمد کمک میکند. در اینجا به برخی از رایجترین الگوهای طراحی برنامههای سرورلس اشاره میکنیم:
فانکشن بهعنوان گیتوی (FaG)
در این مدل، درخواستهای ورودی از طریق یک فانکشن سرورلس که بهعنوان دروازه یا پروکسی عمل میکند، به سایر سرویسها یا فانکشنها هدایت میشوند. این فانکشن درخواستهای HTTP ورودی را دریافت کرده، پردازش اولیه را انجام میدهد و آنها را به سرویسهای بکاند مناسب ارسال میکند. این الگو معمولاً برای ساخت گیتویهای API استفاده میشود.
Event Stream Processing
پاسخ دادن به جریانهای داده مانند لاگها، تراکنشهای مالی یا فیدهای شبکههای اجتماعی، برای فانکشنهای سرورلس مناسب است. در این معماری، جریانهای رویدادها فانکشنهایی را فعال میکنند که هر رویداد را بهطور جداگانه پردازش میکنند. این الگو در مواقعی مانند ثبتلاگ، تحلیل دادههای زمان واقعی و پردازش دادههای اینترنت اشیاء مفید است.
Aggregator
یک فانکشن سرورلس بهعنوان مجموعهساز عمل میکند که نتایج را از سیستمها یا فانکشنهای مختلف جمعآوری کرده، آنها را تجمیع میکند و یک پاسخ یکپارچه بازمیگرداند. این الگو بهویژه در معماری میکروسرویسها مفید است، جایی که سرویسهای مختلف قسمتهای مختلفی از یک تراکنش یا درخواست را مدیریت میکنند.
الگوی Strangler Fig
این الگو در فرآیند مهاجرت تدریجی یک سیستم قدیمی به معماری سرورلس کاربرد دارد. فانکشنهای سرورلس بهمنظور انجام قابلیتهای جدید یا میانجیگری در فراخوانیهای خدمات موجود معرفی میشوند و بهتدریج اجزای سیستم قدیمی با پیادهسازیهای جدید مبتنی بر سرورلس جایگزین میشوند.
Circuit Breaker
راهاندازی روشی برای “شکستن” زنجیره فراخوانی فانکشنها زمانی که یک آستانه از پیش تعیینشده از شکستها محقق میشود، بخشی از پیادهسازی الگوی circuit breaker در معماری سرورلس است. هنگامی که یکی از اجزای سیستم دچار خرابی میشود، این الگو کمک میکند تا از خرابی کلی سیستم جلوگیری شده و امکان ادامهدادن فعالیت سیستم، هرچند با ظرفیت کاهشیافته، فراهم شود.
بهترین شیوههای امنیتی برای معماریهای بدون سرور
در اینجا برخی از بهترین شیوهها برای تقویت امنیت در محیطهای بدون سرور آورده شده است:
اصل کمترین دسترسی (Least Privilege Principle)
طبق اصل کمترین دسترسی، باید فقط مجوزهای لازم برای انجام عملکرد خود به هر تابع بدون سرور اعطا شود. این کار در صورت وقوع نقض امنیتی، آسیبهای ممکن را کاهش میدهد.
حفظ امنیت اسرار برنامه
هیچگاه دادههای خصوصی را در متغیرهای محیطی یا کدهای بدون سرور کدگذاری نکنید، از جمله توکنهای مخفی، اطلاعات شناسایی پایگاه داده یا کلیدهای API. به جای آن از خدمات مدیریت شده مانند Google Cloud Secret Manager، Azure Key Vault یا AWS Secrets Manager استفاده کنید.
اعتبارسنجی ورودی
برای جلوگیری از آسیبپذیریهای رایج مانند SQL Injection، Command Injection و Cross-Site Scripting (XSS)، همیشه ورودیهای توابع بدون سرور را بررسی کنید.
گیتوی API ایمن
ویژگیهای امنیتی مانند محدودیت نرخ، احراز هویت و سیاستهای CORS را در صورت استفاده از دروازه API فعال کنید. از مجوزهای IAM، کلیدهای API یا OAuth برای مدیریت دسترسی به نقاط پایانی API خود استفاده کنید.
رمزگذاری
رمزگذاری را هم در انتقال دادهها و هم در زمان استراحت فعال کنید. اتصالات پایگاه داده را رمزگذاری کنید، از HTTPS برای APIهای بدون سرور استفاده کنید و اطمینان حاصل کنید که ارائهدهندگان ذخیرهسازی دادهها برای رمزگذاری دادهها در هنگام ذخیرهسازی تنظیم شدهاند.
جمع بندی
معماری Serverless بهعنوان یک رویکرد نوین در دنیای فناوری اطلاعات، به توسعهدهندگان این امکان را میدهد که بدون نیاز به مدیریت زیرساختهای سروری، تنها بر روی کد و منطق کسبوکار تمرکز کنند. با توجه به گسترش رایانش ابری، معماری سرورلس جایگزین روشهای سنتی شده و در بهبود عملکرد و کاهش هزینهها برای بسیاری از شرکتها و استارتاپها مفید است.








