مهندسی پلتفرم و سیر تکامل مهندسی نرم‌افزار از Dev و Ops

1404/09/18
54 بازدید

مقدمه: چرا به مفهوم جدیدی به نام «مهندسی پلتفرم» نیاز پیدا کردیم؟

«مهندسی پلتفرم» (Platform Engineering) یکی از موضوعات داغ و جدید در دنیای DevOps و رایانش ابری است. برای درک هر مفهوم جدید، ابتدا باید مشکلاتی را که آن مفهوم برای حلشان به وجود آمده است، بشناسیم. این سند، سفر تکاملی از جدایی سنتی تیم‌های توسعه (Dev) و عملیات (Ops) به DevOps و در نهایت به مهندسی پلتفرم را دنبال می‌کند و نشان می‌دهد که چگونه هر مرحله، پاسخی هوشمندانه به چالش‌های مرحله قبل بوده است.

——————————————————————————–

1. دنیای قدیم: تیم‌های مجزای توسعه و عملیات

در مدل سنتی، فرآیند تحویل نرم‌افزار شبیه «پرتاب کردن اپلیکیشن از روی دیوار» بود. تیم توسعه مسئول برنامه‌نویسی بود و پس از اتمام کار، اپلیکیشن بسته‌بندی شده را به تیم عملیات تحویل می‌داد تا آن را مستقر، اجرا و نگهداری کند.

چالش اصلی: این مدل یک فرآیند کند و انعطاف‌ناپذیر بود که مانع بزرگی بر سر راه سرعت و همکاری مؤثر محسوب می‌شد.

مشکلات اصلی این مدل عبارت بودند از:

  • فرآیندهای کند: توسعه‌دهندگان برای هر تغییری در زیرساخت، مانند درخواست یک سرور جدید یا ایجاد یک پایپ‌لاین CI/CD، باید منتظر تیم عملیات می‌ماندند.
  • چالش‌های ارتباطی: در سوی دیگر، تیم عملیات نیز برای رفع مشکلاتی در اپلیکیشن که بر استقرار یا اجرای آن تأثیر می‌گذاشت، منتظر توسعه‌دهندگان می‌ماند.
  • سیلوهای دانشی: این جدایی کامل باعث ایجاد سیلوهای دانشی می‌شد؛ تیم توسعه درکی از زیرساخت نداشت و تیم عملیات از منطق درونی اپلیکیشن بی‌خبر بود.

این موانع، نیاز به یک پارادایم کاملاً جدید را آشکار ساخت و زمینه‌ساز انقلابی به نام DevOps شد.

——————————————————————————–

2. انقلاب DevOps: سرعت و انعطاف‌پذیری به قیمت پیچیدگی

DevOps به عنوان راه‌حلی برای مشکلات مدل سنتی ظهور کرد. با متحد کردن تیم‌های توسعه و عملیات در یک تیم واحد، موانع ارتباطی و فرآیندهای کند از بین رفتند. مهم‌ترین دستاورد این بود که یک تیم واحد، مالک کل چرخه حیات اپلیکیشن، از کدنویسی گرفته تا زیرساخت و اجرا، شد. این مدل، انعطاف‌پذیری و سرعت بی‌سابقه‌ای را به ارمغان آورد.

اما این انقلاب، به نوبه خود مجموعه‌ای از چالش‌های پیش‌بینی‌نشده را به وجود آورد. این قدرت و مالکیت، مسئولیت‌ها و مشکلات جدیدی را به همراه آورد.

الف) مشکل بار شناختی بیش از حد (Cognitive Load)

یک تیم DevOps ناگهان مسئول مجموعه‌ی وسیعی از وظایف شد که نیازمند تخصص‌های گوناگون بود.

  • توسعه اپلیکیشن
  • راه‌اندازی و نگهداری پایپ‌لاین‌های CI/CD
  • نوشتن اسکریپت‌های زیرساخت به عنوان کد (Infrastructure as Code – IaC) مانند Terraform
  • راه‌اندازی، پیکربندی و نگهداری کلاسترهای Kubernetes
  • پیکربندی سیستم‌های لاگین و مانیتورینگ
  • اجرای اسکن‌های امنیتی
  • نگهداری Helm charts و مخازن Docker

این بار شناختی سنگین، تمرکز تیم را از هدف اصلی خود دور می‌کرد. در موارد شدید، «گاهی اوقات مدیریت زیرساخت، به تلاشی بیشتر از نوشتن کد اپلیکیشن و تولید منطق کسب‌وکار نیاز داشت.»

ب) مشکل عدم ثبات و اتلاف منابع (Inconsistency and Waste)

تصور کنید ۱۰ تیم DevOps دارید که ۱۰ پلتفرم متفاوت برای اجرای اپلیکیشن‌های خود می‌سازند و مدیریت می‌کنند. هر تیم از ابزارها و پیکربندی‌های خاص خود استفاده می‌کند. این رویکرد به مشکلات زیر منجر می‌شود:

  • اتلاف منابع: تلاش‌های تکراری در سراسر سازمان برای حل مشکلات یکسان.
  • عدم ثبات: نبود استانداردهای یکپارچه، کار را برای تیم‌های مرکزی مانند امنیت و انطباق (Compliance) بسیار دشوار می‌کند تا بتوانند بر کل سیستم‌ها نظارت داشته باشند.

