Систематизация на автоматизацията Разпределение на сесии с memcached

Карта с лична памет

Разпределение на сесия ASP.NET с memcached

За много сайтове в процес на разработка, които са предназначени за успех и в резултат на това голям трафик, едно от важните изисквания е удобното хоризонтално мащабиране и високото ниво на достъпност на приложенията. Когато решавате тези проблеми, трябва да решавате проблеми на ниво система и приложение. На системно ниво всичко се решава чрез настройване на различни клъстери, системи за архивиране, мениджъри на натоварване и т.н. И е много важно да извадите тези системни задачи от кода на приложението, в противен случай добавянето на допълнителен сървър към клъстера може да се превърне в безкрайна битка с вашия код.

Като цяло основният проблем, който предотвратява клонирането на приложение или услуга на много сървъри, като същевременно се поддържа обща функционалност, е използването на клиентски състояния. С други думи, използване на сесии. Този проблем е свързан с чисто софтуерно внедряване на сесии по несесийния HTTP протокол, когато идентификаторът на сесията се изпраща в бисквитки до всеки клиент и след това сървърът, обслужващ заявки, „получава” необходимите данни чрез него. И по подразбиране данните за сесиите се съхраняват локално в паметта или файловата система на сървъра. И в случай, че приложението "живее" на няколко сървъра, тогава идентификаторът на сесията ще се обработва от различни сървъри всеки път и сесиите ще загубят значението си.

Като решение на този проблем ASP.NET предлага да се използват специални режими StateServer и SQLServer, когато състоянието ще се съхранява на отдалечен сървър или като цяло в база данни на SQL Server. Основният недостатък на първия метод е, че самият държавен сървър изобщо не се мащабира. В случай на използване на режима SQLServer и поставяне на базата данни на състоянието в отделен клъстер, ще получим мащабируема система, но в този случай ще загубим значително в производителността. Разбира се, що се отнася до мащабируемостта, местната производителност може да бъде пренебрегната, като се има предвид, че тя може да бъде увеличена чрез добавяне на допълнителни полета към клъстера. Но какво трябва да направят начинаещите стартъпи, които все още броят пари? Как да получите система, която е относително бърза, както в случая с StateServer, и мащабируема, както в режима на работа със SQL Server?

Отговорът е прост - използването на разпределени системи памет като цяло и memcached по-специално, като общ, доказан, прост и безплатен продукт. Можете да се запознаете с него в статията Общ преглед на memcaced. И в този пост ще се опитаме да разрешим проблеми със сесии в ASP.NET, използвайки го.

Накратко, бихме искали да получим система, която да се интегрира прозрачно с готово приложение с минимални промени в кода, достатъчно бързо и надеждно, без загуба на данни, както при рестартиране на отделни приложения, така и при рестартиране на сървъри и целия клъстер като дупка. И всичко това се изпълнява съвсем просто:) И така, нека започнем:

  1. Тъй като местообитанието на нашите приложения е Windows, ние изтегляме двоичните файлове, съставени за win32, от тук или от тук. Разопаковайте го някъде и стартирайте единичен exe файл. Memcached сървърът работи:) Целият процес на настройка се извършва чрез параметрите за стартиране. Можете да се запознаете с тях, като стартирате сървъра с параметъра -h.
  2. Сега трябва да се свържем с тази услуга с нещо. И се предлага да се използва клиент на enyim.com Memcached като клиент и може да се използва като част от готовите доставчици на Memcached, което прави използването на memcached възможно най-лесно. След като изтеглите и разархивирате библиотеката някъде, добавете връзки към файловете Enyim.Caching.dll, MemcachedProviders.dll и log4net.dll към нашия проект.
  3. В кода на приложението трябва да намерите всички класове, екземплярите на които са поставени в сесията и да ги маркирате с атрибут Serializable.
  4. Единственото, което остава да направите, е да конфигурирате правилно нашето приложение:
    • В секцията configSections регистрирайте секциите:
    • Добавете раздел за конфигуриране на memcached клиент: Ключовият елемент тук е секцията сървъри, която изброява всички memcached сървъри, обслужващи приложението. Най-често използваният случай е да се инсталира memcached екземпляр на всеки от сървърите, на които се изпълнява приложението.
    • И сега настройваме работата на сесиите: Интересното тук е редът dbType = "SQL" - той показва какъв тип СУБД ще се използва за архивиране на данните от сесията. За да деактивирате режима за архивиране на данни, просто трябва да посочите dbType = "None".
    • Последната стъпка ще бъде да конфигурирате настройките за свързване към базата данни за архивиране. За да направите това, добавете следния запис към раздела connecitonStrings: (многоточието трябва да бъде заменено с реален низ за връзка).
    • По желание можете да добавите настройки за log4net.