9
大型网站技术架构的演进 (news.cnblogs.com)
IngramChen 積分 0 編輯於

sticky session 很常見嗎?

我自己的話都會套 sticky 因為 rolling server 時都會有新舊版共存的問題,如果用戶一個網頁裡的十幾個 requests,有一半到舊 server,而另一半到新 server 這樣會很頭大。

還是有什麼更好的解?特別是 rolling upgrade 時。

HYL 積分 3

在雲端的環境,一群的機器不夠用,可以開兩群啊 XD

聽過有些公司是不用 rolling restart 的,新版的程式放到一群新的伺服器上,舊的 session 就讓它繼續對到舊的伺服器上,讓它們慢慢的放到過期,才把機器全關掉。

popcorny 積分 0

這有點神,所以Load Balancer還可以session-aware?

qrtt1 積分 1 編輯於

買/租 貴一點的就有了。Azure Web Site 應該就是這型的,不像 Azure Cloud Service 自己設的用 IP 為主的。

kaif 積分 1

這不就是sticky session?

popcorny 積分 0 編輯於

了解了。原來有Load Balancer Generated Cookie Stickiness。長知識了!! 因為我原本以為sticky session都是用類似ip hashed的方法去dispatch,如果是load balancer去建這個cookie那就合理。但是後面的server就要知道前面有Load Balancer了。

Link1

IngramChen 積分 0

是啊,我們現在的 server 就是靠 ELB 的 cookie sticky。該不會 azure 還沒有吧??

popcorny 積分 1

嗯。Azure的LB似乎只能做到Layer4的(TCP/IP),沒有Layer7的(HTTP)Load Balancing。不知道我有沒有誤解..

popcorny 積分 1

Sticky Session很常見啊。最大的好處是不需要一個External Cache Server去Share Session Data。當然你說的Rolling Upgrade也是一個優點。

缺點就是那台掛了,那台的Session Data就消失了,不過看應用程式特性。也許對大部分的應用這個沒有那麼嚴重,畢竟Sesion Data也只是另外一種Cache而已。

IngramChen 積分 0

如果有 session state,那 sticky 是個很自然的選擇。

但我好奇的是,像是現在 SPA 盛行,server session 都轉嫁到 client browser 裡了,在這個前提下還需要 sticky 嗎?在 rolling upgrade 的前提下,我只想到用 sticky 的方式才能簡單去除版本問題,其他方式感覺要各方配合 (cache, proxy, app server 都要處理),非常麻煩。

我是不是漏了什麼更好的技術...

popcorny 積分 1

SPA架構下還是可以用Session啊 XD。只是原本request html改成ajax request json。還是你說的是把所有的資料都放在cookie? 這篇文章也有說這種case,但是缺點就是 1. Cookie 的长度限制 2. 安全性 3. 数据中心外部带宽的消耗 4. 性能影响,服务器处理每次的请求的内容又多了

IngramChen 積分 1

SPA 是可以有 session ,不過這樣做的人很多嗎?通常都是放 localStorage,連 cookie 都不放了。

popcorny 積分 1

想想也是。所以有關authentication的部分,就是有需要的時候,再把放在localStorage的access token一併打過來對嗎?

IngramChen 積分 1

就我說知是這樣做,如果完全不用 cookie 的話。

kaif 不是 spa 也是採用一樣的做法,所以有些地方不好寫...

kaif 積分 1 編輯於

李智慧在後記裡寫到:“不要企圖去設計一個大型網站”,“原因是互聯網發展運行有其自己的規律,短暫的互聯網歷史已經一再證明這種企圖行不通”。還說了:“大型網站不是設計出來的,而是逐步演化出來的”。

這點應該對大部份場合是對的,但對有些場合,應該還是要一開始對架構有所設計規劃。

例如,我不太相信azure或google cloud不是一開始就是以IaaS, multi-region的規模去設計的。(AWS或許是,所以暴露好多legacy的設計呀)