اسکیل خودکار Kubernetes با KEDA و SQS
خلاصهٔ کاملتر
تو معماریهای رویدادمحور روی Kubernetes، مصرف CPU و حافظه معمولاً فشار واقعی سیستم رو نشون نمیده. به گفتهٔ نویسنده، یه پاد worker میتونه از نگاه CPU بیکار باشه در حالی که هزاران پیام تو صف Amazon SQS تلنبار شده، یا برعکس مدتها بعد از تموم شدن پیک هنوز روشن بمونه. برای کارهای غیرهمگام و صفمحور، سیگنال درست اسکیل خودِ بکلاگه، نه معیارهای زیرساخت.
راهحلی که مقاله جلو میذاره KEDA هست: یه operator که attributeهای صف رو poll میکنه، معیار رو تو یه HPA مینویسه و HPA همون deployment ورکر رو اسکیل میکنه. نصبش با Helm chart رسمی kedacore انجام میشه و CRDهایی مثل ScaledObject و TriggerAuthentication رو میآره. احراز هویت با AWS از طریق IRSA یا EKS Pod Identity انجام میشه و پالیسی IAM ورکر بهتره فقط به همون یک صف و اکشنهایی مثل ReceiveMessage و DeleteMessage دسترسی داشته باشه.
پیکربندی اصلی تو تریگر aws-sqs-queue خلاصه میشه؛ استفاده از queueURLFromEnv هم جلوی هاردکد کردن آدرس صف رو میگیره:
triggers:
- type: aws-sqs-queue
metadata:
queueURLFromEnv: QUEUE_URL
awsRegion: us-east-1
queueLength: "10"
activationQueueLength: "1"منطق شمارش شفافه: KEDA کار باقیمونده رو از جمع ApproximateNumberOfMessages و ApproximateNumberOfMessagesNotVisible درمیآره و تعداد رپلیکا رو با تقسیم اون بر queueLength و گرد کردن به بالا حساب میکنه. با queueLength برابر ده، هشت پیام یعنی یک پاد، بیستوپنج پیام یعنی سه پاد و نودوپنج پیام یعنی ده پاد. minReplicaCount: 0 اجازه میده وقتی صف خالیه پادها کامل خاموش شن و activationQueueLength مشخص میکنه از چه تعدادی به بعد اصلاً اسکیل شروع شه.
نویسنده چند تلهٔ رایج رو هم لیست میکنه: اسکیلنشدن که معمولاً از آدرس صف یا مجوزهای IAM میآد، زیاد شدن بیمورد پادها بهخاطر شمردهشدن پیامهای in-flight، و صفر نشدن رپلیکاها بهخاطر پیامهای تأخیری. برای پروداکشن هم پیشنهاد میکنه queueLength رو از throughput واقعی دربیاری، cooldown و behavior مربوط به HPA رو جدا تنظیم کنی و fallback replica رو برای وقتی معیار در دسترس نیست فعال کنی.
نکات کلیدی:
- برای workloadهای صفمحور، عمق صف سیگنال درستتری از CPU و حافظهست
- KEDA با poll کردن SQS یه HPA میسازه و ورکرها رو کم و زیاد میکنه
- تعداد رپلیکا از تقسیم پیامهای باقیمونده بر queueLength درمیآد
- با minReplicaCount صفر، ورکرها وقتی صف خالیه کامل خاموش میشن
- همین الگو برای بقیهٔ پلتفرمهای پیامرسان هم قابل استفادهست




