用開源軟件構建一個價值 3.65 千萬美元的企業

原文地址:[url]http://www.ibm.com/developerworks/cn/opensource/os-studionow/[/url]
簡介
開源軟件讓企業家和技術專家得以將創新型的解決方案帶到市場。本文討論了我們在創立這個後來賣價達 3.65 千萬美元的公司之初爲何以及如何採用了開源技術。
我們創建的 StudioNow 是最早的一個全球分佈式的視頻製作平臺。它聯繫了視頻製作者、編輯、平面藝術家、配音演員和其他的創意人員來爲諸如 Yellow Pages、 Citysearch® 和音樂廠牌這樣的客戶製作內容。通過 StudioNow 的網站以及基於雲的交付和轉碼平臺,實現了成規模的視頻製作,減少了單個視頻的製作成本。
在 StudioNow 的創立之初,我和我的同事們必須決定採用哪種技術以及確定項目起步及掌握一套新技能的最佳方式。我們還必須應對縮放(scaling)挑戰並做出明智的架構決策。經過這次體驗,我們知道了使用這些技術如何能爲創業帶來巨大的優勢。您的具體情況可能不同,但是如果您正在考慮爲您的項目採用開源方案,那麼我建議您:
基於社區的力量和經驗做技術決定。
積極參與圍繞您採用的軟件建立的社區。
爲了縮放的需要考慮採用雲(雖然技術上不是開源的,但圍繞這種基礎架構建設方式有涉及到很多的開源。)
避免 General Public License (GPL)。
回頁首
選擇平臺:Ruby 還是 Python?
在一個新的技術堆棧上構建一個解決方案絕非易事,但是在這些技術上構建一個全新的企業則完全將其帶到了一個新層面。選擇採用哪個平臺是一個前期的戰略決策。決策正確與否事關成敗。如果技術太過深奧,那麼這種決策不佳,往往會將收購的機會拒之門外 。 此外,如果社區很弱或是根本不存在,我們將不能很快地做到充分了解。開箱即用的功能是否足夠多以至我們能關注於構建核心功能而不是忙於搭建支架。
我們之前有的背景知識多集中於企業軟件,比如微軟® .NET 和 C# 以及 Oracle 和 Java™ 技術,很明顯這次我們需要做不同的選擇。 沒有人願意在購買許可證上花錢,也不願管理對許可證的遵從性,所以最後的決定需要在 Ruby with Ruby on Rails 和 Python with Django 中產生。最後之所以將範圍縮小到這二者是因爲它們是廣受推崇的兩種構建 Web 應用程序的開源選擇。
在 2006 年初,我兼職爲 StudioNow 工作,由我們的合夥人兼 CTO Adam Solesby 評估這兩個平臺並決定使用哪個平臺。他最後選擇了 Django,主要考慮了兩個因素。對於初學者,Python 語言看起來更爲吸引人。但更爲重要的是,Python 和 Django 文檔和社區都很強大。很容易找到示例及能清晰做出解釋的文檔。在決定採用何種技術時,這是一個很關鍵的因素。藉助在線書籍 Dive into Python、Freenode 上的 #django Internet Relay Chat (IRC) 頻道以及 Python 和 Django 的文檔(參見 參考資料),起步是很容易的。
回頁首
社區的力量
每個開源項目(以及在某種程度上,圍繞此項目的社區)都有特定的一套規則,或者表述直白,或者爲大家心照不宣。爲了在開源之路上一路成功,如下的幾點考慮將非常重要:
以一種願意回饋的姿態接觸社區。
明白社區內的人都是志願者,他們沒有虧欠您什麼。
嘗試自己尋找答案。如果有些事不明瞭,需要花些時間才能理清楚,那麼別忘了將您的經驗以博文、文檔、FAQ 等形式與社區分享以免別人再費同樣的力氣。
嘗試提前確定好社交規範並遵守,而不是成爲一個不守規矩的人。社區更多的是以電子郵件列表的形式還是 IRC 頻道的形式來交流?也可能是二者都用,並且各具不同的基調。
保持積極的態度。
回頁首
學習縮放
在 StudioNow 的早期,我們對視頻轉碼知道的不多。我們還在學習和試圖將視頻導出成 Sorenson FLV 格式以便在我們網站上回放。爲了降低成本並說服編輯們在薪酬少於其自找的其他工作的情況下仍能加盟我們的項目,我們必須承擔編輯們不想做的那些沒有創造性的重複性工作。 這裏的賣點是客戶無須擔心目標格式。
這種模式在早期階段我們成交量不大時尚能忍受。我們有幾個工作站和全職的員工來手動執行導出。此外,還有一些專設的腳本來幫助半自動化從編輯處將原始上傳文檔下載到辦公室、進行轉碼,然後再將它們上傳回項目網頁供客戶和顧客查閱的過程。
一開始就很明顯,這個過程將不能縮放,我們需要在儘量多地節約成本的同時解決這個問題。進行下一輪的融資總是有很多不確定性, 我們不想亂花錢。
選擇雲
在 2006 年中,Amazon Web Services (AWS) 相對而言還很新。最初,我們被 Amazon Simple Storage Service (Amazon S3) 便宜的無限存儲所吸引,這個成本是我們在公司成長的過程中能支付得起的。畢竟,我們是在兩個同地協作的相對較老的服務器上託管了整個站點(網站和視頻文件託管)。我們知道我們必須對轉碼進行伸縮,但是首要的一點是我們無須再擔心我們服務器上的小硬盤會被填滿。
我們決定將我們辦公室內的轉碼解決方案中的轉碼存儲轉移到 Amazon S3 上並通過一個 API 調用將位置記錄到我們的網站。這種解決方案給我們提供了一些時間來思考轉碼的縮放問題。
我於是開始通過編寫自己的 Python 接口來與 Amazon S3 API 對接。不過,我很快發現了 Mitch Garnaat 的 boto 項目(參見 參考資料)。有了 Mitch 的直接幫助,我們在效率上有了顯著的提高。這個庫本身在爲 StudioNow 節省時間和精力上功不可沒, boto 的用戶和開發人員社區更是極大地幫助我們弄清楚這種新形式的架構技術解決方案。在某種意義上,對 boto 項目的參與更多的是爲了開放架構,而不僅僅是開源軟件。
這種協作式體驗讓我得以成功地將我們原先那種受限的單一編碼解碼製作視頻的方式轉換成伸縮性極大的使用 Amazon Elastic Compute Cloud (Amazon EC2) 的編碼平臺。理論上講,這個平臺現在具備了以與編碼單一視頻相同的時間對成千上萬大小不一的視頻和麪向不同目標設備和平臺的編解碼器進行轉碼的能力。
之前,我們曾考慮(在我們的 COO 建議下)使用一種基於 Java 的閉源解決方案。它是一種久經驗證的技術,可向後期製作公司提供相同的轉碼服務。這雖不失是一種明智的保守建議,但那將需要我們投入一大筆資金來購買硬件、構建或租借數據中心空間、購買軟件許可以及僱用額外的員工來管理硬件。不過,我們知道這種解決方案至少可以保證短期內的縮放。
在向這個黑盒解決方案投入資金之前,基於我們與 boto 社區的交往經驗以及 “隨用隨付” 的承諾,我們決定探求基於雲的解決方案。雖然當時還沒有多少人這麼做過,但具備的條件已經足夠了。boto 庫具有用來按需啓動節點的接口。Amazon 則具有我們需要的定價公道的計算資源(按需以及水平計算資源而非大多數時間空閒卻要永久運行的機器)。Mitch 甚至還寫了一篇文章,展示了他如何使用 FFmpeg 轉碼一個視頻以便在 Apple iPod 上播放。
這意味着我將需要構建一個原型來引導圖像、接受要轉碼哪個視頻文件的輸入、用到我們已經構建的 API、將結果存儲在 Amazon S3 上並自行關機。我花了幾星期時間完成它之後,它給了我們基於 AWS 和開源軟件構建解決方案的信心。它還允許我們對平臺有更多的控制。我們能集中於學習對公司業務至關重要的技術,比如 FFmpeg 和視頻轉碼。這還意味着我們不會受錮於一個軟件產品提供商或受物理硬件或預算的限制。我們能很準確地知道某項目計算資源和存儲資源的成本並能將其作爲因素計入定價。
構建這個平臺的一個關鍵部分是瞭解視頻轉碼和我們實現目標所需的主要工具: FFmpeg。我發現這個項目比一個純 Python 庫,比如 boto,更爲技術化和複雜。視頻編解碼器當時對我來說十分陌生,我不確定我能否掌握這個工具、此工具使用的庫或是一般的視頻規範。
我開始成爲 Freenode IRC 頻道 #ffmpeg 的常客,閱讀那裏的文檔,甚至開始嘗試研習用 C 編寫的源代碼。我發現 IRC 頻道很有用,但是對於那些提出的問題通過自己研究和閱讀文檔完全能自己解答的人卻不那麼寬容。起初這有些令人生厭,但一段時間後,我瞭解到有人這麼做更多的是爲了節省精力而非故意無理。這個社區的社交規則似乎是先在 FAQ 和文檔內尋找答案,然後如果要在頻道內提問,要提供相關的有用信息或上下文。在我瞭解了這些社交規則後,我就能成功地獲得問題的答案了。
回頁首
被收購:許可方面的考慮
參與創業的所有人都願意看到的一天來了,有人有興趣收購我們。在最初的興奮逐漸褪去後,隨之而來的是一系列的資質檢查 。其中的一項檢查是驗證我們構建 StudioNow 所用軟件的許可情況。AOL 的律師對有無 GPL 相關代碼的使用痕跡尤其關注。GPL 的條款中規定 GPL 代碼的任何衍生作品都必須攜帶 GPL 併發布源代碼。此外,對鏈接到受 GPL 許可的庫(靜態或動態鏈接)是否就是要執行的這個許可的 “病毒” 本質的起因也甚是模糊不清。
在多數方面,我們都還不錯。但是,我們使用 FFmpeg 時帶有鏈接庫,這意味着適用的是 GPL 而非 Lesser General Public License (LGPL)。雖然我們不會重新發布或修改源代碼(只使用編譯了的二進制來進行視頻的轉碼)我們仍然需要找出這個問題的出路。幸運的是,我們沒有在轉碼服務中使用任何需要 GPL 的代碼,所以我們只是用不同的編譯標誌重新編譯了一個新的 FFmpeg 二進制。
回頁首
結束語
使用開源軟件將解決方案成功推向市場所需要的絕非僅僅是一些免費的源代碼。開源軟件是一個生態系統和社區。成爲各個感興趣社區的積極而活躍的會員也會受益良多。而且,出於使用軟件的特質,您將能更多地回饋此項目。最後,對所使用的不同開源軟件的許可情況要特別留意和慎重,因爲這可能對日後的發展至關重要。
請享受用開源軟件構建您的下一個企業的自由和快樂吧!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章