امیرعباس
امیرعباس
خواندن ۸ دقیقه·۴ سال پیش

نه به سرور؟ Serverless

در این مقاله قرار هست کلی درباره Serverless صحبت کنم، اینکه چی هست؟ چرا هست؟ و چرا بهتره استفاده کنیم؟ همچنین اینکه کجا استفاده نکنیم

در آخر هم یک نمونه عملی از فایربیس رو باهم می‌بینیم

معماری سرورلس آمازون
معماری سرورلس آمازون


آیا با یک مفهوم جدید روبرو هستیم؟

خب نه! توی حوزه علوم کامپیوتر یک مفهومی که همیشه وجود داره عدم انجام کار های تکراری هست، به طور مثال شما وقتی با یک کد متن باز روبرو می شید اگه ایده جدیدی به ذهنتون رسید خیلی راحت اون ایده رو پیاده می کنید و نیاز نیست از ابتدا شروع کنید کار هایی که قبلا انجام شده را انجام بدید یا به اصطلاح عدم اختراع مجدد چرخ، یا مثلا درفرآیند DevOps سعی می کنیم کار های تکراری رو اتوماتیک کنیم و از چرخه های وقت گیر خودمون نجات بدیم.

هرچیزی به DevOps می‌رسه :D
هرچیزی به DevOps می‌رسه :D

پس به طور خلاصه میشه گفت که هدف ساده سازی فرآیند توسعه، افزایش انتزاع و کاهش کارهای عملیاتی هست.

سرورلس هم در ادامه همین مفهوم هست و قراره به شما کمک کنه تمرکزتون رو روی توسعه ایده خودتون بزارید تا سایر موارد که در توسعه یک نرم افزار نیاز به انجام داره مثل تنظیم سرور و ...

سرورلس چی هست؟

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

شما وقتی یک پروژه نرم افزاری رو شروع می کنید علاوه بر فرآیند کد زنی، نیاز دارید که نرم افزار خودتون رو روی یک سروری مستقر کنید و به کاربرانتون خدمت بدید.

پس شما علاوه بر توسعه محصول خودتون باید با مفاهیم سرور هم آشنا بشید، بتونید امنیت سرور خودتون رو تامین کنید، همچنین باید با مفاهیم مقیاس پذیری و مدیریت سرور هم حتی آشنا بشید.

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

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

بعد از این قضیه ابر ها یا Cloud ها اومدن که خیلی از کار رو راحت کردن. شما سرور های مورد نظر خودتون رو اجاره می کنید و استفاده می کنید ولی اتفاقی که میفته شما اغلب مواقع منابعی که خریدید رو استفاده نمی کنید و اون منابع برای مواقعی هست که بار زیادی روی سرور شما هست.

در سرورلس خدمتی که شما می گیرید در پرداخت انعطاف پذیر هست و شما فقط هزینه استفاده واقعی خودتون رو از منابع می پردازید و شاید یکمی معنی این کلمه "بی سرور" گیج کننده باشه ولی به این معنی هست که تمام دغدغه های مدیریت زیرساخت و سرور با خدمت دهنده هست و شما تمرکز خودتون رو بر روی توسعه محصول خودتون قرار می دید.


سرویس دهنده ها: IaaS, PaaS, SaaS, FaaS

سطح انتزاع در aaS  ها
سطح انتزاع در 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


سرورلسserverlessfaaspaascontainer
https://amirabbas.me
شاید از این پست‌ها خوشتان بیاید