شاید یک روز این رویا بود:
بدون خریدن سرور فیزیکی میتوانستیم یک نرم افزار را منتشر (Deploy) کنیم.
شاید این یک آرزو بود:
منابع سخت افزاری مورد نیاز یک نرم افزار به صورت اتومات، کاهش یا افزایش یابد.
شاید این یک معجزه بود:
نرم افزار خود را با یک کلیک در دسترس کل دنیا قرار دهیم.
اکنون، آرزوی دیروز، با معجزه امروز، به حقیقت تبدیل شده است.
امروزه کلود امکانات و ویژگیهای بسیار زیادی به صنعت آیتی افزوده است، واژهها و اصطلاحات زیادی در حوزه ابری شنیده میشود که گاها در تفاوت و شناخت این واژهها دچار اشتباه میشویم.
در این مقاله به معرفی و مقایسه نرمافزارها از دیدگاه ابری خواهیم پرداخت و سعی میکنیم قابلیتها و امکاناتی که امروزه توسط تکنولوژی ابری در اختیار ما قرار داده شده است را معرفی کنیم.
در گذشته نرم افزارها به گونهای طراحی میشدند که روی سرورهای فیزیکی نصب و در دسترس کاربران قرار میگرفتند. این نرمافزارها در سرورها با منابع سختافزاری مشخص امکان نصب داشتند، به عنوان مثال نرمافزاری که فقط میتوانست روی ورژن خاصی از پردازنده ها نصب و منتشر شود. معماری این نرم افزارها یکپارچه (Monolithic) بوده (بر خلاف معماری مایکروسرویس) و تمام ماژول و قابلیتهای نرمافزار به صورت یکپارچه در ساختاری واحد طراحی میشد. از جمله چالشها و مشکلات نرمافزارهای این چنینی میتوان به موارد زیر اشاره کرد:
برای منتشر کردن نرمافزار نیاز به تهیه و خریداری سرورهای قدرتمند فیزیکی وجود دارد و همچنین توسعهدهندگان نیاز به محیطهای تستی جهت کد نویسی خود دارند که فراهم نمودن این محیط نیز، نیازمند تهیه سرور فیزیکی میباشد . علاوه بر سرور نیز نیاز به تجهیزات شبکه و امنیتی وجود دارد که هر یک نیز شامل هزینهای مجزا هستند.
دسترسی به سرور مربوط به نرمافزار نیز از جمله چالشهای مهم به شمار میرود، به عنوان مثال در مواقع بروز مشکل و از دسترس خارج شدن نرمافزار، توسعهدهندگان میبایست به محل فیزیکی سرور مراجعه و اقدام به عیبیابی میکردند.
با توجه به نوع معماری نرمافزار که به صورت یکپارچه (Monolithic) طراحی شده است و همچنین به دلیل غیر ماژولار بودن اجزای نرمافزار، عیبیابی آن پیچیدگیهای زیادی به همراه داشت که در صورت بروز مشکل در بخشی از نرمافزار باعث قطع شدن کل آن نرم افزار میشود.
به روز رسانی نرمافزار مدت زیادی طول میکشید و امکان از دسترس خارج شدن کل برنامه نیز در آن وجود داشت.
برخی از مهمترین مشکلات نرمافزارهای قدیمی (Legacy) که با معماری Monolithic پیادهسازی شده بودند را بررسی کردیم. حال به این موضوع بپردازیم که نقش ابر در بهبود این گونه چالشها چه بوده است.
با پیشرفت تکنولوژی و به وجود آمدن صنعت کلود علاوه بر رفع مشکلاتی که توضیح داده شد امکانات زیادی برای توسعه و منتشر شدن نرمافزار به وجود آمد. برای بهره مندی از ویژگیها و امکانات کلودی، توسعهدهندگان و صاحبان نرمافزار مشتاق به استفاده از کلود شدند.
نرم افزارها برای اینکه از امکانات کلود استفاده کنند میبایست تغییراتی در آنها داده شود. تغییراتی که نرمافزار را قادر کند تا بتوانند با استفاده از منابع مجازیساز، روی سرور کلودی نصب و منتشر شوند. به این گونه نرمافزارها اصطلاحا نرم افزارهای فعال در ابر یا آماده برای ابر (Cloud ready) نیز گفته میشود.
به عبارتی دیگر میتوان اینگونه توضیح داد که نرم افزارهای Cloud Enabled و Cloud ready معمولا به برنامههایی گفته میشود که به شکل سنتی طراحی و ساخته شده و سپس برای رفع مشکلات و چالشهایی که در بخش قبل توضیح داده شد، به کلود منتقل میشوند برای انتقال به ابر میبایست قابلیت نصب و انتشار نرم افزار در ماشین مجازی به نرمافزار افزوده شود اما معماری زیربنایی و پایهای نرمافزار بدون تغییر باقی میماند. در واقع در فرآیند مهاجرت این دست از نرم افزارها به زیرساخت ابر، معماری نرمافزار بدون تغییر باقی مانده و اصطلاحا نرمافزار تنها برای اجرا روی زیرساختهای ابری فعال (Enable) میشود.
انتقال برنامه ها به کلود و استفاده از زیرساخت ابری، صرفه جویی زیادی در هزینهها را با خود به همراه خواهد داشت. گرچه این یکی از ویژگیهای مهم کلود است که نرم افزارهای قدیمی (Legacy) با معماری Monolithic از آن بهرهمند شدهاند، اما کلود امکانات و ویژگیهای بسیار زیادی دارد که این نوع نرمافزارها (Cloud Enabled Apps) با توجه به یکپارچه بودن معماریشان نمیتوانند از آنها بهرهمند شوند. در ادامه با معرفی مدلهای دیگر نرمافزارها به این ویژگیها خواهیم پرداخت.
گاهی معماری نرمافزار به گونهای است که با توجه به سیاستها و شرایط موجود نمیتوان کل آن را تغییر داد و مایکروسرویسی کرد. اما با برخی تغییرات در همان معماری یکپارچهای که نرمافزار دارد میتوان قابلیتهایی به آن افزود.
در این مدل نرمافزار علاوه بر ویژگیهای مدل قبلی از برخی دیگر از ویژگیهای کلودی نیز استفاده میشود، ویژگیهایی همچون موارد زیر:
– مقیاس پذیری بالا:
از قابلیتهای مهم کلودی است که در صورت نیاز، به سادگی میتوان منابع مورد استفاده نرمافزار را افزایش یا کاهش داد.
به کمک این قابلیت میتوان ترتیبی اتخاذ کرد که چندین نسخه از نرمافزار روی سرورهای کلودی منتشر شود و در زمان بروز مشکل روی سرور یا یکی از نسخهها، کاربران با قطعی نرمافزار مواجه نشوند.
در واقع میتوان گفت تفاوت اصلی که این دست از نرمافزارها (Cloud Based) با دسته قبلی که در بخش قبل توضیح داده شد (Cloud-Enabled) دارند این است که نرمافزارهای مبتنی بر ابر، طراحی مدرنتری داشته و مقادیری ماژولارتر طراحی شدهاند که میتوانند برای اجرا روی زیرساختهای ابری از قابلیتهای کلودی بیشتری پشتیبانی کنند.
نکتهای که در آخر بهتر است به آن اشاره کنیم، درست است که این نوع نرمافزارها تطبیق بیشتری با زیرساختهای ابری دارند ولی از ابتدا برای اهداف اجرا شدن در محیطهای ابری طراحی نشدهاند. در ادامه، این دست از نرمافزارها توضیح داده میشوند.
در این مدل نرمافزار معماری، از همان ابتدا به گونهای طراحی شده است که قادر به پیادهسازی در کلودهای عمومی مانند AWS (ارائهدهنده خدمات ابری آمازون) و Azure (ارائهدهنده خدمات ابری مایکروسافت) و GCP (ارائهدهنده خدمات ابری گوگل ) یا هر کلود عمومی دیگر باشد. در این مدل معماری نرم افزارها به صورت مایکروسرویسی و با دیدگاه سازگار بودن با محیطهای ابری از همان ابتدا طراحی و پیادهسازی شده است.
نرم افزارهای Cloud Native میتوانند از حداکثر ویژگیهای کلودی بهرهمند شوند. ویژگی برخی از آنها به شرح زیر است:
این ویژگی به صورتی عمل میکند که در مواقع مورد نیاز، منابع نرمافزار به صورت خودکار افزایش یا کاهش مییابد. به عنوان مثال ترافیک یک وبسایت فروشگاهی به دلیل طرح تبلیغاتی که داشته به یکباره افزایش مییابد، همزمان با افزایش ترافیک منابع مورد استفاده نرمافزار برای پاسخگویی به درخواستهای بالای مشتریان، به صورت خودکار نیز افزایش مییابد.
نرمافزار طراحی شده تحت پلتفرمهای حرفهای و شناخته شدهای مانند کوبرنتیز منتشر و در دسترس عموم قرار میگیرد.
با توجه به اتصال نرمافزار به ورژن کنترلی مانند گیت، به راحتی با بهرهگیری از فرایندهای CI/CD میتوان به روز رسانی نرمافزار را به سرعت بهبود بخشید.
برای هر قسمت نرم افزار میتوان افرونگی ایجاد کرد. به عنوان مثال همزمان ۳ نسخه از پایگاه داده نرمافزار منتشر شده باشد و هنگامی که اطلاعات در دیتابیس به روز رسانی میشود این به روز رسانی روی هر ۳ نسخه اتفاق بیفتند و با از کار افتادن یک نسخه از پایگاه داده، اختلالی در سرویس دهی نرم افزار ایجاد نخواهد شد.
در شکل زیر به مقایسه سه مدل ذکر شده از دیدگاه کلودی اشاره شده است.
همانطور که در تصویر مشاهده میکنید Cloud Ready هم راستا با مدل کلودی IaaS (زیر ساخت به عنوان سرویس) قرار دارد و نرمافزار در این مدل میتواند از امکانات ابری زیرساخت به عنوان سرویس استفاده کند. نرم افزار به سادگی در زیر ساختهای ابری مستقر و منتشر میشود در واقع تنها کافیست بدون تغییر در طراحی و پیادهسازی نرم افزار، اجرا روی تکنولوژی مجازیسازی به صورت ماشین مجازی را در نرمافزار ایجاد کرد که در این صورت قابلیت اجرا روی ابر مهیا میشود.
مدل Cloud Based (مبتنی بر ابر) که بین دو مدل Native (بومی) و Enabled (فعال) قرار دارد میتواند از امکانات مدل کلودی PaaS (پلتفرم به عنوان سرویس) استفاده کند، در مدل ابری پلتفرم به عنوان سرویس از ابزارهای قدرتمندی همچون کوبرنتیز استفاده شدهاست که به وسیله آن امکانات مختلفی به توسعهدهندگان ارائه شده است.
در مدل ابر بومی (Native) علاوه بر پلتفرم به عنوان سرویس نیز از نرم افزار به عنوان سرویس (SaaS) استفاده شده که حتی در این لایه ابری میتوان نرم افزارهای بومی به کاربران ارائه کرد.
شکل زیر، این سه نوع نرمافزار را از دید میزان سازگاری با زیرساختهای ابری و همچنین چالشهای نگهداری و مقیاسپذیری نرمافزار نشان میدهد.
نهایتا در نرمافزارهای بومی در ابر معجزهای که از آن صحبت شد تحقق یافته است. معجزهای که در آن با یک کلیک میتوان نرم افزار مد نظر خود را منتشر کرد و در دسترس عموم قرار داد.
در مقالههای بعدی سعی میشود مفاهیمی از جمله Stateful و Stateless را نیز توضیح داده شود که به ترتیب در نرم افزارهای Legacy و Cloud-Native مورد استفاده قرار میگیرند.