If you can't read in Chinese, you can try to install Google Charme or Google Toolbar to translate.

2010/12/01

在"按讚"與"不按讚"的背後

上圖是我的心聲。

或許,之前只是因為很不喜歡朋友老是拿不到這個單純的理由;但是,愈挖愈多之後,我才發現原來沒有那麼的單純。

開始之前,先說一句,如果您不在乎別人是不是用機器人收集東西,那麼請您也不要抱怨為什麼 FB 跟 FV 會一直不正常!

今天我們來談一個我們每天都跟它在一起,但是可能一輩子都不會去碰的問題,伺服器跟資料傳輸。如果用業界的說法,我想可能會有 99%的人看完,完全不知道我在說什麼,所以我們用我們所熟悉的事來解釋這一切。

伺服器 郵局或銀行
網路 你到銀行去會經過的路線

網路傳輸的資料叫做封包:就好像甲要去繳 3張帳單,乙呢則是去提款、刷簿子,丙則是要繳 5張稅單。
這裏甲乙丙則代表是一個封包,他們可以經由不同的路線(網路)來到銀行(伺服器),這時就要先去抽號碼牌。一張帳單或一件事我們叫它做 "事件",而銀行開了幾個櫃檯來處理叫做 "執行緒",而處理事件的速度就是 "伺服器的效能"。

在實際的生活上,我們如果覺得這裏人多,那我們可以選擇到別家去;但是在網路上,它叫你去台銀,你就不能去7-11繳帳單。也就是指定用那一台伺服器,您就只能去那一台。

在正常的情況下,我們把 FB伺服器當台銀,FV伺服器當成郵局好了。

當首頁上出現一筆紅利(可以撿的東西時),那表示台銀(FB)把這一期的帳單發出來了。
當大家看到帳單的時候,大家都搶著拿去郵局(FV)排隊要繳帳單(現實裏是不會有人這麼做的吧),不過帳單只有 10個人需要繳(假設 10人拿的紅利);這時郵局如果是開 4個櫃檯,有 20個人拿了帳單來,所以排在前面的 10個人繳了帳單,後面的 10個會被回覆,帳單繳過了,不用再繳了。而整個程序實際上不到 1秒的時間就解決了。但是您發了幾筆?您有幾個朋友?

如果前面 10個拿了的人,沒有去按讚或者按的不到 10個,那麼郵局三不五時的就有人會拿帳單要來繳。其實如果你知道它不用繳了,你還會拿帳單去排隊嗎?因為太多人不知道,所以多了很多莫名來排隊的人。

假如你有 500個朋友,其中有 100個人用機器人在撿東西,有另外的 50個人在等著撿東西,那為了這筆帳單,郵局(FV)多了 150個人排隊。用機器人更慘,因為一直有人跑去台銀(FB)問,有沒有新帳單?您有 100個用機器人的朋友,那台銀(FB)就會一直有 100個人在那邊問有沒有新的帳單。

所以為什麼伺服器會有狀況?因為太多不必要的人跑來排隊造成排隊的隊伍太長

那麼為什麼會造成問題,像被踢出來或進不去呢?

因為郵局(FV)的人員年資都比較高,所以反應速度都不怎麼好,(其實是因為等待時間 timeout)。本來我去抽了號碼牌,但是超過時間了,所以我又重新去抽了一張,但是對伺服器來說,它的記憶體夠大的話,前一個事件請求是還是存在的,所以當它處理了第一次的請求,又回來處理第二次的時候,資料就不對了,所以你就被踢出了農場。

而且用查理去觀察FV處理送信的話,你會發現FV並不是一個事件送信一次,它是在您停頓之後才一次把前面的請求資料送出去。因為網路一個封包可以搭載的量,可以容納相當多的請求,所以這麼做是可以減少網路上不必要的傳輸浪費。

當然被告知資料不符踢出來,其實還好。伺服器同一時間能處理事件的量其實是很大的,如果不幸,當您第一個請求,被處埋的同時,第二個請求或第三個請求也同時被處理時,因為(佇列)可能就會發生所謂舊蓋新的問題,甚至會造成資料寫回發生問題,因為資料會先放在記憶體才寫回檔案裏。雖然在技術上我們不認為伺服器會有這樣的問題,但是如果是在不同的程式上的執行緒時,這個問題是存在的。所以,下次您要再進農場時,因為資料錯亂了,所以資料就無法讀取。

以前會一直發生回溯的問題,就是伺服器的暫存不夠,資料常來不及寫回去,尤其是朋友到你家來拜訪的時候。

總歸一句,別再怪FB或FV,要怪您自己為什麼容忍,甚至您也在用撿東西的機器人。

本來我以為用的應該都是外國人,但是看了結果以後讓我很傷心,因為我試查了三個帳號各兩次,只看到一個外國人而已。

塞車不是塞在路上,我應該不用再解釋 Proxy的問題。塞是塞在伺服器。

該怪誰

沒有留言: