分佈式集羣環境下,如何實現session共享一(應用場景)

  在web應用中,因爲http的請求響應式,無狀態。要記錄用戶相關的狀態信息,好比電商網站的購物車,好比用戶是否登陸等,都須要使用session。咱們知道session是由servlet容器建立和管理,存儲在服務器端,而且與客戶端瀏覽器相關(中止web應用,關閉瀏覽器session都會失效)。前端

  若是一個web應用,部署到一臺服務器(一個tomcat),那麼session使用起來至關的方便,沒有額外的擔憂,直接由servlet容器建立和管理便可。然而今天,一個web應用面臨大量用戶,高併發的訪問(咱們有十多億同胞,驕傲啊!)。那麼不管如何一個tomcat是難以提供服務的,就須要集羣方式部署大量的tomcat,共同提供服務。也就是咱們耳熟能詳 的:集羣、分佈式、負載均衡。架構大概是這個樣子:nginx

  

 

 

 

  應用場景描述程序員

  1.小明正在維護一個web應用:www.xx.com。該web應用是一個電商網站,起初用戶量不多,業務量也不大。小明經過一臺tomcat部署應用,而且把用戶登陸信息,購物車信息都保存在session中。應用服務良好,沒有任何問題。web

  2.一年之後,小明經過搜索引擎優化,購買流量的方式,推廣該電商網站,再加上商品質量不錯,性價比很高:物美價廉。很受用戶歡迎。短期內容增長了不少新的用戶,併發量指數級提高,此時一臺tomcat難以正常提供服務了瀏覽器

  3.因而小明經過橫向擴展,增長tomcat服務器,集羣方式部署:www.xx.com應用。經過三臺tomcat搭建集羣環境:tomcat1/tomcat2/tomcat3。tomcat

  4.在tomcat服務器集羣以前,經過nginx服務器實現:負載均衡+反向代理服務器

  5.集羣環境部署好應用之後,小明遇到了一個問題:用戶沒法正常購物了,須要頻繁登陸???。這但是是個大問題!!!session

  6.經過無數個夜晚的失眠(程序員遇到問題後都是這樣的!問題不解決難以入睡),小明終於想清楚了問題所在,描述以下:架構

    6.1.因爲是搭建了集羣環境(三個tomcat),以及前端服務器nginx實現的負載均衡併發

    6.2.用戶訪問流程是這樣的:

      a.用戶訪問www.xx.xom/login發起登陸請求,首先是請求到達nginx服務器

      b.nginx服務器將用戶的登陸請求,反向代理到tomcat2服務器,實現登陸,而且建立會話session

      c.當用戶登陸成功之後,發起訪問商品列表的請求:www.xx.com/list,請求仍是首先到達nginx服務器

      d.nginx服務器將用戶訪問商品列表請求,反向代理到tomcat服務器。此時因爲用戶是在tomcat2實現的登陸(在tomcat2建立session),那麼在tomcat3服務器並無session,所以tomcat3服務器響應用戶(還未登陸,須要先登陸)

      e.因而乎用戶就很鬱悶了:剛纔不是登陸過了嗎???形成此問題的根本緣由就是:在集羣環境下,沒有實現session的共享

      g.請思考:在集羣環境下,如何實現session的共享呢?

相關文章
相關標籤/搜索