首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

客戶端-服務端數據交互架構:從外賣系統看 WebSocket、長輪詢與消息隊列

     編輯:程式設計綜合問答

核心模型:雙向即時通訊

餓了麼/美團類系統:用戶下單 → **網關/負載均衡** → **訂單服務** 寫入 DB + 發送訊息到 **消息隊列 (Kafka/RocketMQ)** → **商家端** 透過 **WebSocket 長連接** 即時收到推送 → 商家接單 → 狀態回寫 → 用戶端同樣透過 WebSocket 收到狀態更新。

主流技術選型對比

技術原理適用場景優/缺點
WebSocket全雙工 TCP 連接,握手後雙向推送即時訊息、協同編輯、股票行情、外賣接單✓ 低延遲、雙向 ✗ 需心跳保活、代理/防火牆可能攔截
Server-Sent Events (SSE)HTTP 單向流,Server → Client通知公告、股價單向推送✓ 自動重連、走 HTTP/2 ✗ 單向、IE 不支援
長輪詢Client 請求 → Server hold 直到有數據或超時 → 回應 → 立即再請求簡單通知、不支援 WS 環境✓ 相容性好 ✗ 延遲高、佔連接資源
短輪詢固定間隔請求非即時、數據量小✓ 簡單 ✗ 資源浪費、延遲不可控
HTTP/2 + gRPC Streaming多路複用雙向流微服務內部、高性能內網✓ 高效、強類型 ✗ 瀏覽器直連需 gRPC-Web

分布式架構關鍵組件

  1. API Gateway (Nginx/Kong/Spring Cloud Gateway):統一入口、鑒權、限流、路由。
  2. 服務註冊發現 (Nacos/Eureka/Consul):動態感知服務實例。
  3. 消息隊列 (Kafka/RocketMQ/RabbitMQ):解耦生產消費、削峰填谷、保證最終一致性。
  4. 分布式緩存:熱點數據 (商家菜單、用戶 Session) 放 Redis Cluster。
  5. 資料庫分庫分表:訂單表按 user_id / shop_id 分片。
  6. 可觀測性:Prometheus + Grafana 指標、ELK 日誌、SkyWalking 鏈路追蹤。

外賣系統具體流程圖解 (文字版)

用戶端          Gateway          訂單服務          MQ           商家端(WebSocket)
  │                │                │               │               │
  ├─下單請求──────►│                │               │               │
  │                ├─驗證/限流─────►│               │               │
  │                │                ├─寫訂單DB─────►│               │
  │                │                ├─發送訂單消息─►│               │
  │                │                │               ├─推送消息─────►│ (長連接即時達到)
  │                │                │               │               ├─接單操作
  │                │                │               │               ├─發送狀態變更
  │                │                │◄─更新訂單狀態──┤               │
  │                │◄─回應用戶端────┤               │               │
  │◄─下單成功──────┤               │               │               │
  │                │                │               │               │
  │                │                │               │ (同樣 WebSocket 推送給用戶端狀態更新)

技術棧建議 (Java 生態)

  • 框架:Spring Boot 3 + Spring Cloud 2023 / Dubbo 3
  • 即時通訊:Netty 自研 WebSocket 服務 或 Spring WebSocket + STOMP
  • 消息隊列:RocketMQ (事務消息保證訂單狀態一致性)
  • 資料庫:MySQL 8 + ShardingSphere 分表
  • 部署:K8s + Helm + ArgoCD GitOps

核心思想:**「無狀態服務 + 有狀態連接層 + 異步解耦」**,才能支撐百萬級並發即時交互。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved