برنامهنویسی ابری با AWS Lambda بدون سرور، بدون دردسر!

"ساخت API REST بدون سرور با AWS Lambda، API Gateway و DynamoDB با استفاده از Python"

سپس در ویدیو‌ مجزایی فایل ویدیویی decodeشده، scene صحنه از بین صحنه‌های موجود تغییر داده می‌شود تا بهترین وضعیت شناسایی فرد صورت گیرد؛ سپس، صورت شناسایی می‌شود و بر روی فیلم علايمی جهت شناسایی فرد کشیده می‌شود. این برنامه قابلیت‌های دیگری مانند Streaming را نیز در اختیار کاربران گذاشته‌است. در ابتدا با استفاده از API‌ سرویس Watson Stt صوت تبدیل به متن می‌شود. در مرحله بعدی دسته‌بندی دیالوگ از روی الگو‌های دیالوگ مشخص می‌شود. حال که مشخص شد سرویس از نوع درخواست آب و هوا بر اساس نام شهر است؛ باید ابتدا نام ‌شهر استخراج شود.

گزینه دوم ارائه یک اسمبلی اجرایی است که هنگام فراخوانی اجرا شود. مزیت این معماری نسبت به معماری‌های قبلی در هزینه به ازای درخواست و سرعت بالاتر اجرای درخواست‌هاست. با اجرای منطق idempotent در توابع Lambda، این کار را انجام دهید. اجرای توابع لامبدا در حالت بیکاری برای مدت طولانی ممکن است بیشتر طول بکشد. همانطور که به بررسی این رویکرد بدون سرور ادامه می دهید، راه های بیشتری برای بهینه سازی برنامه های خود و بهبود گردش کار توسعه خود خواهید یافت.

فرانک دارای 17 حق ثبت اختراع صادر شده در زمینه های محاسبات توزیع شده ، داده کاوی و یادگیری ماشین است. در سال 2012، فرانک شرکت موفق خود را به نام Sundog Software راه اندازی کرد که بر فناوری محیط واقعیت مجازی تمرکز دارد و به دیگران در مورد تجزیه و تحلیل داده های بزرگ آموزش می دهد. Lambda را می توان برای میزبانی و اجرای ASP.NET Core web استفاده کرد برنامه‌های کاربردی نیز، به شما یک بک‌اند درخواستی برای سایت‌هایی می‌دهد که استفاده نسبتاً پایینی دارند یا باید به درخواست‌های شدید پاسخ دهند. یک گزینه با توابع مبتنی بر NET 7، از کامپایل AOT (پیش از زمان) برای کاهش زمان راه اندازی استفاده کنید. از آنجایی که AOT باید در محیط مورد نظر اجرا شود، شما در حال کامپایل کد در یک محفظه لینوکس آمازون هستید و از Docker به عنوان میزبان استفاده می کنید. این یک فرآیند نسبتا ساده است که به موجب آن از .NET CLI و قالب Lambda برای دانلود تصویر لینوکس استفاده می کنید.

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

در [37] کاری مشابه [26] انجام شده است که در آن از FaaS و معماری بدو‌ن‌سرور برای تبدیل سند‌های متنی استفاده شده است. معماری این سیستم این بار بر پایه AWS Lambda است و این بار از سرویس‌های پایه‌ای آن استفاده می‌کند. بلوک‌های بلاک‌چین می‌تواند در نود‌های مختلف میزبان در لایه‌های ابری یا مه قرار داشته باشد. بلاک‌چین در اینجا دیتابیس‌های غیرقابل تغییر درنظر گرفته‌شده‌اند. داده‌های بلاک‌چین نیز قابلیت orchestrate شدن حین کم و زیاد شدن ماشین‌های مجازی را دارند.

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

می توانید از Visual Studio، Visual Studio Code یا هر IDE شخص ثالث استفاده کنید. تنها کاری که باید انجام دهید این است که مجموعه ای از الگوهای AWS را از NuGet از طریق NET CLI نصب کنید. زمان اجرا NFها وظیفه‌ی مدیریت حالت هر واحد محاسباتی را برعهده دارد. برطبق این متد، در ابتدا متن وارد شده، سپس الگوریتم رمزنگاری داده‌ها مشخص شده و یک عبارت به عنوان کلید رمزنگاری مشخص می‌شود. پس از مشخص‌ شدن این موارد، سند باید فشرده شود، سپس رمزگذاری شود و در قالب یک URL دربیاید.

