章文嵩:談LVS及阿里開源背後的精彩故事
阿里集團副總裁、高階研究員章文嵩是Linux核心開發者,LVS專案的發起人,同時,也是淘寶開源委員會負責人。
章文嵩早在讀書時代就開始做LVS,其背後有哪些精彩的開發故事?他與開源之間又有著怎樣的不解之緣?他有怎樣的寶貴經驗分享給正在從事或準備從事開源專案的開發者呢?《程式設計師》雜誌2012年8月刊就個人和企業參與開源專案等話題對章博士進行了訪談。
收穫開源的樂趣
《程式設計師》:請你談談開發LVS的經過。
章文嵩:LVS是我在1998年5月開始做的,那時我還在讀書。在那之前,我寫過很多軟體,但出於種種原因,那些軟體的生命週期並不長,LVS是我目前寫過的軟體中生命週期最長的一個。
我在1995年底開始接觸Linux,並不算早,當時只是裝機器給同學們玩兒,並沒真正在Linux上寫過程式碼。不過因為使用Linux,便開始接觸到網際網路上的開源思想,我也讀過Richard Stallman的故事,對他的觀點很認可。
在我1997年碩士畢業時,曾問老師能否把碩士課題的成果開源出來,但老師說這是國家課題,不能開源。所以,那個軟體只能鎖在抽屜裡,至今也沒有發揮出更大作用。
一開始寫LVS,我只花了兩個星期的時間,完成了一個很簡單的版本。它是我的個人專案,與學校無關,所以不需要做任何申請,我就能決定將它開源。
因為我接觸網際網路較早,所以自己搭建了網站並將原始碼放上去。一個星期後,LVS就被一家澳大利亞小公司用起來了。這家公司為社群提供上網服務,那時網際網路的頻寬比較貴,它通過正向代理伺服器快取之前使用者訪問的資料,並提供給後來的使用者。這樣到海外的流量只有一次,對ISP來說可以節約很多成本。但隨著社群上網人數增多,一臺機器已經忙不過來了,這時它們發現了LVS,然後立刻用起來。公司的負責人寫郵件感謝我,說效果很好。我覺得這件事挺有意思,因為自己寫的軟體被別人用起來了,為他人創造了價值。
在軟體的整個開發過程中,逐漸有許多其他人蔘與。比如一開始,專案的英文介紹過於簡單,這時一位美國朋友幫我寫了英文的HowTo,後來有其他開發者陸續加入進來,有人貢獻過一兩個Patch;也有人持續了很長時間,幫助我一起做LVS。
LVS進入官方核心之後,維護工作就相對簡單了。以前,每個版本釋出我都需要檢查與系統其他部分的相容性。進入官方核心之後這些工作有更多人完成,其上的開發也要照顧到LVS。目前,我們正在實現一些新功能,比如對IPV6的支援是Google的兩個工程師幫我完成的。我們也正在把對SCTP協議的處理加進來。這是開源專案的好處,不需要所有事情一個人單幹,可以在全世界範圍聚集一群有相同興趣的人一起完成。
《程式設計師》:LVS是你在讀書時完成的,在學校,你是怎樣瞭解到生產環境中真實使用者的需求呢?
章文嵩:我認為對於一個開源的專案來說,蒐集需求很重要,因為真正有用的軟體來源於實際應用,不同於閉門造車想象出來的功能。
我確實是見到這樣的問題,才有了開發LVS的想法。我在國防科大學讀書之餘,也幫湖南電信做一些系統整合專案,見到許多伺服器忙不過來的情況。這時就需要考慮負載均衡。那時業界也有一些商用方案,常用的是思科LocalDirector。我希望在Linux核心上寫點東西,又知道思科LocalDirector的工作原理。所以我當時就花了兩個星期寫了一個最簡單的版本,那是1998年5月。LVS網站上最早的一個Logo,是一個箭頭進來分成三叉,跟思科的LocalDirector差不多,只不過我在上面又添了一隻企鵝。後來這個Logo變成一群企鵝,是別人給我的啟發,因為軟體是關於Linux叢集的。
在開發LVS的過程中,我收集了很多來自真實使用者的需求。即使我沒有接觸到某些應用場景,但會有其他能接觸到這些場景的使用者協助我進行測試,這種方式把軟體的開發成本降低了很多。
《程式設計師》:你為什麼決定將LVS開源,而不是像思科LocalDirector一樣,也做成商業產品?
章文嵩:一套LocalDirector當時價值幾萬美元,我那時心裡有疑問——這東西並不難寫,為什麼賣那麼貴?而我做開源專案純粹是為了好玩,只要有人用我就很開心,哪怕有時跟使用者交流到很晚,需求來了,我半夜還在寫程式。
2000年前後,收到了許多使用者的感謝郵件。也有公司給我捐送伺服器,有個瑞士使用者寄了一大包餅乾來感謝我。我把餅乾拿回家,被丈母孃看到了,她說原來你半夜這麼辛苦地工作,就是為了一大包餅乾啊。
做這些事是很有成就感的,更多的是樂趣。
《程式設計師》:對於正在從事或準備從事開源專案的開發者,你有哪些建議和經驗希望分享?
章文嵩:我覺得做開源專案,邁出第一步很重要。程式碼不在於多與少,專案也不在於大與小,先開源了再說。因為開源是指整個的開發過程,並不單單指程式碼。程式碼開源只是一個結果,更關鍵部分還在於整個開發過程。在LVS的開發過程中,雖然沒有很多金錢回報,但其他方面回報是有的。比如出國參加演講一般會有人資助,可以全世界跑一跑。在整個開源的過程中,我自己學到很多東西,比如與人交流,因為這是一個世界舞臺,有機會接觸到世界上第一流的程式設計高手。
想想看,當年我只花兩個星期寫出的程式碼,會很複雜嗎?但就像埋下一顆種子,只要繼續投入,就有可能生根發芽,長成大樹。
《程式設計師》:你是怎麼想到一開始就把專案文件寫成英文?又是如何推廣的?
章文嵩:我接觸網際網路時,很多資料是英文的,自然而然也想到用英文寫專案文件。那時候的社群都是通過郵件列表交流,語言也是英文。當我完成了這個專案,就希望請大家看看LVS有沒有價值。於是想到發郵件到社群上推廣。否則僅是建立一個網站,可能沒有人知道,必須要尋找一個渠道,讓更多人看一看。
我們從中學就開始學英語,寫一些簡單的英文不會很困難,只要把想到的東西用英文列出來,大部分老外都能看得明白。當然,現在國內整個技術發展氛圍也越來越好,寫中文文件我覺得也不是問題。
比如我們的Taocode、盛大和金山衛士的開源平臺背後都有公司支援,肯定會長久做下去。即使在Github上用中文交流也沒問題。因為國內受眾也很多,用中文交流有時候更直接。當然,如果想發展國際使用者,需要寫英文文件。
讓企業擁抱開源
《程式設計師》:你在工作中同時負責商業化和開源方式開發的軟體,對比這兩種方式,你覺得哪種效率更高、質量更好?
章文嵩:我認為開源方式的效率更高、質量更好、成本更低。
在淘寶、阿里我們主要做底層的基礎平臺開發,其上承載著上千個應用。在完成這個任務的同時,我們將其中一些基礎軟體專案開源。一方面是為了與同行交流技術,也便於在校學生看到真實系統中的軟體是什麼樣子,對學生來說,還能讓他們更多地瞭解公司。
以TFS來說,中興通訊的研究員曾經在《程式設計師》雜誌上發表過關於它的技術文章,新浪微博也利用TFS做圖片儲存。使用者在使用的過程中,對軟體中存在的Bug進行反饋,這對我們提高軟體的可靠性、效能都有作用。
另一方面,開源軟體專案對軟體開發人員也是一種激勵,因為過去公司開發的閉源專案,往往在滿足業務需求後,就停滯不前了。
2010年3月,我們確定了第一個開源專案——淘寶分散式快取跟物件儲存系統Tair。當時我們的開發人員表示,需要給他們一段時間,把程式碼好好整理一下再開源。因為在開源的時候,會標明每位開發者的貢獻,每個檔案是誰寫的,他的名字、郵箱都會標註在程式碼和文件中。3個月之後,專案正式開源時,事實證明我們的開發人員確實也把程式碼寫得更好。這對整個專案程式碼的質量是有促進的。此外,外部使用者的反饋對軟體是巨大的促進,形成了一個良好的迴圈,因為軟體在一家公司面臨的需求相對單一。
淘寶內部有一些開源活動,公司給予一定的經費支援,我們也設立一些獎項,比如“開源達人”,頒發獎狀、獎牌。這些獎勵多是精神層面的。
《程式設計師》:商業公司是否應該將內部的軟體專案開源?你覺得什麼樣的專案適合開源?
章文嵩:商業公司最終還是要實現贏利,才能在市場競爭中要佔據有利地位。選擇開源或不開源,與一家公司的商業模式有很大關係,如果一家公司的所有核心競爭力都在某個軟體—比如Oracle,它不可能把Oracle資料庫開源。另一方面,我們也看到很多真正的網際網路公司發起了很多開源專案—比如Facebook,因為其核心競爭力並不在於軟體。當然,軟體是網際網路公司的重要能力之一,但其核心競爭力有可能在其他方面—比如公司的運營模式或資料。
對於阿里來說,最大的價值在於資料。因為資料是日積月累才獲得的,別人拿不走。打個比方,建立一個小規模的電子商務網站,技術實現並非十分困難。但完成之後,其上沒有任何資料。在淘寶上,每個人有很多交易行為,這些歷史、信譽記錄會讓大家覺得交易更可靠。而在一個全新的平臺上,使用者交易的可能性會低很多。按照馬雲的說法,淘寶、阿里未來是一家資料公司,資料才是最有價值的。
《程式設計師》:淘寶確定專案開源的流程是怎樣的,在專案的開源過程中有哪些值得注意的地方?
章文嵩:我們成立了淘寶開源委員會,通過這個委員會管理專案的開源流程。將公司的一個產品開源,首先要得到直接主管的許可,提出書面申請後還需要公司另外幾個技術主管的書面認可。開源委員會會對許可證的選擇、程式碼測試的程度、文件的程度給出建議並進行備案。淘寶的開源專案中,使用GPL許可的比較多,當然有些開發者比較喜歡用Apache許可,我們也不反對。
在對外開放的過程中,我們內部的技術部門還建立了稽核機制。安全團隊負責稽核程式碼開源後是否會被他人濫用,對我們現有系統發起攻擊。比如一些金鑰,或者加密的方法,就不適合放在開源的系統中。在我們的實踐過程中,證明這樣的流程是可以保證現有系統安全的。
相關文章
- 阿里雲CTO章文嵩:支援開源,JStorm將捐贈給Apache阿里JSORMApache
- 微軟開源 .Net 平臺的背後故事微軟
- 開源筆記軟體 Joplin 背後的故事筆記
- Spring Cloud Alibaba 開源背後的故事 | 開源中國專訪SpringCloud
- 漫談 Greenplum 開源背後的動機
- 郭超:阿里雲Cassandra背後的故事阿里
- 你不知道的《阿里巴巴Java開發手冊》背後故事阿里Java
- Redis持久化背後的故事Redis持久化
- Java main方法背後的故事?JavaAI
- Mac OS X 背後的故事Mac
- HTML5背後的故事HTML
- 《Cut The Rope》 HTML 5版背後的開發故事HTML
- 開源夜聊欄目開播:聊聊新晉 CNCF 專案 sealer 背後的故事
- 章文嵩:適時的技術才能創造巨大價值
- [開發故事]談談前後端的分工協作後端
- 最新訪談首次披露拍出「天價」AI畫作背後的故事AI
- 《碼出高效:Java開發手冊》背後的故事Java
- dyld背後的故事&原始碼分析原始碼
- 蘋果自動駕駛背後的故事蘋果自動駕駛
- 愛回收IPO背後的新老故事
- GCC編譯器背後的故事GC編譯
- RestCloud ETL 社群版背後的故事RESTCloud
- 微博春晚背後的技術故事
- 獨家對話RadonDB設計者 暢談開源背後的初心
- 誰來背鍋?自動駕駛車禍背後的故事自動駕駛
- 探祕嫦娥一號背後的軟體開發故事
- 10個社交網站背後的故事網站
- 淺談初次做外包專案及背後的思考
- 嵌入式—編譯器背後的故事編譯
- AI Gossip - 人工智慧背後的小故事AIGo人工智慧
- 重磅釋出背後:POLARDB的中國故事
- SSH 協議埠號 22 背後的故事協議
- 騰訊與Github的魔幻會面背後的故事…Github
- 更好的 java 重試框架 sisyphus 背後的故事Java框架
- DevUI開源的故事devUI
- 背後支援著 Instagram 的開源技術
- 【前端軼事】Chrome 小恐龍背後的故事前端Chrome
- 請求 www.baidu.com 背後的故事AI