
วิธีการทำ Load Test RabbitMQ และ Memphis ด้วย K6
การทำ Load Test RabbitMQ และ Memphis (Message broker system) ด้วย K6 สามารถทำได้เพื่อวัดประสิทธิภาพในการรับส่งข้อความภายใต้สภาวะการใช้งานที่หนัก นี่คือขั้นตอนและวิธีการในการทำ Load Test บนทั้งสองแพลตฟอร์ม:
เริ่มด้วยการติดตั้ง K6 ซึ่งเป็นเครื่องมือทดสอบประสิทธิภาพแบบ open-source ที่ใช้สำหรับสร้างและรันสคริปต์ทดสอบ
ติดตั้ง K6 บน macOS หรือ Linux:
brew install k6
ติดตั้ง K6 บน Windows:
สำหรับ RabbitMQ คุณสามารถใช้ K6 ร่วมกับ AMQP (Advanced Message Queuing Protocol) เพื่อทำการทดสอบได้ ผ่านการใช้ JavaScript ในการเขียนสคริปต์
import amqplib from "amqplib";
import { check, sleep } from "k6";
// การตั้งค่าการเชื่อมต่อ RabbitMQ
const RABBITMQ_URL = "amqp://guest:guest@localhost:5672";
export default function () {
// เชื่อมต่อกับ RabbitMQ
amqplib.connect(RABBITMQ_URL).then((conn) => {
return conn.createChannel().then((ch) => {
let q = "test_queue";
let msg = "Hello RabbitMQ!";
// สร้าง Queue และส่งข้อความ
ch.assertQueue(q, { durable: false });
ch.sendToQueue(q, Buffer.from(msg));
console.log(`[x] Sent ${msg}`);
// ตรวจสอบผลลัพธ์การทำงาน
check(ch, {
"message sent successfully": (channel) => channel.sendToQueue(q, Buffer.from(msg)) !== false,
});
// ปิด Channel และ Connection
setTimeout(() => {
ch.close();
conn.close();
}, 500);
});
});
// Delay เล็กน้อยก่อนการทำงานครั้งต่อไป
sleep(1);
}
assertQueue ในการสร้าง Queue ชื่อ test_queuesendToQueue ในการส่งข้อความไปยัง Queuecheck เพื่อตรวจสอบว่าข้อความถูกส่งสำเร็จหรือไม่Memphis มีการจัดการคล้ายกับ RabbitMQ แต่รองรับการใช้งานแบบ real-time event-driven architecture มากกว่า การทดสอบกับ Memphis จะใช้การสื่อสารผ่าน API หรือการส่งข้อความผ่าน Protocol ที่ Memphis รองรับ เช่น WebSocket หรือ HTTP API
import { check, sleep } from "k6";
import http from "k6/http";
const MEMPHIS_URL = "http://localhost:9000";
const MEMPHIS_API_KEY = "your-api-key";
export default function () {
// ส่ง HTTP Request ไปยัง Memphis API
const url = `${MEMPHIS_URL}/api/messages`;
const payload = JSON.stringify({
message: "Hello Memphis!",
topic: "test_topic",
});
const params = {
headers: {
"Content-Type": "application/json",
"Authorization": `Bearer ${MEMPHIS_API_KEY}`,
},
};
// ส่งข้อมูลไปยัง Memphis API
const res = http.post(url, payload, params);
// ตรวจสอบผลลัพธ์การทำงาน
check(res, {
"status is 200": (r) => r.status === 200,
"message sent successfully": (r) => r.json().status === "success",
});
// Delay เล็กน้อยก่อนการทำงานครั้งต่อไป
sleep(1);
}
/api/messages และระบุ topic ที่จะส่งข้อความsleep เพื่อเพิ่มการหน่วงเวลาในการส่งข้อความแต่ละครั้งเมื่อคุณเขียนสคริปต์ทดสอบแล้ว ให้รันการทดสอบผ่าน K6 โดยใช้คำสั่ง:
k6 run <ชื่อสคริปต์>.js
คุณสามารถตั้งค่าจำนวน Virtual Users (VUs) และระยะเวลาการทดสอบได้โดยใช้ option --vus และ --duration ตัวอย่างเช่น:
k6 run --vus 10 --duration 30s test_rabbitmq.js
หลังจากการทดสอบเสร็จสิ้น K6 จะให้ผลลัพธ์เกี่ยวกับประสิทธิภาพของการส่งและรับข้อความ เช่น:
การทำ Load Test บน RabbitMQ และ Memphis ด้วย K6 จะช่วยให้คุณสามารถวัดประสิทธิภาพการส่งและรับข้อความได้อย่างชัดเจน เพื่อใช้ในการปรับปรุงระบบให้รองรับโหลดที่สูงขึ้น