Použití MemCache jako úložiště pro sessions
Railsy umí používat pro ukládání sessions různá uložiště, přičemž ve výchozím nastavení používá PStore, jenž je implicitním úložištěm, se kterým pracuje CGI::Session. To jsou ty malé soubory v adresáři tmp/sessions, které vlastně obsahují serializované proměnné, které jsou v danou dobu v konkrétní session uloženy. Dále je pak možné použít uložení těchto sessions do databáze (přes ActiveRecord) nebo taky přímo do obsahu cookie (CookieStore), což zvyšuje o něco traffic, ale na druhou stranu nejsou nutné dodateční pomalé IO operace.
Zajímavou možnosti je použití operační paměti přes speciální server memcached. Ten byl původně vyvinut pro zvládnutí zátěže na LiveJournal.com a dnes je k dispozici téměř na všech známých platformách. Na straně Ruby je potřeba gem memcache-client, který dokonce umí používat několik serverů zároveň. Protože všechny data jsou ukládany v páru klíč - hodnota, tak pomocí hashovací funkce dokáže rozhodit jednotlivé klíče (a samozřejmě jejich data) na více serverů. Jako úložiště je možné memcache použít i pro ukládání stránek, což může hodně pomoct odlehčit nápor na databázový server.
Zavedení pro ukládání sessions se děje obvykle v souboru environments/production.rb, který konfiguruje aplikaci v produkčním režimu. K tomu stačí vyrobit MemCache objekt a spolu se specifikací expirace ho napojit na ActionController:
CACHE = MemCache.new 'localhost:11211',
:namespace => "myapp-#{RAILS_ENV}"
ActionController::Base.session_options[:expires] = 1800
ActionController::Base.session_options[:cache] = CACHE
Samozřejmě v tomto případě musí na localhostu běžet memcache daemon na svém výchozím portu 11211. V případě, že nějaká masívně využívaná aplikace, resp. hodně navštěvovaný web běží v clusteru na více serverech, tak je logicky nutné vyhradit jeden nebo více serverů, kde bude běžet memcached daemon a na něj, resp. na ně nasměrovat všechny instance aplikace/webu.
Bohužel, v čase psaní v aktuální verzi Rails (1.2.5) je menší chyba, který způsobuje podivné chování při nasazení memcache úložiště v prostředí clusterů. Je nutné aplikovat tuhle opravu, která už bude zahrnutá do dalších verzí, je možné že to už bude přímo Rails 2.0
Posted in Konfigurace | no comments | atom