ج) مشکل کمبود تخصص و ریسک‌های ناشی از آن

مفهوم «You Build It, You Run It» (تو می‌سازی، تو اجرا می‌کنی) در زمانی شکل گرفت که اپلیکیشن‌ها و زیرساخت‌ها به پیچیدگی امروز نبودند. در دنیای مدرن که با محیط‌های چندابری (multi-cloud)، هزاران میکروسرویس و سیستم‌های توزیع‌شده سروکار داریم، انتظار داشتن از هر تیمی برای متخصص بودن در همه چیز، واقع‌بینانه نیست. تیم‌های اپلیکیشن ممکن است تخصص کافی برای پیکربندی صحیح سیستم‌های پیچیده‌ای مانند Kubernetes را نداشته باشند. این کمبود تخصص می‌تواند عواقب جدی به دنبال داشته باشد:

  • پیکربندی‌های نادرست که منجر به ناکارآمدی یا قطعی سرویس می‌شود.
  • مشکلات و حفره‌های امنیتی جدی.
  • فقدان کامل سیستم‌های لاگین و مانیتورینگ که عیب‌یابی را غیرممکن می‌کند.

در حالی که تیم‌های مستقل DevOps سریع بودند، فقدان استانداردها در سراسر سازمان، باعث اتلاف منابع، افزایش ریسک‌های امنیتی و ناتوانی در مقیاس‌پذیری مؤثر می‌شد. این رویکرد، کار را برای تیم‌های مرکزی مانند امنیت و انطباق برای اعمال سیاست‌های یکپارچه غیرممکن می‌ساخت و مانعی جدی برای رشد سازمان بود.

در نهایت، سازمان‌ها بین دو گزینه‌ی نامطلوب گیر کرده بودند: «دنیای کند اما مدیریت‌شده‌ی Ops سنتی» در مقابل «دنیای سریع اما پر هرج‌ومرج و پرفشار تیم‌های مستقل DevOps».

——————————————————————————–

3. ظهور مهندسی پلتفرم: یافتن تعادل

مهندسی پلتفرم به عنوان راه‌حلی برای مشکلات DevOps معرفی شد که هدف آن دستیابی به بهترین‌های هر دو دنیا است: سرعت و انعطاف‌پذیری DevOps در کنار ثبات و تخصص مدل سنتی.

مفهوم اصلی ساده است: یک تیم متخصص به نام «تیم پلتفرم»، یک «پلتفرم توسعه‌دهنده داخلی» (Internal Developer Platform یا IDP) می‌سازد تا ابزارهای استاندارد شده و آماده به کار را به صورت سلف‌سرویس در اختیار تیم‌های اپلیکیشن قرار دهد. این مدل، مسئولیت‌ها را به شکل هوشمندانه‌ای تقسیم می‌کند تا بار شناختی را کاهش دهد:

مسئولیت مسئول کیست؟ شرح وظایف
ادمین و اپراتور ابزار تیم پلتفرم انتخاب، راه‌اندازی، پیکربندی، ایمن‌سازی و نگهداری ابزارها (مانند Kubernetes، Jenkins و…)
کاربر ابزار تیم اپلیکیشن/DevOps استفاده از ابزارهای آماده برای ساخت، استقرار و اجرای اپلیکیشن خود

این مدل با متمرکز کردن تخصص (مثلاً متخصصان Kubernetes در تیم پلتفرم) و استانداردسازی ابزارها، مشکلات عدم ثبات و کمبود تخصص را حل می‌کند.

مهم‌ترین ویژگی یک IDP، سلف‌سرویس بودن آن است. توسعه‌دهندگان می‌توانند به طور مستقل و بدون نیاز به تیکت زدن یا منتظر ماندن، منابع مورد نیاز خود (مثلاً یک کلاستر Kubernetes از پیش پیکربندی شده) را در چند دقیقه دریافت کنند. این ویژگی، سرعت و انعطاف‌پذیری DevOps را حفظ می‌کند.

——————————————————————————–

4. یک پلتفرم در عمل چگونه است؟

یک IDP در واقع یک «لایه انتزاعی» (Abstraction Layer) با یک رابط کاربری دوستانه (مانند یک پورتال وب یا API) است که پیچیدگی ابزارهای زیرین را از دید توسعه‌دهندگان پنهان می‌کند.

نقش زیرساخت به عنوان کد (IaC): تیم پلتفرم از ابزارهایی مانند Terraform یا Pulumi برای ایجاد «قالب‌های» از پیش پیکربندی شده استفاده می‌کند. این قالب‌ها بهترین شیوه‌ها (Best Practices) در زمینه امنیت، عملکرد و پایداری را در خود گنجانده‌اند و در عین حال به تیم‌ها اجازه می‌دهند تا پارامترهای مورد نیاز خود را برای سفارشی‌سازی ارسال کنند.

