2012-12-01 17 views
5

私は窓の紺碧の新しい提供の1つを調査していました。特に "ウェブサイト"と私はセッションデータを処理する方法について何かを見つけることができません。誰か知っていますか?私はスライダを2つのインスタンスに移動し、すべてが「うまくいく」ように見えますが、セッションデータを共有しているかどうか分かっていれば、それを使用するほうが良いでしょうか?Windows Azure Webサイトはどのようにセッションを処理しますか?

+0

これはウェブサイトであるという私の答えに対する以前のコメントに、私は同意します...私は "しかし、それは何ですか?"どのようなことが起こっているのかについての説明...セッション状態を1つ上回るようにスケールする方法については、誰もが同じ3つの答えを持っています。私は今も好奇心が強いですし、紺碧のウェブサイトの "それは何ですか?"という側面を研究しています。 – Rikon

+1

Windows Azure Webサイトのアーキテクチャについて詳しく知りたい場合は、TechEd 2012 [Windows Azure Web Sites:Under the Hood](http://channel9.msdn.com/Events/)からこのセッションを見ることをお勧めします。 TechEd/Europe/2012/AZR305) –

+0

@ SyntaxC4動画でいいですよ、それはクッキーによって粘着していると言われました。あなたはそれを答えに変える必要がありますので、私はそれを受け入れることができます – iamkrillin

答えて

5

は、Windows AzureのWebサイトののアーキテクチャについての詳細を学ぶしたい場合は、私は上記のリンクビデオはかなり古くなっているので、開催されたTechEd 2012 Windows Azure Web Sites: Under the Hood

+0

そのビデオは非常に役に立ちました。セッションはクッキーによって固定されていました。 – iamkrillin

+3

セッションデータが複数のインスタンス間で自動的に共有されるかどうかはまだ分かりません。 – ogggre

+1

共有されていません –

-1

あなたが持っている? 1にしておけばOKですが、複数のWebロールがWebファームを実行している場合に発生する同じセッション状態の問題をどのように作成するかについては、hereの詳細を読むことができます。 farmオプションは、セッション状態をデータベースに保存しています。あなたが想像しているように、複数のWebロールを実行する必要がある場合は、Azure Azureに頼ることができます(テーブルストレージは本当にクールで、セッション状態のようなものに適しています)。

しかし、複数のWebロールを使用して処理負荷を分散することができ、web roleは「フロントエンドWebアプリケーションとIIS内部でホストされるコンテンツ」に過ぎません。あなたが1つのWebロールだけを使用しているなら、あなたのアプリはおそらくうまくいっているでしょう。しかし、あなたのWebロールをスケールアウトする必要がある場合は、Session永続性を向上させることに気づくでしょう。

+0

私が用語について混乱しない限り、リンクした記事は「ウェブサイト」ではなく「クラウドサービス」の提供について議論しているようです。こちらをご覧ください:https://www.windowsazure.com/en-us/manage/services/web-sites/ vs https://www.windowsazure.com/en-us/manage/services/cloud-services/ – iamkrillin

+0

Bah 、あなたは正しい...だから、あなたは何か違うことをしなかったし、それは働いた?私はセッション状態プロバイダを使用する必要があると思っていました(これは基本的にアジールのキャッシングメカニズムを使用していました) – Rikon

+0

クラウドサービスを使用しているときは確かにわかりますが、ウェブサイト上で何もしませんでした。 – iamkrillin

1

あなたは、ASP.NET 4.5をターゲットにしていますか?

4.5でプロバイダーを明示的に構成しないと、既定ではMachine.configに含まれるASP.NET Universal Providersが使用されます。したがって、既定でSQLセッション状態プロバイダを使用します。私はそれがローカルDBを使用すると期待しているので、どのように状態を共有するか分からない。

いくつかのセッションを開いてインスタンスの数を1に戻し、いくつかのセッションが状態を失うかどうかを調べることでテストできます。

ロードバランサはセッションアフィニティを使用している可能性があります。セッションアフィニティを使用していると、セッション状態を共有していないことに気付かないことがあります。

4

は、SQLは古典的solutioでこの問題を解決するためのいくつかのオプション

  1. SQLソリューション

  2. テーブル・ストレージ・ソリューション

  3. memcacheのソリューション

を持っていますn。 Sqlは、古典的なSQLリクエストを持つすべてのセッションを処理します。

テーブルストレージは(私の経験上)不思議に作用します。実際に簡単に拡張することができ、実装が簡単です(Webconfig上のほんの数行のコード)。

Memcacheソリューションが最適です。 Azureは、セッション(または他のシリアライズ可能なオブジェクト)を格納するための「キャッシュサーバー」のクラスタを提供します。スケーリングは本当に簡単で、本当に速く動作します。私は0の問題と本当に良いパフォーマンス結果で私の生産環境でこのソリューションを使用しています。

Memcacheを実装するには、Web上にその行を追加するだけです。設定:

<configuration> 
    <configSections>   
     <section name="dataCacheClients" type="Microsoft.ApplicationServer.Caching.DataCacheClientsSection, Microsoft.ApplicationServer.Caching.Core" allowLocation="true" allowDefinition="Everywhere"/> 
     <!-- more config sections here --> 
    </configSections> 
    <dataCacheClients> 
    <dataCacheClient name="default"> 
     <hosts> 
     <host name="YOUR_NAME_HERE.cache.windows.net" cachePort="YOUR_PORT_HERE"/> 
     </hosts> 
    <securityProperties mode="Message"> 
      <messageSecurity authorizationInfo="YOUR_KEY_HERE"> 
          </messageSecurity> 
      </securityProperties> 
    </dataCacheClient> 
</dataCacheClients> 
<!-- more configurations here --> 

概要

あなたはコストを気にしない、あなたは可能な限り最高のパフォーマンスをarchieveしたい場合は、memcacheの解決のために行きます。あなたのコストを本当に低く保つ必要がある場合は、テーブルストレージに行く。

2

からこのセッションを見ることを示唆している、私は思いました私がAzureのセッションに関して見つけたものを共有してください。

アズールはApplication Request Routingを使用します。

ARRは巧みに彼らが話していたどのサーバインスタンスに後続の要求、ときに、彼らにそれを知ることができます(アフィニティクッキーとして知られている)特別なクッキーを、与えることによって、接続しているユーザーを追跡します。このようにして、クライアントが特定のサーバーインスタンスとセッションを確立すると、そのセッションがアクティブである限り、同じサーバーと通信し続けることができます。

参考文献: https://azure.microsoft.com/en-us/blog/disabling-arrs-instance-affinity-in-windows-azure-web-sites/

+0

あなたの情報は本当に便利でした。 –

関連する問題