架構
- 基于SpringBoot的Web Server
-
網關屬于高并發子產品
邏輯簡單,業務邏輯剝離到業務層
-
設計目标-高性能
緩存設計
異步線程設計
網關時序圖
跨域
從一個源(如baidu.com) 加載的文檔或者腳本預設不能通路另一個源(如tencent.com)的資源。
CORS (Cross-Origin Resources Sharing)解決跨域問題
對HTTP請求頭進行豁免
- 建立豁免清單
-
Access-Control- Allow-Origin
如需允許所有資源都可以通路您的資源,您可以如此設定:
Access-Control-Allow-Origin: *
如需允許
https://developer.mozilla.org通路您的資源,您可以設定:
Access-Control-Allow-Origin: https://developer.mozilla.org
CORS和緩存
如果伺服器未使用“*”,而是指定了一個域,那麼為了向用戶端表明伺服器的傳回會根據Origin請求頭而有所不同,必須在Vary響應頭中包含Origin。
Access-Control-Allow-Origin: https://developer.mozilla.org
Vary: Origin
Access-Control- Allow- Credentials
- 是否允許cookie跨域
Access-Control- Allow- Methods
- 允許送出請求的方法
Session 設計(鑒權)
讀寫請求使用的上下文對象,稱之會話(Session).
高可用設計
- 無狀态化
單機下不存在Session共享,是以記憶體存儲能保證極大的性能
- 無法應對高并發、高可用
分布式方案
Session綁定
将 uid hash 到固定的節點,可是如何保證高可用呢?使用主從,但這簡單問題複雜化,不推薦。
Session複制
Tomcat 有元件支援該機制
優點:
每台機器存儲全量的 session,做到了高可用。
缺點:
叢集同步複雜适用于小規模網關,
資料存儲不合理,記憶體開銷大