วิธีการทำ Load Test RabbitMQ และ Memphis ด้วย K6

วิธีการทำ Load Test RabbitMQ และ Memphis ด้วย K6

วิธีการทำ Load Test RabbitMQ และ Memphis ด้วย K6

การทำ Load Test RabbitMQ และ Memphis (Message broker system) ด้วย K6 สามารถทำได้เพื่อวัดประสิทธิภาพในการรับส่งข้อความภายใต้สภาวะการใช้งานที่หนัก นี่คือขั้นตอนและวิธีการในการทำ Load Test บนทั้งสองแพลตฟอร์ม:

1. การติดตั้ง K6

เริ่มด้วยการติดตั้ง K6 ซึ่งเป็นเครื่องมือทดสอบประสิทธิภาพแบบ open-source ที่ใช้สำหรับสร้างและรันสคริปต์ทดสอบ

ติดตั้ง K6 บน macOS หรือ Linux:

brew install k6

ติดตั้ง K6 บน Windows:

  • ดาวน์โหลดจาก K6 GitHub releases
  • ติดตั้งตามขั้นตอนในเว็บไซต์

2. ทำ Load Test สำหรับ RabbitMQ

สำหรับ RabbitMQ คุณสามารถใช้ K6 ร่วมกับ AMQP (Advanced Message Queuing Protocol) เพื่อทำการทดสอบได้ ผ่านการใช้ JavaScript ในการเขียนสคริปต์

สคริปต์ตัวอย่างสำหรับ RabbitMQ:

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);
}

ขั้นตอนการทำงาน:

  1. เชื่อมต่อกับ RabbitMQ: ทำการเชื่อมต่อโดยใช้ URL และ Credentials ที่กำหนด
  2. สร้าง Queue: ใช้ assertQueue ในการสร้าง Queue ชื่อ test_queue
  3. ส่งข้อความ: ใช้ sendToQueue ในการส่งข้อความไปยัง Queue
  4. ทดสอบความสำเร็จ: ใช้ check เพื่อตรวจสอบว่าข้อความถูกส่งสำเร็จหรือไม่
  5. ปิดการเชื่อมต่อ: ปิด Channel และ Connection เมื่อเสร็จสิ้น

3. ทำ Load Test สำหรับ Memphis

Memphis มีการจัดการคล้ายกับ RabbitMQ แต่รองรับการใช้งานแบบ real-time event-driven architecture มากกว่า การทดสอบกับ Memphis จะใช้การสื่อสารผ่าน API หรือการส่งข้อความผ่าน Protocol ที่ Memphis รองรับ เช่น WebSocket หรือ HTTP API

สคริปต์ตัวอย่างสำหรับ Memphis:

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);
}

ขั้นตอนการทำงาน:

  1. เชื่อมต่อกับ Memphis API: ใช้ HTTP หรือ WebSocket เพื่อเชื่อมต่อกับ Memphis โดยใช้ URL และ API Key
  2. ส่งข้อความไปยัง Topic: ใช้ HTTP POST ไปยัง /api/messages และระบุ topic ที่จะส่งข้อความ
  3. ทดสอบความสำเร็จ: ตรวจสอบ status ของการส่งข้อความและผลลัพธ์
  4. Delay ก่อนทำงานครั้งต่อไป: ใช้ sleep เพื่อเพิ่มการหน่วงเวลาในการส่งข้อความแต่ละครั้ง

4. การรันสคริปต์ทดสอบ

เมื่อคุณเขียนสคริปต์ทดสอบแล้ว ให้รันการทดสอบผ่าน K6 โดยใช้คำสั่ง:

k6 run <ชื่อสคริปต์>.js

คุณสามารถตั้งค่าจำนวน Virtual Users (VUs) และระยะเวลาการทดสอบได้โดยใช้ option --vus และ --duration ตัวอย่างเช่น:

k6 run --vus 10 --duration 30s test_rabbitmq.js

5. การวิเคราะห์ผลลัพธ์

หลังจากการทดสอบเสร็จสิ้น K6 จะให้ผลลัพธ์เกี่ยวกับประสิทธิภาพของการส่งและรับข้อความ เช่น:

  • Latency
  • Number of successful messages
  • Number of failed messages
  • Throughput (Messages per second)

สรุป

การทำ Load Test บน RabbitMQ และ Memphis ด้วย K6 จะช่วยให้คุณสามารถวัดประสิทธิภาพการส่งและรับข้อความได้อย่างชัดเจน เพื่อใช้ในการปรับปรุงระบบให้รองรับโหลดที่สูงขึ้น