معماری های اطلاعاتی

معماری سرورلس و مزایای بستر ابری در تولید برنامه‌های مقیاس‌پذیر

چگونه‌ می‌توانیم برنامه‌هایی بنویسیم که هر تعداد از درخواست‌ها را به راحتی پاسخ دهد ؟

اوایل سال ۹۸ و هنگام کار با پروژه‌ای که از طریق بهرنگ جباری عزیز به عنوان توسعه‌دهنده به آن دعوت شدم، با معماری سرورلس (Serverless) و بستر ابری آژور مایکروسافت آشنا شدم. هر چند به دلیل قبولی در مقطع دکتری و فشار درس‌ها، این همکاری چندان ادامه‌دار نبود اما برای بنده تجربه‌ای بس مغتنم بود.

مهم‌ترین توشه‌ای که از این همکاری عاید من شد، آشنایی با معماری سرورلس به صورت عملی و امکانات محیط‌های رایانش ابری حرفه‌ای دنیا مانند آژور بود.

در این پروژه چون برآوردهای اولیه نشان میداد تعداد بسیار زیادی کاربر خواهد داشت و به تبع آن، تعداد زیادی درخواست در لحظه باید پاسخ‌داده شوند، به دنبال معماری و روشی بودند که نگران این افزایش حجم تقاضا نباشند و برنامه بتواند هر حجمی از درخواست‌ها را بدون اینکه نیاز به درگیری زیاد در سمت برنامه‌ها و سرورها باشد، پاسخ دهد.

مشاوری که از دوستان دکتر جباری در استرالیا و از mvp های مایکروسافت در این کشور بود، توصیه کرده بود که از معماری سرورلس و بستر آژور استفاده کنیم و ترجیحا با node.js، بخش بک‌اند را توسعه دهیم. همین توصیه را به کاربردیم و سمت بک‌اند، از مجموعه‌ای از سرویس‌ها تشکیل می‌شد که هر کدام، مجموعه‌ای از چندین تابع بودند که از طریق API Gateway مایکروسافت و به صورت Rest، درخواستهای سمت کلاینت و کاربران را پاسخ می‌دادند. شکل زیر معماری کلی سامانه را نشان می‌دهد. (شکل تزئینی است اما دقیقا همین ساختار را استفاده کرده بودیم)

در معماری سرورلس، برنامه از مجموعه‌ای از توابع تشکیل شده است که وظیفه پاسخ‌گویی به درخواست‌ها را بر عهده دارند. تامین سرور و منابع لازم برای اجرای این توابع به هر تعدادی که فراخوانی شوند، برعهده تامین کننده زیرساخت است و هزینه به ازای هر فراخوانی تابع، منظور می‌شود.

در این معماری، به ازای هر فراخوانی تابع، هزینه‌ای برای برنامه منظور میشود که این هزینه هم بسیار جزئی و مقرون به صرفه است و مستقل از سنگینی یا سبکی تابع است. البته سرورهای دیتابیس و هاستینگ سروربرای بخش کلاینت، هزینه‌های خودش را خواهد داشت اما بخش اصلی کار که وظیفه پاسخگویی به کاربران را برعهده دارد، مجموعه‌ای از توابع (البته با ساختار و استاندارد مشخص) خواهند بود که هزینه‌ آنها تنها به ازای فراخوانی آنهاست و پاسخگویی به هر تعداد از آنها را در لحظه، تامین کننده زیرساخت (در این جا، مایکروسافت) تضمین میکند.

Serverless architecture (also known as serverless computing or function as a serviceFaaS) 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‌ وجود دارد.

این شکل که مثل خیلی از مفاهیم پایه نوین در حوزه مهندسی نرم افزار به سایت مارتین فاولر برمیگردد،‌ تفاوت معماری سرویس‌گرا با سرورلس را نمایش میدهد که برای جزییات بیشتر در این خصوص بهتر است مقاله اصلی، خوانده شود.

امتیاز کاربران: ۳٫۳ ( ۱ رای)

مجتبی بنائی

دانشجوی دکترای نرم‌افزار دانشگاه تهران (yun.ir/smbanaie)، مدرس دانشگاه و فعال در حوزه توسعه نرم‌افزار و مهندسی داده که تمرکز کاری خود را در چند سال اخیر بر روی مطالعه و تحقیق در حوزه کلان‌داده و زیرساخت‌های پردازش داده و تولید محتوای تخصصی و کاربردی به زبان فارسی و انتشار آنها در سایت مهندسی داده گذاشته است. مدیریت پروژه‌های نرم‌افزاری و طراحی سامانه‌های مقیاس‌پذیر اطلاعاتی از دیگر فعالیتهای صورت گرفته ایشان در چند سال گذشته است.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

این سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش می‌شوند.

دکمه بازگشت به بالا