← กลับไปหน้าบทความ
ขั้นสูง (MarTech)

ตัวเลข Conversion เปลี่ยนไปจากเมื่อวาน แต่ไม่มีใครรู้ว่าทำไม: เก็บ Audit Log แบบ Event Sourcing ให้ย้อนดูได้ทุกจุด

02 ส.ค. 04:27 · อ่าน 1 นาที
ตัวเลข Conversion เปลี่ยนไปจากเมื่อวาน แต่ไม่มีใครรู้ว่าทำไม: เก็บ Audit Log แบบ Event Sourcing ให้ย้อนดูได้ทุกจุด

สรุปสั้น ๆ

ระบบที่เก็บแค่ตัวเลขล่าสุดจะตอบไม่ได้ว่าทำไมตัวเลขถึงเปลี่ยน Event Sourcing คือแนวคิดที่เก็บทุกเหตุการณ์ที่เคยเกิดขึ้นแบบไม่ลบทิ้ง ทำให้ย้อนดูและสร้างสถานะปัจจุบันขึ้นใหม่ได้เสมอ เหมาะกับระบบ tracking ที่ต้องอธิบายตัวเลขให้ผู้บริหารหรือทีมการเงินเชื่อได้

ทีมการเงินของธุรกิจขายอุปกรณ์ตกแต่งบ้านออนไลน์แห่งหนึ่งถามทีมเทคนิคว่า ทำไมยอด Conversion ของเดือนที่แล้วที่เคยเห็นในรายงานตัวหนึ่ง กลับมีค่าไม่ตรงกับที่เห็นในวันนี้ ทีมเทคนิคตอบไม่ได้ เพราะระบบเก็บแค่ 'ค่าล่าสุด' ของแต่ละออเดอร์ พอมีการแก้ไขหรือยกเลิกออเดอร์ ค่าที่บันทึกไว้ก่อนหน้าก็ถูกเขียนทับไปเลย ไม่มีร่องรอยว่าเดิมเป็นเท่าไหร่และเปลี่ยนเพราะอะไร

ปัญหานี้เกิดจากการออกแบบฐานข้อมูลแบบ 'เก็บสถานะล่าสุด' (state-based) ซึ่งเป็นวิธีที่ง่ายและพบได้ทั่วไป แต่มีจุดอ่อนตรงที่ไม่มีความทรงจำในตัว พอมีคำถามว่า 'ทำไมค่าตอนนี้ถึงต่างจากที่เคยเห็น' ระบบก็ตอบไม่ได้เลย

ทางเลือกที่หลายระบบ tracking ระดับสูงขึ้นเริ่มนำมาใช้คือแนวคิด Event Sourcing ซึ่งเปลี่ยนวิธีคิดจาก 'เก็บสถานะปัจจุบัน' เป็น 'เก็บทุกเหตุการณ์ที่เคยเกิด' แล้วคำนวณสถานะปัจจุบันจากประวัติเหตุการณ์เหล่านั้นทุกครั้ง

เก็บสถานะ vs เก็บเหตุการณ์ ต่างกันตรงไหน

ระบบแบบเก็บสถานะ (state-based) จะมีแถวข้อมูลหนึ่งแถวต่อหนึ่งออเดอร์ พอมีการอัปเดต เช่นลูกค้าขอคืนเงินบางส่วน ระบบจะแก้ไขค่าตรงแถวนั้นเลย ค่าก่อนหน้าจะหายไปทันที เหลือแค่ค่าล่าสุดให้เห็น

ระบบแบบเก็บเหตุการณ์ (event-based) จะไม่แก้ไขแถวเดิม แต่บันทึกเป็นเหตุการณ์ใหม่ต่อท้ายเสมอ เช่น 'สร้างออเดอร์ 1,200 บาท' ตามด้วย 'คืนเงินบางส่วน 300 บาท' สถานะปัจจุบันของออเดอร์นั้นคือผลรวมของทุกเหตุการณ์ที่เกิดกับมัน (1,200 - 300 = 900 บาท) แต่ประวัติทั้งสองเหตุการณ์ยังอยู่ครบ ย้อนดูได้ตลอด

