Cloud-Native چیست؟
فناوری Cloud خود را به عنوان یک تغییر دهنده بازی، در دنیای دیجیتال ثابت کرده است. با مهاجرت افراد و سازمانهای بیشتری به ابر، متخصصان فناوری اطلاعات با چالش توسعه منابع بیشتر برای استفاده کامل از مزایای رایانش ابری مواجه میشوند. رایانش ابری هنوز به عنوان یک فناوری نسبتا جدید شناخته میشود و اکنون به اپلیکیشنهایی نیاز داریم که برای عملکرد در فضای ابری طراحی شده باشند. به عبارت دیگر، ما به اپلیکیشن های cloud-native نیاز داریم.
این مطلب به بررسی موضوع Cloud-Native یا ابر بومی ، از جمله برنامههای کاربردی، معماری و توسعه میپردازد. پشتههای مرتبط را توضیح داده و مزایا و معایب برنامههای ابری را بررسی میکنیم.
Cloud-Native چیست؟
Cloud-Native یک رویکرد طراحی نرم افزار کاربردی است که برنامههای امروزی را در محیطهای رایانش ابری ایجاد، استقرار و مدیریت میکند. این برنامهها برای استفاده کامل از مزایای رایانش ابری، بهره برداری از مقیاس، انعطاف پذیری، قابلیت ارتجاعی (elasticity) و انعطاف پذیری ابری ساخته شدهاند.
بهعلاوه، این برنامهها در ابرهای عمومی، خصوصی و ترکیبی اجرا شده و ویژگیهایی مانند میکروسرویسها، زیرساختهای تغییرناپذیر، کانتینرها، مش سرویس و API را در خود جای میدهند.
به عبارت ساده تر، کلود نیتیو یا ابر بومی منبعی را توصیف میکند که به صورت سفارشی برای عملکرد در یک محیط محاسبات ابری طراحی شده است.
اپلیکیشن Cloud-Native چیست؟
اپلیکیشنهای Cloud Native برنامههای نرمافزاری هستند که شامل بسیاری از سرویسهای کوچک و وابسته به هم هستند که به عنوان میکروسرویس شناخته میشوند. بهطور سنتی، توسعهدهندگان اپلیکیشنهای بزرگ را با ساختار تک بلوک میسازند که شامل تمام قابلیتهای مورد نیاز است. با این حال، با استفاده از این رویکرد، توسعهدهندگان قابلیتها را به میکروسرویسهای کوچکتر تقسیم و برنامهها را چابکتر میکنند، زیرا این میکروسرویسها بهطور مستقل کار میکنند و به حداقل منابع محاسبات ابری نیاز دارند.
اپلیکیشنهای سازمانی سنتی و دمده (old-fashioned) با روشهای توسعه نرمافزار انعطافپذیر کمتر ساخته میشوند. توسعهدهندگان نرمافزار سنتی معمولا روی دستههای بزرگی از قابلیتهای نرمافزاری قبل از انتشار برای تست کار میکنند. در نتیجه، برنامههای کاربردی سازمانی سنتی زمان بیشتری برای استقرار دارند و باید مقیاسپذیرتر باشند. آنها یک محصول سفت و سخت و ثابت هستند.
از سوی دیگر، اپلیکیشنهای Cloud-Native از یک رویکرد مشارکتی استفاده میکنند و در پلتفرمهای مختلف بسیار مقیاسپذیر هستند. توسعه دهندگان اپلیکیشن ابری از ابزارهای نرم افزاری برای اتوماسیون فرآیندهای ساخت، تست و استقرار استفاده میکنند. توسعهدهندگان میتوانند فوری میکروسرویسها را راهاندازی(setup)، یا استقرار (deploy) یا تکرار (duplicate)کنند، چیزی که با برنامههای سنتی امکانپذیر نیست.
نکات زیر تمام آنچه را که باید در مورد اپلیکیشنهای ابری بدانید خلاصه می کند.
- آنها از اجزای مجزا و قابل استفاده مجدد به نام میکروسرویس تشکیل شدهاند. این میکروسرویسها برای ادغام و کارکرد در هر محیط ابری طراحی شدهاند.
- علاوه بر این، میکروسرویسها به عنوان بلوکهای ساختمانی عمل میکنند و معمولا در کانتینر بسته بندی میشوند.
- میکروسرویسها به عنوان یک موجودیت کامل با هم کار میکنند و اپلیکیشنها را میسازند، با این حال هر میکروسرویس میتواند به طور مستقل مقیاس شده، به طور مداوم بهبود یافته و به سرعت از طریق فرآیندهای اتوماسیون و ارکستراسیون تکرار شود.
- انعطاف پذیری هر میکروسرویس به چابکی و بهبود مستمر برنامهها می افزاید.
معماری Cloud-Native چیست؟
معماری ابر بومی (Cloud-Native)، اجزای نرمافزاری را که تیمهای توسعهدهنده برای ایجاد و استقرار برنامههای مقیاسپذیر استفاده میشود، مونتاژ میکند. Cloud-Native Computing Foundation (CNCF)، یک بنیاد متنباز است که به سازمانها کمک میکند تا عملیات خود را آغاز کنند، میکروسرویسها، کانتینرها، زیرساختهای غیرقابل تغییر، APIهای اعلامی و مش سرویسها را به عنوان بلوکهای ساختمان فناوری معماری ابر فهرست میکند. بیایید به هر بلوک با جزئیات نگاه کنیم.
میکروسرویس
میکروسرویسها اجزای کوچک و مستقل نرمافزار هستند که در مجموع به عنوان یک نرمافزار Cloud-Native کامل عمل میکنند. هر میکروسرویس در حل یک مشکل جزئی و خاص تخصص دارد. میکروسرویسها بهطور ضعیفی جفت میشوند، به این معنی که آنها اجزای نرمافزاری مستقلی هستند که با یکدیگر به اصطلاح talk )صحبت( میکنند. توسعهدهندگان با کار بر روی میکروسرویسهای جداگانه تغییراتی را در برنامه ایجاد میکنند تا برنامه حتی در صورت خرابی یک میکروسرویس به کار خود ادامه دهد.
کانتینر
کانتینرها کوچکترین واحدهای محاسباتی در اپلیکیشن ابری هستند. آنها اجزای نرم افزاری هستند که کد میکروسرویس سیستمهای ابری و سایر فایلهای ضروری را ذخیره میکنند. این برنامهها بهطور مستقل از سختافزار و سیستمعامل زیربنایی با کانتینری کردن میکروسرویسها اجرا میشوند. این عملکرد به این معنی است که توسعهدهندگان نرمافزار میتوانند اپلیکیشنهای Cloud-Native را on-premises، زیرساختهای ابری یا ابرهای ترکیبی مستقر کنند. توسعهدهندگان از کانتینرها برای بستهبندی میکروسرویسها با وابستگیهای مربوطه استفاده میکنند، مانند کتابخانهها، فایلهای سورس و اسکریپتهایی که برنامه اصلی برای عملیات به آن نیاز دارد.
مزایای کانتینر عبارتند از:
- استفاده از منابع محاسباتی کمتر نسبت به استقرار اپلیکیشنهای سنتی
- استقرار منابع تقریبا فوری
- مقیاس کارآمد منابع رایانش ابری که برنامه برای اجرا نیاز دارد
زیرساخت تغییرناپذیر
زیرساخت تغییرناپذیر به این معنی است که سرورهایی که میزبان برنامههای ابری هستند پس از استقرار تغییر نمیکنند. اگر برنامه به منابع محاسباتی بیشتری نیاز داشته باشد، سرور قدیمی رها و برنامه به سرور جدیدتر و با کارایی بالا منتقل میشود. زیرساخت تغییرناپذیر با اجتناب از ارتقاء دستی، استقرار را به یک فرآیند قابل پیش بینی تبدیل میکند.
APIهای اعلامی
رابط برنامه نویسی کاربردی (API) روشی است که چندین نرم افزار از آن برای مبادله اطلاعات استفاده میکنند. سیستمهای Cloud-Native از APIها استفاده میکنند تا میکروسرویسهای متصلشده را به هم نزدیک کنند. API به جای مشخص کردن مراحل مورد نیاز برای دستیابی به نتیجه، به کاربران اطلاع میدهد که میکروسرویس به چه داده هایی نیاز دارد و چه نتایجی میتواند بدهد.
مش سرویس
مش سرویس لایهای از نرم افزار در زیرساخت ابری است که ارتباط بین چندین میکروسرویس را مدیریت میکند. توسعه دهندگان از مش سرویس برای ترکیب توابع اضافی بدون ایجاد کد جدید در برنامه استفاده میکنند.
توسعه برنامه Cloud-Native چیست؟
توسعه برنامههای Cloud-Native نشان میدهد که توسعهدهندگان نرمافزار چگونه و کجا برنامهها را میسازند و به کار میگیرند. توسعه موفقیت آمیز اپلیکیشن ابری نیازمند یک تغییر فرهنگی است. توسعهدهندگان باید شیوههای نرمافزاری خاصی را برای ارائه ویژگیهای کاربردی، کاهش زمانبندی تحویل نرمافزار و کاربردی که انتظارات مشتری در حال تکامل را برآورده میکنند، ترکیب کنند. بیایید برخی از شیوههای توسعه استاندارد را بررسی کنیم.
- ادغام مداوم - یکپارچه سازی مداوم (CI) یک روش نرم افزاری گسترده است که در آن توسعه دهندگان به طور مکرر و دقیق تغییرات را در یک پایگاه کد مشترک ادغام میکنند. این تغییرات کوچک و مکرر کارایی توسعه را افزایش میدهد زیرا توسعه دهندگان میتوانند سریعتر مشکلات را شناسایی و عیب یابی کنند. ابزارهای CI بهطور خودکار کیفیت کد هر تغییر را ارزیابی میکنند تا تیمهای توسعه بتوانند با اطمینان ویژگیهای جدید را اضافه کنند.
- تحویل پیوسته - تحویل پیوسته (CD) یکی دیگر از نرم افزارهای محبوبی است که از توسعه Cloud-Native پشتیبانی میکند. به لطف CD، تیمهای توسعه میتوانند اطمینان حاصل نمایند که هر میکروسرویس همیشه برای استقرار ابری آماده است. توسعه دهندگان از ابزارهای اتوماسیون نرم افزاری برای کاهش ریسک هنگام ایجاد تغییرات، مانند معرفی ویژگیهای جدید یا دیباگ استفاده میکنند. در نهایت، CI و CD با هم کار مینمایندتا ارائه نرم افزار کارآمد را ایجاد کنند.
- دواپس - DevOps یک فرهنگ نرم افزاری محبوب است که همکاری بین تیم های توسعه و عملیات را افزایش میدهد. یک فلسفه طراحی که با فرآیند Cloud-Native به خوبی کار میکند. شیوههای DevOps به سازمانها اجازه میدهد چرخه عمر توسعه نرمافزار را سرعت بخشند. توسعه دهندگان نرم افزار و مهندسان عملیات از ابزارهای DevOps برای خودکارسازی توسعه استفاده میکنند.
- محاسبات بدون سرور - Serverless computing یک مدل ابری است که در آن ارائهدهنده پلتفرم ابری زیرساخت سرور زیربنایی را مدیریت میکند. توسعهدهندگان به محاسبات بدون سرور روی میآورند زیرا زیرساخت ابری بهطور خودکار پلتفرم را مقیاسبندی و پیکربندی میکند تا نیازهای برنامه توسعهدهنده را برآورده نماید. توسعه دهندگان فقط برای منابع خود هزینه میپردازند. معماری بدون سرور به طور خودکار منابع محاسباتی را زمانی که برنامه اجرا نمیشود حذف میکند.
خرید سرور مجازی در پنج موقعیت جغرافیایی ایران، ترکیه، هلند، آلمان و آمریکا با قابلیت تحویل آنی در پارسدو فراهم است.
پشته Cloud-Native چیست؟
یک پشته ابر بومی(Cloud-Native)، لایههای فناوری را که توسعهدهندگان برای ساخت، استقرار، مدیریت و اجرای برنامههای طراحی شده برای ابر استفاده میکنند، توصیف مینماید. در ادامه به تفکیک دسته بندیها می پردازیم.
- لایه تعریف و توسعه برنامه - این لایه شامل فناوریهای نرمافزاری است که برای ساخت اپلیکیشنهای Cloud-Native استفاده میشوند. توسعه دهندگان برنامه با استفاده از فناوری های ابری مانند ایمیجهای کانتینر، دیتابیس، پیام رسانی، یکپارچه سازی پیوسته (CI) و ابزارهای تحویل پیوسته (CD) برنامههای ابری ایجاد میکنند.
- لایه زیرساخت - لایه زیرساخت به عنوان پایه و اساس پشته ابر عمل کرده و شامل سیستم عاملها، شبکهها، ذخیره سازی و سایر منابع محاسباتی است که توسط یک ارائه دهنده ابر شخص ثالث مدیریت میشود.
- لایه ارکستراسیون و مدیریت - ارکستراسیون و مدیریت مسئول یکپارچه سازی اجزای مختلف ابری هستند، بنابراین آنها به عنوان یک واحد عمل کرده و مشابه نحوه عملکرد یک سیستم عامل در محاسبات سنتی هستند. توسعهدهندگان برای استقرار، مدیریت، نظارت و مقیاسبندی برنامههای ابری بر روی ماشینهای مختلف به ابزارهای ارکستراسیون مانند Kubernetes متکی هستند.
- ابزارهای مشاهده و تحلیل - ابزارهای مشاهدهپذیری و تجزیه و تحلیل، سلامت سیستم برنامههای ابری را مانیتور، ارزیابی، نظارت و بهبود میبخشند. توسعهدهندگان از این ابزارها برای نظارت بر معیارهایی مانند حافظه، استفاده از CPU و تاخیر استفاده میکنند تا اطمینان حاصل کنند که کیفیت سرویس اپلیکیشن تحت تاثیر قرار نمیگیرد.
- لایه تامین - Provisioning layer شامل سرویسهای ابری است که محیطهای ابری را تخصیص و پیکربندی میکند.
- لایه زمان اجرا - لایه Runtime فناوریهای ابری را برای کارکرد کانتینرها ارائه میکند و شامل ذخیرهسازی دادههای ابری، قابلیت شبکهسازی و زمان اجرای کانتینر است.
مزایای اپلیکیشنهای Cloud-Native
اپلیکیشنهای Cloud-Native یا NCA، برنامههایی هستند که برای استفاده در معماری محاسبات ابری طراحی شدهاند. مزایای آنها عبارتند از:
- استقلال (Independence) این معماری به توسعه دهندگان اجازه میدهد تا NCAها را مستقل از یکدیگر بسازند، به این معنی که میتوانند به صورت جداگانه مدیریت و مستقر شوند.
- تاب آوری (Resiliency) یک NCA با طراحی خوب میتواند زنده باشد و حتی در هنگام قطع زیرساخت آنلاین بماند.
- بر اساس استانداردهای ثابت (Based on consistent standards) خدمات ابر بومی اغلب مبتنی بر فناوری متنباز و مبتنی بر استانداردها برای قابلیت همکاری بهتر و قابلیت حمل بار کاری هستند. این فرآیند به حذف قفل فروشنده (vendor lock-in) و افزایش قابلیت حمل کمک میکند.
- چابکی تجاری (Business agility) برنامههای کاربردی ابری گزینههای استقرار انعطافپذیری را در سراسر شبکه ارائه میکنند و کوچکتر از برنامههای سنتی هستند که توسعه، استقرار و تکرار آنها را آسانتر میکنند.
- اتوماسیون (Automation) NCAها از ویژگیهای اتوماسیون DevOps استفاده میکنند و امکان تحویل و استقرار مداوم تغییرات نرمافزاری که به طور منظم منتشر میشوند را فراهم میکنند. توسعه دهندگان همچنین میتوانند از روشهایی مانند استقرار سبز-آبی (Blue-Green Deployment) و استقرار قناری(canary deployment) برای بهبود برنامهها بدون ایجاد اختلال در تجربه کاربر استفاده کنند.
- بدون داونتایم (No downtime) به لطف سازماندهندگان کانتینر مانند Kubernetes، توسعهدهندگان میتوانند بهروزرسانیهای نرمافزاری را بدون داونی اجرا کنند.
معایب اپلیکیشنهای Cloud-Native چیست؟
به همان اندازه که اپلیکیشنهای ابر بومی خوب هستند، جنبههای منفی نیز دارند.
- اگرچه میکروسرویسها یک رویکرد تکراری برای بهبود برنامهها را امکان پذیر میکنند، اما متاسفانه میتوانند نیاز به مدیریت عناصر افزایش یافته را نیز ایجاد کنند. به جای پرداختن به یک برنامه کاربردی گسترده، مدیریت بسیاری از سرویسهای کوچک و مجزا ضروری است.
- اگرچه NCAها امکان توسعه و استقرار سریع را فراهم میکنند، اما همچنین نیازمند فرهنگ تجاری هستند که بتواند با این سرعت افزایش یافته نوآوری مقابله کند.
- این برنامهها به مجموعه ابزارهای اضافی برای مدیریت خطوط لوله DevOps، جایگزینی ساختارهای مانیتورینگ سنتی و کنترل معماری میکروسرویسها نیاز دارند.