รีวิว lapdee77 ด้วยสายตา SysAdmin ยิง probe ต่อเนื่อง 7 รอบ
รีวิวฉบับนี้เขียนจากมุมคนดูแลระบบ ผมมองเว็บสล็อตเหมือน service ตัวหนึ่ง ที่ต้องมี SLO ชัด ข้อมูลทุกบรรทัดมาจาก probe ที่ cron ปล่อยออกไปตามรอบ แล้วไหลลง log ของผมเอง ไม่ได้มาจากหน้าโปรโมชันของเว็บ
วิธีของผมไม่ซับซ้อน ผมกันเครื่องสำรองไว้หนึ่งเครื่องเฉพาะใช้รัน ยูนิตเทส ไม่ปนกับเครื่องทำงาน ก่อนจะเริ่มทุกเซสชันจะล็อก schema ของ log ไว้ก่อน ลงเวลาเริ่ม ยอดงบที่ยอมเสียทั้งก้อน และ SLO ของ latency ไว้หัวไฟล์ จบรอบปั๊มลง bank statement กับ nginx access.log ให้แมตช์ ถ้ามี record ที่เอกสารสองฝั่งไม่ตรงกัน ผม หยุดปล่อย cron จนกว่าจะเจอต้นเหตุ
ตลอดเจ็ดรอบ ผมเจอ record ที่ชนกันแค่สองรอบ ทั้งสองรอบเป็น refund ของสปินที่ขาดเพราะเน็ตบ้านของผมสะดุด เงินเดิมพันถูกตัดก่อนแล้ว ตีคืนภายในสองนาที ผม log ไว้เป็นสถานะ pending แล้วปิดภายในวัน เดียวกัน ไม่มีเงินหายในระบบ แต่ผมหักคะแนนของ 'ความชัดของ error' ลงเล็กน้อยเพราะ response ของ /spin ตอน refund ไม่มี reason ให้ ผม route ลง alert ของตัวเอง
สิ่งที่ผมอยากให้ผู้อ่านรู้ก่อน log ของผมบอกได้แค่ว่าแพ็กเกตเดิน ไปไหน ไม่ได้บอกว่าใครได้หรือเสีย ยอดสุทธิของเจ็ดรอบของผมติดลบ ซึ่งตรงตามธรรมชาติของสล็อต ผม log ส่วนนี้ไว้เป็นต้นทุนที่จ่าย แลกกับเวลาผ่อนคลายของตัวเอง ไม่ใช่การลงทุน และอยากให้คนอ่าน มองแบบเดียวกัน
รายการที่ probe ของผมยืนยันได้ด้วยตัวเอง
- จำนวนสปินรวม 48 เกม 500 สปิน บน server-side probe 7 รอบ ผม แบ่งเป็นชุดละ 50 สปินใน log พร้อม timestamp ของแต่ละชุด เทียบ กับประวัติในหน้าสมาชิกตรงกันทุกครั้ง
- ฝากผ่าน PromptPay QR เงินขึ้นใน 23 วินาที ธนาคารกรุงเทพ 44 วินาที TrueMoney Wallet 51 วินาที ทั้งสามช่องทางยอดเข้าเองโดยไม่ต้องส่งสลิป ผมเทียบ timestamp กับ access.log แล้วตรงกันทุกรายการ
- ยอดถอนเข้ากสิกรไทยใช้ 2 นาที 5 วินาที ไทยพาณิชย์ 2 นาที 41 วินาที และกรุงไทย 3 นาที 32 วินาที ซึ่งเป็น p95 ที่ยาวสุดใน ชุดของผม ยอดสุทธิที่เข้าธนาคารเท่ากับยอดที่ขอถอนครบทุกบาท
- ยอดคงเหลือบนหน้าจอเทียบกับยอดใน sqlite ของผมหลังปิดเซสชันตรง กันทุกครั้ง ยกเว้นสองรายการ refund ที่พูดถึง ซึ่งปิดได้ภายใน วันเดียวกัน
- ประวัติธุรกรรมในหน้าสมาชิกมี txid ครบทุกรายการ ผม scrape มา แมตช์กับ bank statement รายสัปดาห์โดยสคริปต์ของตัวเอง ไม่พบ record เกินหรือขาดเลยแม้แต่บรรทัดเดียว
- เพดานงบต่อเซสชันที่ผมตั้งใน playbook ของตัวเองถูกใช้เกินสาม ครั้งใน 60 วัน ความผิดอยู่ที่ผม แต่ก็ชี้ให้เห็นว่าหน้าเว็บยัง ไม่มี alert วงเงินที่หยุดนิ้วของผมได้ทัน
สิ่งที่ log ของผมยังยืนยันให้ไม่ได้
- ใครคือเจ้าของบัญชีที่รับเงินในทางกฎหมาย ชื่อบัญชีปลายทางโผล่ให้เห็น ตอนโอน แต่ผมสืบต่อไปถึงผู้มีอำนาจลงนามไม่ได้ ถ้าวันหนึ่งเกิดข้อพิพาท ผมยังตอบไม่ได้ว่าต้องเปิดเรื่องกับหน่วยงานใด
- การถอนก้อนใหญ่ ยอดถอนสูงสุดใน log ของผมยังเป็นหลักพัน จึงไม่มี หลักฐานว่าการถอนหลักแสนหรือหลักล้านจะมีขั้น KYC เพิ่ม หรือใช้ เวลาต่างจากที่ผมบันทึกไว้มากแค่ไหน
- ใบอนุญาตที่โชว์หน้าเว็บ ผมเห็นโลโก้กับเลข ref แต่ไม่มีช่องทาง คิวรีกับผู้ออกใบอนุญาต ผมจึง log เป็น pending ของ compliance ไว้ ไม่ปิดเป็น verified
- ระบบสุ่มผลฝั่งค่าย probe ของผมอ่านได้แค่ response ที่ตอบกลับมา มองไม่เห็น seed หรือ service ข้างหลัง ตัวเลขชุดนี้บอกว่าแพ็กเกตเดินครบ แต่บอกไม่ได้ว่าการสุ่มยุติธรรมหรือไม่
- ความเร็วการถอนในช่วง peak ของสัปดาห์ ผมปล่อย cron ยิงแค่กลางวัน กับหัวค่ำวันธรรมดา ไม่เคยยิงช่วงสิ้นเดือนหรือคืนวันหยุดยาว ตัวเลขจึงอาจไม่ใช่ตัวแทนของช่วงที่คนใช้แน่น
ตารางสปินกับ feature hit จาก log ของผม
ตารางด้านล่างยกมาจาก sqlite ของยูนิตเทสตรง ๆ แสดงจำนวนสปิน feature hit และ p95 ของ latency แยกตามเกม ตัวเลขผ่าน rollup ของตัวเอง แล้วแมตช์กับประวัติในหน้าสมาชิก ไม่ขอข้อมูลจากผู้ให้บริการ
| เกม | ยอดฝากรวมต่อเกม (บาท) | ยอดถอนกลับรวม (บาท) | รอบ probe ที่ติดลบต่อกันยาวสุด | หมายเหตุจาก log |
|---|---|---|---|---|
| Mahjong Ways | 2 | 2 | 241 รอบติด | สองฝั่ง latency เกาะคู่กันแน่น ช่วง trigger ห่างกันราว 18 รอบเท่านั้น |
| Jurassic Kingdom | 1 | 3 | 318 รอบติด | ฝั่งแอปทริกเกอร์โบนัสซ้ำเร็ว สปินที่ 169 กับ 217 โชว์เกือบติด |
| Candy Burst | 2 | 3 | 204 รอบติด | เว็บโหลดสไปรท์ช้า ผมแปะหมายเหตุใน log ไว้ ไม่กระทบยอด |
| Captain's Bounty | 1 | 2 | 361 รอบติด | เว็บเงียบนานกว่า แอปกินโบนัสที่รอบ 152 ก่อนจะไหลลง |
| Phoenix Rises | 1 | 2 | 471 รอบติด | ช่วงแห้งที่สุดในชุด 471 สปินฝั่งเว็บ ผม probe ซ้ำยืนยันแล้วสองรอบ |
| Ganesha Fortune | 2 | 2 | 281 รอบติด | ค่าเฉลี่ยสองฝั่งเหลื่อมน้อยสุดในชุด ห่างกันเพียง trigger เดียว |
| Lucky Piggy | 3 | 1 | 226 รอบติด | เว็บเก็บโบนัสถึง 3 ยกในช่วงต้น ลองรันรอบที่สามก็ยังขึ้นเช่นเดิม |
| Hip Hop Panda | 1 | 2 | 294 รอบติด | แอปวางปุ่มซื้อฟีเจอร์ใต้นิ้วโป้งพอดี กดต่อเนื่องไม่พลาดครับ |
| ข้อมูลที่นำมาเทียบกัน | ค่าที่ probe จับได้ | ค่าที่แอปธนาคารแสดง |
|---|---|---|
| Latency มัธยฐานของ /spin | ผม probe ค่ากลางได้ 835 ms | ผม probe ค่ากลางได้ 305 ms |
| ปุ่มซื้อฟีเจอร์ที่กดได้จริง | คลิกติด 26 ชื่อจากทั้งหมด 40 | คลิกติด 35 ชื่อจากทั้งหมด 40 |
| เพดาน auto spin ต่อการตั้งครั้งเดียว | ปรับไปได้สูงสุด 150 รอบ | ปรับไปได้สูงสุด 400 รอบ |
| เฟรมสะดุดช่วง bonus animation | กระตุกราว 2-3 เฟรมในเกือบทุกเกม | แทบไม่พบจังหวะสะดุดเลย |
| หน่วยความจำที่ใช้ต่อเกม | เฉลี่ยราว 395 MB บนเบราว์เซอร์ | เฉลี่ยราว 142 MB บนแอป |
| ยอดคงเหลือหลังสั่ง refresh หน้า | ยังค้างอยู่ 13 ชื่อจาก 40 | ค้างครบทุกชื่อทั้ง 40 รายการ |
หน้าเว็บ ประวัติ และ response ของแอดมิน
หน้าเว็บ lapdee77 ที่ผมเปิดบนมือถือ android กับโน้ตบุ๊ก arch linux ของผมเองโหลดได้เรียบ เมนูภาษาไทยอ่านง่าย หน้าที่ผมเปิด บ่อยคือ history ของธุรกรรม เพราะต้อง scrape เลขอ้างอิงมาเทียบ หน้านี้มี date, amount, status ครบ แต่ยังไม่มีปุ่ม export เป็น ไฟล์ ผมต้องเขียนสคริปต์ scrape เอง ซึ่งถ้าโครงสร้าง DOM ขยับ สคริปต์ของผมต้องแก้ตามทุกครั้ง เพิ่ม maintenance ที่ไม่ควรมี
ฝั่งแอดมิน ผมทักแชตห้าครั้ง ถามเรื่อง refund กับเวลาตัดรอบ ถอน response เร็วสุดราวสองนาที ช้าสุดช่วงดึกราวสิบเอ็ดนาที ทุก response อธิบายที่มาของยอดได้ตรงกับที่ผม log ไว้ และไม่มี การเสนอโปรโมชันกลางบทสนทนา ส่วนที่ยังขาดคือผมต้องถามเองว่า refund มาจากสปินไหน
คะแนนรวม 8.0 กับข้อจำกัดของ playbook ชุดนี้
ผมให้ lapdee77 คะแนนรวม 8.0 จาก 10 หมวดสูงสุดคือความแม่นของ uptime 8.3 ตามด้วยความสม่ำเสมอของ latency 8.1 ส่วนความสะอาด ของ log อยู่ที่ 7.9 และความชัดของ error อยู่ที่ 7.7 จุดแข็งคือ ธุรกรรมทุก record แมตช์ bank statement ได้ จุดฉุดคือ error response ของ /spin ตอน refund ไม่มี reason code ให้ route ลง alert และหน้าเว็บไม่ช่วยหยุดนิ้วเมื่อเกินงบ ถ้าแก้สองเรื่อง ผมพร้อมปรับคะแนนในรอบถัดไป
ข้อจำกัดคือรายงานนี้เป็น SRE playbook ของคนคนเดียว บัญชีเดียว เจ็ดรอบ probe ไม่ใช่ audit จากผู้สอบบัญชีอิสระ ไม่ได้เห็นระบบ หลังบ้านของเว็บ และไม่ใช่ตัวแทนประสบการณ์ของผู้เล่นทุกคน ยอด สุทธิของผมติดลบตามที่คาดไว้ตั้งแต่รอบแรก ผู้อ่านควรตั้งงบที่ เสียทั้งก้อนได้ แยกจากเงินจำเป็น และ log ทุกรายการให้ย้อนตรวจ
ทำไม SysAdmin ถึงต้อง log ทุกสปิน ไม่จดแค่ยอดฝากถอน
เพราะยอดฝากถอนบอกแค่ edge ของการเดินเงิน ไม่บอกว่าระหว่าง เส้นทางเกิดอะไรขึ้น การ log ชุดละ 50 สปินทำให้ผมเห็นช่วงที่ ยอดคงเหลือลดเร็วผิด pattern แล้วเจอต้นเหตุได้ไว ถ้าจดแค่ ปลายทาง refund สองรายการของผมคงหายไปใน aggregate โดยไม่มี ใครสังเกต
รายการ refund ที่เจอทำให้เงินหายไหม
ไม่หาย สองครั้งที่ /spin ค้าง ยอดเดิมพันถูกหักแล้วคืนกลับมาภายในสองนาที ผมกระทบยอดจบได้ในวันเดียว ที่ตัดคะแนนเพราะระบบไม่ส่ง reason code กลับมา ถ้าเจอแบบเดียวกัน ให้จดเวลาและยอดไว้ก่อนติดต่อแชต
ช่องทางฝากไหน log ง่ายสุด
ใน playbook ของผม PromptPay QR เร็วสุด 23 วินาที และ เลขอ้างอิงลงอัตโนมัติ กรุงเทพ 44 วินาที TrueMoney Wallet 51 วินาที ทุกช่องทางไม่ต้องแนบสลิป ผมใช้ QR เป็นหลัก เพราะ txid ตรงกับ bank statement ทันที
ทำไมความชัดของ error ได้คะแนนต่ำสุด
เพราะ response ของ /spin ตอน refund ไม่มี reason code ให้ ยูนิตเทสของผม route ลง alert ของ playbook ตัวเอง ต้องเปิด แชตถามแอดมินถึงจะได้คำตอบ สำหรับระบบที่ผม audit มาเก้าปี 7.7 คือคะแนนที่สะท้อน gap ของ observability ไม่ใช่คำพิพากษา ว่าระบบมีเจตนาซ่อนอะไร
ผมได้ค่าตอบแทนจากเว็บที่รีวิวหรือเปล่า
ไม่ได้ ผมใช้บัญชีและเงินของตัวเองตลอดเจ็ดรอบ probe ไม่มีใครตรวจบทความ ก่อนขึ้นหน้า ปุ่มที่พาออกไปเว็บติดป้าย sponsored ตามมาตรฐานการเปิดเผย
ตัวเลข 48 เกม 500 สปิน บน server-side probe 7 รอบ บอกได้ไหมว่าเว็บจ่ายคุ้ม
ไม่บอก ตัวเลขนี้คือ sample ของ log ไม่ใช่ขนาดที่พอคำนวณ RTP ซึ่งต้องการสปินหลายล้านครั้ง playbook ของผมยืนยันได้แค่ว่า แพ็กเกตเข้าออกตรงกับที่ระบบรายงาน ส่วนผลได้ผลเสียของแต่ละ คนยังเป็นเรื่องสุ่มเสมอ