2012-05-25 15 views
5

Estoy considerando construir un sitio usando php, pero hay varios aspectos que funcionarían mucho, mucho mejor si se hicieran en node.js. Al mismo tiempo, grandes porciones del sitio deben permanecer en PHP. Esto se debe a que ya se desarrolló una gran cantidad de funcionalidades en PHP, y la reurbanización, las pruebas, etc. serían demasiado grandes y, francamente, esas partes del sitio funcionan perfectamente bien en PHP.Usando php + gearman + node.js

Estoy considerando reconstruir las secciones en node.js que se beneficiarían al ejecutar la mayoría en node.js, luego hacer que PHP pase la solicitud a node.js usando Gearman. De esta manera, escaneo escalar lanzando más trabajadores y tener gearman manejar la distribución de carga.

Nuestro sitio recibe mucho tráfico, y me preocupa si Gearman puede manejar esta carga. Me wa para mantener esta pregunta productiva, así que vamos a centrarnos en gran medida en los siguientes puntos direccionables:

  • Puede Gearman manejar toda nuestra carga esperada asumiendo que tenemos la memoria (potencialmente alrededor de 3000+ trabajos en cola en en el tiempo, con varios miles procesados ​​por segundo)?
  • ¿Funcionaría mejor si acabo de pasar las solicitudes a node.js usando CURL, y si es así, node.js proporciona alguna forma de distribuir la carga en varias instancias de un script determinado?
  • ¿Se puede configurar Gearman de una manera que no haya un solo punto de falla?
  • ¿Cuáles son algunos de los problemas que ustedes pueden ver surgir tanto en términos de desarrollo y escala?

Me refiero a esta amplia gama de puntos por lo que cualquier persona que vea esta publicación puede recopilar una amplia gama de información en un solo lugar sobre asuntos que se afectan mutuamente.

Por supuesto que probaré todo esto, pero quiero recopilar la mayor cantidad de información posible antes de emprender algo como esto.

Editar: Una gran razón por la que estoy usando gearman no es debido a su estructura no bloqueante, sino a su gran velocidad.

+0

_Can gearman maneja toda nuestra carga esperada? _ Esa es una pregunta de cómo-largo-es-una-pieza-de-cadena, y depende de cuántos servidores de trabajo tiene disponibles, qué tan rápido se llenan sus colas, y cómo mucho esfuerzo lleva cada elemento a procesar. Si puedes hacer varios miles por segundo en un servidor, y no los estás haciendo a una tasa constante más alta, creo que estarás bien. Gearman puede usarse en modos de bloqueo y no bloqueo por cierto, y definitivamente vale la pena ir. – halfer

Respuesta

4

sólo puedo hablar a sus preguntas sobre Gearman:

Puede Gearman manejar toda nuestra carga esperada asumiendo que tenemos la memoria (potencialmente alrededor de 3000+ trabajos en cola en en el tiempo, con varios miles que está siendo procesado por segundo)?

corto: Sí

largo: Todo tiene su límite. Si las cargas útiles de su trabajo son excesivamente grandes, puede tener problemas. Gearman almacena su cola en la memoria ... así que si tus cargas exceden la cantidad de memoria disponible para Gearman, tendrás problemas.

¿Se puede configurar Gearman de una manera que no haya un solo punto de falla?

Gearman tiene un complemento/extensión/componente disponible para usar MySQL como una tienda de persistencia. De esa forma, si Gearman o la máquina se cae, puede volver a colocarla donde lo dejó. Múltiples servidores de trabajadores pueden ayudar a mantener las cosas en funcionamiento si otros trabajadores dejan de funcionar.

+0

Gracias. Esto responde algunos de los puntos clave que tuve sobre Gearman. Voy a probar estas cosas para ver si funciona correctamente para nuestra implementación. – user396404

1

El nodo tiene un cluster module que puede hacer un balanceo de carga básico contra n procesos. Tu podrias encontrar esto útil.

Una arquitectura común aquí en nodejs-land es hacer que sus nodos hablen http y luego usar alguna forma de equilibrio de carga, como http proxy o service registry. Estoy seguro de que es más o menos lo mismo en otros lugares. No sé lo suficiente acerca de Gearman para decir si será "lo suficientemente bueno", pero si esta es la idea general, me imagino que estaría bien. Por lo menos, otras personas estarían interesadas en saber cómo fue, ¡estoy seguro!

Editar: ¡Recuerde, el procesamiento de números bloqueará el ciclo de eventos del nodo! Esto es algo obvio si lo piensas, pero definitivamente algo a tener en cuenta.

+0

Gracias. Esto parece una opción de equilibrio de carga viable para node.js. Tendré que analizar cómo distribuye la carga y qué tipos de redundancia y persistencia están disponibles. – user396404

+0

Además, debería haber aclarado en mi publicación que el bloqueo de eventos no es una preocupación importante mía ya que estoy usando node.js principalmente por su velocidad. He actualizado mi publicación original para que quede más claro. – user396404

+0

Si bien esta es una etapa demasiado temprana para su sitio, puede interesarle este puerto de nodo a PHP: http://nodephp.org –

Cuestiones relacionadas