<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          深夜,我偷聽到程序員要對session下手……

          共 3043字,需瀏覽 7分鐘

           ·

          2020-09-26 14:01

          我是一個(gè)web服務(wù)器

          我是一個(gè)web服務(wù)器,我的工作是給人類提供上網(wǎng)服務(wù),我每天要為數(shù)以萬計(jì)的人提供網(wǎng)頁瀏覽服務(wù)。

          已經(jīng)是深夜了,我還在和手下幾個(gè)兄弟為了一件事緊張討論著。

          “老大,現(xiàn)在咱們每天處理的請求越來越多了,session同步的問題不能再拖了,必須想個(gè)辦法”

          “二哥說的是啊,老大,不能再拖了”

          “老二,老三,咱們是一個(gè)集群,你們說的問題我不是不知道,我昨天聽程序員們在討論說要給我們接入一個(gè)叫Redis的家伙,相信這一問題很快就能得到解決啦,大家再忍忍?!?/p>

          “Redis,他是誰,什么來頭?怎么沒聽過這號人物”

          “我也沒見過,等等看吧”

          session-cookie時(shí)代

          到底是什么問題,讓我們兄弟幾個(gè)如此著急上火?事情還得從多年以前說起······

          那時(shí)候,這倆兄弟還沒來,就我一個(gè)web服務(wù)器,每天處理的不過是一些靜態(tài)資源文件,像HTML、CSS、JS、圖片等等,日子過的清閑自在。

          日子一天天過著,互聯(lián)網(wǎng)卻悄然發(fā)生著變化。除了靜態(tài)網(wǎng)頁之外,可以動態(tài)交互的網(wǎng)絡(luò)應(yīng)用開始如雨后春筍般涌現(xiàn),像各種各樣的論壇啊,購物網(wǎng)站啊之類的。

          這家公司的老板也不例外,招了一幫程序員要搞一套支持動態(tài)網(wǎng)頁交互的網(wǎng)站出來。

          以往的時(shí)候,我只需要按照HTTP協(xié)議的規(guī)范處理請求就完事兒了。不過動態(tài)交互應(yīng)用出現(xiàn)后,我還得記住每一個(gè)請求背后的用戶是誰,要不然就張冠李戴,全亂套了。

          為了解決這個(gè)問題,程序員們想出了一個(gè)叫session的辦法:

          瀏覽器登陸以后,我就分配一個(gè)session id,表示一個(gè)會話,然后返回給瀏覽器,讓它保存著。后續(xù)再來請求的時(shí)候,就把它給帶上,我就能知道是誰啦!

          還別說,這辦法還是挺管用的,成功解決了用戶身份識別的問題,這一用就是好幾年。

          不過,互聯(lián)網(wǎng)的發(fā)展實(shí)在是太快了,用戶量蹭蹭上漲,而我卻發(fā)起了愁。

          原先用戶量少的時(shí)候,session id管理起來倒也簡單,現(xiàn)在用戶越來越多,對應(yīng)的session id數(shù)量也與日俱增,我有點(diǎn)不堪重負(fù)了。

          終于前不久,公司對web服務(wù)器進(jìn)行了擴(kuò)展,給我找來了兩個(gè)小弟,還專門添置了一個(gè)nginx來進(jìn)行負(fù)載均衡,這一下我們變成了3臺web服務(wù)器組成的小集群了。

          我的工作一下輕松了許多,兩位小兄弟為了分擔(dān)了不少。我原以為以后的日子要好過一些了,可沒想到,兩位小兄弟的加入?yún)s引入了新的問題。

          原先的session id雖然很多,我一個(gè)人累是累點(diǎn),但是方便管理??!現(xiàn)在人手是增加了,可是這個(gè)session id的管理問題卻變得復(fù)雜起來。

          因?yàn)樵蹅儸F(xiàn)在是個(gè)集群,請求如果發(fā)到我這,我給登記了session id,但下一次請求說不定就發(fā)到老二那里,一會兒又發(fā)到老三那里,這個(gè)就說不準(zhǔn)了,這樣我們幾個(gè)手頭的信息不一致,就會出現(xiàn)一些異常情況,用戶估計(jì)要破口大罵:這什么辣雞網(wǎng)站?

          后來我們跟nginx商量了一下,讓他同一個(gè)用戶來的請求都發(fā)給我們固定的一個(gè)人,這才穩(wěn)住了局面。

          不過好景不長,后面我們?nèi)值芏枷嗬^出現(xiàn)過宕機(jī)的情況,這時(shí)候nginx還是得把請求交給還在工作的兄弟,原來的問題就又出現(xiàn)了!

          我們幾個(gè)逼急了,商量了一下,干脆大家伙來同步session id的信息好了,有新增、失效的情況都給其他幾個(gè)兄弟招呼一下,大家都管理一份,這樣就不會出現(xiàn)不一致的問題了。

          搞了半天,又變成以前一個(gè)人管理所有session id的情況了,不僅如此,還要抽出時(shí)間和幾位兄弟同步,把session id搬來搬去,工作量不減反增了。

          就這樣艱難的過了一段日子,大家都怨聲載道,所以有了開頭的那一番討論。

          這一次,希望這位新來的叫Redis的伙伴能拯救我們。

          獨(dú)立緩存——Redis

          過了幾天,總算把這個(gè)叫Redis的小伙伴給盼來了!

          這小子看起來特別精神,了解清楚情況后,告訴我們說:“三位老哥,以后這session id都統(tǒng)一存在我這里吧,你們別各自保存了,這不是各位的擅長”

          “你行嗎?”,老二看著不太相信他的話,一臉不屑。

          “行不行,試試不就知道了嗎?”

          接下來,我們聽從了Redis的建議,不再保存這煩人的session id,全部一股腦兒交給了他,我們需要的時(shí)候再找他獲取。

          你還別說,這小子個(gè)子不大,本事不小,讀寫速度都特快,讓我們頭疼的問題總算是解決了!

          Token時(shí)代

          幾個(gè)月后的一天···

          “聽說了嗎?程序員們又要更改session id的存儲方案了”,這一天,老二神神秘秘的說到。

          “不對不對,我聽到的版本是以后不用session id了,要變天了!”,老三也湊了上來。

          一旁的redis老哥一聽不樂意了,“咋的?是嫌我干的不好嗎?”

          我也趕緊催促,“你倆就別賣關(guān)子了,聽到了什么,快說說”

          老三示意大家圍攏一些,小聲說到:“我上次聽兩個(gè)程序員在議論,不知道他們在哪里學(xué)來了一套叫JWT(JSON Web Token) 的技術(shù),硬說讓我們來管理保存session id負(fù)擔(dān)太重了,以后不保存了!還說,還說···”

          “還說啥,你倒是說啊!”

          “還說,Redis也不是萬能的,也有崩潰的風(fēng)險(xiǎn),一崩潰就全完了,所以要革新技術(shù)”,老三繼續(xù)說到。

          Redis一聽更著急上火了,“我工作這么久以來,從沒有撂過挑子吧,怎么能這么說我呢?再不行我也可以像你們搞個(gè)集群嘛”

          “Redis老弟你先別急。唉,老三,這不保存session id,以后怎么鑒別用戶呢?你有沒有聽到他們怎么說的?”

          “聽他們說,沒有session id,但是換了一個(gè)token,用它來識別用戶”

          老二一聽不以為意:“換了個(gè)名字,換湯不換藥嘛!咱們還不是要保存token,才能匹配誰是誰”

          老三搖了搖頭:“不是的,這可不只是改了個(gè)名字那么簡單!這個(gè)token是由三部分構(gòu)成,就像這樣:”

          “你們看,第一部分是JWT的基本信息,然后把用戶的身份信息放在第二部分,接著和第一部分合在一起做一個(gè)計(jì)算,計(jì)算的時(shí)候加入了一個(gè)只有我們才知道的密鑰secretkey,計(jì)算結(jié)果作為第三部分。最后三部分拼在一起作為最終的token發(fā)送給客戶端保存著···”

          還沒等老三說完,老二點(diǎn)出了其中的關(guān)鍵:“我知道了,后面咱們再收到這個(gè)token的時(shí)候,就可以通過同樣的算法驗(yàn)證前面兩部分的結(jié)果和第三部分是不是相同,就知道這個(gè)token是不是偽造的啦!因?yàn)槊荑€只有我們知道,別人沒辦法偽造出一個(gè)token的!最后確認(rèn)有效之后,再取第二部分的用戶身份信息,就知道這是誰了!”

          聽完他們的分析,我和Redis老兄都默默的點(diǎn)了點(diǎn)頭,“有點(diǎn)意思啊,這樣一來,咱們確實(shí)不用存了!不過現(xiàn)在咱們幾個(gè)工作配合的也挺好的,他們費(fèi)這么大勁是為了什么?。俊?/p>

          “我猜他們是想節(jié)約開支,把Redis老哥給裁掉!”,老二說到。

          老三搖了搖頭,“依我看,八成他們是想展示技術(shù)給領(lǐng)導(dǎo)看,這不又快到職級晉升答辯了,他們想搞事情!唉,老大,這事你怎么看?”

          “我啊,我···”

          朋友們,你怎么看?session-cookie和JWT,你更傾向誰?


          推薦閱讀:

          提高國內(nèi)訪問 GitHub 的速度的 9 種方案

          2.5 億!華為成立新公司!

          IDEA 上位?不!Eclipse Theia 1.0 發(fā)布!

          2020年9月程序員工資最新統(tǒng)計(jì),以及中國編程語言9月排行榜!

          歡迎關(guān)注Java公眾號


          長按上圖,識別圖中二維碼即可關(guān)注

          瀏覽 44
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  老牛嫩草破苞视频A片 | 欧洲国产精品黄色网址 | 成人自拍网址 | 五月丁香淫淫网 | 性,国产三级在线 |