私は、WindowsAzureの新しい製品の1つを調査していました。具体的には「ウェブサイト」であり、セッションデータの処理方法については何も見つかりません。誰か知っていますか?スライダーを最大2つのインスタンスに移動すると、すべて「正常に機能」しているように見えますが、セッションデータを共有している(または共有していない)ことが確実にわかっている場合は、スライダーを使用したほうがよいでしょう。
5 に答える
Windows Azure Webサイトのアーキテクチャについて詳しく知りたい場合は、TechEd 2012 Windows Azure Webサイト: UndertheHoodからこのセッションを視聴することをお勧めします。
この問題を解決するためのいくつかのオプションがあります
SQLソリューション
テーブルストレージソリューション
memcacheソリューション
SQLは古典的なソリューションです。SQLは、従来のSQL要求ですべてのセッションを処理します。
テーブルストレージは(私の経験では)驚異的に機能します。スケーリングは非常に簡単で、実装も非常に簡単です(webconfigの数行のコードのみ)。
Memcacheソリューションが最適なソリューションです。Azureは、セッション(または他のシリアル化可能なオブジェクト)を格納するための「キャッシュサーバー」のクラスターを提供します。スケーリングは非常に簡単で、非常に高速に動作します。私はこのソリューションを実稼働環境で使用しており、問題はなく、パフォーマンスは非常に良好です。
Memcacheを実装するには、web.configにこれらの行を追加する必要があります。
<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 -->
概要
コストを気にせず、可能な限り最高のパフォーマンスを実現したい場合は、memcacheソリューションを選択してください。コストを本当に低く抑える必要がある場合は、テーブルストレージを利用してください。
上記のリンクされたビデオはかなり古くなっているので、Azureでのセッションに関して見つけたものを共有したいと思いました。
Azureはアプリケーションリクエストルーティングを利用します。
ARRは、ユーザーに特別なCookie(アフィニティCookieと呼ばれる)を与えることにより、ユーザーの接続を巧みに追跡します。これにより、後続の要求時に、ユーザーがどのサーバーインスタンスと通信していたかを知ることができます。このようにして、クライアントが特定のサーバーインスタンスとのセッションを確立すると、そのセッションがアクティブである限り、クライアントは同じサーバーと通信し続けることができます。
参照: https ://azure.microsoft.com/en-us/blog/disabling-arrs-instance-affinity-in-windows-azure-web-sites/ 。
ASP.NET 4.5をターゲットにしていますか?
4.5でプロバイダーを明示的に構成しない場合、デフォルトで、Machine.configに含まれているASP.NETユニバーサルプロバイダーが使用されます。したがって、デフォルトではSQLセッション状態プロバイダーを使用します。ただし、ローカルDBを使用することを期待しているため、状態をどのように共有するかはわかりません。
いくつかのセッションを開いてから、インスタンスの数を1に戻し、いくつかのセッションが状態を失うかどうかを確認することで、テストできます。
ロードバランサーがセッションアフィニティを使用している可能性があります。その場合、セッション状態を共有していないかどうかに気付かない可能性があります。
Webの役割はいくつありますか?1のままにしておけば大丈夫ですが、複数のWebロールが、Webファームを実行している場合に発生するのと同じセッション状態の問題をどのように作成するかについての詳細をここで読むことができます...Webを実行している場合ファームオプションは、データベースにセッション状態を保持しています。したがって、ご想像のとおり、複数のWebロールを実行する必要がある場合は、SQL Azureを利用できます(ただし、テーブルストレージは非常に優れており、セッション状態などに最適です)。
ただし、質問に直接答えるために、複数のWebロールを使用して処理負荷を分散できます。Webロールは、単なる「IIS内でホストされるフロントエンドWebアプリケーションおよびコンテンツ」です。繰り返しになりますが、1つのWebロールのみを使用している場合、アプリはおそらく正常に機能しています。ただし、Webの役割をスケールアウトする必要がある場合は、セッションの永続性が損なわれることに注意してください。