ประโยชน์ที่มากกว่าแค่ 'ย้อนดูได้'

  • ตรวจสอบข้อพิพาทได้ชัดเจน เช่นเมื่อลูกค้าหรือทีมการเงินโต้แย้งตัวเลข สามารถดึงประวัติเหตุการณ์ทั้งหมดของออเดอร์นั้นมาอธิบายได้ทันทีโดยไม่ต้องเดา
  • สร้างรายงานย้อนหลังที่ถูกต้องได้ เช่นอยากรู้ว่ายอด Conversion ณ วันที่ 15 ของเดือนที่แล้วเป็นเท่าไหร่ (ไม่ใช่ยอดปัจจุบันที่ถูกแก้ไขไปแล้ว) สามารถคำนวณย้อนกลับจากเหตุการณ์ที่เกิดขึ้นถึงวันนั้นได้จริง
  • ดีบักบั๊กได้ง่ายขึ้นมาก เพราะเห็นลำดับเหตุการณ์ทั้งหมดที่นำไปสู่ค่าที่ผิดปกติ แทนที่จะเห็นแค่ผลลัพธ์สุดท้ายที่ผิด แล้วต้องเดาว่าอะไรทำให้มันผิด คล้ายกับที่ใช้หลักการนี้ช่วยตามไล่หาสาเหตุคะแนนคุณภาพข้อมูลที่ร่วง และตอบคำถามเรื่องความเป็นเจ้าของข้อมูลได้ชัดเจนขึ้นเมื่อมีข้อพิพาท

จะเริ่มวางระบบนี้ยังไงโดยไม่ต้องรื้อทุกอย่างใหม่

  1. ไม่จำเป็นต้องเปลี่ยนทั้งระบบเป็น Event Sourcing เต็มรูปแบบทันที เริ่มจากเพิ่มตาราง audit log แยกต่างหาก ที่บันทึกทุกครั้งที่มีการเปลี่ยนแปลงข้อมูลสำคัญ เช่นยอด Conversion, สถานะออเดอร์, การจับคู่ LINE UID
  2. แต่ละแถวใน audit log ควรมีอย่างน้อย เวลาที่เกิดเหตุการณ์ ค่าก่อนเปลี่ยน ค่าหลังเปลี่ยน และแหล่งที่มาของการเปลี่ยนแปลง (ระบบอัตโนมัติหรือคนแก้มือ)
  3. ตั้งกฎว่าห้ามลบแถวใน audit log เด็ดขาด ต่อให้ข้อมูลนั้นดูไม่จำเป็นแล้วก็ตาม เพราะจุดประสงค์คือการเก็บประวัติแบบสมบูรณ์ ไม่ใช่แค่ข้อมูลที่ใช้งานอยู่ปัจจุบัน
  4. เมื่อระบบโตขึ้นและมีคำถามย้อนหลังบ่อยขึ้น ค่อยพิจารณาย้ายไปใช้สถาปัตยกรรม Event Sourcing เต็มรูปแบบ ซึ่งจะซับซ้อนกว่านี้แต่ให้ความสามารถในการย้อนรอยที่ลึกกว่ามาก

ข้อควรระวังก่อนทำ

การเก็บทุกเหตุการณ์แบบไม่ลบทิ้งเลย แปลว่าปริมาณข้อมูลจะโตเร็วกว่าระบบแบบเก็บสถานะล่าสุดมาก ควรวางแผนเรื่องพื้นที่จัดเก็บและนโยบายการเก็บถาวรข้อมูลเก่า (archiving) ตั้งแต่ต้น ไม่ใช่ปล่อยให้โตจนกลายเป็นปัญหาทีหลัง

ทีมที่ไม่คุ้นกับแนวคิดนี้อาจใช้เวลาปรับตัวสักพัก เพราะการเขียนคำสั่งดึงข้อมูลจะซับซ้อนกว่าการดึงค่าจากแถวเดียวตรง ๆ แนะนำให้เริ่มจากส่วนที่สำคัญที่สุดก่อน เช่นข้อมูล Conversion ไม่ต้องทำทั้งระบบพร้อมกัน ควรให้สิทธิ์เข้าถึง audit log ตามหลักการควบคุมการเข้าถึงข้อมูลลูกค้าด้วย ไม่ใช่เปิดให้ทุกคนอ่านได้อย่างอิสระ

สรุป

ระบบที่ตอบคำถาม 'ทำไมตัวเลขถึงเปลี่ยน' ไม่ได้ ไม่ใช่ระบบที่น่าเชื่อถือ ต่อให้ตัวเลขปัจจุบันจะถูกต้องแค่ไหนก็ตาม เพราะเมื่อไหร่ก็ตามที่มีคนสงสัย ระบบต้องมีคำตอบให้ ไม่ใช่ให้ทีมเทคนิคนั่งเดา

การเริ่มเก็บ audit log ตั้งแต่วันนี้ แม้จะยังไม่เห็นประโยชน์ทันที แต่จะกลายเป็นสิ่งที่ทีมขอบคุณตัวเองในอนาคตทุกครั้งที่มีคำถามเรื่องตัวเลขย้อนหลังโผล่ขึ้นมา

  • ระบบเก็บสถานะล่าสุดอย่างเดียวตอบไม่ได้ว่าทำไมตัวเลขเปลี่ยน
  • Event Sourcing เก็บทุกเหตุการณ์แบบไม่ลบทิ้ง แล้วคำนวณสถานะปัจจุบันจากประวัตินั้น
  • เริ่มจาก audit log ง่าย ๆ สำหรับข้อมูลสำคัญก่อน ไม่ต้องรื้อทั้งระบบพร้อมกัน

