人人網(wǎng)使用的開源軟件列表

作者:人人網(wǎng)架構(gòu)師 張潔 人人網(wǎng)UGC團(tuán)隊(duì)博客首發(fā)

MySQL
關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)系統(tǒng),我們的DBA團(tuán)隊(duì)很強(qiáng)大,,每人管理上百臺(tái)MySQL服務(wù)器,,其他就不多說了,網(wǎng)上資料太多了

Tokyo Cabinet
一個(gè)key-value的存儲(chǔ)引擎,,日本人開發(fā),,國(guó)內(nèi)很多公司也開始使用,我們內(nèi)部很多地方也用它來代替MySQL來做存儲(chǔ),,比如我們的搜索結(jié)果頁(yè)的用戶資料,,就是用它來做一層MySQL外的冗余存儲(chǔ),目的是加快搜索結(jié)果頁(yè)的顯示,。在key-value并需要持久存儲(chǔ)的場(chǎng)景下,,用它比MySQL更有效,Cabinet本身只是一個(gè)存儲(chǔ)引擎,,沒有網(wǎng)絡(luò)處理能力,你可以用它作為自己的某個(gè)系統(tǒng)的下層存儲(chǔ)引擎,,更好的是搭配Tokyo Tyrant使用,。

Tokyo Tyrant
一個(gè)支持Memcached傳輸協(xié)議的網(wǎng)絡(luò)接口,由Tokyo Cabinet的作者開發(fā),,目的是為Tokyo Cabinet提供網(wǎng)絡(luò)接入能力,,即Tokyo Tyrant處理網(wǎng)絡(luò)連接,,協(xié)議解析,然后調(diào)用Tokyo Cabinet的API來完成持久化存儲(chǔ),。

ICE
一個(gè)跨語(yǔ)言的網(wǎng)絡(luò)通訊框架,,框架本身提供了強(qiáng)大的通訊能力,管理工具,,負(fù)載均衡方案,,其跨語(yǔ)言能力也是一個(gè)很大的亮點(diǎn),基于這個(gè)框架之上,,我們選用合適的語(yǔ)言來提供合適的服務(wù),,比如我們使用C++來開發(fā)Cache服務(wù),使用Java來開發(fā)一些邏輯服務(wù),??蚣鼙旧砜梢院苤兀部梢院茌p,,具體要看你怎么用:)

Memcached
一個(gè)純內(nèi)存的key-value的cache系統(tǒng),,高效、穩(wěn)定,,使用廣泛,,如果你連它都沒聽說過就太out啦,memcached本身不具備分布式能力,,需要依靠Client來實(shí)現(xiàn)分布,,這里強(qiáng)調(diào)一點(diǎn)的是,你應(yīng)該選擇一致性Hash來做key的分布,。各種語(yǔ)言的client都有,,我們使用spymemcached作為java的Client,spymemcached是一個(gè)異步的NIO的memcached client,,對(duì)網(wǎng)絡(luò)IO的處理非常的精巧,,也更加高效,同時(shí)因?yàn)樘峁┊惒讲僮鞣绞?,可以讓你?duì)Memcached的操作有更好的控制能力,,Memcached到1.4.0版本之后,開始支持binary protocol,,spymemcached對(duì)其也支持的比較好,,使用binary protocol可以提高對(duì)協(xié)議的解析效率和網(wǎng)絡(luò)IO的讀寫效率。
上面說到我們使用ICE自己開發(fā)了Cache服務(wù),,為什么我們還要用Memcached呢,?主要在對(duì)Cache的操作粒度不一樣,Memcached對(duì)Cache對(duì)象以binary byte作為一個(gè)整體來操作,,需要頻繁的序列化和反序列化,,我們使用ICE提供的Cache服務(wù),,可以以Cache對(duì)象的一個(gè)或者多個(gè)字段來操作,比如一個(gè)用戶對(duì)象,,我們可以只更新它的姓名,,而Memcached

Nginx
高效、穩(wěn)定的Web Server,,我們利用其代理能力,,做跨IDC的請(qǐng)求代理,同時(shí)也將其和我們的Resin(Java Web 容器)搭配,,放在Resin的前面來解決Resin的對(duì)網(wǎng)絡(luò)連接處理能力弱的問題,,在一些小地方也用它來做7層的負(fù)載均衡

Resin
一個(gè)Java Web Server,比Tomcat更高效,,是我們主要的Java Web容器

Squid
代理服務(wù)器,,我們用他來做圖片文件的反向代理緩存

LVS
能提供4層的負(fù)載均衡,高效,、高可用,,高并發(fā)。我們用他替代了很多硬件的負(fù)載均衡設(shè)備

Struts
Java web框架,,不過這個(gè)已經(jīng)是歷史了,,我們開發(fā)了一套自己的Web框架替代了它,未來我們也會(huì)把我們的內(nèi)部的這套Web框架開源出來

Lucence
基于Java的搜索引擎框架,,用它我們構(gòu)建了一個(gè)搜索集群來提供搜人的服務(wù)

Netty
一個(gè)Java的網(wǎng)絡(luò)框架,,和apache的mina類似,但比mina更高效,,我們用來做一些小的服務(wù)

Ganglia
一個(gè)監(jiān)控系統(tǒng),,幫組我們了解我們每臺(tái)Server的資源利用情況

還有些小東西就不列出來了,最后要說的一點(diǎn)就是,,對(duì)這些開源軟件或者系統(tǒng),,我們都非常的了解,或者說知根知底,,從API到內(nèi)部實(shí)現(xiàn)原理,,甚至到一些源碼的細(xì)節(jié)。