วิธีการทำ 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_queue
sendToQueue
ในการส่งข้อความไปยัง 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 จะช่วยให้คุณสามารถวัดประสิทธิภาพการส่งและรับข้อความได้อย่างชัดเจน เพื่อใช้ในการปรับปรุงระบบให้รองรับโหลดที่สูงขึ้น