2011-05-11 11 views
3

簡単なシナリオです。ユーザーは、いくつかの高レベルのフレームワーク(レールが言う)で焼いたフォームを通じてログインし、チャットを開始します。チャットはerlangで書かれ、認証されたユーザだけが参加することができます。つまり、クライアント側からのリクエスト(何らかのセッションIDを含む)は何とかerlangコード内で検証(認証)される必要があります。明らかに、erlangはログに記録されたユーザーについては何も知らず、この情報のフレームワークを要求する必要があります。erlangと外部認証

質問は、追加のボトルネックを引き起こさないようにerlangとフレームワークとの間の通信をどのように設計するのでしょうか?

私もerlangにセッションIDを格納することを考えていました。同期化(新しいユーザがログインしたとき)およびセッションタイムアウトに関連する追加の労力が頭痛を引き起こします。

答えて

1

この場合、フリーランチのようなものはありません。あなたがerlangの外に認証権限を保持する場合は、このすべての頭痛に対処する必要があります。速度を向上させるためにerlang内にキャッシュをいくつか用意することはできますが、それはボトルネックになりますし、すべてのキャッシュ一貫性の問題にも対処する必要があります。 IMHOの最善の解決策は、erlang認証機関を作成し、高レベルのフレームワークの認証を提供することです。

+0

私はちょうどそのようなキャッシュを維持するための唯一の問題は実際にはセッションのタイムアウトであることに気付きました。新しいキャッシュエントリの追加(ユーザーログイン時)、既存エントリの削除(ユーザーログアウト時)などの操作は簡単ですが、ユーザーのセッションの有効期限が切れたときを検出してキャッシュをパージすることは本当の課題です。 – Michal

1

私たちがRailsについて話しているのであれば、Erlangから同じデータベースに接続し、セッションテーブルからセッションデータを取得することが可能だと思います(セッションストレージとしてdbを使用している場合)。この方法でデータをRailsに渡すことさえできます。

+0

これは素晴らしい解決策(特にcouch dbを使用する場合)ですが、リクエストが来るたびにデータベースを照会することも意味します。これは回避したいボトルネックです。 – Michal

関連する問題