مهم ترین جنبه AWS Lambda این است که مانند توابع Azure، هیچ کنترلی بر منابع محاسباتی که استفاده می کند ندارید. سرویس بر اساس تقاضا مقیاس می‌شود و شما برای منابعی که مصرف می‌کنید هزینه می‌کنید. در این جریان ویدیو‌ها در ابتدا decodeمی‌شوند، سپس فیلتر مربوطه بر آن‌ها اعمال شده و سپس encode‌ می‌شوند. جریان کاری دیگر هنگامی‌ است که بخواهیم در یک فیلم به دنبال سکانس‌هایی باشیم که فرد خاصی در آن حضور دارد (مثلا سکانس‌هایی که در یک فیلم از حیاط مدرسه که کودک مشخصی در آن حاضر است). برای مثال، اگر بخواهیم یک سرویس اعلام دمای آب و هوا از روی صدا را مورد مطالعه قرار دهیم، جریان کاری آن به شکل ۳۲ می‌شود.

بنابراین ممکن نیست که بتوان برای آن تعریف واحدی را ارائه داد که تمامی جنبه‌های آن را پوشش دهد؛ بلکه تعاریف مختلف سعی می‌کنند که تنها قسمت‌هایی از رایانش بدون سرور را پوشش دهند. برای شروع می‌خواهیم دو جنبه از رایانش بدون سرور را توضیح دهیم [1]. ذخیره نام، ایمیل و وبسایت من در مرورگر برای زمانی که دوباره دیدگاهی می‌نویسم. از آنجایی که چارچوب حاشیه‌نویسی می‌تواند ویژگی‌های Lambda را به صورت برنامه‌نویسی تنظیم کند، می‌توانید زمان‌بندی و محدودیت‌های حافظه را به عنوان بخشی از تعریف تابع اولیه اضافه کنید. هنگامی که کد شما آماده شد، به سادگی آن را بسازید و مستقیماً از داخل ویژوال استودیو در AWS مستقر کنید. اولین گزینه ارائه یک تابع به عنوان کتابخانه کلاس، پیکربندی سرویس با نام کلاس و اسمبلی آن و روشی است که هنگام راه اندازی تابع فراخوانی می شود.

در برخی موارد، SDK هایی وجود دارد، یا از ارائه دهنده پلتفرم یا توسعه یافته توسط انجمن. مهاجرت از سایر معماری‌ها به معماری بدون‌سرور موضوع بسیاری از پژوهش‌ها در حوزه معماری بدون‌سرور بوده است. در [26] نویسندگان قصد دارند تا یک برنامه تبدیل فایل‌های تصویری به متن را به معماری بدون‌سرور مهاجرت دهند. این برنامه تعدادی فایل تصویری با پسوند pdf را از کاربر دریافت کرده، با استفاده از تکنیک‌های یادگیری ماشین و شبکه‌های عصبی متن آن را استخراج کرده و در نهایت، فایل متنی را به pdf تبدیل می‌کند. بعلاوه، متن‌های استخراج‌شده توسط الگوریتم OCR‌ خود را در پایگاه‌داده جهت کارهای آتی ذخیره می‌کند.

نویسندگان مقاله مجموعه تست‌های بنچمارکی به نام FaaSDOM Benchmark Suit توسعه داده‌اند که معیاری برای مقایسه و آزمون سکو‌های بدون سرور است. اولین معیار مقایسه در FaaSDOM بر اساس زبان‌های پشتیبانی شده در سکو‌های بدون سرور است که در شکل ۴ مشخص شده است. اکنون که مسیر API خود را تنظیم کرده ایم، بیایید آن را به AWS Lambda متصل کنیم. این ادغام به مسیرهای API ما اجازه می دهد تا در یک محیط بدون سرور اجرا شوند و به طور خودکار بر اساس تقاضا مقیاس شوند. همانطور که شکل ۳۵ نشان می‌دهد، برای ساخت یک ویدیو جدید در یک جریان کاری مجزا، نام فرد وارد می‌شود و تصویر مدنظر را انتخاب می‌کنیم.

