اگر مقالات مربوط به فن آوری های پیشرفته DevOps را دنبال می کنید، احتمالاً در مورد عملکردهای بدون سرور چیزی شنیده اید. اما ممکن است متوجه نشوید که توابع بدون سرور فقط چیزی نیستند که از طریق ارائه دهندگان ابر عمومی ارائه می شود. با استفاده از معماری های ترکیبی یا ابر خصوصی، مراکز داده می توانند خارج از محیط colocation یا on-prem فعالیت کنند.
اگر شما می خواهید بدون نیاز به یک ارائه دهنده ابر عمومی وابسته، توابع بدون سرور را کشف کنید، برای یک مرور کلی در مورد چگونگی و دلیل استقرار توابع بدون سرور در مرکز داده یا مرکز همسان سازی خود، به مطالعه ادامه مطلب بپردازید.
یک تابع بدون سرور یک برنامه یا بخشی از برنامه است که به عنوان بخشی از معماری بدون سرور اجرا می شود. توسعه دهندگان می توانند به سادگی توابع بدون سرور را در یک محیط میزبان بدون سرور بارگیری کنند، سپس شرایطی را که باید باعث اجرای عملکردها شود پیکربندی کند.نیازی به پیکربندی کل محیط سیستم عامل یا نصب نرم افزار به معنای سنتی نیست – از این رو برچسب “بدون سرور”، تا حدی نام نادرستی است زیرا توابع هنوز در سرورها میزبانی می شوند، حتی اگر محیط سرور از دید کاربران نهایی به دور باشد.سیستم عامل های بدون سرور که بیشتر مورد توجه قرار می گیرند، مانند Azure Functions و AWS Lambda، خدمات ابری عمومی هستند. از این راهکارها بعضاً به عنوان Functions-as-a-Service یا FaaS یاد می شود، زیرا آنها کاربران را قادر می سازند تا کدهای بدون سرور را با استفاده از معماری مبتنی بر ابر شبیه به SaaS مستقر و اجرا کنند.
اگرچه فروشندگان ابر عمومی بر بازار بدون سرور تسلط دارند، اما هیچ چیزی در مدل بدون سرور ذاتی وجود ندارد که نیاز به توابع در یک ابر عمومی داشته باشد. به همین راحتی می توانید محیطی را در مرکز داده خود تنظیم کنید که به توسعه دهندگان شما امکان می دهد توابع را بدون سرور بدون دردسر نصب کرده و با استفاده از یک چارچوب رویداد محور آنها را اجرا کنند.
دلایلی وجود دارد که شما می خواهید عملکردهای بدون سرور را در مرکز داده خود اجرا کنید. یکی هزینه است. فروشندگان ابر عمومی هر بار که عملکرد بدون سرور اجرا می شود، از شما هزینه دریافت می کنند، بنابراین هنگام استفاده از خدمات آنها، هزینه مداوم دارید. اگر عملکردها را از طریق سخت افزار شخصی خود اجرا کنید، بیشترین سرمایه گذاری شما از قبل، هنگام تنظیم محیط بدون سرور انجام می شود. برای اجرای هر عملکرد هیچ هزینه مستقیمی وجود ندارد. هزینه کل مالکیت شما در طولانی مدت ممکن است کمتر از هزینه ای باشد که برای یک سرویس معادل در یک ابر عمومی به وجود می آورد.
امنیت یکی دیگر از ملاحظات است. با نگه داشتن توابع بدون سرور در مرکز داده خود، می توانید تمام داده ها و کد برنامه خود را از ابر دور نگه دارید، که می تواند به جلوگیری از برخی چالش های امنیتی و انطباق کمک کند.همچنین عملکرد ممکن است در شرایط خاص برای عملکردهای بدون سرور که در مرکز داده خود شما اجرا می شوند بهتر باشد. به عنوان مثال، اگر توابع نیاز به دسترسی به داده هایی داشته باشند که در مرکز داده شما ذخیره می شوند، اجرای توابع در همان مرکز داده، تنگناهای شبکه ای را که ممکن است با آنها روبرو شوید، از بین می برد، اگر عملکردهای شما در فضای ابری اجرا شوند، شما مجبور به ارسال یا دریافت داده از یک تسهیلات خصوصی هستید.دلیل اصلی نهایی در نظر گرفتن راهکارهای بدون سرور غیر از راهکارهای موجود در فضای ابر عمومی این است که سرویس های اخیر پشتیبانی بومی را فقط برای توابع نوشته شده به زبان های خاص ارائه می دهند. توابع ایجاد شده با زبانهای دیگر به طور معمول قابل اجرا هستند، اما فقط با استفاده از لفاف ها (wrappers)، که ضربه عملکردی ایجاد می کنند. وقتی راهکار بدون سرور خود را پیاده سازی می کنید، توانایی پیکربندی نحوه عملکرد و پشتیبانی از زبانهای بیشتری را دارید.
همانطور که گفته شد، چارچوبهای مختلف بدون سرور که برای مراکز داده در دسترس هستند، از این نظر محدودیتهای خاص خود را دارند، بنابراین شما باید قبل از انتخاب هر گزینه ارزیابی کنید که کدام زبانها و قالبهای بسته بندی را پشتیبانی می کنند.
راهکارهای توابع بدون سرور برای مرکز داده استقرار توابع بدون سرور در مرکز داده خود (یا مرکز داده colocation) بسیار پیچیده تر از اجرای آنها در فضای عمومی نیست. دو روش اصلی برای تنظیم معماری بدون سرور در خارج از ابر عمومی وجود دارد.
اولین مورد این است که یک ابر خصوصی در مرکز داده اجرا کنید، سپس یک فریم ورک بدون سرور در بالای آن مستقر کنید. در یک ابر OpenStack، می توانید این کار را با استفاده از Qinling انجام دهید. Kubernetes (که دقیقاً یک چارچوب خصوصی ابری نیست اما از این نظر شبیه است که به شما امکان می دهد مجموعه ای از سرورها را در یک محیط نرم افزاری واحد تلفیق کنید) ازKnative Kubeless و OpenWhisk و سایر قاب های بدون سرور پشتیبانی می کند.
روش دوم استفاده از چارچوب ترکیبی ابری است که به شما امکان می دهد یک چارچوب بدون سرور فروشنده ابر عمومی را در مرکز داده خود اجرا کنید. Azure Stack، راهکار ترکیبی ابر مایکروسافت، از پلت فرم Azure بدون سرور پشتیبانی می کند و Google Anthos از طریق Cloud Run یکپارچه سازی بدون سرور دارد. (در مورد ابر آمازون، AWS Outposts، چارچوب ابر ترکیبی آن، در حال حاضر گزینه بدون سرور را ارائه نمی دهد.)
روش اول برای راه اندازی نیاز به تلاش بیشتری دارد ، اما کنترل بیشتری بر روی چارچوب بدون سرور و نحوه پیکربندی آن دارد. همچنین ممکن است شما را در دستیابی بهتر به هزینه های پایین تر قرار دهد، زیرا بسیاری از راهکارهای بدون سرور برای ابرهای خصوصی منبع باز و رایگان برای استفاده هستند.
از سوی دیگر، روش دوم، با استفاده از یک راهکار ترکیبی ابر از یک فروشنده ابر عمومی، استقرار در اکثر تیم ها ساده تر خواهد بود، زیرا نیازی به راه اندازی یک ابر خصوصی ندارد. همچنین این مزیت را به وجود می آورد که می توانید همان توابع بدون سرور را در مرکز داده یا مستقیماً در ابر عمومی مستقر کنید. یک عملکرد بدون سرور که از طریق Azure Stack مستقر شده است، با حداقل تلاش برای بلند کردن و جابجایی در Azure Functions، قابل اجرا است.
توابع بدون سرور در ابر عمومی به راحتی قابل استفاده هستند، اما بهترین هزینه، عملکرد یا امنیت را برای انواع بارهای کاری ارائه نمی دهند. برای موقعیت هایی که راهکار های سرور به فروشندگان ابر عمومی خلاصه می شوند، استقرار توابع بدون سرور را در مرکز داده یا مرکز همسان سازی خود در نظر بگیرید.