Chat System สนับสนุนการส่งข้อความแบบ Real-time ระหว่างผู้ใช้ บทนี้มุ่งเน้นการออกแบบแอปแชทที่รวม One-on-One Chat, Group Chat และ Online Presence
บทนำ
ภาพที่ 1: One-to-One Chat Architecture
Chat System สนับสนุนการส่งข้อความแบบ Real-time ระหว่างผู้ใช้ Features หลัก:
- One-on-One Chat
- Group Chat (สูงสุด 100 ผู้ใช้)
- Online Presence Indicators
- Multiple Device Support
- Push Notifications
ข้อกำหนด
- ข้อความ Text-based (สูงสุด 100,000 ตัวอักษร)
- สถาปัตยกรรมสำหรับ 50 ล้าน DAU
- จัดเก็บ Chat History ถาวร
Communication Protocols
Sender Side
ใช้ HTTP สำหรับส่งข้อความ โดยใช้ Persistent Connections เพื่อประสิทธิภาพ
Receiver Side
ภาพที่ 2: Online Presence System
- Polling: Client สอบถาม Server เป็นระยะ - ไม่มีประสิทธิภาพ
- Long Polling: เปิด Connection จนกว่าข้อความมาถึง - ไม่มีประสิทธิภาพสำหรับผู้ใช้ที่ไม่ Active
- WebSocket: Connection แบบ Bi-directional และ Persistent - เลือกสำหรับส่งและรับข้อความ
Components
- Stateless Services: จัดการ Signup, Login และ User Profile
- Stateful Services: Chat Servers รักษา WebSocket Connections แบบ Persistent
- Third-Party Integration: Push Notification Services
Messaging Flows
One-on-One Chat
- User A ส่งข้อความไปยัง Chat Server 1
- Chat Server 1 กำหนด Unique Message ID และเก็บข้อความใน Key-Value Store
- หาก User B Online ข้อความถูก Forward ไปยัง Chat Server 2
- หาก User B Offline ส่ง Push Notification
Group Chat
ข้อความถูก Copy ไปยัง Individual Inboxes สำหรับแต่ละผู้รับในกลุ่ม
Online Presence
Heartbeat Mechanism
Clients ส่ง Heartbeats เป็นระยะเพื่อบ่งชี้ว่าออนไลน์ หากไม่มี Heartbeat ในช่วง Threshold ผู้ใช้ถูกทำเครื่องหมายว่า Offline
Fanout Model
อัปเดตสถานะออนไลน์ถูก Push ไปยังเพื่อนโดยใช้ Publish-Subscribe Model
เนื้อหานี้อ้างอิงจาก ByteByteGo - System Design Interview - An Insider's Guide