辦公室的門被輕輕帶上。
整個(gè)世界瞬間安靜了下來。
只剩下空調(diào)系統(tǒng)發(fā)出的低微嗡鳴。
陸奇回到自已的辦公桌后,整個(gè)人陷進(jìn)了寬大的真皮座椅里。
他抬起手,用力地揉了揉自已的太陽穴。
一種深深的疲憊感,如同潮水般涌了上來。
他為這個(gè)項(xiàng)目傾注了太多的心血。
雅虎在2008年這個(gè)時(shí)間點(diǎn),已經(jīng)被谷歌這個(gè)后起之秀,瘋狂碾壓,搜索引擎的市場份額岌岌可危。
個(gè)性化推薦系統(tǒng),被董事會視為扭轉(zhuǎn)戰(zhàn)局的決定性武器。
這個(gè)重?fù)?dān),就壓在他的肩膀上。
三個(gè)月了,整個(gè)團(tuán)隊(duì),包括他自已,幾乎是以辦公室為家。
然而進(jìn)展,卻微乎其微。
他知道,自已剛才給團(tuán)隊(duì)指出的“增量學(xué)習(xí)”方向,也只是一個(gè)模糊的概念。
具體如何實(shí)現(xiàn),如何在雅虎海量的數(shù)據(jù)上落地,他自已也沒有一個(gè)清晰的答案。
這就像是在一片伸手不見五指的黑暗森林里,他必須帶領(lǐng)團(tuán)隊(duì)摸索出一條從未有人走過的路。
太難了。
陸奇長長地吐出了一口氣,身體向后仰去。
他閉上眼睛,靠在椅背上,放空了大腦。
幾分鐘后,他重新睜開眼,眼神里恢復(fù)了一絲清明。
他伸出手,打開了自已的筆記本電腦。
熟練地輸入了一個(gè)網(wǎng)址。
GitHub。
一個(gè)幾個(gè)月前剛剛上線的新網(wǎng)站,一個(gè)專門為程序員托管代碼的社區(qū)。
對于陸奇這種技術(shù)出身的高管來說,閑暇時(shí)逛一逛GitHub,看看社區(qū)里又涌現(xiàn)出了哪些新奇的玩意兒,是一種休息,也是一種尋找靈感的方式。
就在昨天,他還在這個(gè)網(wǎng)站上,發(fā)現(xiàn)了一個(gè)讓他印象極為深刻的項(xiàng)目。
那是一個(gè)用Python寫的,名為“Tornado”的Web服務(wù)器框架。
最讓他感到驚奇的是,這個(gè)項(xiàng)目的介紹,居然全是用中文寫的。
他自已就是中國人,早年在復(fù)旦求學(xué),后來才赴美深造,并留在這里工作。
在充斥著英文代碼的GitHub上,看到方塊字,有種莫名的親切感。
他當(dāng)時(shí)就點(diǎn)了進(jìn)去。
只看了幾眼,他就被那個(gè)項(xiàng)目的代碼質(zhì)量和其背后蘊(yùn)含的思想給吸引住了。
簡潔、高效、優(yōu)雅。
尤其是其中關(guān)于非阻塞和事件驅(qū)動的實(shí)現(xiàn)方式,簡直是天才般的構(gòu)想。
以他浸淫技術(shù)領(lǐng)域多年的眼光來看,這個(gè)項(xiàng)目的作者,絕對是一個(gè)頂尖的高手。
其對計(jì)算機(jī)底層和網(wǎng)絡(luò)編程的理解,已經(jīng)到了一個(gè)令人嘆為觀止的程度。
陸奇甚至產(chǎn)生了一絲沖動,想要親自下場,為這個(gè)項(xiàng)目貢獻(xiàn)幾行代碼。
但手頭的工作實(shí)在太繁重,他最終只是給這個(gè)項(xiàng)目的作者點(diǎn)了一個(gè)“Follow”,也就是關(guān)注。
而此刻,他剛一登陸GitHub,網(wǎng)站的右上角,就彈出了一個(gè)不顯眼的通知。
他關(guān)注的那個(gè)賬號,在幾分鐘前,剛剛上傳了三個(gè)全新的項(xiàng)目。
“哦?”
陸奇的眉毛微微挑了一下。
心中涌起了一絲興趣。
那個(gè)寫出Tornado的天才,又有什么新作品了?
他移動鼠標(biāo),點(diǎn)了進(jìn)去。
三個(gè)新的項(xiàng)目倉庫,整齊地排列在他的眼前。
他的目光,落在了第一個(gè)項(xiàng)目的標(biāo)題上。
【Redis】
一個(gè)他從未聽過的名字。
他點(diǎn)了進(jìn)去,開始閱讀項(xiàng)目的簡介,也就是那個(gè)通常被稱為“README”的說明文件。
同樣,還是熟悉的中文。
【項(xiàng)目名稱:Redis (Remote Dictionary Server)】
【項(xiàng)目簡介:】
【這是一個(gè)用C語言編寫的、開源的、高性能的鍵值存儲系統(tǒng)?!?/p>
【與傳統(tǒng)的、將數(shù)據(jù)存儲在硬盤上的數(shù)據(jù)庫不同,Redis選擇將所有數(shù)據(jù)都存放在內(nèi)存中?!?/p>
【這意味著,它擁有著無與倫比的讀寫速度。硬盤的讀寫是機(jī)械式的,而內(nèi)存的讀寫,是電子式的,二者之間存在著數(shù)量級的差距?!?/p>
【它解決了什么問題?】
【在高并發(fā)的Web應(yīng)用場景下,數(shù)據(jù)庫的讀寫往往是最大的性能瓶頸。當(dāng)數(shù)以萬計(jì)的用戶同時(shí)請求訪問同一條數(shù)據(jù)時(shí),傳統(tǒng)數(shù)據(jù)庫的磁盤將會不堪重負(fù),導(dǎo)致響應(yīng)延遲,甚至整個(gè)服務(wù)崩潰?!?/p>
【Redis的設(shè)計(jì)初衷,就是為了應(yīng)對這種情況。它可以作為一個(gè)高速緩存層,擋在應(yīng)用程序和傳統(tǒng)數(shù)據(jù)庫之間。那些頻繁被訪問的熱點(diǎn)數(shù)據(jù),可以直接從Redis的內(nèi)存中讀取,速度快如閃電,從而極大地減輕了后端數(shù)據(jù)庫的壓力。】
【它的核心思想是什么?】
【1. 內(nèi)存即一切:犧牲了數(shù)據(jù)的持久性(在斷電時(shí)數(shù)據(jù)會丟失),換來了極致的速度?!?/p>
【2. 豐富的數(shù)據(jù)結(jié)構(gòu):Redis不僅僅是一個(gè)簡單的鍵值對存儲。它內(nèi)置了對字符串、哈希、列表、集合、有序集合等多種數(shù)據(jù)結(jié)構(gòu)的原生支持。這意味著開發(fā)者可以直接在數(shù)據(jù)庫層面進(jìn)行更復(fù)雜的數(shù)據(jù)操作,這極大地提高了開發(fā)效率?!?/p>
【3. 單線程模型:你沒看錯(cuò),Redis的核心網(wǎng)絡(luò)模型是單線程的。它通過IO多路復(fù)用技術(shù),避免了多線程上下文切換帶來的性能開銷,在處理絕大多數(shù)的網(wǎng)絡(luò)請求時(shí),單線程反而更快、更簡單?!?/p>
【它可以填補(bǔ)什么樣的空白?】
【在當(dāng)前的互聯(lián)網(wǎng)技術(shù)棧中,我們?nèi)鄙僖粋€(gè)足夠快、足夠靈活的“瑞士軍刀”來處理那些對性能要求極為苛刻的場景。比如:網(wǎng)站的頁面緩存、用戶會話管理、排行榜系統(tǒng)、實(shí)時(shí)計(jì)數(shù)器、消息隊(duì)列……Redis的出現(xiàn),將完美地填補(bǔ)這一空白。它不是要取代傳統(tǒng)數(shù)據(jù)庫,而是成為其最佳搭檔,共同構(gòu)建起一個(gè)真正能支撐海量用戶的、高性能的后端服務(wù)架構(gòu)。】
陸奇一字一句地讀著。
他的眼睛,越睜越大。
他的呼吸,不知不覺間變得有些急促。
他放在鼠標(biāo)上的那只手,甚至開始微微地顫抖。
“天才……”
他從喉嚨里,幾乎是擠出了這兩個(gè)字。
“這絕對是天才般的構(gòu)想!”
他猛地從椅子上站了起來,雙手撐在桌面上,身體前傾,幾乎要把臉貼在屏幕上。
內(nèi)存數(shù)據(jù)庫!
這個(gè)概念并不算特別新穎,但從沒有人能把它做到如此的系統(tǒng)和極致。
尤其是,支持這么多豐富的數(shù)據(jù)結(jié)構(gòu)!
這意味著它不僅僅是一個(gè)緩存,它本身就是一個(gè)功能完備的數(shù)據(jù)庫!
再結(jié)合昨天那個(gè)Tornado項(xiàng)目……