1. 程式人生 > >單點登入系統架構——淘淘商城(二十三)

單點登入系統架構——淘淘商城(二十三)

SSO

  • 單點登入系統(Single Sign On, SSO):在多個應用系統中,使用者只需要登入一次就可以訪問所有相互信任的應用系統,是目前比較流行的企業業務整合的解決方案之一。

會話機制

  • http協議是無狀態的,為了鑑別瀏覽器的請求,識別使用者的身份,需要伺服器和客戶端共同維護一個狀態
  • 常用的會話機制分為三種類型。詳細講解
    • 基於 session 。伺服器為每一個使用者維持一個session,使用者登入之後使用sessionId標識身份,並通過session中的登入憑證標識登入狀態。
      10.sessionbase.png
    • 基於 cookie 。使用者登入之後將登入憑證做數字簽名和加密之後寫入cookie,之後使用者憑藉cookie標識身份。
      10.cookiebase.png
    • 基於 token 。類似cookies方式,但是不使用cookie而是使用token片段,每次訪問時在url引數或者header中帶上token標識使用者的身份。
      10.tokenbase.png

傳統登入架構

  • 基於session的架構,實現簡單,但是缺點有:伺服器壓力大、叢集部署的session共享問題、cookie跨域問題。
  • 其中在叢集部署的時候,session共享問題較為嚴重。

session共享問題

  • 叢集環境中,同一個工程會部署在多臺伺服器上,每個工程都有自己獨立的session 。如果工程之間session不共享,在負載均衡伺服器的排程之下,會出現使用者重複登入的情況。
    10.sesionproblem.png

解決session共享問題

配置伺服器

  • 可以配置tomcat的session共享,伺服器不停的向叢集中其他的tomcat廣播自己的session資訊,與其他tomcat做session同步。
  • 優點:
    • 不用修改程式碼就可以實現session共享。
  • 缺點:
    • 效能受限。tomcat 是全域性session複製,在大規模應用的時候,使用者過多,叢集內tomcat數量過多,session的全域性複製會導致叢集效能下降。這種方式的tomcat 5個以下為好。
    • 不能解決跨域的session共享問題。多個有聯絡但分散式部署的工程共享session很難,例如支付寶和淘寶的單點登入問題。

單點登入

  • 使用單獨的模組負責使用者登入和session的管理,並將session儲存在redis中。
    10.sessonsingle.png
  • 優點:
    • 由於redis高併發特性,效能較高。
    • 對外提供介面,可以跨域。
  • 缺點:
    • 增加開發量。

單點登入架構

  • 單點登入系統作為服務層的一環,提供使用者的登入和管理服務。
    10.singlestruct.png
  • 登入系統向下在redis中儲存使用者的session,在mysql中儲存和讀取使用者的基本資訊。向上接收使用者登入等請求,並通過token的形式傳遞sessionId(服務層和門戶工程之間無需使用cookie)。
  • 使用者登入和查詢訂單的流程如下:
    10.loginquery.png