我是乙個web伺服器

2021-10-25 01:53:05 字數 3237 閱讀 1909

我是乙個web伺服器,我的工作是給人類提供上網服務,我每天要為數以萬計的人提供網頁瀏覽服務。

已經是深夜了,我還在和手下幾個兄弟為了一件事緊張討論著。

「老大,現在咱們每天處理的請求越來越多了,session同步的問題不能再拖了,必須想個辦法」

「二哥說的是啊,老大,不能再拖了」

「老二,老三,咱們是乙個集群,你們說的問題我不是不知道,我昨天聽程式設計師們在討論說要給我們接入乙個叫redis

的傢伙,相信這一問題很快就能得到解決啦,大家再忍忍。」

「redis,他是誰,什麼來頭?怎麼沒聽過這號人物」

「我也沒見過,等等看吧」

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

那時候,這倆兄弟還沒來,就我乙個web伺服器,每天處理的不過是一些靜態資源檔案,像html、css、js、等等,日子過的清閒自在。

日子一天天過著,網際網路卻悄然發生著變化。除了靜態網頁之外,可以動態互動的網路應用開始如雨後春筍般湧現,像各種各樣的論壇啊,購物**啊之類的。

這家公司的老闆也不例外,招了一幫程式設計師要搞一套支援動態網頁互動的**出來。

以往的時候,我只需要按照http協議的規範處理請求就完事兒了。不過動態互動應用出現後,我還得記住每乙個請求背後的使用者是誰,要不然就張冠李戴,全亂套了。

為了解決這個問題,程式設計師們想出了乙個叫session

的辦法:

瀏覽器登陸以後,我就分配乙個session id,表示乙個會話,然後返回給瀏覽器,讓它儲存著。後續再來請求的時候,就把它給帶上,我就能知道是誰啦!

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

不過,網際網路的發展實在是太快了,使用者量蹭蹭**,而我卻發起了愁。

原先使用者量少的時候,session id管理起來倒也簡單,現在使用者越來越多,對應的session id數量也與日俱增,我有點不堪重負了。

終於前不久,公司對web伺服器進行了擴充套件,給我找來了兩個小弟,還專門添置了乙個nginx來進行負載均衡,這一下我們變成了3臺web伺服器組成的小集群了。

我的工作一下輕鬆了許多,兩位小兄弟為了分擔了不少。我原以為以後的日子要好過一些了,可沒想到,兩位小兄弟的加入卻引入了新的問題。

原先的session id雖然很多,我乙個人累是累點,但是方便管理啊!現在人手是增加了,可是這個session id的管理問題卻變得複雜起來。

因為咱們現在是個集群,請求如果發到我這,我給登記了session id,但下一次請求說不定就發到老二那裡,一會兒又發到老三那裡,這個就說不准了,這樣我們幾個手頭的資訊不一致,就會出現一些異常情況,使用者估計要破口大罵:這什麼辣雞**?

後來我們跟nginx商量了一下,讓他同乙個使用者來的請求都發給我們固定的乙個人,這才穩住了局面。

不過好景不長,後面我們三兄弟都相繼出現過宕機的情況,這時候nginx還是得把請求交給還在工作的兄弟,原來的問題就又出現了!

我們幾個逼急了,商量了一下,乾脆大傢伙來同步session id的資訊好了,有新增、失效的情況都給其他幾個兄弟招呼一下,大家都管理乙份,這樣就不會出現不一致的問題了。

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

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

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

過了幾天,總算把這個叫redis的小夥伴給盼來了!

這小子看起來特別精神,了解清楚情況後,告訴我們說:「三位老哥,以後這session id都統一存在我這裡吧,你們別各自儲存了,這不是各位的擅長」

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

「行不行,試試不就知道了嗎?」

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

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

幾個月後的一天···

「聽說了嗎?程式設計師們又要更改session id的儲存方案了」,這一天,老二神神秘秘的說到。

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

一旁的redis老哥一聽不樂意了,「咋的?是嫌我幹的不好嗎?」

我也趕緊催促,「你倆就別賣關子了,聽到了什麼,快說說」

老三示意大家圍攏一些,小聲說到:「我上次聽兩個程式設計師在議論,不知道他們在**學來了一套叫jwt(json web token)

的技術,硬說讓我們來管理儲存session id負擔太重了,以後不儲存了!還說,還說···」

「還說啥,你倒是說啊!」

「還說,redis也不是萬能的,也有崩潰的風險,一崩潰就全完了,所以要革新技術」,老三繼續說到。

redis一聽更著急上火了,「我工作這麼久以來,從沒有撂過挑子吧,怎麼能這麼說我呢?再不行我也可以像你們搞個集群嘛」

「redis老弟你先別急。唉,老三,這不儲存session id,以後怎麼鑑別使用者呢?你有沒有聽到他們怎麼說的?」

「聽他們說,沒有session id,但是換了乙個token

,用它來識別使用者」

老二一聽不以為意:「換了個名字,換湯不換藥嘛!咱們還不是要儲存token,才能匹配誰是誰」

老三搖了搖頭:「不是的,這可不只是改了個名字那麼簡單!這個token是由三部分構成,就像這樣:」

「你們看,第一部分是jwt的基本資訊,然後把使用者的身份資訊放在第二部分,接著和第一部分合在一起做乙個計算,計算的時候加入了乙個只有我們才知道的金鑰

secretkey

,計算結果作為第三部分。最後三部分拼在一起作為最終的token傳送給客戶端儲存著···」

還沒等老三說完,老二點出了其中的關鍵:「我知道了,後面咱們再收到這個token的時候,就可以通過同樣的演算法驗證前面兩部分的結果和第三部分是不是相同,就知道這個token是不是偽造的啦!因為金鑰只有我們知道,別人沒辦法偽造出乙個token的!最後確認有效之後,再取第二部分的使用者身份資訊,就知道這是誰了!」

聽完他們的分析,我和redis老兄都默默的點了點頭,「有點意思啊,這樣一來,咱們確實不用存了!不過現在咱們幾個工作配合的也挺好的,他們費這麼大勁是為了什麼啊?」

「我猜他們是想節約開支,把redis老哥給裁掉!」,老二說到。

老三搖了搖頭,「依我看,八成他們是想展示技術給領導看,這不又快到職級晉公升答辯了,他們想搞事情!唉,老大,這事你怎麼看?」

「我啊,我···」

實現乙個 web 伺服器

在 system1 上配置乙個站點 然後執行下述步驟 2 將檔案 index.html 拷貝到您的 web 伺服器的 documentroot 目錄下 3 來自於 group8.example.com 域的客戶端可以訪問此web服務 4 來自於my133t.org域的客戶端拒絕訪問此web服務 答 ...

WEB 乙個簡單的WEB伺服器

web 伺服器如何工作的?http hypertext transfer protocol 是一套計算機通過網路進行通訊的規則。計算機專家設計出http,使http客戶 如web瀏覽器 能夠從http伺服器 web伺服器 請求資訊和服務,http目前協議的版本是1.1.http是一種無狀態的協議,無...

乙個簡單的web伺服器

新的一年了,新的開始,打算重新看一遍asp.net本質論這本書,再重新認識一下,查漏補缺,認認真真的過一遍。首先需要引入命名空間 system.net,關於網路程式設計的大部分型別及操作都可以在這個命名空間下找到。system.net.sockets 命名空間中提供了基於socket程式設計的資料型...