سپس نتایج در پایگاه‌داده برنامه که از نوع influx DB‌ است ذخیره شده و نمایش اطلاعات نیز در پنل گرافانا صورت می‌گیرد. سکوی TinyFaas یکی دیگر از سکو‌های توسعه‌داده شده در رایانش بدون سرور بود که هدف از توسعه‌ آن، حل مشکلات موجود در سرویس‌های لبه در رایانش ابری بود. یکی از این مشکلات زمان بالای استقرار و حجم بالای کانتینری بود که در لایه لبه سرویس‌های اینترنت اشیا که از معماری ابری و بدون‌سرور استفاده می‌کنند، بود [16]. همانگونه که شکل ۲ نشان می‌دهد، معماری کلی یک برنامه بدون سرور به شکل فوق است. منطق برنامه در قالب توابعی در سرورهای ابری پیاده‌سازی می‌شوند. این سرویس‌ها ممکن است از سرویس‌هایی مانند دلال پیام (message Broker) یا پایگاه‌داده استفاده کند.

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

در [17] تلاش شده است تا با توسعه‌ cirrus سکویی مناسب اجرای برنامه‌های با قابلیت یادگیری ماشین در معماری بدون‌سرور فراهم شود. معماری های بدون سرور نیاز به مدیریت زیرساخت ها را از بین می برند. توسعه دهندگان با مقیاس پذیری مدیریت AWS، تحمل خطا و نگهداری، روی نوشتن کدی تمرکز می کنند که ارزش ارائه می دهد. به طور مشابه، معماری‌های رویداد محور، برنامه‌ها را قادر می‌سازد تا به رویدادهای بی‌درنگ، مانند به‌روزرسانی پایگاه داده یا اقدامات کاربر، پاسخ دهند، پاسخ‌دهی و تجربه کاربر را افزایش دهند. FaaSDOM برای تولید بار‌های کاری از مجموعه‌ی داده‌های wrk2 برای تولید داده‌های faas استفاده می‌کند.

اما اکنون که با مفهوم بدون‌سرور آشنا شدیم، برای درک بهتر چند ویژگی ‌از آن را مجددا مرور کنیم. یک سرویس بدون سرور، خدمتی است که ویژگی‌های زیر را دارا می‌باشد. اما معماری کلی یک برنامه بدون سرور چگونه است؟ این معماری در شکل ۲ نشان داده شده است [۳]. با AWS Lambda، EventBridge و Kinesis، می‌توانید خطوط لوله پردازش داده‌ها را در زمان واقعی یا دسته‌ای ایجاد کنید. این دوره، بر خلاف سایر دوره ها، رویکردی دارد که به شما می آموزد چگونه از همان اولین ویدیو ها، عملکردهای AWS Lambda را به درستی اجرا کنید. لازم به ذکر است ایده‌ایی که در این مقاله مطرح شده است توسط ارائه دهنده‌های کمی پشتیبانی شده و محدودیت‌های خیلی زیادی برای استفاده از آن اعمال شده است.

هر سرویس می تواند به طور مستقل مستقر و مقیاس بندی شود و از طریق اتوبوس های رویداد یا API ها ارتباط برقرار کند. اگر می خواهید پس از مدتی به جاوا برگردید، به من مراجعه کنید کتاب جاوا 8 تا 21. مسیرهای API اغلب نیاز به رسیدگی به انواع مختلف درخواست ها (GET، POST، PUT، DELETE) دارند. پس از وارد کردن یک URL معتبر، صفحه‌ای می‌آید تا عبارت کلید رمزگشایی را وارد کنیم. سپس در صورت معتبربودن کلید، عبارت رمزگشایی و پس از آن Decompress می‌شود.

کارهایی که این سیستم پشتیبانی می‌کند، عبارتند از تعریف لطیفه و جوک، وضعیت آب‌وهوای شهر‌ها، آموزش موسیقی و یادآوری تاریخ‌ها و مناسبت‌ها است. دلایل مهاجرت توسعه‌دهندگان این سامانه به معماری بدون سرور، مقیاس‌پذیری خودکار و دسترس‌پذیری بالای سامانه‌های ابری بوده و از سکوی Apache Openwhisk برای میزبانی برنامه‌ خود استفاده کرده‌اند. محاسبات بدون سرور، که اغلب به عنوان تابع به عنوان یک سرویس (FaaS) شناخته می شود، به توسعه دهندگان اجازه می دهد تا برنامه های کاربردی را بدون مدیریت سرورها بسازند و اجرا کنند. در این مدل، ارائه دهندگان ابری به طور خودکار زیرساخت ها، مقیاس بندی و … را مدیریت می کنند. یکی دیگر از کارهایی که در حوزه معماری بدون‌سرور انجام گرفته است، معماری بدون‌سرور در بستر یک سیستم اینترنت اشیا است.

