|
Googleはオープンソースを強く支持し、数多くのオープンソース・プロジェクトを立ち上げていますが、根本的に、Googleのオープンソースへの取り組みとオープン性のレベルはFacebookに大きく劣っています。これが、Facebookがわずか数年で世界最大のソーシャル・ネットワーキング・サイトへと成長できた理由の一つです。この記事では、Facebookを支えるオープンソースの力について考察します。 【エンタープライズオープンソースシリーズ】は、世界的に有名な企業(国内企業を含む)におけるオープンソースの現状に焦点を当て、オープンソースソフトウェアの力を探り、より多くの開発者がオープンソースを理解し貢献し、より調和のとれた国内オープンソースエコシステムを構築できるようにします。 1. Facebook対Google Facebookは2004年の設立以来、ハーバード大学のイントラネットから世界最大のソーシャルネットワーキングサイトへと成長しました。現在、Facebookのユーザー数は10億人を超え、毎日平均7億人が世界中でサービスを利用しており、Google+(アクティブユーザー数3億4,300万人)をはるかに上回っています。 Google+と比較すると、FacebookはGoogleを完全に上回っています。Facebookの巨大なユーザーベースは莫大な広告収入を生み出しており、インターネット広告業界においてGoogleにとって最も脅威的な競合相手となっています。 Facebookの急成長は、その豊富な人材プールと切り離せない関係にあります。近年、FacebookとGoogleの競争は人材獲得競争という形で顕在化しています。Facebookは、Google、Microsoft、Apple、Yahooといった企業から積極的に人材を引き抜いてきました。例えば2012年には、Facebookの従業員1人がMicrosoftに転職するごとに、30.5人がFacebookに転職しました。GoogleとFacebookの比率は15.5対1でした。 Facebookの従業員数は現在5,000人ですが、それでもGoogle(従業員数5万人以上)の10分の1程度に過ぎません。資金面でも、FacebookはGoogleに大きく後れを取っています。 競合他社のような人材と資金力に乏しいにもかかわらず、Facebookはどのようにしてインターネットの巨人Googleに匹敵する存在であり続けたのでしょうか?大きな要因はオープンソースという性質でした。これにより、世界中の多くの開発者がFacebookで働き、Facebookの欠点を補うことができました。 II. Facebookの野心的なオープンソースイニシアチブ Googleはオープンソースを積極的に採用していると一貫して主張しているにもかかわらず、特定の技術やサーバーの詳細については依然として極めて秘密主義的です。一方、Facebookはこの点においてはるかにオープンな姿勢を示しています。 1. オープンソースのFacebookプラットフォームコード 2008年、Facebookはプラットフォームのコードとアプリケーションツールの大部分をオープンソース化することを決定しました。Facebookは、プラットフォームがほぼ成熟したと述べ、この動きによって開発者はFacebookプラットフォーム全体をより包括的に理解できるようになり、Facebook向けアプリケーションの開発が容易になり、コミュニティへの貢献も可能になるとしました。 「FBOpen」というコードネームを持つこのプロジェクトには、APIアーキテクチャ、FQLアナライザー、FBMLアナライザー、FBJS、そして多くのよく使われるメソッドやタグの実装など、Facebookプラットフォームのインフラストラクチャと機能の一部がPHPベースで実装されています。つまり、他の開発者はFacebookが使用するインフラストラクチャとテクノロジーを容易に活用できるということです。 プロジェクトアドレス: https://github.com/facebook/platform/tree/master/fbopen オープンソース コードの大部分は CPAL (Common Public Attribution License) に基づいてライセンスされていますが、FBML アナライザーは MPL (Mozilla Public License) に基づいてライセンスされています。 2. オープンソースのデータセンターとネットワークシステム Facebookは、データセンター分野でGoogleに対抗するため、2011年にOpen Compute Project(OCP)を発表しました。このプロジェクトは「オープンソース」のデータセンターハードウェアの開発を目的としており、Facebookはデータセンターの設計図、サーバー構成、データセンター監視インターフェースをすべて公開しました。Facebookの目標は、データセンター向けに、より高速で、より安価で、よりリソース効率の高いハードウェアを構築することでした。さらに重要なのは、OCPを通じて無料で提供される設計は、あらゆる企業が利用し、適応できるということです。 フェイスブックは今年5月、スイッチなどのネットワーク機器を含むネットワークシステムをオープンソース化すると発表した。 Facebook はオープンソースのデータセンターを採用することで、データセンター分野でより規模が大きく財務的に強力な Google などのライバル企業と競争できるようになりました。 III. Facebookのオープンソース・インフラストラクチャ Facebookは、大規模なシステムプラットフォームやデータセンターに加え、利用するインフラストラクチャとサービスもオープンソース化しています。これらについては以下で説明します。 1. Apache Cassandra これは構造化データを管理するための分散ストレージ システムであり、単一障害点を心配することなく、複数の汎用サーバーにわたって非常に大規模なデータセットに拡張できます。 2. アパッチハイブ これは Hadoop 上に構築されたデータ ウェアハウス インフラストラクチャであり、大規模なデータセットのデータ集約、アドホック クエリ、分析を簡単に実行できるツールを提供します。 3. フラッシュキャッシュ これはLinux用の汎用ライトバックブロックキャッシュです。ファイルシステム上でロード可能なLinuxカーネルモジュールとして使用できます。 4. PHP 用ヒップホップ これはPHP仮想マシン、ランタイム、そしてJIT(ジャストインタイム)プロダクションシステムです。前身はHPHPc(PHPコードをC++にコンパイルするプロジェクト)でした。HipHop仮想マシンは、PHPコードのパフォーマンスを大幅に向上させます。 5. 愚行 Folly(Facebook Open-source LibrarY)は、C++11の機能に基づいてstdやboostと同様の機能を提供する低レベルライブラリです。Follyの開発者には、Andrei AlexandrescuをはじめとするC++プログラミングの達人たちが名を連ねています。Follyとstdやboostの最大の違いは、大規模なシナリオにおける高い効率性です。 6. 筆記者 これは、多数のサーバーからのログ データ ストリームをリアルタイムで集約するスケーラブルなサービスです。 7. 倹約 このプロジェクトは、スケーラブルなクロスランゲージサービス開発のためのフレームワークを提供します。Thriftは、ソフトウェアスタックとコード生成エンジンを組み合わせることで、C++、Java、Python、PHP、Ruby、Erlang、Perl、Haskell、C#、Cocoa、JavaScript、Node.js、Smalltalk、OCaml、Delphiなどの言語間でシームレスに動作する効率的なサービスを構築します。 8. 竜巻 Pythonで書かれた、比較的シンプルなノンブロッキングWebサーバーフレームワークです。数万件の同時接続を処理できるように設計されており、リアルタイムWebサービスに最適です。 9. 反応する これは、instagram.com および Facebook サイトの一部をレンダリングするために使用される、ユーザー インターフェイスを構築するための JavaScript ライブラリです。 10. FBモック FBMock はシンプルで使いやすい PHP モック フレームワークです。 IV. Facebookのオープンソース社内開発ツール Facebook は社内の開発者が使用するツールもオープンソース化することを選択しました。 1. コードモッド 大規模なコードベースのリファクタリングを部分的に自動化することで開発者を支援できますが、依然として人間による監督と時折の介入が必要です。 2. Facebookアニメーション これは、開発者が DOM と CSS を使用してカスタム アニメーションを作成するのに役立つ JavaScript ライブラリです。 3. MySQLのオンラインスキーマ変更 クラスターをオフラインにすることなく、クラスター内の大規模なデータベース テーブルをオンラインで変更できるようになります。 4. ファブリケーター これは、開発者がソースコードを簡単に作成、レビュー、共有できるようにするウェブアプリケーションのコレクションです。Facebookの何百人ものエンジニアが毎日使用しています。 5. PHP埋め込み このツールにより、開発者は PHP の埋め込みを非常に簡単に行うことができます。これは、PHP SAPI 上に構築された、より便利で簡素化された API です。 6. phpsh このツールは、PHP用のインタラクティブシェルを提供します。readlineの履歴、タグの自動補完、ドキュメントへのクイックアクセスなどの機能を備えています。興味深いことに、Pythonで書かれています。 7. スリー20 これはiPhone開発者向けのObjective-Cライブラリで、多くのUI要素とデータ支援ツールを提供しています。プロジェクトは現在メンテナンスされていませんが、iOS 5/6向けのアプリケーション開発には引き続きご利用いただけます。 8. XHP XHP は、XML ドキュメントのフラグメントを有効な式に変換するなど、PHP 言語の構文を拡張する PHP 拡張機能です。 9. XHProf これは、シンプルな HTML ベースのナビゲーション インターフェイスを備えた PHP 用の関数レベルの階層化アナライザーです。 V. 開発プラットフォーム Facebook のプラットフォーム エンジニアリング チームは、開発者が Facebook をサードパーティ アプリケーションに簡単に統合できるようにするオープンソース プラットフォーム SDK もいくつかリリースおよび保守しています。
#p# VI. Facebookのエンジニアが貢献したオープンソースプロジェクト Facebookのエンジニアは、多くのオープンソースプロジェクトにも貢献しています。これらのプロジェクトはFacebook内で利用され、本番環境向けに最適化されています。 1. アパッチハドゥープ Apache Hadoop は、Facebook でのデータ分析に使用される、信頼性が高く、スケーラブルな分散コンピューティング インフラストラクチャを提供します。 2. Apache HBase これは、Hadoop 分散ファイル システム (HDFS) 上に構築された分散型の列指向データ ストアです。 3. Cfエンジン これは、サーバーの自動設定とメンテナンスに使用されるルールベースの設定システムです。Facebookは、ホスト設定の維持と製品レベルの多くの管理操作の自動化にCfengineを使用しています。 4. ジェマロック これは、ヒープ分析をサポートする高速で一貫性のあるメモリアロケータです。Facebook のエンジニアは、これにヒープ分析機能を追加し、多くの最適化を行いました。 5. メモリキャッシュ これは分散メモリオブジェクトキャッシュシステムです。Memcachedは元々Facebookによって開発されたものではありませんが、Facebookはこの技術の最大のユーザーとなっています。 6. MySQL MySQLはFacebookのデータベースインフラの基盤です。LaunchpadにはFacebookが提供した多くのパッチが掲載されており、MySQL@Facebookページを通じてFacebookがどのようにMySQLを使用しているかを知ることもできます。 7. PHP Facebookのコードの大部分はPHPで開発されています。そのシンプルな構文により、Facebookは製品の移行と改善をより迅速に行うことができます。 8. ニス Facebookでは、このプロジェクトが世界中のユーザーから毎日数十億件ものリクエストを処理しています。友達の写真やプロフィール写真を読み込む際には、Varnishが使われています。 要約 上記のように、Facebookはオープンソースに多額の投資を行ってきました。規模と資金力でFacebookを凌駕するGoogleとの競争において、オープンソースは確かに非常に優れたアプローチです。オープンソースプロジェクトを採用することで、Facebookは非常に低コストで迅速かつ安定した効率的なシステムを構築できます。また、製品をオープンソース化することで、世界中から多くの優秀な開発者を惹きつけています。 Facebook のオープンソース プロジェクトはすべて GitHub で見つかります: https://github.com/facebook 新興企業Facebookはオープンソースを活用することで、急速に存在感を高め、インターネットの巨人Googleとの差を徐々に縮めることができました。他にオープンソースを活用して成功を収めた企業はあるでしょうか?[エンタープライズ・オープンソース・シリーズ]の今後のレポートにご期待ください。 |