پلتفرم به عنوان یک محصول (Platform as a Product): یک نکته حیاتی این است که IDP یک پروژه یک‌باره با رویکرد «انفجار بزرگ» (Big Bang) نیست. در عوض، باید با آن مانند یک محصول داخلی رفتار کرد که به طور مداوم بر اساس نیاز کاربرانش (توسعه‌دهندگان) توسعه یافته و بهبود می‌یابد. مسیر موفقیت این است که تیم پلتفرم مانند یک تیم محصول عمل کند:

  1. با گام‌های کوچک شروع کنید: به جای ساختن یک پلتفرم کامل از روز اول، روی حل یک مشکل واقعی و فوری تمرکز کنید.
  2. دردناک‌ترین نقاط را شناسایی کنید: با تیم‌های اپلیکیشن صحبت کنید تا بفهمید چه چیزی بیش از همه مانع آن‌هاست. شاید مدیریت کلاسترهای Kubernetes بزرگ‌ترین چالش آن‌ها باشد.
  3. ارزش فوری ارائه دهید: با به عهده گرفتن همان چالش بزرگ (مثلاً مدیریت Kubernetes) شروع کنید. وقتی توسعه‌دهندگان ببینند که شما یک مشکل واقعی را از دوش آن‌ها برداشته‌اید، به شما اعتماد خواهند کرد.
  4. به صورت تکراری بسازید و بهبود دهید: با جلب اعتماد اولیه، می‌توانید به تدریج خدمات بیشتری را به پلتفرم اضافه کرده و آن را بر اساس بازخورد واقعی کاربران، تکامل دهید.

انعطاف‌پذیری به جای محدودیت: تیم پلتفرم نباید به یک مانع تبدیل شود، بلکه باید یک توانمندساز باشد. برای مثال، اگر یک تیم اپلیکیشن به ابزار جدیدی مانند CircleCI نیاز دارد، تیم پلتفرم به جای مخالفت، با آن‌ها همکاری می‌کند. رویکرد صحیح این است: «شما می‌خواهید از CircleCI استفاده کنید؟ بسیار خب، ما به شما کمک می‌کنیم تا آن را با بهترین شیوه‌ها راه‌اندازی و پیکربندی کنید.» پس از این همکاری، تیم پلتفرم می‌تواند CircleCI را به عنوان یک گزینه استاندارد جدید به پلتفرم اضافه کند تا تیم‌های دیگر نیز بتوانند به سادگی از آن بهره‌مند شوند.

——————————————————————————–

5. آیا مهندسی پلتفرم به معنای پایان DevOps است؟

خیر، مهندسی پلتفرم جایگزین DevOps نمی‌شود، بلکه آن را تکامل می‌دهد و به دو جریان تخصصی تقسیم می‌کند. با وجود پلتفرم، مهندسان DevOps در تیم‌های اپلیکیشن همچنان وظایف مهمی بر عهده دارند:

  1. استفاده صحیح از ابزارهای پلتفرم: مانند نوشتن مانیفست‌های Kubernetes یا فایل‌های Helm برای اپلیکیشن خود.
  2. استفاده از ماژول‌های IaC: استفاده از ماژول‌های Terraform که توسط تیم پلتفرم ارائه شده، در پایپ‌لاین‌های استقرار خود.
  3. پیکربندی پایپ‌لاین‌ها: استفاده از قالب‌های CI/CD ارائه شده توسط پلتفرم و اضافه کردن مراحل خاص مورد نیاز برای اپلیکیشن خود (مانند تست‌های ویژه یا مراحل کامپایل).

در این مدل، ما با دو جریان DevOps روبرو هستیم:

  • DevOps اپلیکیشن: متمرکز بر استفاده از پلتفرم برای سرعت بخشیدن به فرآیند تحویل اپلیکیشن.
  • DevOps پلتفرم: استفاده از اصول و فرآیندهای DevOps برای ساخت، نگهداری و بهبود خودِ IDP.

در نتیجه، نقش DevOps از بین نمی‌رود، بلکه بار شناختی آن کاهش یافته و وظایف آن متمرکزتر و تخصصی‌تر می‌شود.

——————————————————————————–

نتیجه‌گیری: گام بعدی در تکامل

مسیر تکامل مهندسی نرم‌افزار را می‌توان این‌گونه خلاصه کرد: از سیلوهای کند تیم‌های مجزای Dev و Ops، به تیم‌های سریع اما پرفشار DevOps، و در نهایت به مدل متعادل و کارآمد مهندسی پلتفرم رسیدیم.

ارزش اصلی مهندسی پلتفرم، کاهش بار شناختی از دوش توسعه‌دهندگان و ایجاد ثبات و استاندارد در سراسر سازمان است. این رویکرد به تیم‌ها اجازه می‌دهد تا بدون از دست دادن سرعت و انعطاف‌پذیری، بر روی ارائه ارزش کسب‌وکار تمرکز کنند. مهندسی پلتفرم یک گام منطقی رو به جلو در دنیای پیچیده نرم‌افزار مدرن است که به سازمان‌ها کمک می‌کند تا به طور پایدار و مقیاس‌پذیر رشد کنند.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

آخرین مقالات