آشنایی با معماری Serverless PHP و معایب و مزایای آن

07 اردیبهشت 1399
serverLess-hosting

Serverless PHP: آشنایی با معماری serverless و BaaS

در حالت عادی برای قرار دادن یک نرم افزار روی اینترنت نیاز به یک سرور داریم. این سرورها دائماً به اینترنت متصل هستند تا هر کس بخواهد بتواند به آن ها متصل شود. از طرفی نگهداری و مدیریت این سرورها در دیتاسنترها اتفاق می افتد که معمولاً فرایند پرهزینه ای می باشد اما با پیشرفت تکنولوژی و بعد از گذشت سال ها، وبمسترها توانایی خرید قسمتی از یک سرور را پیدا کردند. قبل از این مرحله، وبمستران باید یک سرور کامل را برای خود خریداری می کردند تا بتوانند وب سایت خود را میزبانی کند اما با ارائه خدمات میزبانی به صورت اشتراکی (shared hosting) قیمت راه اندازی یک سرور به شدت کاهش یافت.

رایانش ابری (cloud computing) از دیگر اتفاقات بسیار مهم در زمینه میزبانی وب سایت ها بود. در رایانش ابری مجموعه ای بسیار بزرگ از سرورها را داریم که به آن مزرعه سرور (server farm) می گوییم این مزرعه توانایی میزبانی هزاران برنامه را به طور همزمان دارد و قدرت پردازش (processing power) و ذخیره سازی (storage space) بسیار بالایی را فراهم می کند. کلمه ی serverless در لغت به معنی «بدون سرور» است اما همانطور که می دانید هیچ سرویسی بدون وجود سرور در فضای اینترنت قابل رویت نیست، بنابراین مفهوم اصلی و منظور ما از کلمه «بدون سرور» یا serverless این است که مدیریت سرور برای توسعه دهنده حذف می شود و از دید او سروری وجود ندارد. به زبان دیگر تمام مسئولیت های مدیریت و نگهداری از سرور روی دوش سرویس میزبانی است و نیازی نیست شما کاری انجام دهید.

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

برای درک serverless PHP باید ابتدا با مفهوم serverless آشنا بشویم. مفهوم serverless برای اولین بار در مقاله ای در ReadWire در سال 2012 معرفی شد اما تقریبا تا سال 2014 و ارائه ی AWS (مخفف Amazon Web Services) ناشناخته باقی ماند.

معماری های BaaS و serverless

در حال حاضر تعریف دقیق و یکسانی برای تکنولوژی serverless وجود ندارد اما با توضیحاتی که به شما ارائه دادم مطمئن هستم که متوجه کلیت موضوع شده اید. باید بدانید که نام دیگر این تکنولوژی function as a service یا به طور خلاصه FaaS می باشد اما معماری دیگری هم وجود دارد که بسیار شبیه به معماری serverless است. نام این تکنولوژی backend as a service یا BaaS می باشد. این تکنولوژی نیز به مفهوم رایانش ابری اشاره دارد و در طی آن تمام عملیات و پردازش های سرور به سرورهای دیگری محول می شوند. بنابراین شما به عنوان یک توسعه دهنده تنها وظیفه مدیریت کدهای خودتان را خواهید داشت و به صورت مستقیم با سرور ارتباط ندارید. این مسئله شباهت اصلی بین serverless و BaaS را  به ما نشان می دهد؛ یعنی  در هر دو حالت، توسعه دهنده وقت خود را صرف نگهداری و مدیریت از سرور نمی کند اما در عین حال تفاوت هایی نیز بین این دو سرویس وجود دارد که عبارتند از:

  • کامپوننت ها: مهاجرت به سرویس BaaS آسان تر از مهاجرت به سرویس های serverless می باشد چرا که در BaaS برنامه ها دقیقاً شبیه به حالت عادی و فعلی هستند و نیازی نیست که توسعه دهنده ها کدهای خود را تغییر دهند اما برای استفاده از تکنولوژی serverless کدهای شما به قسمت های منطقی تقسیم خواهد شد که function نام دارند. هر کدام از این function ها به رویداد خاصی گوش داده و در صورت فعال شدن آن، شروع به کار می کند. بدین صورت برای استفاده از تکنولوژی serverless باید کدهای خود را تغییر دهید.
  • مقیاس پذیری: یکی از مهم ترین مولفه های تکنولوژی serverless مقیاس پذیری بسیار بالای آن است. در این تکنولوژی با بالا رفتن بار ترافیکی سایت، منابع بیشتری از سرور به صورت خودکار به شما تعلق می گیرد و طبیعتا هر چقدر از منابع بیشتری استفاده کنید هزینه های بیشتری را پرداخت خواهید کرد. این مسئله لزوماً برای سرویس های BaaS صحیح نیست. برخی از شرکت های میزبانی برای سرویس های BaaS نیز ماژول هایی ارائه می دهند که آن ها را مقیاس پذیر می کند اما «مقیاس پذیری» از مولفه های اصلی آن ها نیست.
  • فعال کننده ها: برنامه های serverless رویداد-محور می باشند یعنی فقط رویداد خاصی آن ها را فعال خواهد کرد اما سرویس های BaaS (مانند برنامه های عادی) ممکن است در پس زمینه ی سرور در حال اجرا باشند و از منابع آن استفاده کنند.
  • معماری ماژولار: همانطور که قبلا توضیح داده بودم سرویس های serverless به قسمت های منطقی به نام function تقسیم می شوند. در این نوع از معماری ممکن است function ها روی سرورهای مختلفی قرار گرفته و اجرا شوند اما به دلیل پیکربندی و یکپارچه بودن تمام سرویس، شما متوجه این موضوع نخواهید شد. این مسئله در سرویس های BaaS الزامی نیست؛ آن ها می توانند از طراحی ماژولار استفاده کنند اما در برخی مواقع نیز این طور نیست.