คำถามที่พบบ่อย

Event Sourcing ต่างจากการทำ backup ฐานข้อมูลปกติยังไง

backup คือสำเนาข้อมูลทั้งฐาน ณ จุดเวลาหนึ่ง ส่วน Event Sourcing คือการเก็บทุกการเปลี่ยนแปลงแบบละเอียดต่อเนื่อง ทำให้ย้อนดูได้ทุกจุดเวลา ไม่ใช่แค่จุดที่ backup ไว้เท่านั้น

ต้องทำ Event Sourcing กับข้อมูลทุกส่วนไหม

ไม่จำเป็น ควรเริ่มจากข้อมูลที่มีผลกระทบสูงเมื่อผิดพลาด เช่นยอด Conversion หรือสถานะการชำระเงิน ส่วนข้อมูลที่ไม่ค่อยเปลี่ยนแปลงหรือผลกระทบต่ำอาจไม่จำเป็นต้องทำระดับนี้

ระบบขนาดเล็กจำเป็นต้องทำเรื่องนี้ไหม

ถ้าปริมาณ Conversion ต่อเดือนยังน้อยและไม่ค่อยมีข้อพิพาทเรื่องตัวเลข อาจยังไม่จำเป็นเร่งด่วน แต่การมี audit log แบบง่าย ๆ ไว้ตั้งแต่ต้นก็ไม่เสียหายและช่วยได้มากเมื่อธุรกิจโตขึ้น

ใครควรเป็นคนดูข้อมูล audit log นี้

โดยหลักคือทีมเทคนิคที่ดูแลระบบ tracking แต่ทีมการเงินหรือทีมที่ต้องตอบคำถามเรื่องตัวเลขให้ผู้บริหารก็ควรมีสิทธิ์เข้าถึงแบบอ่านอย่างเดียว เพื่อตรวจสอบได้เองในกรณีจำเป็น

ข้อมูล audit log ควรเก็บนานแค่ไหน

ขึ้นอยู่กับข้อกำหนดทางกฎหมายและความจำเป็นทางธุรกิจ ธุรกิจทั่วไปมักเก็บอย่างน้อย 1-2 ปี ส่วนธุรกิจที่มีข้อพิพาททางการเงินบ่อยหรือมีข้อกำหนดด้านบัญชี อาจต้องเก็บนานกว่านั้น

อยากวัดผลโฆษณาเข้า LINE ให้ถึงยอดขาย?

ทดลองใช้ linli ฟรี 14 วัน ไม่ต้องใช้บัตรเครดิต

เริ่มทดลองใช้ฟรี

บทความที่เกี่ยวข้อง

คู่มือเริ่มต้น LINE Conversion Tracking ในไทย ตั้งแต่ติดตั้งจนวัดยอดขายจริง
คู่มือเริ่มต้น LINE Conversion Tracking ในไทย ตั้งแต่ติดตั้งจนวัดยอดขายจริง
สำหรับคนที่เพิ่งเริ่มทำ LINE Conversion Tracking บทความนี้รวมทุกขั้นตอนตั้งแต่นิยาม Funnel ติดตั้งระบบ เชื่อมแพลตฟอร์ม จนถึงวางแผนช่วงทดลองใช้ให้ตัดสินใจได้จริงก่อนหมด Trial
LINE Tracking กับ PDPA ธุรกิจไทยควรเก็บข้อมูลอย่างไรให้เหมาะสม
LINE Tracking กับ PDPA ธุรกิจไทยควรเก็บข้อมูลอย่างไรให้เหมาะสม
ระบบ Tracking ไม่ได้ทำให้ธุรกิจผ่าน PDPA โดยอัตโนมัติ บทความนี้อธิบายว่าธุรกิจยังต้องรับผิดชอบอะไรเองบ้าง ตั้งแต่ Legal Basis ไปจนถึงการจำกัดข้อมูลที่ส่งไปแพลตฟอร์มโฆษณา
วิธีติดตั้ง Tracking Link และ Tracking Script สำหรับปุ่ม LINE บนเว็บไซต์
วิธีติดตั้ง Tracking Link และ Tracking Script สำหรับปุ่ม LINE บนเว็บไซต์
ก่อนติดตั้ง Tracking Link หรือ Script บนปุ่ม LINE ต้องเตรียมอะไรบ้าง บทความนี้เล่าขั้นตอนจริงตั้งแต่สิทธิ์เข้าถึงเว็บ ไปจนถึง Test Journey ก่อนเปิดใช้งาน ไม่ใช่แค่ก็อปโค้ดไปวาง