Google Pub/Sub เป็นบริการหนึ่งของ Google Cloud ที่เอาไว้จัดการข้อมูลส่งต่อข้อมูลไประบบอื่นๆ หรือใช้พักข้อมูลก่อนเอาไปประมวลผลก็ได้ ข้อดีของมันคือมันมีความเสถียรภาพสูงและรองรับงานขนาดใหญ่ๆ ได้แทบไม่จำกัด ถ้ามีตังค์จ่ายนะ อย่างเช่นรับข้อมูลการลงทะเบียนคนเยอะๆ ระบบข้อมูลจากเซนเชอร์ของอุปกรณ์ IoT โดยหลักการของมันก็ง่ายๆ คือมี Publisher ส่งข้อความเข้าไปในถังข้อมูลที่เรียกว่า Topic และก็จะมี Subcription เพื่อเอาไว้ให้คนใช้งานข้อมูลดึงเอาข้อความออกไปใช้งาน เรียกว่า subscriberหรือ consumer เมื่อเอาข้อมูลไปใช้งานเสร็จแล้วก็บอก Subcription ว่าใช้เสร็จละลบทิ้งได้
เนื่องจากว่าบริการ Google Pub/Sub มันให้บริการโดย Google มันเลยรับงานในสเกลใหญ่ๆ ได้อย่างไม่มีปัญหา ไม่จำเป็นต้องไปทำโหลดเทสมัน แต่เจ้ากรรมยังมีส่วนที่เราทำเองอยู่ในระบบก็คือ consumer ที่เอาข้อมูลไปใช้นี่เองที่เราต้องทำการเทสว่ามันรองรับโหลดได้มากแค่ไหน ถ้ามันรับได้น้อยมากก็จะเกิดปัญหาเพราะจะมีข้อความค้างอยู่ใน Topic เยอะ เป็นขอขวดของระบบ เราจึงต้องทำการโหลดเทสตัว consumer และเครื่องมือที่จะใช้ในการโหลดเทสครั้งนี้ก็คือ JMeter อันสุดคลาสสิคที่หลายคนคุ้นเคย หลายคนเคยใช้ในการยิงโหลดเทส HTTP REST API มานักต่อนักแล้ว แต่ JMeter เดิมๆ จะไม่มีความสามารถต่อกับ Google Pub/Sub ผมเลยต้องหา Plugin เสริมเข้ามาเติมความสามารถของมัน วิธีติดตั้งก็ตามนี้
1. ดาวน์โหลดและติดตั้ง JMeter ใหม่โดยไปโหลดได้ที่ https://jmeter.apache.org/download_jmeter.cgi ถ้าใครที่มี JMeter อยู่ในเครื่องอยู่แล้วก็ให้ไปโหลดใหม่อยู่ดี เพราะอาจจะมีเวอร์ชั่นเก่าที่ไม่รองรับ PlugIn ก็ได้ โหลดมาแล้วก็แต่ zip ออกมา ติดตั้ง Java 8+ ด้วยถ้าไม่มีในเครื่องอยู่แล้ว
2. เข้าไปโหลด JMeter Plugin จาก https://jmeter-plugins.org/install/Install/จะได้ไฟล์ plugins-manager.jar เอามาวางที่โฟลเดอร์ /lib/ext/ ของ JMeter ที่เพิ่งแตกในขั้นตอนที่ 1
3. เปิดโปรแกรม JMeter จาก /bin/jmeter เข้าไปที่เมนู Options -> Plugins Manager
4. ไปที่แทบ Available Plugins แล้วหาคำว่า “GCP pubsub plugin” คลิ๊กเลือกและกดปุ่ม Appy Changes and Restart JMeter โปรแกรมจะดาวนโหลด Plugin และติดตั้งอย่างอัตโนมัติ
5. ไปดาวน์โหลด lib ที่ Plugin มาใช้ได้สองอัน เอาไฟล์ .jar ไปวางที่ lib ในโฟลเดอร์ JMeter แล้วเปิด JMeter ใหม่อีกที
- google-cloud-pubsub https://mvnrepository.com/artifact/com.google.cloud/google-cloud-pubsub/1.40.0
- gson
https://mvnrepository.com/artifact/com.google.code.gson/gson/2.8.5
เท่านี้ JMeter ก็พร้อมใช้งานต่อไปยัง Google Pub/Sub แล้ว
6. เข้าไปที่ GCP Console https://console.cloud.google.com/iam-admin/serviceaccounts เพื่อไปสร้าง Key ให้มีสิทธิ์ในการใช้งาน Pub/Sub เพื่อให้ JMeter เป็น Publisher ส่งข้อความเข้า Topic ได้ สร้าง Key JSON จะได้ไฟล์ Service Account .json มา
7. ใน JMeter ให้คลิ๊กขวาที่ TestPlan เลือก Add -> Config Element -> PubSub-PublisherConfiguration
8. กรอกข้อมูล topic และข้อมูล key ที่ได้จากไฟล์ .json ลงใน PubSub-PublisherConfiguration
9. สร้างตัวยิงข้อความด้วยการ คลิ๊กขวาที่ Thread Group เลือก Sampler -> Publisher Request แล้วใส่ข้อความอะไรก็ได้ในที่นี้จะทำเป็น json และใส่ค่าสุ่มข้อความเข้าไปด้วย ${__RandomString(10,abcdefghijklmnopqrstuvwxyz,)}
10. ตั้งค่าความเร็วในการส่งข้อความที่ Thread Group และ Summary Report เอาไว้ดูความเร็วในการส่งด้วย แล้วลองรันดู จากการทดลองใช้งานไม่ได้บน Windows นะครับ
ตัวอย่างไฟล์ JMeter https://drive.google.com/file/d/10z_zRBFocrd7YjIpyH8pvPaBzfa92MJ4/view?usp=sharing
หลักการในการทดสอบก็คือการสร้างข้อความด้วย JMeter เอาไว้จำนวนมากๆ แล้วเปิดโปรแกรม Consumer ที่เราพัฒนาให้ดูดข้อความจาก subscription ที่สร้างเอาไว้ ไปประมวลผลถ้าใช้เวลาเท่าไหร่ก็คำนวนได้ว่าระบบเรามี Throughput เท่าไหร่ โดยดูจาก cloud console เช่น 1 ล้านข้อความหมดใน 100 วินาที ก็จะได้ Throughput 1,000,000 / 100 = 10,000 Msg/Sec หรือจะค่อยทำการ ramp up เพิ่มโหลดยิงเข้า topic และดูว่าเริ่มมีข้อความค้างอยู่ใน topic ที่ความเร็วเท่าไหร่ก็ได้