借鑒之人人網(wǎng)使用的開源軟件列表
MySQL
關系型數(shù)據(jù)庫存儲系統(tǒng),我們的DBA團隊很強大,每人管理上百臺MySQL服務器,其他就不多說了,網(wǎng)上資料太多了
Tokyo Cabinet
一個key-value的存儲引擎,日本人開發(fā),國內(nèi)很多公司也開始使用,我們內(nèi)部很多地方也用它來代替 MySQL來做存儲,比如我們的搜索結(jié)果頁的用戶資料,就是用它來做一層MySQL外的冗余存儲,目的是加快搜索結(jié)果頁的顯示。在key-value并需要持久存儲的場景下,用它比MySQL更有效,Cabinet本身只是一個存儲引擎,沒有網(wǎng)絡處理能力,你可以用它作為自己的某個系統(tǒng)的下層存儲引擎,更好的是搭配Tokyo Tyrant使用。
Tokyo Tyrant
一個支持Memcached傳輸協(xié)議的網(wǎng)絡接口,由Tokyo Cabinet的作者開發(fā),目的是為Tokyo Cabinet提供網(wǎng)絡接入能力,即Tokyo Tyrant處理網(wǎng)絡連接,協(xié)議解析,然后調(diào)用Tokyo Cabinet的API來完成持久化存儲。
ICE
一個跨語言的網(wǎng)絡通訊框架,框架本身提供了強大的通訊能力,管理工具,負載均衡方案,其跨語言能力也是一個很大的亮點,基于這個框架之上,我們選用合適的語言來提供合適的服務,比如我們使用C++來開發(fā)Cache服務,使用Java來開發(fā)一些邏輯服務??蚣鼙旧砜梢院苤兀部梢院茌p,具體要看你怎么用:)
Memcached
一個純內(nèi)存的key-value的cache系統(tǒng),高效、穩(wěn)定,使用廣泛,如果你連它都沒聽說過就太out 啦,memcached本身不具備分布式能力,需要依靠Client來實現(xiàn)分布,這里強調(diào)一點的是,你應該選擇一致性Hash來做key的分布。各種語言的client都有,我們使用spymemcached作為java的Client,spymemcached是一個異步的NIO的memcached client,對網(wǎng)絡IO的處理非常的精巧,也更加高效,同時因為提供異步操作方式,可以讓你對Memcached的操作有更好的控制能力,Memcached到1.4.0版本之后,開始支持binary protocol,spymemcached對其也支持的比較好,使用binary protocol可以提高對協(xié)議的解析效率和網(wǎng)絡IO的讀寫效率。
上面說到我們使用ICE自己開發(fā)了Cache服務,為什么我們還要用 Memcached呢?主要在對Cache的操作粒度不一樣,Memcached對Cache對象以binary byte作為一個整體來操作,需要頻繁的序列化和反序列化,我們使用ICE提供的Cache服務,可以以Cache對象的一個或者多個字段來操作,比如一個用戶對象,我們可以只更新它的姓名,而Memcached
Nginx
高效、穩(wěn)定的Web Server,我們利用其代理能力,做跨IDC的請求代理,同時也將其和我們的Resin(Java Web 容器)搭配,放在Resin的前面來解決Resin的對網(wǎng)絡連接處理能力弱的問題,在一些小地方也用它來做7層的負載均衡
Resin
一個Java Web Server,比Tomcat更高效,是我們主要的Java Web容器
Squid
代理服務器,我們用他來做圖片文件的反向代理緩存
LVS
能提供4層的負載均衡,高效、高可用,高并發(fā)。我們用他替代了很多硬件的負載均衡設備
Struts
Java web框架,不過這個已經(jīng)是歷史了,我們開發(fā)了一套自己的Web框架替代了它,未來我們也會把我們的內(nèi)部的這套Web框架開源出來
Lucence
基于Java的搜索引擎框架,用它我們構(gòu)建了一個搜索集群來提供搜人的服務
Netty
一個Java的網(wǎng)絡框架,和apache的mina類似,但比mina更高效,我們用來做一些小的服務
Ganglia
一個監(jiān)控系統(tǒng),幫組我們了解我們每臺Server的資源利用情況
還有些小東西就不列出來了,最后要說的一點就是,對這些開源軟件或者系統(tǒng),我們都非常的了解,或者說知根知底,從API到內(nèi)部實現(xiàn)原理,甚至到一些源碼的細節(jié)。
原文鏈接:http://blog.csdn.net/expleeve/archive/2011/06/02/6460725.aspx
【編輯推薦】