BT

GOTO Berlin: 自分の公開APIを使うときの課題

| 作者: Jan Stenberg フォローする 29 人のフォロワー , 翻訳者 笹井 崇司 フォローする 0 人のフォロワー 投稿日 2013年11月7日. 推定読書時間: 3 分 |

原文(投稿日:2013/10/21)へのリンク

自分のAPIを使うことが課題になることがある。GOTO Berlinカンファレンスで、Soundcloudのエンジニアリングディレクター、Phil Calcado氏が巨大なRailsアプリケーションを管理、再構築した経験について語った。
Soundcloudは急速に成長しているが、彼は1年ほど前にリリースした新しいWebサイトの作成で経験した問題について語った。

SoundcloudはRuby on Railsアプリケーションとしてスタートしたが、6年間拡張を繰り返して、雑然とした状態になっていた。問題の大部分はそのインフラストラクチャ、MySQLMemcachedを使った巨大なRailsモノリスにあった。
2010年、彼らは新しいプラットフォームの検討を開始した。そう考えるに至った一端は、Twitterによるアーキテクチャの再設計にあった。Soundcloudチームは、Twitterと同じように、公開APIを使ってバックエンドとおしゃべりする単一ページのJavaScriptアプリケーションを構築すればよいと考えた。最終的に、彼らは新しいWebサイトを構築することにした。バックエンドの経験は不足しているが熟練したフロントエンドJavaScript開発者たちを多数投じ、6、7ヶ月かけて、公開APIの上に新しいWebサイトを構築した。
彼らは非常に安定したアプリケーションを作ったが、リリース直前になって、Twitterと話す機会があった。彼らは新しいTwitterアーキテクチャとまったく同じ考えで、自分たちの新しいWebサイトをリリースしようとしていることを話した。ところが、Twitterの人は、新しい設計はそれほど良いアイデアではなかったことに気付いた、と答えた。実際、Twitterは後になって、大部分をサーバサイドレンダリングに戻すことに決めた。

このことでチームは興味深い状況に陥った。これは重要なインテグレーションだった。そのままリリースすべきだろうか、それともキャンセルすべきだろうか。Railsをよくわかっていたので、Railsが最初にダウンするだろうと考えて、多数のノードをセットアップした。ところが、新しい設計では1ページにつき3リクエストから100リクエスト以上必要になり、最初にダウンしたのは高可用性プロキシだった。それを修正すると、今度はmemcachedがダウンし、最終的にRailsとMySQLがダウンした。彼らはようやく基本的なアーキテクチャ問題があることに気付いた。

早い段階で気付いたのは、アプリケーション全体を書き直せないことだった。Railsを使い続けるなら、高速なAPI、できるだけ高速に多数のリクエストを処理できるAPIが必要だった。彼らは巨大なRailsアプリケーションを小さなパーツに分割し、サービスという考えを取り入れた。驚いたことに、全体のパフォーマンスは変わらなかったが、パフォーマンスのボトルネックはデータベースからHTTPへと移った。結論としては、彼らは高速なRailsを必要としたということだ。

コードを調べると、並行処理の余地がたくさんあることがわかった。Railsは並列性や並行性には適しておらず、彼らはFinagleのようなツールを使って非同期化することで、何とか並列性と並行性を得ようとした。おかげで、負荷は大幅に軽減され、非常に高速に結果を返せるようになった。

リクエストを高速にさばけるようになると、彼らはネットワークについて調べた。依然として各ページのレンダリングには大量のリクエストを必要としたので、リクエスト数を減らす方法を模索した。その結果、1リクエストで数ページ分のデータを返すカスタムAPIを用意することにした。最終的に、彼らはモバイル向け、デスクトップ向け、パートナー向けの3つの専用APIを用意した。
現在抱えている最も興味深い設計課題は、いかにしてAPIをモデル化するかだ。今のところ、開発者はきめ細かなモバイル向けAPIと、経験に基づいたデスクトップ向けAPIを好んでいる。そのため、今のところ2つの異なるバックエンドを使っている。

The GOTO Berlin Conference 2013はベルリンで初めて開催されるGOTOカンファレンスであり、420名の出席者と80名の講演者が参加する。

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

あなたの意見をお聞かせください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

ディスカッション

InfoQにログインし新機能を利用する


パスワードを忘れた方はこちらへ

Follow

お気に入りのトピックや著者をフォローする

業界やサイト内で一番重要な見出しを閲覧する

Like

より多いシグナル、より少ないノイズ

お気に入りのトピックと著者を選択して自分のフィードを作る

Notifications

最新情報をすぐ手に入れるようにしよう

通知設定をして、お気に入りコンテンツを見逃さないようにしよう!

BT