The Go Blog

実際のGoプロジェクト: SmartTwitterとweb.go

Michael Hoisie
2010年10月19日

今週の記事はMichael Hoisie氏によって書かれました。サンフランシスコを拠点とするプログラマーである彼は、Goの初期採用者の一人であり、いくつかの人気のあるGoライブラリの作者でもあります。彼はGoを使用した経験を次のように語っています。

Hacker Newsの投稿でGoを知りました。約1時間後には夢中になっていました。当時、私はウェブスタートアップで働いており、Pythonで社内テストアプリを開発していました。Goは速度、より優れた並行処理サポート、そして理にかなったUnicode処理を提供していたので、プログラムをこの言語に移植したいと強く思いました。当時、Goでウェブアプリを簡単に書く方法はなかったので、シンプルなウェブフレームワークであるweb.goを構築することにしました。これは、以前に私が使っていた人気のあるPythonフレームワークであるweb.pyをモデルにしています。web.goの開発中にGoコミュニティに参加し、多くのバグ報告を提出し、いくつかの標準ライブラリパッケージ(主にhttpjson)をハッキングしました。

数週間後、web.goがGitHubで注目を集めていることに気づきました。プロジェクトを宣伝したことはなかったので、これは驚きでした。シンプルで高速なウェブアプリケーションにはニッチがあり、Goがそれを埋められると思います。

ある週末、シンプルなFacebookアプリケーションを書くことにしました。それはあなたのTwitterのステータス更新をFacebookのプロフィールに再投稿するというものでした。これを行う公式のTwitterアプリケーションはありますが、それはすべてを再投稿するため、Facebookのフィードにノイズが発生します。私のアプリケーションでは、リツイート、メンション、ハッシュタグ、返信などをフィルタリングできました。これがSmart Twitterとなり、現在約90,000人のユーザーがいます。

プログラム全体はGoで書かれており、ストレージバックエンドとしてRedisを使用しています。非常に高速で堅牢です。現在、毎秒約20件のツイートを処理し、Goのチャネルを多用しています。2GBのRAMを搭載した単一のVirtual Private Serverインスタンスで動作しており、負荷の処理に問題はありません。Smart TwitterはCPU時間をほとんど使用せず、データベース全体がメモリに保持されているため、ほとんど完全にメモリバウンドです。常に約10個のゴルーチンが並行して実行されています。1つはHTTP接続を受け入れ、もう1つはTwitterストリーミングAPIから読み取り、2つはエラー処理用で、残りはウェブ要求を処理するか、受信ツイートを再投稿しています。

Smart Twitterは、他のオープンソースGoプロジェクトも生み出しました。mustache.goredis.go、そしてtwitterstreamです。

web.goにはまだ多くの作業が残っていると感じています。例えば、ストリーミング接続、ウェブソケット、ルートフィルターのサポートを改善し、共有ホストでのサポートを強化し、ドキュメントを改善したいと考えています。最近スタートアップを辞めてソフトウェアのフリーランスを始めたので、可能な限りGoを使うつもりです。これは、個人用アプリのバックエンドとして、また最先端技術での作業を好むクライアント向けにGoを使用する可能性が高いことを意味します。

最後に、Goチームの多大な努力に感謝したいと思います。Goは素晴らしいプラットフォームであり、明るい未来があると思います。コミュニティのニーズに合わせて言語が成長することを願っています。コミュニティでは多くの興味深いことが起こっており、人々がこの言語で何をハッキングできるかを見るのが楽しみです。

次の記事: Goコードのデバッグ(進捗報告)
前の記事: Go並行処理パターン: タイムアウト、次へ進む
ブログインデックス