淘寶網(wǎng), 是一個(gè)在線(xiàn)商品數量突破一億,日均成交額超過(guò)兩億元人民幣,注冊用戶(hù)接近八千萬(wàn)的大型電子商務(wù)網(wǎng)站,是亞洲最大的購物網(wǎng)站。那么對于淘寶網(wǎng)這樣大規模的一 個(gè)網(wǎng)站,我猜想大家一定會(huì )非常關(guān)心整個(gè)網(wǎng)站都采用了什么樣的技術(shù)、產(chǎn)品和架構,也會(huì )很想了解在淘寶網(wǎng)中是否采用了開(kāi)源的軟件或者是完全采用的商業(yè)軟件。那 么下面我就簡(jiǎn)單的介紹一下淘寶網(wǎng)中應用的開(kāi)源軟件。

    對于規模稍大的網(wǎng)站來(lái)說(shuō),其IT必然是一個(gè)服務(wù)器集群來(lái)提供網(wǎng)站服務(wù),數據庫也必然要和應用服務(wù)分開(kāi),有單獨的數據庫服務(wù)器。對于像淘寶網(wǎng)這樣規模的網(wǎng)站 而言,就是應用也分成很多組。那么下面,我就從應用服務(wù)器操作系統、應用服務(wù)器軟件、Web Server、數據庫、開(kāi)發(fā)框架等幾個(gè)方面來(lái)介紹一下淘寶網(wǎng)中開(kāi)源軟件的應用。

    操作系統

    我們首先就從應用服務(wù)器的操作系統說(shuō)起。一個(gè)應用服務(wù)器,從軟件的角度來(lái)說(shuō)他的最底層首先是操作系統。要先選擇操作系統,然后才是操作系統基礎上的應用軟 件。在淘寶網(wǎng),我們的應用服務(wù)器上采用的是Linux操作系統。Linux操作系統從1991年第一次正式被公布到現在已??走過(guò)了十七個(gè)年頭,在PC Server上有廣泛的應用。硬件上我們選擇PC Server而不是小型機,那么Server的操作系統供我們選擇的一般也就是Linux,FreeBSD, windows 2000 Server或者Windows Server 2003。如果不準備采用微軟的一系列產(chǎn)品構建應用,并且有能力維護Linux或者FreeBSD,再加上成本的考慮,那么還是應該在Linux和 FreeBSD之間進(jìn)行選擇??梢哉f(shuō),現在Linux和FreeBSD這兩個(gè)系統難分伯仲,很難說(shuō)哪個(gè)一定比另外一個(gè)要優(yōu)秀很多、能夠全面的超越對手,應 該是各有所長(cháng)。那么在選擇的時(shí)候有一個(gè)因素就是企業(yè)的技術(shù)人員對于哪種系統更加的熟悉,這個(gè)熟悉一方面是系統管理方面,另外一方面是對于內核的熟悉,對內 核的熟悉對于性能調優(yōu)和對操作系統進(jìn)行定制剪裁會(huì )有很大的幫助。而應用全面的優(yōu)化、提升性能也是從操作系統的優(yōu)化開(kāi)始的。

    應用服務(wù)器

    在確定了服務(wù)器的硬件、服務(wù)器的操作系統之后,下面我們來(lái)說(shuō)說(shuō)業(yè)務(wù)系統的構建。淘寶網(wǎng)有很多業(yè)務(wù)系統應用是基于JEE規范的系統。還有一些是C C++構建的應用或者是Java構建的Standalone的應用。那么我們要選擇一款實(shí)現了JEE規范的應用服務(wù)器。我們的選擇是JBoss Applcation Server。JBoss AS是RedHat的一個(gè)開(kāi)源的支持JEE規范的應用服務(wù)器。在幾年前,如果采用Java技術(shù)構建互聯(lián)網(wǎng)應用或者企業(yè)級應用,在開(kāi)源軟件中的選擇一般也就 是Apache組織的Tomcat、JBoss的 JBoss AS和Resin。嚴格意義上講,Tomcat和Resin并不能算是一個(gè)應用服務(wù)器,他們是實(shí)現了部分J2EE規范的一個(gè)容器。而商業(yè)軟件的選擇就是 IBM的WebSphere和BEA的WebLogic。到了現在,除了JBoss AS外,Apache的Geronimo,Sun的Glassfish也都是很優(yōu)秀的JEE應用服務(wù)器。也給現在的開(kāi)發(fā)人員提供了更多的選擇。具體對于目 前JEE應用服務(wù)器的比較。這邊就不在贅述。

    在應用服務(wù)器前端,我們采用了Web Server做了一次轉發(fā),我們選擇的Web服務(wù)器是大名鼎鼎的Apache。幾年前,Apache幾乎是Linux系統上開(kāi)源Web Server的唯一選擇。那個(gè)時(shí)候雖然也有一些其他的開(kāi)源的Web Server,但是從功能和穩定性上來(lái)說(shuō)都無(wú)法和Apache相對。在今天來(lái)說(shuō),Lighty也會(huì )是一個(gè)非常好的選擇。Lighty是一個(gè)非常輕量級、占 用內存資源也比較少的Web Server。雖然功能上沒(méi)有Apache強大,但是在不少場(chǎng)景下,性能是非常出色、強于A(yíng)pache的。而微軟的IIS,就只能工作在Windows的 系統上了。并且使用IIS的話(huà),基本上也就是選擇了ISAPI、ASP或者ASP.NET進(jìn)行Web應用的開(kāi)發(fā)了。



   數據庫

    說(shuō)完了我們采用的操作系統、應用服務(wù)器、WebServer后,下面就來(lái)談?wù)勎覀兊臄祿?。在淘寶網(wǎng)的應用中,采用了兩種關(guān)系型數據庫管理系統。一個(gè)是 Oracle公司的Oracle 10g,另外一個(gè)是Sun MySQL的MySQL。Oracle是一款優(yōu)秀的、廣泛采用的商業(yè)數據庫管理軟件。有很強大的功能和安全性,可以處理相對海量的數據。而MySQL是一 款非常優(yōu)秀的開(kāi)源數據庫管理軟件,非常適合用多臺PC Server組成多點(diǎn)的存儲節點(diǎn)陣列(這里我所指的不是MySQL自身提供的集群功能),每單位的數據存儲成本也非常的低廉。用多臺PC Server安裝MySQL組成一個(gè)存儲節點(diǎn)陣列,通過(guò)MySQL自身的Replication或者應用自身的處理,可以很好的保證容錯(允許部分節點(diǎn)失 效),保證應用的健壯性和可靠性??梢赃@么說(shuō),在關(guān)系數據庫管理系統的選擇上,可以考慮應用本身的情況來(lái)決定。

    一個(gè)互聯(lián)網(wǎng)應用,除了服務(wù)器的操作系統,Web Server軟件,應用服務(wù)器軟件,數據庫軟件外,我們還會(huì )涉及到一些其他的系統,比如一些中間件系統、文件存儲系統、搜索、分布式框架、緩存系統等等。 在淘寶網(wǎng),這些系統都是自主開(kāi)發(fā)的,沒(méi)有采用目前商業(yè)的或者開(kāi)源的產(chǎn)品。有些系統,會(huì )存在著(zhù)一些開(kāi)源的產(chǎn)品或者商業(yè)產(chǎn)品。但是,考慮到淘寶網(wǎng)自己的需求和 大并發(fā)量的壓力,這些系統都選擇了自主開(kāi)發(fā)。

    開(kāi)發(fā)框架

    前面談的都是系統級的產(chǎn)品,下面我們說(shuō)說(shuō)開(kāi)發(fā)框架的使用??赡苡信笥严雴?wèn),作為一個(gè)如此大規模的網(wǎng)站,淘寶網(wǎng)的Web展現層采用的是什么框架,是怎么實(shí)現 的呢?曾??也有到淘寶的應聘者問(wèn)過(guò)我這個(gè)問(wèn)題,他問(wèn)我說(shuō)是不是用的struts。我告訴他說(shuō)不是的。其實(shí)淘寶網(wǎng)的Web展現層的框架用的不是 struts,不是webwork,不是spring mvc等等。淘寶網(wǎng)的Web展現層的框架用的是集團內部自主開(kāi)發(fā)的一套Web框架。這個(gè)框架能夠解決一些其他Web框架不能解決的、在淘寶的應用中又會(huì )出 現并需要解決的問(wèn)題。在淘寶的多個(gè)應用中,也采用了一些開(kāi)源的框架,比如Spring、iBatis、jBPM、Hessian、Mina等等。這些開(kāi)源 軟件的采用為我們構建應用系統提供了很大的幫助。

    采用開(kāi)源軟件構建系統,我想有兩個(gè)很大的好處:

    一個(gè)是降低成本。假設你有1000臺應用服務(wù)器,如果你每臺服務(wù)器上采用的不是JBoss AS或者其他開(kāi)源的軟件,而是使用商業(yè)的Oracle BEA的Weblogic或者IBM的WebSphere,那么為這1000臺機器的應用購買(mǎi)License的費用是非常高的。

    另外一個(gè)好處(我覺(jué)得最大的好處)是你可以看到軟件的源碼,你可以研究了解軟件內部的工作過(guò)程、原理。這對于應用設計、開(kāi)發(fā)、查錯、優(yōu)化都是非常有幫助的。

    淘寶網(wǎng)的開(kāi)源觀(guān)

    對于開(kāi)源軟件的應用,有些人可能擔心質(zhì)量的問(wèn)題,有些人可能擔心軟件本身發(fā)展更新的問(wèn)題,等等。對于質(zhì)量的問(wèn)題,我想現在很多的開(kāi)源軟件尤其是一些很著(zhù)名 的開(kāi)源軟件都有很完善的組織,有完善的開(kāi)發(fā)、測試、發(fā)布流程。在一個(gè)新版本完成前,會(huì )有多次的測試版本發(fā)布,最后才是正式版。這和商業(yè)軟件是一樣的。并且 因為代碼公開(kāi),反而更加的容易發(fā)現錯誤,提高質(zhì)量。至于第二個(gè)問(wèn)題,我想跟第一個(gè)問(wèn)題一樣,關(guān)鍵是組織和規劃而不在是否開(kāi)源,并且在很多著(zhù)名的開(kāi)源軟件背 后,會(huì )有廠(chǎng)商在進(jìn)行支持。軟件本身的發(fā)展應該是不會(huì )成為問(wèn)題的,不太會(huì )出現軟件突然停止發(fā)展的情況。

    在今后的發(fā)展中,我們還是會(huì )一如既往的關(guān)注開(kāi)源軟件的發(fā)展,也還會(huì )根據需要采用不同的開(kāi)源軟件。在選擇一個(gè)開(kāi)源產(chǎn)品的時(shí)候,我會(huì )考慮以下幾點(diǎn):

    1. 這個(gè)軟件目前的功能和它的RoadMap

    2. 軟件本身的架構

    3. 該軟件開(kāi)發(fā)的活躍度

    4. 該開(kāi)源軟件是否是遵守該領(lǐng)域內的國際規范的

    5. 在同類(lèi)產(chǎn)品中,要挑選有比較優(yōu)勢的。并且要考慮可能存在的移植代價(jià)。這個(gè)移植指的是采用了這款開(kāi)源軟件后現有系統的移植,或者是從這個(gè)開(kāi)源軟件到其他軟件的移植。

    對于企業(yè)級系統、互聯(lián)網(wǎng)應用來(lái)說(shuō),采用開(kāi)源軟件不僅可以降低成本,更重要的是能夠真正了解軟件的內部工作機制。還可以在現在的基礎上進(jìn)行增強和定制,也能 夠從開(kāi)源軟件中借鑒到很多好的設計和實(shí)現。希望國內能有更多的企業(yè)在使用開(kāi)源軟件的同時(shí),也能開(kāi)源自身的一些軟件,或者能夠成為一些開(kāi)源軟件的貢獻者。而 作為淘寶網(wǎng),我們也會(huì )非常積極的參與到開(kāi)源的活動(dòng)中,也會(huì )努力為開(kāi)源的發(fā)展做出我們應有的貢獻。