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