2012-11-24 17 views
6

Mam aplikację internetową RoR (w/mysql), która jest równoważona obciążeniem na kilku identycznych serwerach. Aplikacja wymaga do działania plików cookie i sesji.RoR Pliki cookie używające ActiveRecordStore + Sticky Sesje

Obecnie klient jest zawsze kierowany do tego samego serwera za modułem równoważenia obciążenia, a jeśli serwer zostanie usunięty, klient zostanie skierowany na inny serwer, a ich sesja zakończy się.

Układ równoważenia obciążenia w obecnej architekturze będzie ładował tylko urządzenia równoważące w tym samym centrum danych. Chciałbym korzystać z wielu centrów danych, aby ładować geograficznie równowagę za pomocą usługi DNS round robin i zapewnić dodatkową nadmiarowość.

Jeśli miałbym włączyć ActiveRecordStore do przechowywania sesji w mojej aplikacji RoR, ten powinien rozwiązać powyższy problem, klient może być kierowany do każdego serwera i ich sesja byłaby nienaruszona. Czy to jest poprawne?

Czy istnieją poważne konsekwencje używania ActiveRecordStore do sesji?

Odpowiedz

4

Szybka odpowiedź: Biorąc pod uwagę, że wszystkie serwery ze wszystkich centrów danych rozmawiają z tą samą bazą danych, tak, rozwiąże to problem, który masz.

Konsekwencje: Oczywistym problemem jest to, że wszystkie serwery z różnych centrach danych komunikować się z jednym centrum danych z bazy danych. Co jest dość nieefektywne, ponieważ neguje większość zysków z dystrybucji twojej aplikacji do różnych centrów danych. Można oczywiście próbować replikować mysqle przez Internet, ale to prawdopodobnie prowadzi do tego, że dane ostatecznie będą spójne, co oznacza, że ​​podczas przełączania serwerów użytkownicy mogą nadal napotykać nieprawidłowe sesje.

Alternatywa: Rozproszona globalnie pomieszczenie na sesji, coś w rodzaju pierścienia Cassandra lub może riak prawdopodobnie działa lepiej, ponieważ te bazy danych są przeznaczone do pozostania w synchronizacji i zapewnienia spójnego dostępu do danych.