Python es en realidad un excelente lenguaje para crear Flujos de actividades y Noticias. Tommaso y yo escribimos el paquete de Stream Framework. https://github.com/tschellenbach/stream-framework Actualmente es la solución de Python más utilizada para generar noticias. También estamos ofreciendo una solución alojada en https://getstream.io. El cliente Django es, con mucho, el más fácil de empezar a trabajar con: https://github.com/GetStream/stream-django y Python se puede encontrar aquí (https://github.com/getstream/stream-python)
La parte de plantillas funciona así
{% load stream_django %}
{% for activity in activities %}
{% render_activity activity %}
{% endfor %}
Esto hará que una plantilla situada en la actividad/tweet.html con la actividad como contexto. Por ejemplo
{{ activity.actor.username }} said "{{ activity.object.body }} {{ activity.created_at|timesince }} ago"
Los documentos completos están aquí: https://github.com/GetStream/stream-django#templating
El Marco de corriente le permite construir cualquier tipo de suministro de noticias usando Redis o Cassandra. Se desarrolla a escala y crea las fuentes de noticias individuales mediante un proceso de fanout.
Además de Stream Framework (que obviamente prefiero), existen muchas otras soluciones.Hay una lista completa disponible en los paquetes django: https://www.djangopackages.com/grids/g/activities/
Tenga en cuenta que con las fuentes de noticias hay que tener en cuenta algunos problemas de escala. En general hay 3 enfoques comunes:
estrategias Denormalization
Tire La mayoría de los usuarios comienzan a cabo de esta manera. Cuando abre la página de alimentación, simplemente consulta los feeds de todos los usuarios que sigue. Si las fuentes de los usuarios se almacenan en la memoria, esto seguirá funcionando durante bastante tiempo. Finalmente, es bastante difícil seguir usando estrategias, ya que a menudo tiene que consultar la mayoría de los nodos que almacenan los feeds de sus usuarios.
Empuje El enfoque push escribe su actividad en todos los seguidores de sus seguidores. Por supuesto, esto significa que está desperdiciando una tonelada de recursos, pero el resultado final es un feed pre calculado por usuario. Este enfoque (aunque inicialmente no es muy eficiente) escala muy bien.
Combinación Algunos sistemas optimizados utilizan una combinación de estos dos enfoques. También vea el documento de Yahoo sobre este tema.
Las opciones de almacenamiento
En términos de almacenar todos estos datos las opciones más comunes son Redis, Cassandra y MongoDB. Vamos a comparar rápidamente los siguientes:
Redis Redis es extremadamente fácil de instalar y mantener. Sin embargo, solo almacena datos en la memoria. Esto significa que tendrá que optimizar la forma en que serializa los datos y tal vez recurrir a la base de datos para buscar datos con menor frecuencia. Otro problema es que no es trivial agregar máquinas a su clúster de Redis.
MongoDB Mongo DB es utilizado principalmente por unos pocos proyectos de rubí y también está disponible como backend para pump.io por e14n. Personalmente, nunca lo ejecuté en producción, por lo que no puedo evaluar correctamente esta opción. Sin embargo, hay una gran cantidad de publicaciones de blog que cubren problemas con el rendimiento, la escalabilidad y la facilidad de mantenimiento de mongo.
Cassandra Fashiolista, Instagram y Spotify usan Cassandra. Nuestra solución alojada también usa Cassandra como un back-end. Es extremadamente rentable operar y puede agregar más nodos con facilidad. El único problema es que es difícil de configurar y mantener.
artículos
Además tienen un vistazo a este alto cargo escalabilidad se nos explican algunas de las decisiones de diseño que participan: http://highscalability.com/blog/2013/10/28/design-decisions-for-scaling-your-high-traffic-feeds.html
Para aprender más acerca de diseño de alimentación le recomiendo la lectura de algunos de los los artículos que nos basamos en Feedly:
Tener una mirada un t cómo hacemos la creación de plantillas aquí: https://github.com/GetStream/stream-django#templating La etiqueta de la plantilla personalizada lo hace todo muy limpio. – Thierry