نه به سرور؟ Serverless

در این مقاله قرار هست کلی درباره Serverless صحبت کنم، اینکه چی هست؟ چرا هست؟ و چرا بهتره استفاده کنیم؟ همچنین اینکه کجا استفاده نکنیم در آخر هم یک نمونه عملی از فایربیس رو باهم می‌بینیممعماری سرورلس آمازونآیا با یک مفهوم جدید روبرو هستیم؟خب نه! توی حوزه علوم کامپیوتر یک مفهومی که همیشه وجود داره عدم انجام کار های تکراری هست، به طور مثال شما وقتی با یک کد متن باز روبرو می شید اگه ایده جدیدی به ذهنتون رسید خیلی راحت اون ایده رو پیاده می کنید و نیاز نیست از ابتدا شروع کنید کار هایی که قبلا انجام شده را انجام بدید یا به اصطلاح عدم اختراع مجدد چرخ، یا مثلا درفرآیند DevOps سعی می کنیم کار های تکراری رو اتوماتیک کنیم و از چرخه های وقت گیر خودمون نجات بدیم.هرچیزی به DevOps می‌رسه :Dپس به طور خلاصه میشه گفت که هدف ساده سازی فرآیند توسعه، افزایش انتزاع و کاهش کارهای عملیاتی هست.سرورلس هم در ادامه همین مفهوم هست و قراره به شما کمک کنه تمرکزتون رو روی توسعه ایده خودتون بزارید تا سایر موارد که در توسعه یک نرم افزار نیاز به انجام داره مثل تنظیم سرور و ...سرورلس چی هست؟سرورلس یک روش هست که منابع سروری که شما نیاز دارید رو یک خدمت دهنده برای شما فراهم می کنه و زحمت تنظیمات یک سرور رو از روی دوش شما بر می‌داره.شما وقتی یک پروژه نرم افزاری رو شروع می کنید علاوه بر فرآیند کد زنی، نیاز دارید که نرم افزار خودتون رو روی یک سروری مستقر کنید و به کاربرانتون خدمت بدید.پس شما علاوه بر توسعه محصول خودتون باید با مفاهیم سرور هم آشنا بشید، بتونید امنیت سرور خودتون رو تامین کنید، همچنین باید با مفاهیم مقیاس پذیری و مدیریت سرور هم حتی آشنا بشید.تازه روز به روز با افزایش کاربرانتون با چالش های جدیدی هم روبرو می شید. شما هدفتون توسعه ایده خودتون بود ولی الان کلی چالش دیگه هم در مسیر دارید که باید پاسخ بدید. تازه شما گاهی وقت ها هزینه منابعی رو پرداخت می کنید که بعضی مواقع بدون استفاده هستند.در روز های اولیه اینترنت هرکسی که می خواست یک خدمتی بده باید یه سرور می خرید و همه کار های فنی رو انجام می داد. حتی کار هایی مثل اتصال به برق، خنک‌سازی و...بعد از این قضیه ابر ها یا Cloud ها اومدن که خیلی از کار رو راحت کردن. شما سرور های مورد نظر خودتون رو اجاره می کنید و استفاده می کنید ولی اتفاقی که میفته شما اغلب مواقع منابعی که خریدید رو استفاده نمی کنید و اون منابع برای مواقعی هست که بار زیادی روی سرور شما هست.در سرورلس خدمتی که شما می گیرید در پرداخت انعطاف پذیر هست و شما فقط هزینه استفاده واقعی خودتون رو از منابع می پردازید و شاید یکمی معنی این کلمه "بی سرور" گیج کننده باشه ولی به این معنی هست که تمام دغدغه های مدیریت زیرساخت و سرور با خدمت دهنده هست و شما تمرکز خودتون رو بر روی توسعه محصول خودتون قرار می دید.سرویس دهنده ها: IaaS, PaaS, SaaS, FaaSسطح انتزاع در aaS هازیرساخت به عنوان خدمتدر ایران اکثر این خدمت رو می بینیم که شما یک سرور مجازی یا سرور اختصاصی می گیرید و استفاده می کنید.در این خدمت همه تنظیمات سرور با خودتون هست. البته بعضی از خدمات رو مثل DNS و CDN رو می تونید از خدمت دهنده های موجود استفاده کنید.از خدمات دهنده های داخلی میشه به زیرک، پارس پک، آروان و... اشاره کرد.سکو به عنوان خدمتدر این خدمت به‌جای اینکه یک سرور کامل بگیرید یک سکو ابری آماده می شه و استفاده می کنید. مثلا می شه پلتفرم ابری آروان رو نام برد که شما با یک کانفیگ ساده k8s ازش استفاده کرد. نرم افزار به عنوان خدمتدر این خدمت شما یک نرم افزاری را به مخاطب ارائه میدید. مثلا انتشارات ویرگول رو می تونیم یک SaaS بشناسیم.تابع به عنوان خدمتسرورلس اینجا قرار می گیره در این بخش شما یک سری تابع می نویسید و هر تابع یک رخدادی رو پاسخ میده. مثلا یک رخداد می تونه درخواست post به یک API باشه.سایر موارد مثل مقیاس پذیری و... کلا با خودشونه :دیدر این مورد متاسفانه نمونه داخلی فعلا نداریم ولی در این مقاله قصد داریم با FireBase کار کنیم.سرورلس چه مزایایی داره؟هزینه کمترشما فقط هزینه منابع مصرفی در زمان رو پرداخت می کنید.مقیاس پذیری راحت ترنگرانی درباره مقیاس پذیری ندارید و وقتی که کاربرانتون زیاد میشه منابع افزایش پیدا می کنه و وقتی کاربران کم می شند منابع کم میشه.همچنین چونکه کد صرفا بر روی یک سرور اصلی قرار نداره میشه توابع رو در سرور های مختلفی نزدیک به کاربران اجرا کرد و اینکار باعث میشه تاخیر کمتر بشهکد بک اند ساده ترتمرکزتون رو روی توابع می گذارید و نیاز نیست خیلی از موارد رو کدش رو بزنید.استقرار سریعترخیلی سریع تغییرات رو انتشار می دید و کاربران می تونن استفاده کننسرورلس چه معایبی داره؟برای فرآیندهای طولانی مدت ساخته نشده استالبته باید دقت کنید که سرورلس برای پروسس های طولانی مناسب نیست زیرا زمان زیادی کد شما در حال اجرا هست و باعث نمیشه منابع آزاد بشه که هزینه هاتون کم بشه.آزمایش و اشکال زدایی چالش برانگیز تر می شودبه دلیل اینکه توابع نوشته شده توابع کوچک و جداشده ای هستند و برنامه نویس ها هم دیدی به فرآیند سمت سرور ندارند یک مقدار اشکال زدایی سخت میشهعملکرد ممکن است تحت تأثیر قرار گیردچونکه یک تابع همیشه اجرا نمیشه دفعات اولی که یک تابع فراخوانی میشه نیاز هست که تابع اصطلاحا "boot up" بشه و این یه مقدار زمان اجرا رو کند تر میکنه درخواست برای اجرای یک تابع آماده شروع گرم شناخته می شه و درخواست برای تابعی که مدت زمانی هست فراخوانی نشده شروع سرد شناخته میشه. در شروع سرد نیاز به زمان boot up هست.تفاوت Serverless و Containerکانیتنر ها مثل داکر و یا سرورلس ها مثل فایربیس هدفشون اینه که سربار کارای نگه داری رو کم کنن و شما توجهتون رو بزارید روی نوشتن کد.تفاوت هم اینکه وقتی از کانتینر ها استفاده می کنید یک سری از منابع صرف آپ بودن کانتینر میشه درسته که کانتینر ها به اندازه VM ها منابع استفاده نمی کنند ولی بازم یک سری منابع نیاز دارند. اما سرورلس تو فقط یک سری تابع می نویسی و منابعی که استفاده می کنی در حد همون توابعه و این باعث کاهش هزینه ها و تقسیم هزینه های مشترک بین افراد مختلف میشه.یه تفاوت دیگه هم هست وقتی شما از کانتینر ها استفاده می کنی فرآیند scale یا مقیاس پذیری باز هم با خودتوهن، درسته خیلی راحت تره ولی شما باید تصمیم بگیرید منابع رو کم و زیاد کنید اما در سرورلس این کار ها هم با ارائه دهنده خدمته.فایربیسفایربیس یکی از سرویس های گوگل هست که استفاده های مختلف و باحالی داره از استفاده های تحلیلی تا دیتابیس، پوش ناتیفیکیشن، گزارش خطا و...یکیش هم خدمات FaaS هست که می خوام یه نمونه نشونتون بدم :-)اول باید بریم به آدرس فایربیس و یک پروژه جدید بسازیم ساخت پروژه در کنسول فایربیستنظیمات پروژه در کنسول فایربیسباید npm رو نصب داشته باشیمبعد فایربیس رو به وسیله ترمینال نصب کنیم و یک پروژه جدید بسازیمnpm install -g firebase-tools firebase login mkdir test cd test firebase init ایجاد پروژهنوشتن تابعاستقرار تابعتابع رو در این لینک ببینید البته با IP خارج از ایران...شاد باشید :-)منبع: CloudFlare