Goブログ

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

マイケル・ホイジー
2010年10月19日

今週の記事は マイケル・ホイジーによって書かれました。サンフランシスコを拠点とするプログラマーであり、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となり、現在約9万人のユーザーがいます。

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

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

web.goにはまだ多くの作業が残っていると考えています。たとえば、ストリーミング接続、Webソケット、ルートフィルター、共有ホストでのより良いサポート、およびドキュメントの改善を追加したいと思います。最近、スタートアップを辞めてソフトウェアのフリーランスを始め、可能な限りGoを使用する予定です。つまり、個人的なアプリのバックエンドだけでなく、最先端の技術で作業するのが好きなクライアントにも使用することになるでしょう。

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

次の記事:Goコードのデバッグ(ステータスレポート)
前の記事:Go同時実行パターン:タイムアウト、続行
ブログインデックス