Wyłączanie ARR Affinity Session (sticky sessions) w Azure Web Sites

Microsoft Azure Web Sites ma zaimplementowany Application Request Routing co oznacza, że wspiera tak zwane sticky sessions. Co to oznacza? Oznacza to w dużym skrócie, że request, który przychodzi od kogoś, dostaje w nagłówku zwrotnym informację z jakiego serwera został obsłużony i przy jego każdym kolejnym requescie load balancer będzie kierował go do tego samego serwera.

Jest to bardzo fajne rozwiązanie kiedy np. chcemy w bardzo prosty i szybki sposób przenieść naszą istniejącą stronę do Azure, a strona ta nigdy nie była przystosowana do bezstanowości, a w szczególności do trzymania sesji użytkownika w jakimś zewnętrznym kontenerze (cache, baza danych etc.). Jednak gdy taką zmianę dodamy lub chcemy wykorzystać takie usługi jak Traffic Manager do rozdysponowania ruchu pomiędzy nasze wdrożenia warto jest wyłączyć sticky sessions i wykorzystać prawdziwą skalowalność chmury.

Na potrzeby wpisu mam wgraną na Azure prostą witrynę z szablonu ASP.NET w Visual Studio i zobaczmy jej ruch sieciowy w narzędziach developerskich IE (klawisz F12):

arrcokie

Widać, że zostało dodane ciasteczko z informacją o ARRAffinity.

Teraz żeby wyłączyć tę funkcjonalność należy do pliku web.config dodać następujący wpis:

  <system.webServer>
    <httpProtocol>
      <customHeaders>
        <add name="Arr-Disable-Session-Affinity" value="true"/>
      </customHeaders>
    </httpProtocol>
  </system.webServer>

Teraz po odświeżeniu strony i podejrzeniu ruchu sieciowego zobaczymy, że nie ma już ciasteczka odpowiedzialnego za sticky sessions:

arrnocookie