Qual é o melhor design práticas para uma aplicação web escalável que envolve o estado da sessão
-
06-09-2019 - |
Pergunta
A razão de eu perguntar isso é recentlydesigned um aplicativo, inicialmente queria usar nenhum estado sessão para manter as coisas simples, mas acabou sucumbindo à facilidade da idéia de estado de sessão para armazenar estado. Eu estava ciente de que a mudança para uma solução web farm envolveria configurar o estado da sessão para ser executado em sql. No entanto eu nunca tinha corrido em qualquer informação que explica serialização seria necessário. Então, não, eu necessidade de código de refatoração para alcançar este objectivo.
Além disso, eu uso o LINQ to SQL para me dar objetos de dados. Idealmente, isso seria fácil de serialise, mas não parece para a frente.
Eu pesquisei e fazendo isso deve estar ok. A questão não é a forma de serialização a classe de dados linq mas sim:
É o estado da sessão o caminho a seguir, em particular na concepção de aplicações escaláveis ??em uma fazenda web, devemos usar outros métodos, o que é recomendado ao usar linq para acesso a dados, devemos usar string query etc.
Graças
Solução
Há toneladas (realmente) maneiras de fazer isso
O armazenamento de estado de sessão é um requisito básico para muitos web-fazendas / apps. Você pode usar LINQ-> SQL para armazená-lo em um banco de dados ou você poderia usar-arquivos simples em uma SAN. Realmente não importa (que não forma um ponto de vista de desempenho) desde que tenha algum método para serialize de formato de armazenamento para o formato língua nativa.
No PHP o manipulador de sessão mapeia para uma tabela sessão como strings. Em Python você pode marshall um objeto para uma string e armazenar isso.
Eu recomendaria um backend SQL acessada de qualquer forma, porque RDBMS são projetados para acesso simultâneo, assim você não precisa se preocupar com bloqueio e assim por diante. E ele escalas, bem como o RDBMS
Você poderia usar algo como SQL Alchemy
Session = sqlalchemy.orm.sessionmaker() session = Session()
De http://www.darrellhawley.com/2009/01/ sql-alquimia-ORM-basics.html
Ou aqui
http://idunno.org/articles/277.aspx
Ou este HOWTO da Microsoft chamado "COMO: Configurar o SQL Server para armazenar ASP.NET Session State" poderia ajudar
http://support.microsoft.com/kb/317604
Que prevê
<sessionState
mode="SQLServer"
sqlConnectionString="data source=127.0.0.1;user id=<username>;password=<strongpassword>"
cookieless="false"
timeout="20"
/>
Sem olhar para as suas necessidades de aplicativos, em seguida, determinar se as sessões de estado é necessário é impossível. Mas no final do dia, o estado é o estado, e os requisitos de acesso a esse estado (leia-pesado, gravação pesado, grande, pequeno, qualquer que seja) determinar como você armazenar esse e em que formato.
Gostaria de recomendar ou um mapeamento ORM entre um hashmap-como objeto a uma tabela SQL ou serialização de um hashmap tal que
session = load_from_sql(session_id)
someval = session['var']
Mantendo valores como strings ou objetos nativos depende da ORM você selecionar, como é fácil de sua linguagem e assim por diante. Desempenho também é um fator, bem como a pegada de banco de dados. Você pode achar que é mais simples de armazenar cadeias de variáveis ??simples e desempacotar-on-demand. Você pode armazenar tipos JSON e, em seguida, convertê-los para nativa.
Um monte de considerar ...
SQL é provavelmente mais simples, seja ORM-> session_object ou um monte de tuplas mapeados para um hashtable.
Good Luck