2008-11-03 6 views
6

Estoy trabajando en un producto web que se compone de muchas aplicaciones web modulares. Para el usuario final, parece ser una sola aplicación, aunque varios componentes se dividen en sus propias aplicaciones.Estrategias de escala para Service Tiers en .NET

Parte del razonamiento para esto es que se puede escalar fácilmente horizontalmente a través de múltiples servidores de aplicaciones.

Para facilitar el escalado horizontal del nivel de datos, estamos planeando utilizar una capa de servicio web delante de la base de datos. Esta capa se puede escalar a N máquinas, y cada instancia de la misma manejaría el almacenamiento en caché individualmente.

La idea es que una aplicación haga una llamada al equilibrador de carga de nivel de servicio, que asignaría la llamada a una instancia de servicio, esto usaría su caché para devolver datos o conectarse a la base de datos y consultar el datos. Parece que esta sería la solución más sencilla para escalar sin tener que modificar mucho el código de la aplicación.

[N Amount of Databases] 
     | 
     \/ 
[Service Tier X N amount of Machines] 
     | 
     \/ 
[Application Tier X n amount of Machines] 

Algunas preguntas surgen, sin embargo, me gustaría que persista sesión de usuario en el nivel de servicio, por lo que cada aplicación acaba de autenticar con un token, sin embargo estoy seguro de cómo me mantengo datos de la sesión en todas las máquinas de servicio sin tener un solo punto de falla.

¿Alguna idea sobre cómo llevarlo a cabo? ¿Alguna otra idea sobre arquitectura? ¿Alguien más tuvo el proyecto de diseñar un sitio que podría manejar millones de visitas por día?

EDIT: ¿Ni siquiera una idea? :(

Respuesta

2

usted ha descrito el caso de uso perfecto para un mecanismo de almacenamiento en caché distribuido como memcached (http://www.danga.com/memcached) o el próximo proyecto MS Velocidad (http://code.msdn.microsoft.com/velocity).

En la situación que describes donde se tiene un número creciente de instancias de nivel de servicio cada una haciendo su propio almacenamiento en caché local, la utilidad de su caché disminuye con cada nuevo cuadro porque cada instancia individual debe recuperar los mismos datos de la base de datos para llenar su caché local, incluso si otro nivel de servicio acaba de acceder a los mismos datos Por ejemplo, con Memcached o Velocity, el mecanismo de almacenamiento en caché combinará inteligentemente la memoria RAM no utilizada en todos sus servidores en un único caché para que todas las instalaciones del Nivel de servicio compartan. nicamente, la primera instancia de Service Tier para acceder a una parte de los datos necesitará utilizar la base de datos, y los accesos subsiguientes de otras instancias de nivel de servicio extraerán los mismos datos de la memoria caché.

Tener esto en su lugar también responde a la pregunta de la sesión del usuario, ya que podría usar fácilmente esta misma memoria caché para almacenar valores de estado para las sesiones de usuario y todas sus instancias de nivel de servicio tendrían acceso a esta misma información.

Espero que esto ayude!

Adam

Cuestiones relacionadas