⚡️ Performance Testing با K6
برای مشاهدهی تأثیر مقیاسپذیری افقی (Horizontal Scaling) در عملکرد سیستم، باید تست بارگیری (Load Testing) انجام دهیم.
ابزار K6 یک ابزار مدرن و کاربرپسند برای Load Testing است که توسط توسعهدهندگان بهراحتی قابل استفاده است.
در این بخش، با نوشتن اسکریپتهایی در K6 ترافیک کاربر را روی اپلیکیشن شبیهسازی کرده و معیارهایی مثل میانگین زمان پاسخ (Average Response Time) و تعداد درخواستهای موفق در هر ثانیه (Requests Per Second) را مقایسه خواهیم کرد.
اپلیکیشنی که قرار است بهصورت افقی مقیاسپذیر شود، دارای دو API endpoint است:
• POST /users:
یک کاربر جدید ایجاد میکند، آن را در پایگاه دادهی PostgreSQL ذخیره کرده و شناسهی کاربر را برمیگرداند.
• GET /users/id:
اگر کاربری با شناسهی مشخص وجود داشته باشد، آن را برمیگرداند.
🧪 تست عملکرد K6 شامل مراحل زیر است:
• افزایش تدریجی تا ۲۰ کاربر مجازی (Virtual Users)
• ارسال یک درخواست POST به endpoint /users
• بررسی اینکه پاسخ 201 Created بازگردانده شود
• ارسال یک درخواست GET به endpoint /users/{id}
• بررسی اینکه پاسخ 200 OK بازگردانده شود
توجه داشته باشید که تمام درخواستهای API از طریق YARP Load Balancer عبور میکنند. ⚙️
import { check } from 'k6';
import http from 'k6/http';
export const options = {
stages: [
{ duration: '10s', target: 20 },
{ duration: '1m40s', target: 20 },
{ duration: '10s', target: 0 }
]
};
export default function () {
const proxyUrl = 'https://localhost:3000';
const response = http.post(${proxyUrl}/users);
check(response, {
'response code was 201': (res) => res.status == 201
});
const userResponse = http.get(${proxyUrl}/users/${response.body});
check(userResponse, {
'response code was 200': (res) => res.status == 200
});
}برای اینکه نتایج تست عملکرد سازگارتر باشند، میتوان منابع قابلدسترس در Docker containerها را محدود کرد — مثلاً به ۱ CPU و ۰.۵ گیگابایت RAM:
services:
api:
image: ${DOCKER_REGISTRY-}loadbalancingapi
cpus: 1
mem_limit: '0.5G'
ports:
- 5000:8080
networks:
- proxybackend
🧠 Summary
مقیاسپذیری افقی (Horizontal Scaling) در کنار Load Balancing مؤثر میتواند به شکل چشمگیری عملکرد و مقیاسپذیری اپلیکیشنهای وب را افزایش دهد.
مزایای مقیاسپذیری افقی زمانی بیشتر نمایان میشوند که حجم ترافیک بالا برود و یک سرور بهتنهایی نتواند پاسخگوی نیازها باشد.
و YARP یک Reverse Proxy قدرتمند و کاربرپسند برای اپلیکیشنهای NET. است.
با این حال، در سیستمهای بزرگ و پیچیدهی Distributed Systems، ممکن است استفاده از راهحلهای اختصاصی Load Balancer گزینهی بهتری باشد — چراکه کنترل دقیقتر و قابلیتهای پیشرفتهتری ارائه میدهند.
🔖هشتگها:
#YARP #DotNet #LoadBalancing #HorizontalScaling #PerformanceTesting #K6 #ReverseProxy