مصاحبهٔ دوآپس؛ شب ۳: رایانش ابری و IaC
فهرست نوشته
امشب ابتدا مدل مصرف منابع ابری را از نام فروشنده جدا میکنیم و سپس میبینیم Infrastructure as Code یا IaC چگونه تغییر زیرساخت را نسخهپذیر میکند. در پایان باید بتوانید خانوادهٔ سرویسهای سه ابر بزرگ را مقایسه کنید و بدون ساختن رقابت مصنوعی، نقش Terraform و Ansible را توضیح دهید.
پرسشهای ۲۱ تا ۲۵: پلتفرمهای ابری#
۲۱. رایانش ابری چیست؟#
پاسخ کوتاه: رایانش ابری ارائهٔ درخواستی منابعی مانند compute، storage، network، database و سرویسهای مدیریتی از طریق API است؛ مصرفکننده میتواند منابع را سریع فراهم یا آزاد کند و معمولاً بر اساس مصرف یا تعهد هزینه بپردازد.
«روی اینترنت بودن» تعریف کافی نیست. ویژگیهای مهم شامل self-service، ظرفیت اشتراکی، کشسانی، اندازهگیری مصرف و خودکارسازیاند. ابر میتواند عمومی، خصوصی یا ترکیبی باشد. انتقال VM به یک provider نیز خودبهخود معماری را مقیاسپذیر یا ارزان نمیکند. مسئولیت امنیتی میان provider و مشتری تقسیم میشود؛ مرز این مسئولیت با نوع سرویس تغییر میکند و باید صریح فهمیده شود.
۲۲. AWS چیست؟#
پاسخ کوتاه: Amazon Web Services یک پلتفرم ابر عمومی با سرویسهای compute، storage، network، database، identity و مدیریت است. نمونههای شناختهشده شامل EC2 برای ماشین، S3 برای object storage، RDS برای پایگاه مدیریتشده و IAM برای هویت و مجوزند.
فهرستکردن نام صدها سرویس پاسخ خوبی نیست. یک workload را به قابلیتها نگاشت کنید: VPC مرز شبکه، load balancer ورودی، EC2 یا ECS/EKS محل اجرا و CloudWatch بخشی از پایش. Region و Availability Zone دامنههای جغرافیایی و خرابی متفاوتاند. همچنین «managed» به معنی بینیازی از طراحی backup، دسترسی و هزینه نیست؛ provider بخشی از عملیات را میگیرد، اما مسئولیت داده و تنظیم مشتری باقی میماند.
۲۳. Azure چیست؟#
پاسخ کوتاه: Microsoft Azure پلتفرم ابر عمومی مایکروسافت است و سرویسهایی مانند Virtual Machines، App Service، Azure Functions، Blob Storage، Virtual Network و پایگاههای مدیریتشده ارائه میدهد.
در مقایسه، از معادلسازی تقریبی استفاده کنید نه ادعای یکسانبودن: Azure VM و EC2 هر دو compute مجازیاند، ولی مدل هویت، شبکه، SKU و عملیاتشان تفاوت دارد. ساختار tenant، subscription و resource group برای حاکمیت مهم است و Microsoft Entra ID هویت را پشتیبانی میکند. انتخاب Azure ممکن است با مهارت تیم و یکپارچگی سازمانی مرتبط باشد؛ «بهتر بودن» بدون نیاز، منطقه و هزینه معنایی ندارد.
۲۴. Google Cloud Platform چیست؟#
پاسخ کوتاه: Google Cloud پلتفرم ابر عمومی گوگل است. Compute Engine ماشین مجازی، Cloud Storage ذخیرهٔ شیء، GKE سرویس Kubernetes مدیریتشده، Cloud Run اجرای کانتینر مدیریتشده و BigQuery تحلیل داده را ارائه میکنند.
منبع اصلی این سؤال را در فهرست دارد ولی در بدنهٔ نسخهٔ بررسیشده پاسخ جداگانهای ارائه نمیکند. در مصاحبه فقط محصولات شاخص را نام نبرید؛ ساختار organization، folder و project، شبکهٔ VPC و IAM را نیز در مدل ذهنی جای دهید. انتخاب GCP باید بر پایهٔ نیاز workload، حضور منطقهای، دانش تیم، وابستگی سرویس و هزینهٔ خروج داده باشد، نه شهرت یک محصول خاص.
۲۵. انواع سرویس ابری کداماند؟#
پاسخ کوتاه: در IaaS مشتری سیستمعامل و برنامه را مدیریت میکند؛ در PaaS پلتفرم بخش بیشتری از runtime و عملیات را میگیرد؛ در SaaS مصرفکننده خود نرمافزار آماده را استفاده میکند. FaaS اجرای تابع رویدادمحور است و معمولاً زیرمجموعهای از serverless یا PaaS دیده میشود.
این مدلها طیف مسئولیتاند، نه جعبههای کاملاً جدا. هرچه سرویس مدیریتشدهتر باشد، کار عملیاتی معمولاً کمتر و کنترل یا قابلیت جابهجایی نیز محدودتر میشود. در IaaS هم provider سختافزار و مجازیسازی را مدیریت میکند؛ مشتری از امنیت معاف نیست. پاسخ خوب برای هر مدل یک مثال و مرز مسئولیت میدهد و سپس میگوید انتخاب بر اساس نیاز کنترل، سرعت تحویل، compliance و هزینه انجام میشود.
پرسشهای ۲۶ تا ۳۰: Infrastructure as Code#
۲۶. Infrastructure as Code چیست؟#
پاسخ کوتاه: IaC یعنی تعریف و تغییر زیرساخت با فایلهای ماشینخوان و گردش کار مهندسی نرمافزار، بهجای تکیه بر کلیک و دستور دستی ثبتنشده. تعریف در Git نگهداری، بازبینی و با ابزار مناسب به محیط اعمال میشود.
مزایا شامل تکرارپذیری، تاریخچه، peer review، آزمون سیاست و کاهش configuration drift است. با این حال کد اشتباه میتواند خطا را در مقیاس بزرگ تکرار کند. plan، کنترل دسترسی، state امن، policy و rollout مرحلهای ضروریاند. IaC الزاماً فقط declarative نیست؛ بعضی ابزارها رویهایاند. معیار اصلی این است که منبع تغییر قابل نسخهبندی و اجرای آن قابل تکرار و قابل ممیزی باشد.
۲۷. Terraform چیست؟#
پاسخ کوتاه: Terraform ابزار IaC اعلانی HashiCorp است که پیکربندی HCL را میخواند، با providerها API سامانههای مقصد را فراخوانی میکند و با استفاده از state برای رسیدن از وضع فعلی به وضع مطلوب plan میسازد.
پاسخ قدیمی «یک ابزار open-source» دقیق نیست: نسخههای فعلی Terraform تحت مجوز source-available شرکت HashiCorp منتشر میشوند؛ OpenTofu یک fork متنباز جداست. از نظر عملی، terraform plan پیشنمایش است و تضمین نمیکند زمان apply هیچ چیز تغییر نکرده باشد. state میتواند دادهٔ حساس داشته باشد و باید با دسترسی، رمزنگاری، versioning و قفل مناسب نگهداری شود. Terraform برای provision زیرساخت قوی است، نه جایگزین کامل مدیریت روزمرهٔ داخل سیستمعامل.
۲۸. Ansible چیست؟#
پاسخ کوتاه: Ansible ابزار خودکارسازی است که برای مدیریت پیکربندی، provision، استقرار برنامه و orchestration به کار میرود. playbookها با YAML هدف را توصیف میکنند و moduleها کار را روی nodeهای مقصد، اغلب از طریق SSH و بدون agent دائمی، اجرا میکنند.
مفهوم idempotence مهم است: اجرای دوبارهٔ task باید در صورت رسیدن به وضع مطلوب تغییر اضافه نسازد. این ویژگی به module و شیوهٔ نوشتن task بستگی دارد؛ یک shell دلخواه لزوماً idempotent نیست. inventory میزبانها و متغیرها را سازمان میدهد، role استفادهٔ مجدد را آسان میکند و Vault میتواند داده را رمز کند، اما مدیریت کلید و خروجی لاگ همچنان لازم است.
۲۹. Ansible و Terraform چه تفاوتی دارند؟#
پاسخ کوتاه: Terraform عمدتاً چرخهٔ عمر resourceهای APIمحور را با مدل declarative و state مدیریت میکند؛ Ansible معمولاً پیکربندی سیستم و اجرای گامهای عملیاتی را با اتصال به مقصد انجام میدهد و state مرکزی همنوع Terraform ندارد.
این دو میتوانند مکمل باشند: Terraform شبکه، VM و load balancer را بسازد و Ansible سیستمعامل و برنامه را پیکربندی کند. مرز همیشه ثابت نیست؛ هر دو قابلیتهایی در قلمرو دیگری دارند. انتخاب را با منبع حقیقت، نیاز به state، چرخهٔ عمر resource، روش اتصال و مهارت تیم توضیح دهید. فراخوانی بیقاعدهٔ یکی از داخل دیگری coupling و عیبیابی را سخت میکند؛ رابط میان مراحل باید روشن باشد.
۳۰. Terraform provider چیست؟#
پاسخ کوتاه: provider یک plugin جدا از Terraform است که API یک پلتفرم یا سرویس را میشناسد و resourceها و data sourceهای آن را پیادهسازی میکند. Terraform بدون provider نمیداند یک VPC، رکورد DNS یا پروژهٔ SaaS را چگونه بخواند و تغییر دهد.
نسخهٔ provider مستقل از Terraform است و باید در required_providers محدود و فایل lock در Git نگهداری شود. تنظیم provider ممکن است region، endpoint و روش احراز هویت را تعیین کند؛ credential را نباید داخل کد commit کرد. alias امکان چند تنظیم از یک provider را میدهد. ارتقای provider میتواند schema یا رفتار plan را تغییر دهد، پس باید release note، plan و محیط کمخطر بررسی شوند.
جمعبندی مصاحبهای#
ابر، API قابل مصرف برای قابلیتهای زیرساختی میدهد و IaC استفاده از آن API را قابل بازبینی میکند. نام سرویسها را به مسئولیت ربط دهید: چه کسی patch میکند، داده کجا میماند، تغییر چگونه دیده و بازگشت داده میشود؟ این پرسشها از حفظکردن معادل محصولات مهمترند.