¿Cómo hago solicitudes HTTP en los rieles, al mismo tiempo que el servicio de muchas solicitudes por minuto?

StackOverflow https://stackoverflow.com//questions/22029333

Pregunta

Estoy tratando de ampliar un servidor de aplicaciones para procesar más de 20,000 solicitudes por minuto.

Cuando te estresé, pruebe las solicitudes, la mayoría de las solicitudes se manejan fácilmente 20,000 rpm o más.

Pero, las solicitudes que necesitan hacer una solicitud HTTP externa (por ejemplo, Facebook Iniciar sesión) llevar al servidor a un rastreo (3,000 rpm).

Entiendo conceptualmente las limitaciones de mi entorno actual: 3 servidores de carga con 4 trabajadores unicornios por servidor solo pueden manejar 12 solicitudes a la vez, incluso si todas las esperan en las solicitudes de HTTP.

¿Cuáles son mis opciones para escalar esto mejor? Me gustaría manejar muchas más conexiones a la vez.

posibles soluciones como lo entiendo:

  1. Fuerza Bruta: Use más trabajadores de unicornio (es decir, más RAM) y más servidores.

  2. Empuje todas las operaciones de bloqueo en los procesos de fondo / trabajador para liberar los procesos web. Los clientes deberán encuestar periódicamente para encontrar cuando su solicitud haya completado.

  3. Mover a Puma en lugar de unicornio (y probablemente a Rubinio de la RMI), para que pueda usar hilos en lugar de procesos, lo que puede (??) mejorar el uso de la memoria por conexión y, por lo tanto, permitir el número de Los trabajadores a aumentar.

  4. Fundamentalmente, lo que estoy buscando es: ¿Hay una mejor manera de aumentar el número de solicitudes bloqueadas / en cola que un solo trabajador puede manejar para que pueda aumentar el número de conexiones por servidor?

    Por ejemplo, he escuchado una discusión sobre el uso delgado con EventMachine. ¿Abre esto abre la posibilidad de un trabajador de los rieles que puede colocar la solicitud web en la que está trabajando actualmente (porque aquella está esperando en un servidor externo) y luego recoge otra solicitud mientras está esperando? Si es así, ¿es esta una avenida que vale la pena para seguir el desempeño en comparación con Unicorn y Puma? (¿Depende en gran medida de las actividades de ejecución de la aplicación?)

¿Fue útil?

Solución

Unicorn es un servidor de aplicaciones sincrónicos multi-procesos de un solo roscado.No es un buen partido para este tipo de procesamiento.

Suena como su aplicación está en contacto con E / S.Esto argumenta para un demonio orientado a los eventos para procesar sus solicitudes.

Recomendaría probar EventMachine y la solicitud de EM-HTTP y EM-http-server .

Esto le permitirá atender las solicitudes entrantes al servidor HTTP y las llamadas de servicio HTTP salientes de manera asíncrona.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top