¿Qué tan difícil es implementar un sitio web de reserva de boletos con un volumen máximo de 1 millón de boletos por hora durante ciertas horas del día?

Es bastante simple si conoce cosas básicas sobre HTTP y la base de datos.

Caché – Caché – Caché

La mayoría de los sitios web funcionan mal cuando no usan caché, existe un gran beneficio del almacenamiento en caché en cada etapa, servidor, navegador, almacenamiento en caché en la página. Los golpes en el servidor para cada solicitud HTTP y, posteriormente, los golpes en la base de datos para cada solicitud tienen un diseño deficiente.

La regla simple es que si va a leer algo más de una vez en su unidad de lógica de negocios, debe almacenarse en caché en el almacenamiento local dentro de su unidad de lógica de negocios.

Si algo no ha cambiado, nunca se debe volver a solicitar al servidor.

Vencimiento de caché más largo

Mantenga un campo de versión en su objeto de base de datos lógica, por ejemplo, si se trata de una lista de precios o algo así y solicita solicitudes de URL de caché junto con la etiqueta de versión, cuando llegue una nueva lista, la URL debe incluir una nueva etiqueta de versión, esto eliminará la necesidad de validación de caché .

Escribe uno lee muchos

La réplica de lectura múltiple y la base de datos única para la transacción es lo suficientemente buena como para manejar millones de transacciones por día. Recuerde, las transacciones como la reserva de boletos deben cumplir con ACID y ningún NoSQL lo ofrece.

Los servidores de lectura NoSQL típicos deberían actuar principalmente como Cache Proxy para entregar datos frecuentemente no modificados a los clientes. Para mantener la coherencia, todos los datos solo deben almacenarse en RDBMS con conformidad con MVCC ACID, sin embargo, excepto Cache Proxy, ninguna otra máquina debería leer de la base de datos.

CDN

Mueva los datos NoSQL y los recursos de Script / Imagen a CDN. Lo más probable es que las listas de configuración, el contenido de descripción, etc. se almacenen en NoSQL en lugar de en la base de datos. La base de datos solo debe almacenar datos financieros críticos. Por ejemplo, la descripción, los términos y condiciones, etc., todo el texto grande debe moverse del campo de la base de datos y debe colocarse en NoSQL servido a través de CDN.

Escalado vertical antes del escalado horizontal

Las personas a menudo comienzan a implementar la escala horizontal sin darse cuenta de que primero hay suficiente espacio para la escala vertical. Acceder a cada solicitud en la base de datos con el clúster de base de datos es un diseño pobre.

Asegúrese de haber aislado todas las solicitudes no transaccionales a CDN y otro Cache Proxy y luego determine la cantidad real de transacciones que afectan a la base de datos.

Solo cuando sus transacciones sean más altas y no haya margen de escala vertical, aplique la escala horizontal y cree un clúster de base de datos. Este es un paso importante porque el escalado horizontal de la base de datos es más costoso que el Proxy CDN / Caché. El escalado horizontal para la base de datos suele ser 10 veces o incluso más costoso en comparación con la implementación del Cache Proxy / CDN adecuado.

Para empezar, analicemos cómo podríamos diseñar algo como esto. FYI, esto es solo un diseño MVP (producto mínimo viable).

tenemos que adoptar un enfoque escalonado del sistema para poder escalarlos individualmente según los requisitos.

Me gustaría aprovechar la nube tanto como sea posible. el uso de la nube me ayudaría a reducir los costos incurridos en la ejecución de la infraestructura en gran medida al permitirme escalar según sea necesario.

utilizaré funciones de azure, pero todos los demás proveedores de servicios en la nube tendrán ofertas similares,

Consideración clave:

necesitaríamos un equilibrador de carga detrás del punto final público, para que podamos agregar nuevas máquinas virtuales mediante programación para manejar el tráfico pesado durante las horas pico, y luego derribarlas para reducir costos.

Los proveedores de la nube proporcionan API seguras de administración basadas en autenticación de certificados para este fin, de las cuales nuestra infraestructura de implementación puede encargarse.

1) IU

preferiría tener un diseño de aplicación de una sola página para que no tengamos que desperdiciar el recurso del servidor por cada carga de página.

Tener el contenido estático distribuido a través de CDN. (imágenes, css, js)

elija CSS Image Sprites o fuentes web (Cree su fuente de icono en segundos)

2) API

Esta capa debe ser RESTful. Y esto tiene que ser diseñado, implementado de tal manera que pueda aumentar la capacidad durante las horas pico y reducir las máquinas virtuales en tiempos normales para reducir los costos.

tendría algo como esto

Cola de solicitud:
Las colas azules se pueden usar aquí. Esto ofrece un acceso de arrendamiento a los elementos.
El uso de la cola para almacenar solicitudes nos da la libertad de escalar los roles de los trabajadores cuando sea necesario.

Gotcha:

aquí los roles de los trabajadores y los roles web (primera columna de máquinas virtuales en el diagrama) deben implementarse en el mismo centro de datos para evitar el costo de la red

DB:

otro tipo de oferta noSql de azure son las tablas de Azure, esto tiene los pros y los contras habituales de una base de datos noSql.

Probablemente también se pueda implementar una solución de almacenamiento en caché.

Tenemos que decidir sobre las compensaciones entre costo, garantía de rendimiento, etc. Son pocos ejemplos

  • tablas azules vs servidor SQL,
  • Colas de Azure frente a bus de servicio azul,
  • usando WFC vs cola de solicitud para la comunicación entre roles.
  • O para el caso, Azure vs AWS 😀

Probablemente no podamos llegar a una conclusión sobre qué usar a menos que lo probemos en producción para escenarios específicos.

Por lo que parece, supongo que esta pregunta es sobre IRCTC. Para sitios como IRCTC puede que no haya suficiente espacio para la experimentación debido al costo, la claridad de propiedad, la inversión técnica, etc. ¡Tendríamos dificultades técnicas y no técnicas e incluso requisitos como la lógica en la asignación de asientos!