این پایه و اساس انتقال توابع به یک پشته بدون سرور است زیرا Lambda در چندین جنبه مهم متفاوت از برنامه های روی سرور عمل می کند. در این فصل با این تفاوت‌ها آشنا می‌شوید، مانند نحوه شروع نمونه‌های تابع، معنی آن برای زمان پاسخ و ذخیره‌سازی و نحوه تخصیص منابع. سپس فصل Setup نحوه پیکربندی یک تابع جاوا اسکریپت Lambda است، مانند نحوه تعریف کد آن، و نحوه ارسال پارامترها به آن. نحوه عملکرد مدل مجوز Lambda و خط مشی پشتیبانی AWS برای هر نسخه Node.js را خواهید آموخت. شما یاد خواهید گرفت که چگونه برای Lambda کد بنویسید، چگونه ورودی/خروجی را مدیریت کنید، با دیگر منابع AWS و موضوعات دیگر ارتباط برقرار کنید. شما در مورد مدل ورود عجیب و غریب لامبدا، و نحوه به دست آوردن بینش در مورد آنچه در داخل تابع اتفاق می افتد، خواهید آموخت.

با ترکیب مسیرهای API Next.js با AWS Lambda، می‌توانیم این نقاط پایانی کارآمد و مقرون‌به‌صرفه را ایجاد کنیم که فقط در صورت فراخوانی، منابع را مصرف می‌کنند. داشتن قابلیت های چند پلتفرمی به این معنی است که می توانید دات نت را در هر ابری نیز اجرا کنید. تنها چیزی که نیاز دارید یک میزبان ماشین مجازی لینوکس یا یک نمونه Kubernetes است که از کانتینرهای بدون توزیع پشتیبانی می کند. این برای اجرای کد دات نت در زیرساخت به عنوان پلتفرم سرویس، مانند AWS، یا در Kubernetes مدیریت شده مانند Google Kubernetes Engine (GKE) کافی است. کد می تواند از یک پلتفرم به پلتفرم دیگر منتقل شود و از REST API برای دسترسی به خدمات پلتفرم استفاده کند.

چالش این معماری این است که داده‌ها حجم عظیمی دارند و مدیریت این میزان از داده‌ها بسیار چالش برانگیز است. در این معماری سعی شده‌ است که ذخیره‌سازی و پردازش داده‌ها با هم به کار برده شود. شکل ۶ یک نمونه از نتایج اجرا در FaaSDOM را نشان می‌دهد که سنجش براساس تاخیر برنامه ‌بوده و نتایج هر ۵ ثانیه یکبار لاگ شده‌اند. از موارد برتری FaaSDOM نسبت به سایر مجموعه‌های آزمون، امکان مقایسه قیمت‌های تمام‌ شده به ازای موارد انتخاب شده است. توسعه‌دهندگان FaaSDOM معیار قیمت را براساس معیاری که خود مشخص‌کرده‌اند استخراج می‌کنند که دقت چندان بالایی ندارد. مسیرهای API Next.js فایل های خاصی هستند که در آن قرار دارند pages/api دایرکتوری پروژه شما آنها درخواست های دریافتی را مدیریت می کنند و پاسخ هایی را ارسال می کنند، مشابه نقاط پایانی سرور سنتی.

مسیرهای API Next.js به عنوان پایه‌ای برای معماری بدون سرور ما عمل می‌کنند. آنها به ما این امکان را می دهند که نقاط پایانی API را مستقیماً در برنامه Next.js خود ایجاد کنیم. اگر قصد استفاده از این تصویر پایه لینوکس ۳ آمازون را دارید، باید مخزن AWS .NET GitHub را شبیه سازی کنید و تصویر را بر روی سیستم های توسعه خود بسازید (به این پست وبلاگ). این به شما این امکان را می دهد که کد را قبل از بسته بندی و استقرار آن در AWS آزمایش کنید. وقتی AWS ابزارهای NET 8 خود را نهایی کرد، این ابزار به بخشی از پلتفرم تبدیل می‌شود و شما می‌توانید از آن به عنوان بخشی از فرآیند ساخت استاندارد خود استفاده کنید. آمازون نوشتن توابع Lambda را در سی شارپ با ویژگی هایی مانند حاشیه نویسی Lambda ساده می کند، که از ژنراتورهای منبع C# برای تولید کد از مسیر REST API استفاده می کند.


برنامه نویسی طراحی بازی