¿Las tareas intensivas de CPU / intensivas de datos pertenecen al servidor?

7

Soy nuevo en el desarrollo de servidores, y estoy tratando de averiguar dónde está la división de responsabilidades para las tareas intensivas de datos, estoy usando Node.js.

Como ejemplo, digo que estoy haciendo una aplicación de una sola página:

  • El cliente muestra un mapa con la población por área
  • El servidor maneja las solicitudes de los datos de población

Sin embargo, suponga que tampoco soy el propietario de los datos, sino que los recojo de un tercero a través de una API. Esa API simplemente me da una lista de personas y su ubicación. Tendré que buscar en cada persona, agruparlos según la ubicación, sumarlos y luego almacenar esos datos para poder acceder a ellos con el propósito de la aplicación. Este proceso no tiene que hacerse todo el tiempo, ya que la población no cambiará todo el tiempo, pero digamos que actualizo este conjunto de datos una vez al día.

Mi pregunta es si poner este proceso en el Servidor parece que sería un proceso lo suficientemente intensivo como para ralentizar las solicitudes. Veo algunas opciones pero no estoy seguro de cuál se usaría en un entorno de desarrollo profesional / sería más eficiente.

Yo podría:

  • Envíe al cliente los datos sin procesar, y ellos pueden hacer todo el análisis por sí mismos, pero luego la experiencia del usuario se ralentiza en todos los ámbitos.
  • Haga que el servidor realice el procesamiento en el mismo subproceso, y una vez al día el servidor se ralentiza
  • Crear subprocesos de trabajo en el mismo servidor para manejarlo (¿no se recomienda?)
  • Tener un tercer servidor completamente separado, al que mi servidor principal hace ping una vez al día para procesar los datos y devolverlos.

¿Hay alguna otra forma de hacer esto de la que no tenga conocimiento, o es alguno de estos métodos una mejor práctica?

    
pregunta Kyle R 27.03.2018 - 19:35

2 respuestas

2

La regla normal para el trabajo intensivo de datos es colocar el procesamiento de modo que el 'gran' bloque de datos no se mueva mucho. Esto se debe a que los retrasos de la red suelen ser mucho mayores que cualquier otro retraso de actividad individual.

Sin embargo, según lo que ha descrito, la respuesta puede depender del tamaño total de la tabla de datos. Si la población total es de solo unas pocas docenas y seguirá siendo pequeña , la transferencia de todos los datos al cliente y su procesamiento no implicará un retraso significativo.

Sin embargo, parece que su problema podría fácilmente tener una población de cientos o miles. En ese caso, definitivamente no desea tirar todos los datos en bruto a través de la red en respuesta a cada consulta. En su lugar, vaya con su elección para generar un subproceso de trabajo en el servidor. Hay varias estrategias posibles para extender el trabajo de agregar datos de población de manera adecuada para mantener el rendimiento del servidor a un nivel aceptable.

    
respondido por el kas 28.05.2018 - 07:11
1

Usted siempre desea minimizar la cantidad de datos transmitidos entre el servidor y el cliente. Si al hacer una cantidad de trabajo adicional, el servidor puede reducir significativamente la cantidad de datos que se enviarán, entonces es muy probable que esto sea una ganancia.

De lo contrario, tiene la opción de reducir la cantidad total de trabajo realizado o el costo total para usted. Si ejecuta un servidor que da servicio a 1000 usuarios, todos los cuales usan teléfonos inteligentes modernos, entonces su potencia de computación total puede ser diez veces o cien veces más que la suya. Existe una buena posibilidad de que al mover el trabajo arduo a los clientes, su servidor pueda entregar datos a todos más rápido y, en general, se minimice el tiempo que esperan los usuarios, además de minimizar el costo.

Lo que sería un mayor esfuerzo de programación sería poder hacer (calcular en el servidor o el cliente) y usarlo como equilibrio de carga: si su servidor recibe demasiadas solicitudes y comienza a caer Detrás, envía el trabajo a los clientes.

    
respondido por el gnasher729 28.05.2018 - 10:45

Lea otras preguntas en las etiquetas