บทที่ 17 · Nearby Friends

ออกแบบ Nearby Friends

Backend ที่ขยายได้สำหรับแอปที่ช่วยให้ผู้ใช้แชร์สถานที่ตั้งและค้นพบเพื่อนที่อยู่ใกล้ๆ

บทนำ

บทนี้มุ่งเน้นการออกแบบ Backend ที่ขยายได้สำหรับแอปที่เปิดให้ผู้ใช้แชร์สถานที่ตั้งและค้นพบเพื่อนที่ใกล้ๆ

ความแตกต่างจาก Proximity Service

ความแตกต่างหลักคือในบทนี้สถานที่เปลี่ยนแปลงอย่างต่อเนื่อง ในขณะที่ในบทนั้นที่อยู่ธุรกิจคงที่

Functional Requirements

Non-Functional Requirements

Components หลัก

WebSocket Servers

เซิร์ฟเวอร์ที่Stateful สำหรับการสื่อสารแบบReal-timeระหว่างไคลเอนต์และเซิร์ฟเวอร์

Redis Location Cache

ใช้เก็บข้อมูลสถานที่ล่าสุดสำหรับแต่ละผู้ใช้ที่Active

Redis Pub/Sub

Message Bus น้ำหนักเบาที่เปิดใช้ Topics สำหรับแต่ละUser Channelสำหรับอัปเดตสถานที่

Periodic Location Update Flow

  1. ไคลเอนต์มือถือส่งอัปเดตสถานที่ไปยังLoad Balancer
  2. Load Balancer ForwardอัปเดตไปยังWebSocket Server
  3. WebSocket Serverบันทึกข้อมูลสถานที่ในLocation Cache
  4. WebSocket Server Publishข้อมูลสถานที่ในUser Channelผ่านRedis Pub Sub
  5. Redis PubSub Broadcastอัปเดตไปยังเพื่อนที่เกี่ยวข้อง

เนื้อหานี้อ้างอิงจาก ByteByteGo - System Design Interview - An Insider's Guide