DevOps and Infrastructure

کاهش فاکتورهای ابری: راهنمای بهینه‌سازی هزینه‌ها با استفاده از نمونه‌های Spot و مقیاس‌بندی خودکار

در اکوسیستم مدرن DevOps، ابر تنها یک ابزار نیست، بلکه محرک کسب‌وکار است. با این حال، هزینه‌های ابری کنترل‌نشده می‌توانند به سرعت حاشیه سود را کاهش دهند. برای مهندسان زیرساخت با سطح متوسط تا پیشرفته، چالش دیگر تنها استقرار برنامه‌ها نیست، بلکه استقرار کارآمد آن‌هاست. دو ابزار قدرتمند در جعبه‌ابزار شما برای دستیابی به این تعادل بین عملکرد و هزینه، Amazon EC2 Spot Instances و سیاست‌های پویای Auto-Scaling هستند.

درک اقتصاد Spot Instances

نمونه‌های سنتی On-Demand نرخ ساعتی ثابتی را بدون توجه به تقاضا دریافت می‌کنند. در مقابل، Spot Instances به شما اجازه می‌دهند تا روی ظرفیت استفاده‌نشده EC2 موجود در AWS Cloud پیشنهاد قیمت (Bid) دهید. از آنجا که این ظرفیت بلااستفاده است، AWS آن را با تخفیف‌هایی تا ۹۰٪ نسبت به قیمت‌های On-Demand ارائه می‌دهد. مبادله این مدل، سادگی است: Spot Instances در صورت نیاز AWS به بازپس‌گیری ظرفیت، با دو دقیقه اعلان قبلی قطع می‌شوند.

این مدل برای بارهای کاری مقاوم در برابر خطا و انعطاف‌پذیر مانند پردازش دسته‌ای (Batch processing)، تحلیل داده، رندرینگ، ساخت‌های CI/CD و وب‌سرورهای بدون حالت (Stateless) ایده‌آل است. این مدل برای بارهای کاری حیاتی و پیوسته مانند پایگاه‌های داده اصلی یا پردازش تراکنش‌های بلادرنگ که توقف سرویس در آن‌ها غیرقابل قبول است، کمتر مناسب است.

یکپارچه‌سازی Spot Instances با گروه‌های Auto-Scaling

مدیریت دستی قطعی‌ها، دستورالعملی برای فاجعه است. کلید استفاده ایمن از Spot Instances، خودکارسازی مدیریت چرخه عمر از طریق گروه‌های Auto Scaling (ASG) است. یک ASG تضمین می‌کند که تعداد مشخصی از نمونه‌ها در تمام اوقات در حال اجرا باشند. با پیکربندی سیاست‌های ترکیبی نمونه‌ها، می‌توانید به AWS دستور دهید تا Spot Instances ارزان‌تر را در اولویت قرار دهد و در عین حال یک پایه از نمونه‌های On-Demand را برای پایداری حفظ کند.

در اینجا یک نمونه عملی از قطعه کد زیرساخت به عنوان کد (IaC) با استفاده از AWS CloudFormation برای تعریف یک سیاست نمونه ترکیبی آورده شده است:

AWSTemplateFormatVersion: '2010-09-09'
Resources:
  MyAutoScalingGroup:
    Type: AWS::AutoScaling::AutoScalingGroup
    Properties:
      LaunchTemplate:
        LaunchTemplateId: !Ref MyLaunchTemplate
        Version: !GetAtt MyLaunchTemplate.LatestVersionNumber
      MixedInstancesPolicy:
        InstancesDistribution:
          OnDemandBaseCapacity: 1
          OnDemandPercentageAboveBaseCapacity: 20
          SpotInstancePools: 3
        LaunchTemplate:
          LaunchTemplateId: !Ref MyLaunchTemplate
      MinSize: 2
      MaxSize: 10
      DesiredCapacity: 5

در این پیکربندی، ASG حداقل یک نمونه On-Demand را تضمین می‌کند. فراتر از این ظرفیت پایه، این گروه تلاش می‌کند ۲۰٪ از ظرفیت اضافی را با نمونه‌های On-Demand و مابقی را با Spot Instances در سه نوع مختلف Pool پر کند تا ریسک‌های نقطه شکست واحد را کاهش دهد.

پیکربندی سیاست‌های مقیاس‌بندی هوشمند

بهینه‌سازی هزینه تنها به قیمت هر ساعت مربوط نمی‌شود؛ بلکه درباره اندازه‌گیری صحیح زیرساخت برای تطبیق با تقاضا است. برنامه‌ریزی‌های مقیاس‌بندی ثابت ناکارآمد هستند، زیرا الگوهای ترافیک به ندرت قابل پیش‌بینی هستند. در عوض، سیاست‌های مقیاس‌بندی پیش‌بینانه یا واکنشی را بر اساس متریک‌های CloudWatch پیاده‌سازی کنید.

برای مثال، ممکن است یک سیاست مقیاس‌بندی Target Tracking را پیکربندی کنید که میانگین استفاده از CPU را در ۵۰٪ حفظ کند. اگر ترافیک افزایش یابد، ASG نمونه‌ها را اضافه می‌کند (اگر بازار Spot نوسانی باشد، اولویت با On-Demand است). اگر ترافیک کاهش یابد، نمونه‌ها را حذف می‌کند. این امر تضمین می‌کند که شما هرگز برای ظرفیت بلااستفاده هزینه پرداخت نمی‌کنید.

در نظر بگیرید که Scheduled Actions را برای ترافیک قابل پیش‌بینی پیاده‌سازی کنید. اگر برنامه شما گزارش‌های روزانه را ساعت ۹ صبح پردازش می‌کند، می‌توانید ظرفیت اضافی را فقط در آن پنجره زمانی تأمین کنید:

aws autoscaling put-scheduled-update-group-action \
    --auto-scaling-group-name my-scaling-group \
    --name daily-peak-scaling \
    --schedule "cron(0 9 ? * MON-FR *)" \
    --min-capacity 5 \
    --max-capacity 10 \
    --desired-capacity 7

بهترین شیوه‌ها برای تاب‌آوری

هنگام کار با Spot Instances، معماری شما باید برای قطعی طراحی شده باشد. تا حد امکان از طراحی بدون حالت (Stateless) استفاده کنید. از Elastic Load Balancing برای توزیع ترافیک و حذف نمونه‌های ناسالم از چرخه استفاده کنید. مطمئن شوید که برنامه‌های شما می‌توانند خاموشی تدریجی (Graceful shutdown) را با گوش دادن به اعلان قطعی Spot EC2 مدیریت کنند.

نتیجه‌گیری

بهینه‌سازی هزینه‌های ابری با استفاده از Spot Instances و Auto-Scaling یک وظیفه "تنظیم و فراموش کن" نیست، اما یکی از فعالیت‌های با بالاترین بازگشت سرمایه (ROI) برای هر تیم DevOps است. با ترکیب تخفیف‌های عمیق قیمت Spot با انعطاف‌پذیری Auto Scaling، می‌توانید کاهش‌های قابل توجهی در هزینه‌ها بدون به خطر انداختن در دسترس بودن برنامه‌ها به دست آورید. با ممیزی بارهای کاری خود برای تناسب با Spot شروع کنید، سیاست‌های نمونه ترکیبی را پیاده‌سازی کنید و متریک‌های مقیاس‌بندی خود را به طور مداوم برای همسو شدن با نیازهای خاص کسب‌وکار خود تنظیم نمایید.

Share: