10

Redisを使用するPHPアプリにHerokuを使用することを検討しています。redisのさまざまなアドオンを見てきました。たとえば、Redis To Goを使用すると、PHPコードで環境変数$_ENV['REDISTOGO_URL']をRedisサーバーのURLとして使用できます。

これらのアドオンのほとんどには、私が避けたい独自の価格設定スキームがあります。Herokuの動作について少し混乱しています。アドオンなしで自分のDynosにRedisをインストールする方法はありますか?

たとえば、サーバーとして機能するワーカーdynoと、クライアントとして機能するワーカーdynoがありますか?可能であれば、どのように対処しますか?

  1. Dynoにredisサーバーをインストールして実行しますか?これは、他のUNIXボックスにインストールするのと同じですか?それにsshして、好きなものをインストールできますか?

  2. あるDynoがTCP経由でIP/ポートを使用して別のDynoに接続していますか?ワーカーdynoには、使用できる独自の参照可能なIPアドレスまたは名前付きURLがありますか?どういうわけかPHPから動的に取得できますか?

redisクライアントのphpコードは、接続できるホストとポートがあることを前提としていますが、それが何であるかわかりませんか?

$redis = new Predis\Client(array(
        "scheme" => "tcp",
        "host" => $host, //how do i get the host/port of a dyno? 
        "port" => $port));
4

2 に答える 2

12

dynoでredisを実行するのは興味深いアイデアです。dynoがredisをダウンロードして実行できるように、おそらくredisビルドパックを作成する必要があります。「redisには動作するGCCコンパイラとlibc以外の依存関係はない」ので、これは技術的に可能であるはずです。

ただし、次のような問題が発生する可能性があります。

  1. Herokudynoには静的IPアドレスがありません

    「dynoには静的IPアドレスがありません..IPで直接dynoにアクセスすることはできません」

    dynoでRedisをセットアップして実行したとしても、そのdynoインスタンスを見つけてredisリクエストを送信する方法を私は知りません。つまり、RedisサーバーはおそらくWebサーバー/メインアプリケーションと同じdynoで実行する必要があります。

    これは、より多くのWeb dynoを作成してアプリをスケーリングしようとすると、より多くのローカルredisインスタンスも作成されることも意味しますそれらの間でデータが共有されることはありません。これは特にスケーラブルなデザインだとは思いませんが、アプリが1つのWeb dynoしか必要としないほど小さい場合は、機能する可能性があります。

  2. Herokudynoには一時的なファイルシステムがあります

    「書き込まれたファイルは他のdynoのプロセスに表示されず、書き込まれたファイルはdynoが停止または再起動された瞬間に破棄されます。」

    デフォルトでは、RedisはRDBファイルとAOFログをディスクに書き込みます。dynoの再起動後にフェッチして復元できるように、これらを定期的にどこかにバックアップする必要があります。Redisの永続性に関するドキュメントを参照してください。

  3. Herokudynoは頻繁に再起動されます

    「Dynosは少なくとも1日に1回、またはdynoマニホールドが基盤となるハードウェアの障害を検出するたびに循環します。」

    dynoが起動してデータを復元するたびに、redisサーバーを起動できる必要があります。

  4. Herokudynoには512MBのRAMが搭載されています

    「各dynoには、動作する512MBのメモリが割り当てられています」

    RedisサーバーがWebサーバーと同じdynoで実行されている場合は、メインアプリに必要なRAMを差し引きます。どのくらいのRedisメモリが必要ですか?

    Redisのメモリ使用量を推定および追跡しようとするいくつかの質問を次に示します。

-

全体: Herokuの対象となるアプリケーションモデルについてもう少し理解するために、 12個のFactorAppsを読むことをお勧めします。

短いバージョンでは、dynoは、需要を満たすために簡単に作成および破棄できる独立したワーカーであることが意図されており、dynoはさまざまなリソースにアクセスして、データの読み取りまたは書き込みを行い、アプリを提供します。redisインスタンスはリソースの例です。上記の項目からわかるように、redisアドオンを使用することで、静的で安定し、アクセス可能であることが保証されたものを取得できます。

読み物:

  1. http://www.12factor.net/-特にプロセスサービス
  2. Herokuプロセスモデル
  3. Herokuブログ-プロセスモデル
于 2013-02-18T05:17:41.130 に答える
-2

redisにはクライアントサーバーアーキテクチャがあり、1台のマシン(この場合はdyno)にインストールして、任意のクライアントからアクセスできます。

ライブラリの詳細については、このリンクを参照するか、Redis広告データベースとPHPを使用してTwitterクローンを実装する簡単なケーススタディである このRedisドキュメントを参照してください。

于 2013-02-18T04:11:53.563 に答える