حالا که با مفهوم تکنولوژی serverless آشنا شده ایم، در قسمت بعد به سراغ Serverless PHP می رویم تا معایب و مزیت های آن را بررسی کنیم.

Serverless PHP: معایب و مزایا

اولین سوالی که در مواجهه با مباحث تکنولوژی serverless پیش می آید، موارد استفاده از آن است. همه می پرسند چرا باید از serverless استفاده کنیم؟ این سوال اشتباه است. هیچ «باید» ای در کار نیست بلکه مسئله ی اصلی، نیاز و شرایط برنامه ی شما است.

به طور مثال احتمالاً متوجه شده اید که میزبانی برنامه های بسیار پیشرفته روی تکنولوژی serverless کار عاقلانه‌ای نیست چرا که برنامه های بسیار پیشرفته، اجزایی پیچیده و به هم وابسته دارند بنابراین تقسیم کردن آن ها به قسمت های منطقی کار ساده ای نیست و هزینه های زیادی خواهد داشت. البته ممکن است بر اساس نیاز و شرایط خود صلاح ببینید که برنامه تان را روی تکنولوژی serverless پیاده کنید. در چنین حالتی حتماً باید از از ماژول های مختلف استفاده نمایید (برنامه خود را به نوعی به قسمت های کوچک تر تقسیم کنید).

از مثال های خوب استفاده از تکنولوژی serverless می توانیم به پایگاه های داده ی serverless و همینطور فضاهای ذخیره ی فایل serverless اشاره کنیم. یک پایگاه داده serverless به شما مقیاس پذیری بی نهایت می دهد و در عین حال باعث صرفه جویی در هزینه های شما می شود چرا که فقط همان مقداری را پرداخت می کنید که از سرور استفاده کرده باشید. پایگاه های داده Amazon Aurora و Google Cloud Datastore از مثال های خوب در این زمینه هستند. به نظر شما چرا استفاده از پایگاه های داده serverless انتخاب مناسبی است؟ پاسخ ساده است! پایگاه های داده به صورت طبیعی به قسمت های کوچکتر تقسیم می شود و این تقسیم بندی به پیاده سازی آن ها روی تکنولوژی serverless کمک می کند.

همچنین سیستم ذخیره ی فایل serverless با سیستم های ذخیره ی فایل سنتی متفاوت است و فایل ها را به صورت یک رابطه سلسله مراتبی نمی بیند (دیرکتوری در دیرکتوری الی آخر) بلکه فایل ها به صورت اشیائی ذخیره می شوند که داده هایشان را درون خود دارند ما می توانیم از یک API که شبیه REST API می باشد استفاده کنیم و فایل های خود را از چنین سروری دریافت نماییم. مثالی خوب از این تکنولوژی، فضای ذخیره سازی ارائه شده توسط IBM Cloud است. مثال های خوب دیگر استفاده از تکنولوژی serverless طراحی API یا طراحی Backend برای برنامه های موبایلی (مانند برنامه های اندروید و غیره) است. این نوع برنامه ها به طور طبیعی به قسمت های کوچک تر تقسیم شده اند بنابراین به سادگی روی تکنولوژی serverless پیاده سازی می شوند.

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

مزایای استفاده از تکنولوژی serverless

 کاهش هزینه های سرور

