Como dijo Avi, es difícil establecer una arquitectura en una respuesta. Y sí, Quora hace un hermoso trabajo con su motor de notificaciones. Mientras reviso varios modelos para poner en marcha un motor de notificaciones, encontré estos términos clave (y algunos ejemplos) que debe tener en cuenta al redactar la arquitectura de su sistema:
1. WebSockets: hacen un trabajo increíble con notificaciones en tiempo real y sistemas de chat. Aunque si profundiza en cada uno de estos conceptos, todo está sondeando (algunos servidores muestran que tienen sockets activados por borde (como kqueue), algunos usan sockets activados por nivel (como epoll): puede que no sea demasiado bueno con los términos, es Ha pasado un tiempo desde que me ensucié las manos).
2. Modelo de PubSub: debe averiguar si está transmitiendo, unidifusión o multidifusión y crear el modelo de suscriptor de editor para el mismo. Esto se puede reutilizar en varios otros lugares y canales como notificaciones por correo electrónico, mensajes de texto, notificaciones móviles, etc.
- ¿Las palabras clave en una página web mejoran el SEO?
- ¿Cómo maneja Quora todos los eventos en tiempo real que ocurren en el sitio?
- ¿Qué le parece nuestro nuevo sitio web de la Agencia de Diseño Web?
- ¿Cuáles son las principales diferencias entre Java 6 y Java 7?
- ¿Cómo PUEDO PUBLICAR un dato capturado en un servidor y capturarlo en el servidor?
3. Sistemas de bases de datos: como Avi, soy fanático de NoSQL, especialmente de las tiendas de documentos como Mongodb. Mantienen el código limpio, tiene la flexibilidad de escribir ORM sin sentido que son específicos de su marco, consultas más rápidas y demoras de respuesta insignificantes. Los encuentro perfectos para la creación de colas de entrega.
4. Mecanismo de entrega: integre su autenticación API al sistema de entrega que expulsa su código / datos json solo si el socket está activo y autenticado. Si el socket se apaga, el navegador muestra que las notificaciones no están activas (como lo hizo Quora en estos días)
5. Escalado: la mayoría de las implementaciones de websocket son escalables sobre el sistema distribuido y dependen del servidor subyacente (el chico más popular en el bloque es socket.io con nodejs). Puede escribir sus propios envoltorios o usar algunos de los que le ayudan a distribuir su carga horizontalmente.
No estoy muy seguro de si esto ayudaría, pero pensé en darle un vuelco al cerebro aquí. Las implementaciones están basadas en escenarios en la mayoría de los casos.