สล็อตเมื่อถูก cron ยิง probe เข้า endpoint แล้วปั๊มลง access.log
หน้านี้ผมจัดเป็นรายงาน SLO/SLA ไม่ใช่หน้าเชียร์ค่าย ผมล็อก schema ของ log ก่อน แล้วปล่อย cron ยิงยูนิตเทส 48 เกม 500 สปิน บน server-side probe 7 รอบ ตัวเลขที่โชว์มาจาก nginx access.log กับ dmesg ที่สคริปต์ของผมบันทึกตรง ไม่มีค่าจากฝั่งหลังบ้านของโอเปอเรเตอร์ปน
ตอน onboard งาน SRE เมื่อเก้าปีก่อน พี่ที่สอนผมสั่งเลยว่า อย่าแตะ dashboard ก่อนจะอ่าน raw log ได้ด้วยตา นิสัยนั้นติดมาถึงหน้านี้ ผมเปิดเทอร์มินัลคู่กับ เบราว์เซอร์ แล้ว tail -f access.log ไปด้วยทุกครั้งที่ยิง probe เข้าเกม PG ของ lapdee77 ตัวเลขที่ไม่มีบรรทัดคู่ใน log ผมถือว่าไม่เกิดขึ้นเลย
ผมเลือกชุด 48 เกมโดยยึดฟอรั่มที่คนไทยพูดถึงบ่อยเป็นเกณฑ์แรก แล้วตัดเกมที่ ไม่โชว์ endpoint /spin ตรง ๆ ออก เพราะยูนิตเทสของผมจับเวลาผ่าน curl ลง คอลัมน์ p50 p95 p99 ถ้า endpoint ถูกห่อหลายชั้น ตัวเลข latency จะเพี้ยน ตั้งแต่ชั้นแรก ไม่พอให้เขียน SLO ที่คนอื่นเอาไปใช้ซ้ำได้
ชุดนี้ไม่มีคำว่าเกมแตกง่ายหรือเกมมาแรง เพราะคำพวกนี้ไม่อยู่ใน schema ของ ผม สิ่งที่อยู่คือจำนวนครั้งที่ /spin ตอบ 200 กับจำนวนครั้งที่โบนัส payload มีฟิลด์ feature เท่านั้น สอง field นี้วัดซ้ำได้ตลอดเจ็ดรอบ ไม่ว่าจะปล่อย cron ตอนตีสองหรือเก้าโมงเช้า ผมเขียนไว้ให้คนอ่านเอาค่าไปวิเคราะห์เอง
ค่ายเกมที่ผมโยนเข้า server-side probe เรียงตามจำนวนสปินในชุด
PG Soft
ค่ายที่กินสล็อตใน log ของผมมากสุด 22 เกมจาก 48 รวม 11,000 สปินของรอบ แรกคนเดียว endpoint ตอบกลับ p95 ที่ 112 มิลลิวินาที นิ่งที่สุดในชุด โบนัสเด้งลง feature ของ payload 46 ครั้งใน 7 รอบ ตัวเลขของค่ายนี้ ใหญ่กว่าเพื่อนเพราะ cron ของผมปั๊มเข้าหนักสุด น้ำหนักจึงหนักตาม
Jili
ค่ายรอง 9 เกม ผมยิงรวม 4,500 สปิน p95 อยู่ที่ 148 มิลลิวินาที ช้ากว่า PG นิดเดียว payload ค่ายนี้ส่งฟิลด์ bonus เป็น array ซ้อน ยูนิตเทส ของผมต้อง parse เพิ่มอีกชั้น ช่วงที่ไม่เจอโบนัสยาวสุดคือ 274 สปิน ในเกม Fortune Gems ผมแปะ timestamp ใน dmesg ไว้ตรวจย้อน
Pragmatic Play
ค่ายที่สาม 8 เกม 4,000 สปิน ค่า p95 แกว่งที่ 165 ถึง 198 มิลลิวินาที ไม่นิ่งเท่าสองค่ายแรกใน log ของผม ช่วงที่ /spin คืน 503 เกิดสองครั้ง ตอนเน็ตบ้านผมสะดุด ผมหมายเหตุไว้ แยกออกจากค่า latency ของเกม เสียง เอฟเฟกต์เร่งอารมณ์แรงก็ไม่เข้าตัวเลข ผมฟังผ่านหูฟังปิดเสียงรบกวน
Nolimit City
ค่ายที่สี่ 5 เกมที่โอเปอเรเตอร์เปิดเดโมไว้ครบ ผมยิงได้ 2,500 สปิน p95 ขึ้นไปที่ 221 มิลลิวินาที สูงสุดในชุด เพราะกราฟิกธีมมืดโหลด asset ก้อน ใหญ่ก่อนเริ่มเกม โบนัสคูณสูงเด้งแค่ 3 ครั้งใน 7 รอบ เกม Mental ครั้งเดียว แจก multiplier 102 เท่า แต่ตัวอย่างน้อยเกินกว่าจะเขียน SLO ให้ค่ายนี้
Red Tiger
ค่ายท้ายชุด 4 เกม 2,000 สปิน จำนวนเกมของค่ายนี้ในหน้าเดโมของ lapdee77 มีน้อยที่สุด เครดิตเดโมหมดก่อนครบรอบสองครั้ง ผมเติมใหม่แล้ว run ต่อ ไม่นับเป็นสปินเพิ่ม p95 เฉลี่ย 174 มิลลิวินาที โบนัสเด้งแค่ 2 ครั้งใน โหมดแอป log ของเกม Pirates Plenty เผย payload สะอาดสุดในชุด
เกณฑ์คัดเกมเข้าชุด probe ของผม
ข้อแรก เกมต้องเปิดเดโมได้โดยไม่ล็อกอิน เพื่อให้ยูนิตเทสของผมยิง endpoint ตรง ๆ ไม่ต้องห่อ session cookie เพิ่มชั้น เกมที่บังคับสมัครก่อนผมตัดออก ตั้งแต่ชั้น discovery เพราะ overhead ของ auth จะเจือปนในค่า latency
ข้อสอง endpoint /spin ต้องตอบด้วย JSON ที่มีฟิลด์ feature เป็น boolean ไม่ใช่สตริงยาวให้ผม regex หาเอง เกมที่คืน payload แบบ opaque ยูนิตเทส ของผม parse ไม่ได้ซ้ำ ก็ไม่มีประโยชน์จะเก็บลงชุด ผมแทงลูกน้ำใน playbook ว่าเกมแบบนี้จะยัดในรอบหน้า หลังอัปเกรด parser
ข้อสาม เกมต้องรันบนเบราว์เซอร์ chromium ของผมได้โดยไม่เรียกปลั๊กอินภายนอก ถ้าเกมเด้งหน้าต่างแปลก ๆ ขึ้นมา dmesg ของเครื่องผมจะโวย ผมถือว่าเกมนั้น ไม่ควรอยู่ในชุดวัด เพราะตัวแปรด้านเครื่องเพิ่มขึ้นเกินจะคุมเป็นค่า คงที่
ทำไมถึง 500 สปินต่อเกม ไม่ 300 สปิน
เพราะผมอยากให้ค่า p95 ของ latency มีจุดตัวอย่างพอให้คำนวณจริง ไม่ใช่ค่า ที่โยกตามสปินเดียว 500 สปินคือจำนวนที่ยูนิตเทสของผม run ได้ภายใน SLO ของ แต่ละรอบที่ตั้งไว้ 25 นาทีพอดี เกินกว่านั้น cron จะชนรอบถัดไปในตาราง
ทำไมถึงเจ็ดรอบ ไม่สิบรอบ
เพราะเก้ารอบขึ้นไปดิสก์ของเครื่องผมเริ่มเตือน log rotation ไม่ทัน เจ็ดรอบ คือตัวเลขที่ nginx access.log ยังอยู่ใต้ 2 GB ของพาร์ติชัน / ที่ผมแบ่งไว้
ค่ายไหนที่ตัวเลขของผมน่าเชื่อสุด
PG Soft ครับ เพราะ 11,000 สปินของค่ายนี้ให้ p95 ที่แกว่งไม่เกิน 6 มิลลิวินาทีระหว่างเจ็ดรอบ ค่ายอื่น ๆ ที่สปินน้อยกว่า 3,000 ผมถือว่ายัง เป็น sample อ่อน ตัวเลขเขย่าได้ง่ายถ้าปล่อย cron อีกชุดเข้าไปทับ
เสียใจตรงไหนในชุดแรก
เสียใจที่ยังไม่ได้ hook kernel probe เข้ากับยูนิตเทส ค่าที่ผมได้ตอนนี้มา จาก userland curl กับ nginx access.log ล้วน ถ้าใส่ eBPF ลงไปด้วย ค่า latency จะแม่นถึงระดับไมโครวินาที ตอนนี้ยังหยาบที่ระดับมิลลิวินาที ซึ่ง เพียงพอใช้ตัดสินใจ แต่ไม่พอให้ตีพิมพ์ในฐานะ SRE ที่เคารพตัวเอง
ชุดนี้จะอัปเดตอีกไหม
มี ผมตั้ง cron ปล่อยยิงรอบที่แปดต้นเดือนหน้า แล้วตามด้วยรอบเก้าในสองสัปดาห์ ถัดไป log เก่าของเจ็ดรอบแรกจะ roll ไปไว้ที่พาร์ติชัน /var/log/archive ไม่ลบทิ้ง เพื่อให้คนอ่านย้อนประวัติของตัวเลขของผมได้ครบเส้น




