Каков наилучший практический дизайн для масштабируемого веб-приложения, включающего состояние сеанса - PullRequest
0 голосов
/ 03 июня 2009

Причина, по которой я спрашиваю об этом, заключается в том, что недавно было разработано приложение, которое изначально хотело не использовать состояние сеанса, чтобы сохранить простоту, но в конечном итоге уступило легкости идеи состояния сеанса для сохранения состояния. Я знал, что переход к решению веб-фермы будет включать настройку состояния сеанса для запуска в SQL. Однако я никогда не сталкивался с какой-либо информацией, объясняющей необходимость сериализации. Так что нет, мне нужно реорганизовать код для достижения этой цели.

Кроме того, я использую linq to sql для предоставления мне объектов данных. В идеале это было бы легко сериализовать, но это не так просто.

Я гуглил и все должно быть в порядке. Вопрос не в том, как сериализовать класс данных linq, а в следующем:

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

Спасибо

1 Ответ

1 голос
/ 03 июня 2009

Есть тонны (действительно) способов сделать это

Хранение состояния сеанса является основным требованием для многих веб-ферм / приложений. Вы можете использовать LINQ-> SQL для хранения его в базе данных или использовать плоские файлы в SAN. Это действительно не имеет значения (кроме как с точки зрения производительности), если у вас есть какой-то метод для сериализации из формата хранения в формат родного языка.

В PHP обработчик сеанса отображается в таблицу сеанса как строки. В Python вы можете маршалировать объект в строку и сохранять его.

Я бы порекомендовал использовать SQL-сервер в любой форме, поскольку СУБД предназначены для одновременного доступа, поэтому вам не нужно беспокоиться о блокировке и т. Д. И масштабируется так же, как и СУБД

Вы можете использовать что-то вроде SQL Alchemy

Session = sqlalchemy.orm.sessionmaker() session = Session()

С http://www.darrellhawley.com/2009/01/sql-alchemy-orm-basics.html

или здесь

http://idunno.org/articles/277.aspx

Или этот HOWTO от Microsoft под названием «Как: настроить SQL Server для хранения состояния сеанса ASP.NET» может помочь

http://support.microsoft.com/kb/317604

Что обеспечивает

<sessionState 
    mode="SQLServer"
    sqlConnectionString="data source=127.0.0.1;user id=<username>;password=<strongpassword>"
    cookieless="false" 
        timeout="20" 
/>

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

Я бы порекомендовал либо отображение ORM между объектом, похожим на hashmap, в таблицу SQL, либо сериализацию hashmap таким образом, чтобы

session = load_from_sql(session_id)
someval = session['var']

Сохранение значений в виде строк или нативных объектов зависит от выбранного вами ORM, от того, насколько это просто для вашего языка и так далее. Производительность также является фактором, а также базы данных. Возможно, вам будет проще хранить строки простых переменных и unmarshall-on-demand. Вы можете хранить типы JSON, а затем преобразовывать их в собственные.

Очень много для рассмотрения ...

SQL, вероятно, самый простой, будь то ORM-> session_object или набор кортежей, сопоставленных с хеш-таблицей.

Удачи

...