از نظر تئوری استفاده از سرویس های serverless هزینه های اجاره ی سرور را به شدت کاهش می دهد. البته باید توجه کرد که این کاهش هزینه روی کاغذ معنی می دهد. به طور مثال اگر وب سایت شما یک وب سایت عادی باشد که ترافیک بسیار زیادی را دریافت نمی کند به احتمال زیاد استفاده از تکنولوژی serverless هزینه هایتان را کاهش خواهد داد. چرا؟ به دلیل اینکه در سرویس های میزبانی سنتی که در حال حاضر رایج است، هزینه های سرور به طور یکجا پرداخت می شود و پیش فرض شرکت های میزبانی این است که شما می خواهید از حداکثر توان سرور استفاده کنید. با این حساب، شما هزینه ی هنگفتی را نسبت به برنامه خود و ترافیک مصرفی پرداخت خواهید کرد اما اگر از تکنولوژی serverless استفاده کنید در ساعاتی که وب سایت شما بدون بازدید یا دارای بازدید کمی است هزینه هایتان به شدت کاهش خواهد یافت. حالا تصور کنید که صاحب یک وب سایت پربازدید هستید. در چنین حالتی سرور شما دائماً در حال پاسخ به درخواست های دریافتی است بنابراین تقریباً تفاوتی در هزینه های شما ایجاد نخواهد شد، چه از تکنولوژی serverless استفاده کنید و چه از تکنولوژی سنتی میزبانی.

deploy شدن آسان

 deploy شدن به معنی قرار دادن برنامه روی سرور است (بارگذاری سورس کد و انجام پیکربندی های اولیه). همانطور که می دانید در میزبانی سنتی باید سورس کد خود را روی سرور آپلود کنید و سپس پیکربندی های سرور را انجام دهید. در برنامه های بزرگ پیکربندی می تواند بسیار آزار دهنده باشد مخصوصا اگر از انواع فریم ورک و کتابخانه‌های backend استفاده کنید اما در تکنولوژی serverless تمام فرایند راه اندازی بر عهده شرکت میزبان است بنابراین شما کاری انجام نخواهید داد.

مقیاس پذیری

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

معایب استفاده از تکنولوژی serverless

سرعت و عملکرد

سرعت برنامه یکی از مشکلات احتمالی تکنولوژی serverless است. این نوع از میزبانی، رویداد محور است بنابراین بر خلاف شیوه های سنتیِ میزبانی وب، در میزبانی serverless سرور ما به طور دائم روی حالت standby (آماده باش) نمی باشد بلکه با دریافت هر درخواست چند صد میلی ثانیه طول می کشد تا handler این درخواست فعال شده و کارش را انجام دهد. در برنامه های بسیار بزرگ که از اجزای مختلفی تشکیل شده اند این وقفه ی کوتاه در اجزای مختلف برنامه روی هم جمع شده و وقفه ی نسبتاً قابل توجه ای را ایجاد می کند. بنابراین ممکن است استفاده از تکنولوژی serverless برای برنامه های بسیار بزرگ خوب نباشد. البته طرفداران serverless اعتقاد دارند که در برنامه های بسیار بزرگ به دلیل مقیاس پذیری بهترِ این تکنولوژی، سرعت بیشتری خواهیم داشت.

عدم امکان مهاجرت

در روش سنتی میزبانی وب اگر با شرکت میزبانی خود کنار نمی آیید یا به طور ساده قابلیت ارائه خدمات لازم برای شما را ندارند، می توانید به راحتی مهاجرت کرده و وب سایت خود را به شرکت میزبانی دیگری انتقال بدهید اما در مورد وب سایت هایی که serverless باشند این چنین نیست. مهاجرت کردن با این وب سایت ها کار بسیار سختی است تا جایی که این کار را نزدیک به غیرممکن می کند (البته باید ذکر شود که با تلاش فراوان مهاجرت ممکن است اما هزینه هایی که دارد به صرفه نخواهد بود).

اشکال زدایی یا debugging

مشکل دیگر در وب سایت های serverless مشکل debugging یا اشکال زدایی است. همانطور که قبلا گفته شد در چنین سرویس هایی شما به سرور دسترسی ندارید بنابراین دریافت خطاها روی سرور و بررسی آن ها ممکن نیست. البته در حال حاضر اکثر سرویس های ارائه دهنده میزبانی serverless، لاگ (log) های مناسبی را برای خطایابی قرار داده اند تا شما به عنوان کلاینت بتوانید به آسانی به خطاها و گزارشات سرور دسترسی داشته باشید اما عدم کنترل روی جزئیات سرور و هماهنگی های مکرر با پشتیبانی معمولاً آزاردهنده است.

امیدوارم این مقاله ی کوتاه درک مناسبی از Serverless PHP را به شما داده باشد.


منبع: سایت Kinsta

نویسنده شوید

دیدگاه‌های شما

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.