Orchestration چیست؟
Orchestration به مجموعه اقداماتی گفته میشود که منجر به خودکارسازی پیکربندی، هماهنگی، اعمال تنظیمات و به طور کلی مدیریت سرویسها و سامانههای نرمافزاری میشود. به بیان دیگر، Orchestration با ارايهی ابزارهایی، مدیریت وظایف و روندهای کاری سنگین و پیچیده را ساده میکند.
امروزه نیازهای فناوری اطلاعات و نرمافزار شرکتها پیچیدهتر و چالشبرانگیزتر از گذشته است. برای نمونه، باید بتوان از برنامههایی که به شکل cluster طراحی شده و روی چندین مراکز داده قرارگرفتهاند، همراه با وابستگیهای پیچیدهیشان پشتیبانی کرد. یا در حالتی دیگر، تیمهای عملیات و مدیران سرورهای محصولات پرمخاطب، معمولن سرویسهای زیادی را مدیریت میکنند. اما انجام دستی این وظایف به هیچ عنوان استراتژی مقیاسپذیر خوبی تلقی نمیشود.
هر اندازه سامانههای نرمافزاری و سرویسهای بهکار رفته بزرگتر، پیچیدهتر و نیازمند انجام کار بیشتر باشند، مدیریت تمامی اجزای آن مشکلتر و طولانیتر میشود. اینجا همان مرحلهای است که نیاز به خودکارسازی وظایف و تنظمیات، به شدت احساس میشود و Orchestration اهمیت خود را نشان میدهد.
تفاوت Orchestration و Automation
نخست، بیان این نکته ضروری است که خودکارسازی یا automation، با Orchestration تفاوت دارد اما این دو مفاهیمی نامرتبط نیستند و در یک راستا قرار دارند.
خودکارسازی با کاهش دخالت نیروی انسانی در انجام وظایف تعریف شده و با جایگزینی انسان با سامانههای نرمافزاری، سعی در افزایش کارایی و بهرهوری کسبوکار یک مجموعه دارد. با استفاده از چنین نرمافزارها و ابزارهایی شاهد کاهش هزینه، پیچیدگی و حتا بروز خطا در انجام وظایف تعریف شده نیز هستیم. حتا قابلیتها و سرویسهای جدید، سریعتر میتوانند در مرحلهی انتشار نهایی قرار بگیرند. بنابراین به طور کلی، اتوماسیون به معنای خودکارسازی یک وظیفهی تعریف شده است.
اما در Orchestration، تلاش بر خودکارسازی چندین وظیفه و رویههای کاری با گامهای متعدد است. در نتیجه میتوان با تقریب خوبی بیان کرد که Orchestration شامل مجموعهای از خودکارسازیها است.
بنابراین، با انجام خودکارسازی و اتوماسیون میتوان به Orchestration رسید. به بیان دیگر، تنها هنگامی که رویهها خودکارسازی شوند، میتوان با استفاده از Orchestration در مقیاس کلان، آنها را بهشکل خودکار بهاجرا درآورد.
کاربرد Orchestration
Orchestration در مراحل مختلفی از دنیای نرمافزار قابلیت استفاده دارد. شاید یکی از معروفترین آنها، کانتینرها باشند.
اگر از آن دسته از برنامهنویسان و توسعهدهندگانی باشید که برنامهها و سرویسهای زیادی روی فضای ابری دارید، به احتمال زیاد با کانتینرها و داکر آشنا هستید. با استفاده از Docker بهراحتی میتوان سرویسها را خاموش و روشن کرد و حتا بدون مشکل، به محیطهای دیگر انتقال داد. اما مدیریت تکتک این کانتینرها هنگامی که از تعدادی مشخص بالاتر روند، بهوسیلهی یک کاربر نه امری منطقی است و نه شدنی.
برای حل این مشکل نیازمند پلتفرمی مدیریتی هستیم که بهطور خودکار کانتینرها را اگر نیاز بود روشن، خاموش و حتا به حال تعلیق درآورد. بهطور ایدهآل نیز این پلتفرم باید توانایی کنترل میزان منابع در دسترس هرکدام از کانتینرها، مانند فضای ذخیرهسازی و شبکه را داشته باشد. به بیان بهتر، ابزاری که بتواند کار مدیریت تعداد زیادی کانتینر را انجام دهد. شاید بتوان Kubernetes را به عنوان یکی از معروفترین ابزارها در حوزهی Orchestration داکر نام برد. ابزارهای متنوع دیگری نیز بسته به پلتفرم و نوع Orchestration وجود دارند. از آن جمله میتوان به Ansible و AWS CloudFormation اشاره کرد.
Orchestration و بازار کار
پییچدگی فراوان محصولات نرمافزاری، معماری سرویسگرا و افزایش سرویسهای بهکار رفته روی کانتینرها سبب شدهاند که در سالهای اخیر موقعیتهای شغلی جدیدی نیز مانند SRE - Site Reliability Engineering در دنیای فناوری اطلاعات و مهندسی کامپیوتر شکل بگیرد. برای نمونه، اگر محصول نرمافزاری روی تعداد زیادی کانتینر، سرویسِ در حال اجرا داشته باشد، به طور طبیعی برای مدیریت و توسعهی آن از ابزارهای Orchestration بهره گرفته میشود. مسوولیت فرد با عنوان شغلی SRE، بهطور خلاصه، مدیریت چنین ابزارهایی برای بالا نگه داشتن سرویسها و عملکرد سلامتِ نرمافزار در شرایط و چرخههای مختلف است.