เบนฟิก้าไม่ใช่แค่ทีมฟุตบอล แต่คือระบบซอฟต์แวร์กระจายศูนย์ที่ต้องประมวลผลข้อมูลหลายล้านอีเวนต์ต่อนัดแบบเรียลไทม์
เมื่อเราพูดถึง เบนฟิก้า หลายคนอาจนึกถึงนักเตะชื่อดัง สีแดงขาว หรือสนามกีฬา Estádio da Luz ที่จุผู้ชมได้กว่า 65,000 คน แต่ถ้าคุณเป็นวิศวกรซอฟต์แวร์หรือคนที่ดูแลระบบ production จริง คุณจะพบว่าเบนฟิก้าเป็นกรณีศึกษาทางวิศวกรรมที่ดุเดือดพอ ๆ กับแพลตฟอร์มเทคโนโลยีระดับโลก ไม่ว่าจะเป็นระบบสตรีมมิ่งแมตช์สด ระบบจำหน่ายบัตรที่ต้องรองรับการแย่งชิงที่นั่งในเวลาเดียวกันหลายแสนคำขอ หรือ data pipeline ที่กลืนข้อมูล telemetry จากนักเตะในสนามทุกเสี้ยววินาที
ผมใช้เวลาหลายปีกับระบบ backend ที่ต้องรับทราฟฟิกเป็นจังหวะ spikes คล้ายวันแข่งขัน และสิ่งที่ผมเห็นจากโครงสร้างพื้นฐานดิจิทัลของสโมสรฟุตบอลชั้นนำอย่างเบนฟิก้าคือบทเรียนวิศวกรรมที่นำไปปรับใช้กับแอปพลิเคชันมือถือหรือ microservices ได้ทันที บทความนี้จะไม่ใช่การเล่าข่าวทีมฟุตบอล แต่จะเจาะลึกว่า เบนฟิก้า ในมุมมอง software architecture - data engineering, cybersecurity และ SRE ทำงานอย่างไร
เบนฟิก้าในมุมมองวิศวกรรมข้อมูล ทำไมสโมสรฟุตบอลถึงเป็นระบบซอฟต์แวร์ขนาดใหญ่
ถ้าคุณเคยออกแบบระบบที่ต้องรับ event พร้อมกันหลายล้านรายการ คุณจะเข้าใจว่า เบนฟิก้า ในวันที่มีการแข่งขันไม่ใช่แค่ทีมกีฬา แต่เป็นระบบนิเวศดิจิทัลที่ประกอบด้วยแอปพลิเคชันมือถือ เว็บไซต์ แพลตฟอร์มจำหน่ายบัตร ระบบโทรทัศน์ของสโมสร และข้อมูลจากเซ็นเซอร์ที่ติดอยู่กับนักเตะและลูกฟุตบอล แต่ละส่วนคือ service ที่ต้องสื่อสารกันผ่าน API, message queue และ database ที่ต้องคงสถานะให้ถูกต้อง ระบบเหล่านี้มีข้อกำหนดเรื่อง latency และ availability ที่เข้มงวดพอ ๆ กับแพลตฟอร์มอีคอมเมิร์ซระดับ global
จากประสบการณ์ใน production environment ที่ผมดูแลระบบแจ้งเตือนแบบ push notification ให้กับแอปพลิเคชันผู้ใช้หลักล้านคน ผมพบว่าความท้าทายที่สำคัญที่สุดไม่ใช่ throughput เพียงอย่างเดียว แต่คือการรักษา consistency ของข้อมูลภายใต้ concurrency สูง เช่น ตอนที่แฟนบอลหลายหมื่นคนพยายามกดซื้อบัตรพร้อมกันในช่วง pre-sale เท่านั้น ตัวระบบต้องมี idempotency key, distributed lock และการควบคุม rate limit อย่างรัดกุม ไม่งั้นจะเกิด double booking หรือ account lockout เป็นวงกว้าง
สถาปัตยกรรมข้อมูลแมตช์แบบ Real-Time ด้วย Apache Kafka และ Flink
ในการวิเคราะห์ฟุตบอลสมัยใหม่ ข้อมูลตำแหน่งนักเตะ เหตุการณ์ส่งบอล การวิ่งตัดแนวรับ หรือความเร็วของลูกยิง จะถูกส่งจากกล้องและเซ็นเซอร์ภาคสนามเข้าสู่ระบบกลางทุก ๆ 25-50 มิลลิวินาที สำหรับ เบนฟิก้า แล้ว ข้อมูลชุดนี้มีปริมาณมหาศาลเกินกว่าที่ database ทั่วไปจะรับไหวแบบ synchronous การออกแบบที่เหมาะสมคือใช้ Apache Kafka เป็น message bus กระจาย event ไปยัง consumer หลายกลุ่ม โดยแต่ละ match จะถูกกำหนดเป็น Kafka topic แยกจากกัน และ partition ตาม player ID หรือ sensor stream เพื่อให้ consumer ขยายขนานได้
ในฝั่ง processing ผมมักเลือก Apache Flink สำหรับ stateful stream processing เพราะมันจัดการ event-time watermarking และ windowing ได้ดีกว่าเครื่องมือ batch ทั่วไป ตัวอย่างเช่น การคำนวณระยะทางรวมของนักเตะแต่ละคนในครึ่งแรกแบบ window 45 นาที หรือการตรวจจับรูปแบบการเพรสซิ่งที่เปลี่ยนจาก 4-4-2 เป็น 4-3-3 ในเวลาไม่กี่วินาที เอกสารทางการของ Apache Kafka ระบุว่า consumer group หนึ่ง partition จะถูกอ่านโดย consumer เพียงตัวเดียวเท่านั้น ซึ่งเป็นกลไกที่ช่วยให้ระบบวิเคราะห์ข้อมูล เบนฟิก้า รักษา ordering ของ event ต่อนักเตะแต่ละคนได้อย่างถูกต้อง
.Need a Custom App Built?
Let's discuss your project and bring your ideas to life.
Contact Me Today →