Esta pregunta se hizo en 2011 y Django ha recorrido un largo camino desde entonces. Anteriormente, construí una red social con 2 millones de usuarios en Django y encontré que el proceso era bastante sencillo. Parte de la infraestructura de getstream.io también se ejecuta en Django y estamos muy contentos con ella. Aquí hay algunos consejos para aprovechar al máximo su instalación de Django. No quedó del todo claro a partir de la pregunta, pero supongo que debes comenzar desde una instalación de Django completamente no optimizada.
archivos estáticos & CDN
Empiece por alojar sus archivos estáticos en S3 y pegar el Cloudfront CDN frente a ella. Hospedar archivos estáticos de tu instancia de Django es una idea terrible, por favor no lo hagas.
& base de datos ORM: Seleccionar relacionado
El segundo error más común no es la optimización de su uso del ORM. Deberá echar un vistazo a la documentación relacionada con la selección relacionada y aplicarla según sea necesario. La mayoría de las páginas de su sitio sólo deben tomar 2-3 consultas y no consultas N como se le suele ver si no se utiliza correctamente seleccione relacionados: https://docs.djangoproject.com/en/1.11/ref/models/querysets/
Base de datos: PGBouncer
Creación de un nuevo la conexión a su base de datos postgres es una operación bastante pesada. Deseará ejecutar PGBouncer en localhost para asegurarse de que no tenga ninguna sobrecarga innecesaria al crear conexiones de bases de datos. Esto era más urgente con versiones anteriores de Django, pero en general sigue siendo una buena idea.
monitoreo básico & Depuración
Seguidamente se le quiere conseguir algo monitoreo básico y depuración en funcionamiento. La barra de herramientas de depuración de Django es su primer amigo: https://github.com/jazzband/django-debug-toolbar
Después de que usted va a querer echar un vistazo a herramientas como NewRelic, Datadog, Sentry y StatsD/grafito para conseguir más puntos de vista.
preocupaciones separados
Otra primer paso es la separación de preocupaciones. Querrá ejecutar su base de datos en su propio servidor, su servidor de búsqueda en su propio servidor, la web en sus propios servidores, etc. Si ejecuta todo en una sola máquina, es difícil ver qué causa la ruptura de la aplicación. Los servidores son baratos, dividen las cosas.
equilibrador de carga
Si usted nunca ha usado un equilibrador de carga antes, comience aquí: https://aws.amazon.com/elasticloadbalancing/
utilizar las herramientas adecuadas
Si usted está haciendo las nubes de etiquetas, búsqueda de etiquetas o búsqueda use una herramienta dedicada como Elastic para esto.
Si usted tiene un contador que se están modificando o una lista que está cambiando rápidamente Redis uso en lugar de su base de datos para almacenar en caché la versión más reciente
apio y RabbitMQ
Utilice una cola de tareas que hacer todo lo que no necesita hacerse ahora en segundo plano. La cola de tareas más utilizado es Apio: http://www.celeryproject.org/
Desnormalizar todo
Usted no desea calcular el recuento como gustos y comentarios en las lecturas. Actualiza simplemente el me gusta y el recuento de comentarios cada vez que alguien agrega un nuevo me gusta o comentario. Esto hace que la operación de escritura sea más pesada, pero la lectura más clara.Dado que es probable que tenga muchas lecturas y muy pocas escrituras, eso es exactamente lo que quiere.
noticias y Flujos de actividad
Si se alimenta la construcción de echar un vistazo a este servicio para building news feeds & activity streams o la open source Stream-Framework
En 2011 había que construir su propia tecnología de alimentos, hoy en día esto es ya no es el caso. Build a social network with PHP
Ahora que hemos pasado por alto lo básico, revisemos algunos consejos más avanzados.
CDN y 2 etapa de carga
Usted ya está usando Cloudfront para sus archivos estáticos. Como paso siguiente, también querrás incluir Cloudfront frente al tráfico web. Esto le permite almacenar en caché ciertas páginas en el CDN y reducir la carga en sus servidores.
Incluso puede almacenar en caché las páginas de los usuarios que inician sesión en el CDN. Simplemente use Javascript para cargar en todas las personalizaciones de página y detalles específicos del usuario una vez que la página se haya servido desde el CDN.
base de datos: PGBadger
Herramientas como PGBadger le dan grandes ideas en lo que su base de datos está haciendo realidad. Deseará ejecutar informes diarios en parte de sus datos de registro.
Base de datos: índices
Usted querrá empezar a leer sobre los índices de bases de datos. La mayoría de los problemas iniciales de escalado se pueden solucionar aplicando el índice correcto y optimizando un poco su base de datos. Si obtiene sus índices correctos, estará mejor que la mayoría de las personas. Hay mucho más espacio para la optimización de la base de datos y estos libros de la gente del segundo cuadrante son impresionantes. https://www.2ndquadrant.com/en/books/
Base de datos: Afinación
Si usted no está utilizando RDS usted querrá realizar una verificación de PGTune rápida en su base de datos. Por la configuración por defecto postgres es bastante lento, PGTune le indica la configuración correcta de usar: https://github.com/gregs1104/pgtune
caché todo
Escalado su base de datos es un dolor. Con el tiempo, tendrás varias bases de datos esclavas, manejo de fragmentación y particiones, etc. Escalar tu base de datos lleva mucho tiempo y la mejor forma de evitar el gasto de mucho tiempo es el almacenamiento en caché. Redis es tu caché en la actualidad, pero memcached también es una opción decente. Básicamente, querrás guardar en caché todo. Una página muestra una lista de publicaciones: Leer de Redis, ¿Buscar perfiles de usuario? Lea de Redis. Que desee utilizar la base de datos lo menos posible y poner la mayor parte de la carga en la capa de caché, ya que es muy fácil de escalar su capa de caché
compensaciones
Postgres no le gustan los grandes desplazamientos. Use el filtro de ID cuando está paginando a través de grandes conjuntos de resultados.
interbloqueos
Con una gran cantidad de tráfico que finalmente va a obtener los puntos muertos. Esto sucede cuando varias transacciones en el postgreso intentan bloquear una parte de la información y A espera por B mientras que B espera por C y C espera por A. La solución obvia es usar transacciones más pequeñas. Eso reduce la posibilidad de que ocurran interbloqueos. A continuación, querrás actualizar por lotes tus datos más populares. ES DECIR. En lugar de actualizar los recuentos cuando a alguien le gusta una publicación, querrá almacenar una lista como cambios y sincronizarla con el recuento cada 5 minutos más o menos.
Esos son algunos de los consejos básicos, diviértete lidiando con las redes sociales en rápido crecimiento :)
Primero pongo manos a la obra. Segundo, perfil para encontrar cuellos de botella. En tercer lugar, concéntrese en los resultados de los perfiles para hacerlo lo más rápido posible. –