天天看點

阿裡面試官:寫個微服務網關?(上)架構網關時序圖跨域Session 設計(鑒權)

架構

  • 基于SpringBoot的Web Server
  • 網關屬于高并發子產品

    邏輯簡單,業務邏輯剝離到業務層

  • 設計目标-高性能

    緩存設計

    異步線程設計

  • 阿裡面試官:寫個微服務網關?(上)架構網關時序圖跨域Session 設計(鑒權)

網關時序圖

阿裡面試官:寫個微服務網關?(上)架構網關時序圖跨域Session 設計(鑒權)

跨域

從一個源(如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 設計(鑒權)

Session複制

Tomcat 有元件支援該機制

阿裡面試官:寫個微服務網關?(上)架構網關時序圖跨域Session 設計(鑒權)

優點:

每台機器存儲全量的 session,做到了高可用。

缺點:

叢集同步複雜适用于小規模網關,

資料存儲不合理,記憶體開銷大