技術(shù)分析開心網(wǎng)花園的原理
手機閱讀
開心網(wǎng)在一個月前推出了一款新組件,買房子里的“花園”,相信玩開心的朋友都知道。就是種植種子,然后種子會在N小時后成熟,成熟你可以收獲你的果子賺取一定金額,同時如果你不及時收割你的果實會被好友偷走。
今天想聊一聊花園,分析一下開心網(wǎng)的“程序員”。這個組件的實現(xiàn)難度不高,非常簡單,可能需要著重討論的功能只有一個。就是種子如何成熟?
首先來猜測一下開心網(wǎng)以前的實現(xiàn)方式,從種子播種的那一刻起,就誰記錄一個播種時間(必然的),比如說胡蘿卜的成熟時間是12小時,那么如何通過這 個程序讓種子在12小時之后變?yōu)槌墒鞝顟B(tài)呢?昨天開心網(wǎng)做了一次更新,他的成熟時間精確到秒了,還剩多少秒成熟,以前都是精確到分鐘的,并且過了這個分鐘 之后還會有一個“即將成熟”的過程。因為我比較喜歡做小程序,所以做過花園輔助工具,我自己會根據(jù)成熟時間去計算最終成熟時間,然后讓程序自動在第一時間 偷取好友果實,收獲自己果實。但程序計算出來的時間非常精確,但由于開心網(wǎng)還有一個“即將成熟”的階段,而且即將成熟的階段的時間是隨機的,有時候需要很 久還不成熟。我一直在猜測為什么會有這個過程,這純屬雞肋。
如果按著我自己的實現(xiàn)方式去實現(xiàn)花園種子成熟,我會在播種時記錄一個播種時間,然后數(shù)據(jù)庫里記錄種子狀態(tài)和播種時間就好了,至于如何去成熟,其實這 都不用去考慮,非常簡單。只需要在開心網(wǎng)用戶訪問某個花園頁面時,在頁面讀取結(jié)果顯示的時候做個計算就可以了,計算播種時間與果實需要多久成熟,這就可以計算出一個最終成熟時間。如果當(dāng)前時間已經(jīng)過了成熟時間,那么這個時候把種子狀態(tài)變?yōu)橐殉墒欤⒎祷亟o用戶一個狀態(tài)。
上面是我想的方式,但我猜測了許久后,終于明白開心網(wǎng)為什么會有即將成熟的過程了(只是猜測)。原因很簡單,我懷疑他們的程序員有點問題(找不到形 容詞了),猜測他們可能是寫了個程序或者服務(wù)一類的東西,每秒鐘去掃描數(shù)據(jù)庫結(jié)果,發(fā)現(xiàn)成熟就把他變?yōu)槌墒鞝顟B(tài)。這樣就可以解釋為什么有“即將成熟”的狀 態(tài)了,因為開心網(wǎng)全站玩花園的人相信不在少數(shù),如果一個程序遍歷掃描,當(dāng)掃到你果園信息的時候他是有延遲的,所以會出現(xiàn)即是成熟的時間是隨機的,沒準(zhǔn)是多 久。這個推斷很合理的解釋我們所見到的一切,這樣去做也可以解釋為什么開心網(wǎng)推出花園組件之后網(wǎng)站開始比以前慢,而且花園bug無數(shù)。但是昨天,開心網(wǎng)可 能改了花園的成熟方式,應(yīng)該很像我上面說到的那種方式。用戶A自己或者用戶A的好友訪問用戶A的花園時肯定需要讀取一次數(shù)據(jù)庫的花園信息記錄,這個時候可 以在服務(wù)器端響應(yīng)時把播種時間、成熟時間和當(dāng)前時間做一個計算,完全可以知道現(xiàn)在是否果實熟了,如果沒熟則計算當(dāng)前時間和成熟時間的時間差顯示給用戶,這 樣就可以把成熟時間精確到秒。
下面這段是屬于個人猜測,不一定屬實,僅供參考。
至于之前為什么有即將成熟,為什么用掃描的方式去實現(xiàn)(只是猜測而已)。我想這也很 好解釋,可能是開心網(wǎng)程序員和項目經(jīng)理在討論時遇到一個問題,“萬一用戶不訪問那不就無法成熟了?”。如果真的是這樣想,那我真太佩服他們程序員的水平 了。假設(shè)現(xiàn)在發(fā)生了那個問題,如果用戶不訪問就不成熟,庫里一直是未成熟狀態(tài),如果真發(fā)生了這樣情況,那又何妨??用戶A和A的好友都不去訪問A的花園, 比如播種時間是夜里0點,成熟時間是12點,可到了12點A和A的所有好友都沒有訪問過,就算不成熟,數(shù)據(jù)庫的狀態(tài)是未成熟,那也沒有人知道,人們都以為 12點就熟了,只是我們開發(fā)者知道實際上數(shù)據(jù)庫里狀態(tài)還沒成熟而已。但當(dāng)12點過了,有任何一個A自己或者A的好友訪問花園,看到的就是成熟狀態(tài)了。該收 獲的收獲,該偷取的偷取,什么都不會影響。這樣就省了太多的掃描資源,因為之前自己做過預(yù)定短信,用C#寫了個服務(wù)一天24小時掃描,庫里短信號碼數(shù)量有 幾十萬甚至上百萬,用戶定時發(fā)送,如果單線程掃描的話碰見多個可操作信息,那要導(dǎo)致后面的用戶拖延很久的,這跟開心網(wǎng)出現(xiàn)即將成熟的狀態(tài)類似。除非花成本 為每個信息開啟一個線程,我想這樣太復(fù)雜了。這段信息都是我的猜測,僅供講解與參考。
相關(guān)推薦
- 09-27開心餐廳裝修套裝欣賞
- 09-27開心餐廳如何讓美譽度140
- 09-27開心餐廳法國大餐攻略 怎樣完成開心餐廳法國大餐
- 08-10開心餐廳滿漢全席任務(wù)終極攻略
- 08-05開心餐廳名廚5星展示
- 08-03開心餐廳趣味裝修之草莓餐廳
- 08-02開心餐廳趣味裝修之典雅餐廳
- 08-02開心餐廳浮動贏率是什么
- 07-30開心餐廳等級爐子 餐臺 雇員 面積 稱號 對應(yīng)表
- 07-29開心餐廳戀愛主題裝修






















