معماری سرورلس و مزایای بستر ابری در تولید برنامههای مقیاسپذیر
چگونه میتوانیم برنامههایی بنویسیم که هر تعداد از درخواستها را به راحتی پاسخ دهد ؟
اوایل سال ۹۸ و هنگام کار با پروژهای که از طریق بهرنگ جباری عزیز به عنوان توسعهدهنده به آن دعوت شدم، با معماری سرورلس (Serverless) و بستر ابری آژور مایکروسافت آشنا شدم. هر چند به دلیل قبولی در مقطع دکتری و فشار درسها، این همکاری چندان ادامهدار نبود اما برای بنده تجربهای بس مغتنم بود.
مهمترین توشهای که از این همکاری عاید من شد، آشنایی با معماری سرورلس به صورت عملی و امکانات محیطهای رایانش ابری حرفهای دنیا مانند آژور بود.
در این پروژه چون برآوردهای اولیه نشان میداد تعداد بسیار زیادی کاربر خواهد داشت و به تبع آن، تعداد زیادی درخواست در لحظه باید پاسخداده شوند، به دنبال معماری و روشی بودند که نگران این افزایش حجم تقاضا نباشند و برنامه بتواند هر حجمی از درخواستها را بدون اینکه نیاز به درگیری زیاد در سمت برنامهها و سرورها باشد، پاسخ دهد.
مشاوری که از دوستان دکتر جباری در استرالیا و از mvp های مایکروسافت در این کشور بود، توصیه کرده بود که از معماری سرورلس و بستر آژور استفاده کنیم و ترجیحا با node.js، بخش بکاند را توسعه دهیم. همین توصیه را به کاربردیم و سمت بکاند، از مجموعهای از سرویسها تشکیل میشد که هر کدام، مجموعهای از چندین تابع بودند که از طریق API Gateway مایکروسافت و به صورت Rest، درخواستهای سمت کلاینت و کاربران را پاسخ میدادند. شکل زیر معماری کلی سامانه را نشان میدهد. (شکل تزئینی است اما دقیقا همین ساختار را استفاده کرده بودیم)
در معماری سرورلس، برنامه از مجموعهای از توابع تشکیل شده است که وظیفه پاسخگویی به درخواستها را بر عهده دارند. تامین سرور و منابع لازم برای اجرای این توابع به هر تعدادی که فراخوانی شوند، برعهده تامین کننده زیرساخت است و هزینه به ازای هر فراخوانی تابع، منظور میشود.
در این معماری، به ازای هر فراخوانی تابع، هزینهای برای برنامه منظور میشود که این هزینه هم بسیار جزئی و مقرون به صرفه است و مستقل از سنگینی یا سبکی تابع است. البته سرورهای دیتابیس و هاستینگ سروربرای بخش کلاینت، هزینههای خودش را خواهد داشت اما بخش اصلی کار که وظیفه پاسخگویی به کاربران را برعهده دارد، مجموعهای از توابع (البته با ساختار و استاندارد مشخص) خواهند بود که هزینه آنها تنها به ازای فراخوانی آنهاست و پاسخگویی به هر تعداد از آنها را در لحظه، تامین کننده زیرساخت (در این جا، مایکروسافت) تضمین میکند.
Serverless architecture (also known as serverless computing or function as a service, FaaS) is a software design pattern where applications are hosted by a third-party service, eliminating the need for server software and hardware management by the developer. Applications are broken up into individual functions that can be invoked and scaled individually.
https://www.twilio.com/docs/glossary/what-is-serverless-architecture
در این معماری، پیچیدگی کدها تا حدودی زیاد میشود (هر چند فریمورکهای خاصی برای این منظور به وجود آمده است که مدیریت تعداد زیاد فانکشنها را به راحتی میسر میکند) اما هزینه و مقیاسپذیری مناسب آن میتواند هزینه این پیچیدگی را برای ما به صرفه کند .
متاسفانه به دلیل عدم حضور شرکتهای بزرگ نرم افزاری و تامین کننده زیرساخت در ایران، ریسک تولید برنامهها با این معماری کمی زیاد است. سال گذشته برای توسعه یک برنامه در حوزه گردشگری و مدیریت تورها که پیشبینی میشد کاربران زیادی را جذب کند، یکی از گزینهها، استفاده ازمعماری سرورلس بود اما ترس از تحریمها و مسایلی که ممکن است برای کاربران ایرانی پیش آید، باعث شد راه حل علی بابای چین را در این خصوص بررسی کنیم که متاسفانه با معیارهای ما منطبق نبود و با سهولت و راحتی محیطی مانند آژور خیلی فاصله داشت. چهار شرکت اصلی ارائه دهنده سرویس سرورلس در شکل زیر مشخص شدهاند که از بین آنها، آمازون با اختلاف، سهم اصلی بازار را برعهده دارد.
نکته دیگری که در این تجربه، برای بنده بسیار ارزشمند بود امکانات فوق العاده زیاد و کامل آژور برای طراحی سیستمهای مقیاسپذیر و یکپارچه بود و هر چه نیاز داشتیم از سرویس احراز هویت تا سرویس کنترل دسترسی به توابع تا تعریف اشتراک برای فراخوانی هر تابع که کاربران را بتوان به ازای نوع اشتراک و هزینهای که پرداخت کردهاند مدیریت کرد و انواع دیتابیسهای SQL و NoSQL و امکانات مدیریت فایلها و هندلینگ رخدادها و … برایمان با یک کلیک و چند تنظیم ساده و به قیمت مناسب در دسترس بود (پروژه البته کلا برای بازار بین المللی بود ) .
مزایای اصلی معماری سرورلس در شکل زیر به خوبی بیان شده است :
البته یک ایراد بزرگ این شرکتهای تامین کننده زیرساخت این است که اگر با هر کدام از آنها کار کنید، مهاجرت به دومی ، بسیار سخت است و خطر Vendor Lock-In وجود دارد.
این شکل که مثل خیلی از مفاهیم پایه نوین در حوزه مهندسی نرم افزار به سایت مارتین فاولر برمیگردد، تفاوت معماری سرویسگرا با سرورلس را نمایش میدهد که برای جزییات بیشتر در این خصوص بهتر است مقاله اصلی، خوانده شود.