2012-04-25 12 views
3

この質問は少し主観的かもしれませんが、herokuへのプロキシと遅延の問題のデバッグに役立つ具体的な情報とソリューションを提供します。ヘロクのREST APIバックエンドで静的ファイルを最適に提供する方法

api.example.comでREST APIを公開するSinatra/Mongoを使用して作成したアプリがあります。それはHerokuの杉にある。通常、私はクロスドメインブラウザの苦情を避けるために、apiサブドメインに/ apiへのwwwとプロキシ要求でnginxを介して静的ファイルを提供します。私はラックスペースのクラウドインスタンスを持っているので、フロントエンドをnginxに一時的に置き、プロキシをセットアップします。プロキシ処理の場合、待ち時間はひどいです.3回または4回のリクエストごとに1分以上かかります。そうでない場合は約150msです。 API(browser to api.example.com)に直接行くと、平均待ち時間は〜40msです。私はセットアップが理想的ではないことを知っているが、私はそれが悪いとは思わなかった。

これは部分的にはラックスペースからのプロキシ処理によるものと思われます - サーバーは西海岸にあるかもしれません - アマゾンec2 eastの英雄へ。現時点で私の考えは、アマゾンec2のインスタンスを取得してherokuアプリにプロキシすると問題が緩和されると思いますが、盲目的に推測するのではなく、何とかこれを検証したいと思います。長い待ち時間がどこから来ているのかを判断する合理的な方法はありますか?また、このアプリケーションをどのように構築するかについての他の提案はありますか?私はHerokuの静的なファイルを扱うことができると知っていますが、私のフロントエンドに役立つAPIのアイデアは好きではなく、むしろ互いに独立して拡張できると思います。あなたのAPIを実行するために、Herokuのを使っているので

答えて

3

は、私がAmazon S3バケツにあなたの静的ファイルを入れていることをお勧めしたいものを、何かがDNS経由でプロキシにあなたの静的ファイルをAmazon Cloudfrontを使用し、「myappに、静的」と命名し、 CNAMEレコード(static.myapp.com)。

何Rackspaceの上S3を使用する方法について良いことだと、その次のとおりです。あなたのアプリとストレージの両方が同じネットワーク(AWS)上にあるので、あなたは、Herokuのからアップロードするため

  • あなたのファイルが速くなります。
  • S3は、独自のサーバープロキシ要求を実行するオーバーヘッドなしに、静的ファイルを直接処理するために構築されています。

Cloudfrontを使用すると、静的なファイルが必要なだけキャッシュされ(複数のHTTP要求が削減されます)、ユーザーに最も近いエンドポイントからファイルを提供することができます。 EG:カリフォルニアのユーザーがAPIリクエストを行い、静的なファイルを取得した場合、東海岸のHerokuインスタンスではなく、AWS Californiaサーバーからサービスが提供されます。あなたのアプリケーションの終了に何をしよう

最後に、あなたの静的な資産(例:http://static.myapp.com/images/background.png)にユーザーにリンクを送信され、あなたのREST APIで、この方法は、クライアントが直接コンテンツをダウンロードするための責任がある、となりますできるだけ早く資産をダウンロードすることができます。

関連する問題