Вопрос

Я ищу бесплатное, высокодоступное и высокопроизводительное решение для кэширования или хранения данных сеанса .net (для веб-сайта с высоким трафиком).Я не хочу использовать базу данных (база данных - это узкое место в увеличении трафика).

Есть несколько хранилищ ключей / значений, но, насколько я знаю, они не поддерживают .net-объекты.И есть несколько распределенных или реплицированных решений для кэширования, которые поддерживают высокую доступность.

Но каков наилучший способ хранения данных сеанса (лучше, если он работает на mono)?

Редактировать: Для обеспечения высокой доступности я должен реплицировать данные сеанса пользователя более чем на одну машину.Я могу написать сериализатор, если это необходимо для достижения наилучшего метода.Пользовательские сеансы содержат стандартные объекты, необходимые для сайта электронной коммерции.

С уважением, Сирмак

Это было полезно?

Решение

Ну, вы можете использовать сервер состояния сеанса, который работает как служба Windows, но для того, чтобы это работало в сценарии веб-фермы, вам нужно, чтобы один из веб-серверов запускал службу состояния сеанса, а другие веб-серверы координировали работу с этим единственным веб-сервером.Это, конечно, проблема, если ваш веб-сервер выходит из строя, на котором запущена служба.

Другим вариантом было бы использовать memcachd, который является распределенным в памяти сервером состояния сеанса.Это бесплатно, и уже есть поставщик для .NET для этого фреймворка.Она довольно зрелая и существует уже некоторое время.

Если у вас есть деньги, которые можно потратить, то одним из вариантов может быть масштабирование сервера.Однако мне говорили, что на действительно масштабных веб-сайтах технологию масштабирования время от времени необходимо перерабатывать.

Из-за поворота от Microsoft выходит Velocity, которая является .Сетевым эквивалентом memcached.Это еще не выпущено и не является зрелой технологией.

Вам нужно будет выбрать решение, соответствующее вашим техническим и финансовым требованиям.

Другие советы

Если вы говорите свободно, то MySQL - сервер способен на обработка большого объема трафика (очевидно, на правильном оборудовании)

Ну, сначала вам нужно определить, что вы сохраняете в сеансе.Есть некоторые вещи, которые просто вообще не могут быть сериализованы.Однако вы можете реализовать свои собственные процедуры сериализации для соответствующих объектов и сохранить их в том виде, который вы сами создаете.Например, вы можете выполнить внутреннюю двоичную сериализацию, затем записать объект в виде строки в кодировке base64 в инструмент кэширования (memcached или что-то еще) и извлечь его.

Но также, какого рода масштабируемость вы здесь ищете?Обмениваете ли вы пользователей между серверами по запросу?Если это так, то вам понадобится как минимум центральная или, по крайней мере, зеркальная система кэширования.

Если вы будете держать пользователя на одном сервере, но у него может быть много пользователей, тогда это действительно не имеет значения, вы можете использовать внешний процесс на том же компьютере для кэширования.

Я думаю, вам нужно будет предоставить немного больше информации.Я не знаком с запуском чего-либо в mono (поэтому я бы просто порекомендовал службу состояния asp.net), но я предполагаю, что сторонний процесс кэширования, такой как memcached, может быть хорошим.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top