¿Cuáles son las mejores opciones para hacer una aplicación web a gran escala?

La pregunta número uno es cuál es el propósito de la aplicación web, es decir, cuál es el motivo de la aplicación para existir. ¿Tiene requisitos comerciales o requisitos de usuario? El uso de una base de datos NoSQL (por ejemplo, Mongo) o una base de datos SQL (por ejemplo, MySQL) depende, en cierta medida, de las características de los datos y las transacciones de la base de datos que espera procesar con su aplicación web. Hay muchas tecnologías para elegir para construir un servidor escalable. La pregunta es, ¿cuál es su criterio? Si usa múltiples tecnologías para construir el lado del servidor, puede terminar con un desafío de integración. Nuevamente, debe proporcionar una mejor descripción de los requisitos para esta aplicación. Si no tiene un conjunto sólido de requisitos, la mejor manera de hacerlo es desarrollar un corte vertical de extremo a extremo funcionalmente muy delgado pero completo, mostrárselo al usuario / revisor, hacer ajustes, enjuagar y repetir.

Si está usando PhalconPHP, usan Beanstalk para hacer cola.

Lo extraño es que estás haciendo dos afirmaciones diferentes aquí:

1.) “tiene que ejecutar un servicio para cada cliente que supervisa la bandeja de entrada de correo electrónico del cliente”

¿Qué significa eso exactamente? ¿Está alojando el correo electrónico o está alojado en algún servicio de terceros? Eso es porque:

2.) “para monitorear imap”

IMAP es un protocolo, que no tendrá nada que ver con su bandeja de entrada de correo electrónico. La bandeja de entrada del correo electrónico será enviada por un servicio como sendmail, postfix, exim o qmail, que no tiene nada que ver con IMAP. Será almacenado por algo como procmail o dovecot. IMAP es independiente de cualquiera de esos servicios particulares, todos pueden usarlo o usar SMTP o POP3.

Tiene un Agente de usuario de correo, sea cual sea el cliente en el que la persona envía y recibe correo electrónico (por ejemplo, Outlook, Apple Mail, etc.) Tiene el Agente de transporte de correo, que es el que realmente envía los correos electrónicos (sendmail, postfix, exim, qmail), y tiene el Agente de entrega de correo que almacena los correos electrónicos como maildrop, procmail o dovecot. Luego tiene los protocolos para enviar y recibir correos electrónicos: SMTP, POP3 e IMAP.

Debe tener claro qué MTA y MDA (o LDA, Local Delivery Agent) se están utilizando si eso es lo que está buscando.

Si aloja la aplicación de correo electrónico con uno de esos, está escuchando un evento de cambio de archivo, generalmente en algo como / var / mail / {user}. Si está hablando de escuchar un evento que se dispara usando IMAP, está escuchando que un evento se active en un puerto específico. Esas son cosas muy diferentes.

En Phalcon, estaría escuchando un nuevo correo electrónico que se almacenará usando IMAP (puede usar inotify para escuchar los cambios en / var / mail / user, como Inotify – Manual) o implementar su propia forma de notificar al servidor de cambios, luego dispare esa solicitud. Eso necesitaría enviar una respuesta a Beanstalk, PhalconPHP tomaría esa solicitud en función de cómo escuche ese evento y realice algún código.

Si está escuchando un puerto específico, usaría libevent para eso.

En NodeJS, estaría utilizando un trabajador web como Socket.IO para notificar al usuario. Pero fuera de los detalles de implementación, es en gran medida la misma idea, escucha el evento IMAP, como sea definido, o el evento de cambio de archivo, como sea definido, que enviaría un evento de notificación, como sea definido, que sería recogido por el servidor y ejecutado, como sea definido.

NodeJS generalmente tiene mejores bibliotecas para escuchar eventos de sistema de bajo nivel (aunque Packagist ahora tiene muchas excelentes bibliotecas PHP para hacer lo mismo), si está interactuando con protocolos, sistema de archivos y manipulación de E / S, es una mejor opción. Pero esto también es relativo, si eres mejor en PHP, entonces úsalo. Intentar aprender una tecnología completamente nueva mientras se construye un sistema robusto es muy difícil.

No está realmente claro en su descripción qué tiene que escalar, ¿estará ejecutando múltiples servidores, usando cajas Vagrant, usando AWS, etc. La optimización prematura sigue siendo la raíz de la programación del mal, necesita descubrir cuál es el cuello de botella real en el antes de preocuparse por cómo escalarlo, ya que podría optimizar el cuello de botella incorrecto.

More Interesting

¿Cuál es el procedimiento para construir la aplicación web PHP en ejecución usando Jenkins?

¿Qué es el 'servidor web' en NodeJS y por qué debería usarse para aplicaciones empresariales en 2016 en lugar de Java / Go / PHP / Python?

¿Cuáles son algunas aplicaciones web y de iPhone para monitorear a los empleados que viajan a sus hogares y negocios en busca de trabajo?

¿Qué es una aplicación web dinámica?

¿Cuáles son los marcos que pueden desarrollar aplicaciones CRUD móviles / web simples?

¿Cuáles son las diversas tecnologías web?

¿Qué posibilidades hay de que los bots reemplacen sitios web y aplicaciones?

¿Qué temas debería cubrir un programa de estudios de "Tecnologías de la Web Social 101" si se enseña en la escuela de Derecho?

¿Por qué se elimina el enlace de datos bidireccional en Angular 2? Si Angular 2.0 solo admite el enlace de datos unidireccional, ¿no fue el enlace bidireccional una característica importante de Angular 1? ¿Esto implica que de alguna manera la unión bidireccional en Angular 1 no fue una característica útil?

¿Cuáles son los recursos humanos mínimos necesarios para iniciar un negocio de desarrollo web?

¿Cuál es el mejor servicio para cobrar una tarifa de suscripción anual a los usuarios de una aplicación web?

¿Cómo puede Java ser un back-end para una aplicación web?

¿Cuáles son las mejores prácticas para probar aplicaciones web multilingües?

Cómo implementar una aplicación web ReactJS en Heroku

¿Qué es la lógica web y el sphare web?