淘寶網,是一個線上商品數量突破一億,日均成交額超過兩億元人民币,注冊使用者接近八千萬的大型電子商務網站,是亞洲最大的購物網站。那麼對于淘寶網這樣大規模的一個網站,我猜想大家一定會非常關心整個網站都采用了什麼樣的技術、産品和架構,也會很想了解在淘寶網中是否采用了開源的軟體或者是完全采用的商業軟體。那麼下面我就簡單的介紹一下淘寶網中應用的開源軟體。
對于規模稍大的網站來說,其it必然是一個伺服器叢集來提供網站服務,資料庫也必然要和應用服務分開,有單獨的資料庫伺服器。對于像淘寶網這樣規模的網站而言,就是應用也分成很多組。那麼下面,我就從應用伺服器作業系統、應用伺服器軟體、web server、資料庫、開發架構等幾個方面來介紹一下淘寶網中開源軟體的應用。
作業系統
我們首先就從應用伺服器的作業系統說起。一個應用伺服器,從軟體的角度來說他的最底層首先是作業系統。要先選擇作業系統,然後才是作業系統基礎上的應用軟體。在淘寶網,我們的應用伺服器上采用的是linux作業系統。linux作業系統從1991年第一次正式被公布到現在已¾¬走過了十七個年頭,在pc server上有廣泛的應用。硬體上我們選擇pc server而不是小型機,那麼server的作業系統供我們選擇的一般也就是linux,freebsd, windows 2000 server或者windows server 2003。如果不準備采用微軟的一系列産品建構應用,并且有能力維護linux或者freebsd,再加上成本的考慮,那麼還是應該在linux和 freebsd之間進行選擇。可以說,現在linux和freebsd這兩個系統難分伯仲,很難說哪個一定比另外一個要優秀很多、能夠全面的超越對手,應該是各有所長。那麼在選擇的時候有一個因素就是企業的技術人員對于哪種系統更加的熟悉,這個熟悉一方面是系統管理方面,另外一方面是對于核心的熟悉,對核心的熟悉對于性能調優和對作業系統進行定制剪裁會有很大的幫助。而應用全面的優化、提升性能也是從作業系統的優化開始的。
應用伺服器
在确定了伺服器的硬體、伺服器的作業系統之後,下面我們來說說業務系統的建構。淘寶網有很多業務系統應用是基于jee規範的系統。還有一些是c c++建構的應用或者是java建構的standalone的應用。那麼我們要選擇一款實作了jee規範的應用伺服器。我們的選擇是jboss applcation server。jboss as是redhat的一個開源的支援jee規範的應用伺服器。在幾年前,如果采用java技術建構網際網路應用或者企業級應用,在開源軟體中的選擇一般也就是apache組織的tomcat、jboss的 jboss as和resin。嚴格意義上講,tomcat和resin并不能算是一個應用伺服器,他們是實作了部分j2ee規範的一個容器。而商業軟體的選擇就是 ibm的websphere和bea的weblogic。到了現在,除了jboss as外,apache的geronimo,sun的glassfish也都是很優秀的jee應用伺服器。也給現在的開發人員提供了更多的選擇。具體對于目前jee應用伺服器的比較。這邊就不在贅述。
在應用伺服器前端,我們采用了web server做了一次轉發,我們選擇的web伺服器是大名鼎鼎的apache。幾年前,apache幾乎是linux系統上開源web server的唯一選擇。那個時候雖然也有一些其他的開源的web server,但是從功能和穩定性上來說都無法和apache相對。在今天來說,lighty也會是一個非常好的選擇。lighty是一個非常輕量級、占用記憶體資源也比較少的web server。雖然功能上沒有apache強大,但是在不少場景下,性能是非常出色、強于apache的。而微軟的iis,就隻能工作在windows的系統上了。并且使用iis的話,基本上也就是選擇了isapi、asp或者asp.net進行web應用的開發了。
資料庫
說完了我們采用的作業系統、應用伺服器、webserver後,下面就來談談我們的資料庫。在淘寶網的應用中,采用了兩種關系型資料庫管理系統。一個是 oracle公司的oracle 10g,另外一個是sun mysql的mysql。oracle是一款優秀的、廣泛采用的商業資料庫管理軟體。有很強大的功能和安全性,可以處理相對海量的資料。而mysql是一款非常優秀的開源資料庫管理軟體,非常适合用多台pc server組成多點的存儲節點陣列(這裡我所指的不是mysql自身提供的叢集功能),每機關的資料存儲成本也非常的低廉。用多台pc server安裝mysql組成一個存儲節點陣列,通過mysql自身的replication或者應用自身的處理,可以很好的保證容錯(允許部分節點失效),保證應用的健壯性和可靠性。可以這麼說,在關系資料庫管理系統的選擇上,可以考慮應用本身的情況來決定。
一個網際網路應用,除了伺服器的作業系統,web server軟體,應用伺服器軟體,資料庫軟體外,我們還會涉及到一些其他的系統,比如一些中間件系統、檔案存儲系統、搜尋、分布式架構、緩存系統等等。在淘寶網,這些系統都是自主開發的,沒有采用目前商業的或者開源的産品。有些系統,會存在着一些開源的産品或者商業産品。但是,考慮到淘寶網自己的需求和大并發量的壓力,這些系統都選擇了自主開發。
開發架構
前面談的都是系統級的産品,下面我們說說開發架構的使用。可能有朋友想問,作為一個如此大規模的網站,淘寶網的web展現層采用的是什麼架構,是怎麼實作的呢?曾¾¬也有到淘寶的應聘者問過我這個問題,他問我說是不是用的 struts。我告訴他說不是的。其實淘寶網的web展現層的架構用的不是struts,不是webwork,不是spring mvc等等。淘寶網的web展現層的架構用的是集團内部自主開發的一套web架構。這個架構能夠解決一些其他web架構不能解決的、在淘寶的應用中又會出現并需要解決的問題。在淘寶的多個應用中,也采用了一些開源的架構,比如spring、ibatis、jbpm、hessian、mina等等。這些開源軟體的采用為我們建構應用系統提供了很大的幫助。
采用開源軟體建構系統,我想有兩個很大的好處:
一個是降低成本。假設你有1000 台應用伺服器,如果你每台伺服器上采用的不是jboss as或者其他開源的軟體,而是使用商業的oracle bea的weblogic或者ibm的websphere,那麼為這1000台機器的應用購買license的費用是非常高的。
另外一個好處(我覺得最大的好處)是你可以看到軟體的源碼,你可以研究了解軟體内部的工作過程、原理。這對于應用設計、開發、查錯、優化都是非常有幫助的。
淘寶網的開源觀
對于開源軟體的應用,有些人可能擔心品質的問題,有些人可能擔心軟體本身發展更新的問題,等等。對于品質的問題,我想現在很多的開源軟體尤其是一些很著名的開源軟體都有很完善的組織,有完善的開發、測試、釋出流程。在一個新版本完成前,會有多次的測試版本釋出,最後才是正式版。這和商業軟體是一樣的。并且因為代碼公開,反而更加的容易發現錯誤,提高品質。至于第二個問題,我想跟第一個問題一樣,關鍵是組織和規劃而不在是否開源,并且在很多著名的開源軟體背後,會有廠商在進行支援。軟體本身的發展應該是不會成為問題的,不太會出現軟體突然停止發展的情況。
在今後的發展中,我們還是會一如既往的關注開源軟體的發展,也還會根據需要采用不同的開源軟體。在選擇一個開源産品的時候,我會考慮以下幾點:
1. 這個軟體目前的功能和它的roadmap
2. 軟體本身的架構
3. 該軟體開發的活躍度
4. 該開源軟體是否是遵守該領域内的國際規範的
5. 在同類産品中,要挑選有比較優勢的。并且要考慮可能存在的移植代價。這個移植指的是采用了這款開源軟體後現有系統的移植,或者是從這個開源軟體到其他軟體的移植。
對于企業級系統、網際網路應用來說,采用開源軟體不僅可以降低成本,更重要的是能夠真正了解軟體的内部工作機制。還可以在現在的基礎上進行增強和定制,也能夠從開源軟體中借鑒到很多好的設計和實作。希望國内能有更多的企業在使用開源軟體的同時,也能開源自身的一些軟體,或者能夠成為一些開源軟體的貢獻者。而作為淘寶網,我們也會非常積極的參與到開源的活動中,也會努力為開源的發展做出我們應有的貢獻。
作者簡介:
曾憲傑,現任淘寶網平台架構部架構師。2002年畢業于浙江大學計算機系,先後在中科院下屬企業、先鋒電子(中國)就職。有豐富的windows平台、企業級系統設計經驗。現主要研究領域包括消息中間件的設計開發、分布式系統、分布式存儲