اگر می خواهید یک برنامه را به طریقی در وب پیاده سازی کنید، معمولاً به دنبال یک ارائه دهنده میزبانی مانند AWS هستید که می توانید در آن یک سرور، یا شاید چندین سرور و یا حتی دسته ای از سرورها را پیکر بندی کنید تا هر آنچه را که برای برنامه تان نیاز دارید در اختیار شما قرار دهد. شما یک برنامه را توسعه داده و آن را در سرور هایی که تنظیم کرده اید پیاده سازی می کنید. گاهی اوقات به سرورهای بیشتری برای میزبانی پلتفرم پایگاه داده شما نیاز است. شاید حتی برای ویژگی هایی مانند صف پیام به سرورهای اضافی نیاز داشته باشید. ما این را یک معماری "Serverful" می نامیم.
در حالی که راه اندازی و اجرا کردن همه این ها کاملاً ممکن است، مشکلات مهمی ایجاد می کند که ما به آنها نگاهی خواهیم انداخت، اما Severless به عنوان یک الگوی معماری قصد دارد این همه نیاز به سرورها را با استفاده انحصاری از سیستم های کاملاً مدیریت شده جایگزین کند. خدماتی مانند خدماتی که در Cloud پیدا می کنید.
معماری Serverless چیست و چه چیزی آن را عالی می کند؟
اگر می خواهید یک برنامه را به طریقی در وب پیاده سازی کنید، معمولاً به دنبال یک ارائه دهنده میزبانی مانند AWS هستید که می توانید در آن یک سرور، یا شاید چندین سرور و یا حتی دسته ای از سرورها را پیکر بندی کنید تا هر آنچه را که برای برنامه تان نیاز دارید در اختیار شما قرار دهد. شما یک برنامه را توسعه داده و آن را در سرور هایی که تنظیم کرده اید پیاده سازی می کنید. گاهی اوقات به سرورهای بیشتری برای میزبانی پلتفرم پایگاه داده شما نیاز است. شاید حتی برای ویژگی هایی مانند صف پیام به سرورهای اضافی نیاز داشته باشید. ما این را یک معماری "Serverful" می نامیم.
در حالی که راه اندازی و اجرا کردن همه این ها کاملاً ممکن است، مشکلات مهمی ایجاد می کند که ما به آنها نگاهی خواهیم انداخت، اما Severless به عنوان یک الگوی معماری قصد دارد این همه نیاز به سرورها را با استفاده انحصاری از سیستم های کاملاً مدیریت شده جایگزین کند. خدماتی مانند خدماتی که در Cloud پیدا می کنید.
برای مثال، به جای راه اندازی یک وب سرور و تمام توازن بار مربوط به آن، مقیاس دهی خودکار، به روزرسانی و مدیریت مورد نیاز، از سرویسی مانند API Gateway استفاده می کنید که می تواند درخواست های HTTP را دریافت کند. به جای راه اندازی یک سرور برنامه برای اجرای منطق تجاری فرای این درخواست ها، از سرویسی مانند AWS Lambda استفاده می کنید.
اما چرا زحمت؟ آیا روش Serverful به اندازه کافی خوب نیست؟ اجازه دهید نگاهی به مزایایی که توسعه Serverless به شما می دهد بیاندازیم.
یکی از مسائلی که در مورد معماری های سرور سنتی وجود دارد این است که مدیریت جهش ناگهانی به طور موثر کمی دشوار است. معمولاً نیاز است به توانایی پیش بینی این جهش ها تکیه کنید. برای مثال، اگر می دانید که تیم بازاریابی صبح ها یک خبرنامه برای افراد زیادی ارسال می کنند، می توانید به اندازه کافی سرور را برای مدیریت بار مورد انتظار تنظیم کنید. اما بار غیر منتظره چطور؟ آخرین چیزی که می خواهید این است که در اثر یک مقاله خبری یا اینفلوئنسر رسانه های اجتماعی سیل ناگهانی ترافیک را به دست آورید و نتوانید از درآمد احتمالی آن استفاده کنید؛ زیرا همه چیز از بین می رود.
تنها راه قابل اعتماد برای ایجاد تطبیق با آن در یک محیط Serverul، این است که حداقل ظرفیت خود را به اندازه ای بالا تنظیم کنید که به طور امیدوارانه تا زمانی که سیستم های خودکار بتوانند زیرساخت های اضافی را ایجاد کنند، بار را مدیریت کنید. با این حال، این بدان معناست که حتی در ساعت 2 بامداد، زمانی که بار در کمترین حد خود است، زیرساخت های پر هزینه ای را در اختیار دارید که به صورت موردی کار می کنند اما ساعتی از شما صورتحساب می گیرند.
از طرف دیگر، خدمات کاملاً مدیریت شده مانند API Gateway، DynamoDB و AWS Lambda، تنها در صورت استفاده صورتحساب خواهند داشت. ساعت 2 بامداد ترافیک ندارید؟ هیچ صورت حسابی نخواهید داشت. با این حال، این سرویس ها، به طور پیش فرض، می توانند به طور هم زمان، بدون تاخیر در افزایش ظرفیت، انبوه ترافیک را مدیریت کنند و فوراً نیز به صفر میرسند. بدون هزینه یا تلاش اضافی از جانب شما.
هزینه های مدیریتی بسیار کمتر
افراد ممکن است به شما بگویند فقط یک ماشین مجازی را در فضای ابری بچرخانید تا برنامه خود را از طریق وب ارائه دهید. وقتی می دانید چه کاری انجام می دهید، این کار آسان به نظر می رسد. اما یک چالش وجود دارد. در حالی که هر کسی میتواند در اطراف جستجو کند و زیرساختهای ابری را با ماشینهای مجازی و کانتینرها ایجاد کند، راهاندازی صحیح آنها به روشی ایمن نیازمند دانش و مهارتهای مناسب است.
پس از راه اندازی، موضوع به همین جا ختم نمی شود. سرورها باید نگهداری شوند، به روز رسانی سیستم عامل، به روز رسانی نرم افزار کاربردی، به روز رسانی پیکربندی برای مطابقت با بهترین شیوه های جدیدتر، بهبود کارایی، بهبود امنیت.از جمله مسائل پیش رو هستند. و نیازهای برنامه شما ممکن است در طول زمان تغییر کند، بنابراین زیرساخت شما باید با رشد و تغییر برنامه شما تنظیم، اضافه و گسترش یابد.
اما این موضوع معایبی خواهد داشت: برای مدیریت این زیرساخت باید پرسنل واجد شرایطی در دسترس داشته باشید. توسعهدهندگان شما باید منتظر بمانند تا تغییراتی در زیرساختها اعمال شود تا ویژگیهای جدیدتر را اجرا کنند. متخصصان ماهر برنامهنویس کم عرضه و گران هستند. هنوز خطر سوءمدیریت یا نادیده گرفته شدن چیز مهمی وجود دارد. در حالی که این موارد به طور کامل توسط معماری های Serverless حذف نمی شود، اما به طور قابل توجهی کاهش می یابد.
از آنجایی که معماریهای Serverless به مدیریت زیرساخت شما متکی نیستند، این مشکلات وجود ندارند. آیا تیم توسعه دهنده شما نیاز به استقرار ویژگی های جدیدی دارد که از خدمات تخصصی AWS استفاده می کند؟ آن ها می توانند بدون نیاز به منتظر ماندن برای راه اندازی و پیکربندی همه چیز، ادامه دهند و این کار را انجام دهند.
توسعه Serverless، استفاده از زیرساخت های کاملاً مدیریت شده از سمت ارائه دهنده Cloud شما را با مقداری کد ترکیب میکند تا تعاملات و این سرویسها را با هم سینک کند. این بدان معناست که به جای این که تیم مهندسی شما منتظر بمانند تا تیم توسعه دهنده، VM و کانتینر مناسب را برای استفاده فراهم کند، آنها می توانند راه حل های خود را به محض آماده شدن به کار گیرند. و از آن جایی که نیازی به ایجاد تعادل در بار، وصلهها، ارتقاء و سایر کارهای تعمیر و نگهداری نیست، میتوانید فقط روی حرکت رو به جلو و ملاقات و حتی پیشی گرفتن از رقبای خود تمرکز کنید.
قبلاً به آن اشاره کردیم. معماری های Serverless فقط برای استفاده صورتحساب می گیرند. مشکل هر معماری Serverful این است که شما باید چیزی را به صورت 24 ساعته در حال اجرا داشته باشید که در هر دقیقه صورتحساب شما را محاسبه کند، حتی اگر اصلاً به هیچ کاربری خدمات ندهید.
علاوه بر این، از آن جایی که نیاز به مدیریت زیرساخت کاهش یافته یا به طور کامل حذف شده است، هزینه های کاهش یافته نیز در مورد نیاز به داشتن تیم مناسب برای مدیریت مسائل وجود دارد. مجموع هزینه مالکیت فقط صورت حساب ارائهدهنده ابر نیست، بلکه افراد مورد نیاز برای اجرای کارها را نیز شامل میشود!
به طور کلی، معماری های بدون سرور بسیاری از مسائل مربوط به ساخت برنامه های کاربردی برای وب را حل میکنند و میتوانند ابزاری را برای ساخت راه حلهایی فراهم کنند که انتشار آن زمان و هزینه کمتری داشته باشد، مقیاسپذیر باشد و در طول زمان نیاز به نگهداری کمتری داشته باشد.