python - formularios - ¿Django escala?
formularios avanzados django (29)
Estoy construyendo una aplicación web con Django
. Las razones por las que elegí Django
fueron:
- Quería trabajar con herramientas gratuitas / de código abierto.
- Me gusta
Python
y siento que es un lenguaje a largo plazo , mientras que con respecto aRuby
no estaba seguro, yPHP
parecía una gran dificultad para aprender. - Estoy construyendo un prototipo para una idea y no estaba pensando demasiado en el futuro. La velocidad de desarrollo fue el factor principal, y ya conocía
Python
. - Sabía que la migración a
Google App Engine
sería más fácil si decidiera hacerlo en el futuro. - Escuché que
Django
estaba "bien".
Ahora que estoy más cerca de pensar en publicar mi trabajo, empiezo a preocuparme por la escala. La única información que encontré sobre las capacidades de escalamiento de Django
es provista por el equipo de Django
(no estoy diciendo nada para ignorarlos, pero claramente no es información objetiva ...).
Mis preguntas:
- ¿Cuál es el sitio "más grande" que se basa en
Django
hoy? (Mido el tamaño principalmente por el tráfico del usuario) - ¿Puede
Django
tratar con 100,000 usuarios diariamente , cada uno visitando el sitio por un par de horas? - ¿Podría un sitio como
StackOverflow
ejecutarse en Django?
¿Cuál es el sitio "más grande" que se basa en Django hoy? (Mido el tamaño principalmente por el tráfico del usuario)
En los Estados Unidos, Mahalo . Me han dicho que manejan aproximadamente 10 millones de ejemplares al mes.
En el extranjero, la red Globo (una red de sitios de noticias, deportes y entretenimiento en Brasil); Alexa los clasifica entre los 100 mejores a nivel mundial (alrededor del 80 en la actualidad).
Otros usuarios notables de Django incluyen PBS, National Geographic, Discovery, NASA (en realidad, una serie de divisiones diferentes dentro de la NASA) y la Biblioteca del Congreso.
¿Puede Django tratar con 100 mil usuarios diariamente, cada uno visitando el sitio por un par de horas?
Sí, pero solo si has escrito tu aplicación correctamente y si tienes suficiente hardware. Django no es una bala mágica.
¿Podría un sitio como ejecutarse en Django?
Sí (pero ver más arriba).
En cuanto a la tecnología, fácilmente: ver soclone para un intento. En cuanto al tráfico, compite con por debajo de 1 millón de unidades al mes. Puedo nombrar al menos una docena de sitios de Django con más tráfico que SO.
"¿Cuáles son los sitios más grandes construidos en Django hoy?"
No hay un solo lugar que recopile información sobre el tráfico en los sitios construidos de Django, por lo que tendré que intentarlo utilizando datos de varias ubicaciones. Primero, tenemos una lista de sitios de Django en la página principal de la página principal del proyecto de Django y luego una lista de sitios de Django en djangosites.org . Revisando las listas y seleccionando algunas que sé que tienen un tráfico decente, vemos:
Instagram : Qué potencia Instagram: Cientos de instancias, docenas de tecnologías .
Pinterest : Alexa ranking 37 (21.4.2015) y 70 millones de usuarios en 2013
disqus.com : Sirviendo a 400 millones de personas con Python .
tabblo.com : 44k visitas diarias , vea las publicaciones de Ned Batchelder Infraestructura para sitios web modernos .
chesspark.com : ranking de Alexa sobre 179k.
pownce.com (ya no está activo): rango alexa de 65k. Mike Malone de Pownce, en su presentación de EuroDjangoCon sobre Scaling Django Web Apps dice "cientos de visitas por segundo". Esta es una muy buena presentación sobre cómo escalar Django, y hace algunos buenos puntos, incluyendo las deficiencias (actuales) en la escalabilidad de Django.
HP tenía un sitio creado con Django 1.5: centro ePrint . Sin embargo, en noviembre de 2015 se migró todo el sitio web y este enlace es solo una redirección. Este sitio web era un servicio mundial que asistía a la suscripción a Instant Ink y a los servicios relacionados que HP ofrecía (*).
"¿Puede Django tratar con 100,000 usuarios diariamente, cada uno visitando el sitio por un par de horas?"
Sí, ver más arriba.
"¿Podría un sitio como Desbordamiento de pila ejecutarse en Django?"
Mi intuición es sí, pero, como respondieron otros y Mike Malone menciona en su presentación, el diseño de la base de datos es fundamental. También podemos encontrar pruebas sólidas en www.cnprog.com si podemos encontrar estadísticas de tráfico confiables. De todos modos, no es solo algo que sucederá al juntar un montón de modelos Django :)
Hay, por supuesto, muchos más sitios y bloggers de interés, ¡pero tengo que detenerme en alguna parte!
Publicación en el blog sobre el uso de Django para crear el sitio michaelmoore.com de alto tráfico descrito como uno de los 10.000 sitios web principales . Estadísticas de Quantcast y stats de compet.com .
(*) El autor de la edición, incluida dicha referencia, solía trabajar como desarrollador externo en ese proyecto.
Aquí hay una lista de algunas cosas de perfil relativamente alto construidas en Django:
La aplicación " Investiga los gastos de tu MP " de The Guardian
Politifact.com (aquí hay una publicación del blog que habla sobre la experiencia (positiva). El sitio ganó un Pulitzer).
La aplicación NY Times '' Represent
Peter Harkins, uno de los programadores de WaPo, enumera todas las cosas que han construido con Django en su blog.
Es un poco viejo, pero alguien de LA Times dio una descripción básica de por qué se fue con Django.
El Club AV de Onion se mudó recientemente de (creo que Drupal) a Django.
Me imagino que algunos de estos sitios probablemente reciban más de 100k + de visitas por día. Django sin duda puede hacer 100k hits / día y más. Pero YMMV consigue que su sitio en particular esté ahí, dependiendo de lo que esté construyendo.
Existen opciones de almacenamiento en caché en el nivel de Django (por ejemplo, los conjuntos de consultas y las vistas en memcached en memcached pueden hacer maravillas) y más allá (cachés ascendentes como Squid ). Las especificaciones del Servidor de base de datos también serán un factor (y generalmente el lugar para derrochar), ya que también lo ha mejorado. No suponga, por ejemplo, que Django va a configurar los índices correctamente. No asuma que la configuración predeterminada de PostgreSQL o MySQL es la correcta.
Además, siempre tiene la opción de tener múltiples servidores de aplicaciones ejecutando Django si ese es el punto lento, con un equilibrador de carga de software o hardware en el frente.
Finalmente, ¿estás sirviendo contenido estático en el mismo servidor que Django? ¿Estás usando Apache o algo como nginx o lighttpd ? ¿Puede permitirse usar un CDN para contenido estático? Estas son cosas en que pensar, pero todo es muy especulativo. 100k hits / día no es la única variable: ¿cuánto quieres gastar? ¿Cuánta experiencia tiene manejando todos estos componentes? ¿Cuánto tiempo tienes para juntarlo todo?
Aunque ha habido muchas respuestas excelentes aquí, siento ganas de señalar que nadie ha puesto énfasis en ...
Depende de la aplicación
Si su aplicación es liviana en escrituras, ya que está leyendo muchos más datos de la base de datos de lo que está escribiendo. Luego, escalar el django debería ser bastante trivial, diablos, viene con un caché de salida / vista bastante decente directamente desde la caja. Haga uso de eso, y digamos, redis como proveedor de caché, coloque un equilibrador de carga delante de él, gire n-instancias y debería poder lidiar con una gran cantidad de tráfico.
Ahora, si tienes que hacer miles de escrituras complejas por segundo? Historia diferente. ¿Será Django una mala elección? Bueno, no necesariamente, depende de cómo diseñe realmente su solución y también de cuáles son sus requisitos.
Solo mis dos centavos :-)
Como se indica en el libro de alto rendimiento Django y vaya a través de este Cal Henderson
Ver más detalles como se menciona a continuación:
No es raro escuchar a la gente decir "Django no escala" . Dependiendo de cómo lo mires, la declaración es completamente verdadera o claramente falsa. Django, por sí solo, no escala.
Lo mismo se puede decir de Ruby on Rails, Flask, PHP o cualquier otro lenguaje utilizado por un sitio web dinámico basado en bases de datos.
Sin embargo, la buena noticia es que Django interactúa a la perfección con un conjunto de herramientas de almacenamiento en caché y equilibrio de carga que le permitirán escalar a la mayor cantidad de tráfico posible.
Contrariamente a lo que puede haber leído en línea, puede hacerlo sin reemplazar los componentes centrales, a menudo etiquetados como "demasiado lentos", como el ORM de la base de datos o la capa de plantilla.
Disqus sirve más de 8 mil millones de páginas vistas por mes. Esos son algunos números enormes.
Estos equipos han demostrado que Django sin duda hace escala. Nuestra experiencia aquí en Lincoln Loop lo respalda.
Hemos construido grandes sitios de Django capaces de pasar el día en la página de inicio de Reddit sin sudar.
Las historias de éxito de escalamiento de Django son casi demasiado numerosas para enumerarlas en este momento.
Respalda a Disqus, Instagram y Pinterest. ¿Quieres más pruebas? Instagram pudo sostener a más de 30 millones de usuarios en Django con solo 3 ingenieros (2 de los cuales no tenían desarrollo back-end)
Creo que también podríamos agregar la aplicación de Apple del año para 2011, Instagram , a la lista que usa django intensivamente.
Definitivamente puedes ejecutar un sitio de alto tráfico en Django. Echa un vistazo a este pre-Django 1.0, pero sigue siendo una publicación relevante aquí: http://menendez.com/blog/launching-high-performance-django-site/
Desarrollo sitios de alto tráfico utilizando Django para la emisora nacional en Irlanda. Funciona bien para nosotros. Desarrollar un sitio de alto rendimiento es más que simplemente elegir un marco. Un marco solo será una parte de un sistema que sea tan fuerte como su eslabón más débil. El uso del último marco ''X'' no solucionará sus problemas de rendimiento si el problema son las consultas lentas de la base de datos o un servidor o una red mal configurados.
Distribuir las tareas de manera uniforme, en resumen, la optimización de todos y cada uno de los aspectos, incluidos los DB, Archivos, Imágenes, CSS, etc. y el equilibrio de la carga con otros recursos es necesario una vez que su sitio / aplicación comience a crecer. O haces más espacio para que crezca. Implementación de las últimas tecnologías como CDN, Cloud se debe con grandes sitios. El solo hecho de desarrollar y ajustar una aplicación no le dará el ciento por ciento de satisfacción, otros componentes también juegan un papel importante.
Echa un vistazo a este micro agregador de noticias llamado EveryBlock .
Está escrito enteramente en Django. De hecho, son las personas que desarrollaron el propio framework Django.
El defensor de desarrolladores de YouTube dio una charla sobre la escala de Python en PyCon 2012 , que también es relevante para la escala de Django.
YouTube tiene más de mil millones de usuarios , y YouTube se basa en Python.
El mayor sitio de django que conozco es el Washington Post , que sin duda indicaría que puede escalar bien.
Las buenas decisiones de diseño probablemente tengan un mayor impacto en el rendimiento que cualquier otra cosa. Ruby on Rails, a menudo se cita a Twitter como un sitio que incorpora los problemas de rendimiento con otro marco de trabajo basado en lenguaje dinámico interpretado, pero los ingenieros de Twitter han declarado que el marco no es un problema tan importante como algunas de las opciones de diseño de bases de datos que tomaron antes. en.
Django funciona muy bien con memcached y proporciona algunas clases para administrar el caché, que es donde resolvería la mayoría de sus problemas de rendimiento. Lo que entregas por cable es casi más importante que tu backend en realidad: usar una herramienta como yslow es fundamental para una aplicación web de alto rendimiento. Siempre puede lanzar más hardware en su servidor, pero no puede cambiar el ancho de banda de sus usuarios.
Estamos haciendo pruebas de carga ahora. Creemos que podemos admitir 240 solicitudes simultáneas (una tasa sostenida de 120 aciertos por segundo 24x7) sin ninguna degradación significativa en el rendimiento del servidor. Eso sería 432,000 visitas por hora. Los tiempos de respuesta no son pequeños (nuestras transacciones son grandes) pero no hay una degradación de nuestro rendimiento de referencia a medida que aumenta la carga.
Estamos usando Django y MySQL de Apache. El sistema operativo es Red Hat Enterprise Linux (RHEL). 64 bits. Usamos mod_wsgi en modo daemon para Django. No hemos hecho ningún caché o optimización de la base de datos que no sea para aceptar los valores predeterminados.
Todos estamos en una máquina virtual en un Dell de 64 bits con (creo) 32Gb RAM.
Dado que el rendimiento es casi el mismo para 20 o 200 usuarios simultáneos, no necesitamos gastar grandes cantidades de tiempo en "ajustes". En su lugar, simplemente necesitamos mantener nuestro rendimiento básico a través de mejoras de rendimiento SSL ordinarias, diseño e implementación de bases de datos ordinarias (indexación, etc.), mejoras de rendimiento de firewall ordinarias, etc.
Lo que medimos es nuestras computadoras portátiles de prueba de carga que luchan contra la carga de trabajo insana de 15 procesos que ejecutan 16 subprocesos de solicitudes concurrentes.
Estoy seguro de que está buscando una respuesta más sólida, pero la validación objetiva más obvia que se me ocurre es que Google empuja a Django para usarlo con su marco de App Engine . Si alguien sabe y se ocupa de la escalabilidad de forma regular, es Google. Por lo que he leído, el factor más limitante parece ser el back-end de la base de datos, por lo que Google usa sus propios ...
Estuve en la conferencia EuroDjangoCon la semana pasada, y este fue el tema de un par de charlas, incluso de los fundadores de lo que era el sitio más grande basado en Django, Pownce (diapositivas de una charla here ). El mensaje principal es que no tiene que preocuparse por Django, sino por el almacenamiento en caché adecuado, el equilibrio de carga, la optimización de la base de datos, etc.
Django en realidad tiene ganchos para la mayoría de esas cosas, el almacenamiento en caché, en particular, se hace muy fácil.
He estado usando Django durante más de un año y estoy muy impresionado con la forma en que logra combinar la modularidad, la escalabilidad y la velocidad de desarrollo. Como con cualquier tecnología, viene con una curva de aprendizaje. Sin embargo, la excelente documentación de la comunidad de Django hace que esta curva de aprendizaje sea mucho menos pronunciada. Django ha sido capaz de manejar todo lo que he lanzado muy bien. Parece que será capaz de escalar bien en el futuro.
BidRodeo Penny Auctions es un sitio web de Django de tamaño moderado. Es un sitio web muy dinámico y maneja un buen número de páginas vistas al día.
Hoy usamos muchas aplicaciones web y sitios para nuestras necesidades. La mayoría de ellos son muy útiles. Te mostraré algunos de ellos usados por python o django.
El sitio web del Washington Post es una fuente de noticias en línea muy popular para acompañar su diario. Su gran cantidad de vistas y tráfico puede ser manejado fácilmente por el marco web de Django. Washington Post - 52.2 million unique visitors (March, 2015)
El sitio web oficial de la Administración Nacional de Aeronáutica y del Espacio es el lugar para encontrar noticias, fotos y videos sobre su exploración espacial en curso. Este sitio web de Django puede manejar fácilmente grandes cantidades de vistas y tráfico. 2 million visitors monthly
The Guardian es un sitio web británico de noticias y medios propiedad de Guardian Media Group. Contiene casi todo el contenido de los periódicos The Guardian y The Observer. Esta enorme información es manejada por Django. The Guardian (commenting system) - 41,6 million unique visitors (October, 2014)
Todos sabemos que YouTube es el lugar para subir videos de gatos y falla. Como uno de los sitios web más populares que existen, nos brinda un sinfín de horas de entretenimiento con video. El lenguaje de programación Python lo potencia y las características que amamos.
DropBox comenzó la revolución de almacenamiento de documentos en línea que se ha convertido en parte de la vida cotidiana. Ahora almacenamos casi todo en la nube. Dropbox nos permite almacenar, sincronizar y compartir casi cualquier cosa utilizando el poder de Python.
Survey Monkey es la mayor compañía de encuestas en línea. Pueden manejar más de un millón de respuestas cada día en su sitio web de Python reescrito.
Quora es el lugar número uno en línea para hacer una pregunta y recibir respuestas de una comunidad de personas. En su sitio web de Python, estos miembros de la comunidad responden, editan y organizan los resultados relevantes.
La mayoría del código para los servicios y análisis de acortamiento de URL de Bitly están todos construidos con Python. Su servicio puede manejar cientos de millones de eventos por día.
Reddit es conocida como la portada de internet. Es el lugar en línea para encontrar información o entretenimiento basado en miles de categorías diferentes. Las publicaciones y los enlaces son generados por el usuario y se promueven a través de los votos. Muchas de las capacidades de Reddit dependen de Python para su funcionalidad.
Hipmunk es un sitio de viajes para el consumidor en línea que compara los mejores sitios de viajes para encontrar las mejores ofertas. Las herramientas de este sitio web de Python le permiten encontrar los hoteles y vuelos más baratos para su destino.
Haga clic aquí para obtener más información: 25-of-the-most-popular-python-and-django-websites , What-are-some-well-known-sites-running-on-Django
Jugando al abogado del diablo un poco:
Debería consultar el Keynote DjangoCon 2008 , entregado por Cal Henderson , titulado "Por qué odio a Django", donde repasa todo lo que falta en Django que podría querer hacer en un sitio web de alto tráfico. Al final del día, tiene que tomar todo esto con la mente abierta porque es perfectamente posible escribir aplicaciones de Django de esa escala, pero pensé que era una buena presentación y relevante para su pregunta.
La escala de las aplicaciones web no se trata de marcos web o idiomas, se trata de su arquitectura. Se trata de cómo maneja su caché de navegador, su caché de base de datos, cómo utiliza proveedores de persistencia no estándar (como CouchDB ), qué tan sintonizada es su base de datos y muchas otras cosas ...
Mi experiencia con Django es mínima, pero recuerdo que en The Django Book tienen un capítulo en el que entrevistan a personas que ejecutan algunas de las aplicaciones más grandes de Django. Aquí hay un enlace. Supongo que podría proporcionar algunas ideas.
Dice que curse.com es una de las aplicaciones de Django más grandes con alrededor de 60-90 millones de páginas vistas en un mes.
No creo que el problema sea realmente sobre la escala de Django.
Realmente te sugiero que mires en tu arquitectura, eso es lo que te ayudará con tus necesidades de escalado. Si te equivocas, no tiene sentido cómo se desempeña Django. Rendimiento! = Escala. Puede tener un sistema que tenga un rendimiento asombroso pero no escala y viceversa.
¿Está su base de datos de aplicación vinculada? Si es así, tus problemas de escala también se encuentran allí. ¿Cómo planeas interactuar con la base de datos de Django? ¿Qué sucede cuando su base de datos no puede procesar solicitudes tan rápido como Django las acepta? ¿Qué sucede cuando sus datos superan una máquina física? Debe tener en cuenta cómo planea lidiar con esas circunstancias.
Además, ¿qué sucede cuando su tráfico supera un servidor de aplicaciones? la forma en que maneja las sesiones en este caso puede ser complicada, la mayoría de las veces probablemente no necesite una arquitectura de nada compartido. De nuevo eso depende de tu aplicación.
En resumen, los idiomas no son lo que determina la escala, un idioma es responsable del rendimiento (nuevamente, dependiendo de las aplicaciones, los diferentes idiomas tienen un rendimiento diferente). Es su diseño y arquitectura lo que hace que la escala sea una realidad.
Espero que ayude, estaría encantado de ayudar más si tiene alguna pregunta.
No estoy seguro de la cantidad de visitas diarias, pero aquí hay algunos ejemplos de grandes sitios de Django:
- disqus.com ( hablar desde djangocon )
- Bitbucket ( escribir )
- lanyrd.com ( source )
- support.mozilla.com ( código fuente )
- addons.mozilla.org ( código fuente ) ( conversación de djangocon )
- theonion.com ( escribir )
- El sistema de comentarios de guardian.co.uk utiliza Django ( source ).
- interés
- rdio
Aquí hay un enlace a la lista de sitios Django de alto tráfico en Quora .
Otro ejemplo es rasp.yandex.ru, servicio de horarios de transporte ruso. Su asistencia satisface sus necesidades.
Sí puede. Podría ser Django con Python o Ruby on Rails. Todavía se escalará.
Hay pocas técnicas diferentes. En primer lugar, el almacenamiento en caché no es de escala. Podría tener varios servidores de aplicaciones balanceados con nginx como el frente además de los balanceadores de hardware. Para escalar en el lado de la base de datos, puede ir bastante lejos con el esclavo leído en MySQL / PostgreSQL si va por el camino RDBMS.
Algunos buenos ejemplos de sitios web de tráfico pesado en Django podrían ser:
- Pownce cuando todavía estaban allí.
- Discus (gestor genérico de comentarios compartidos)
- Todos los sitios web relacionados con el periódico: Washington Post y otros.
Puedes sentirte seguro.
Si desea utilizar el código abierto, hay muchas opciones para usted. Pero Python es el mejor entre ellos ya que tiene muchas bibliotecas y una comunidad estupenda. Estas son las razones que pueden cambiar tu mente:
Python es muy bueno, pero es un lenguaje interpretado que lo hace lento. Pero hay muchos servicios de aceleración y almacenamiento en caché que solucionan parcialmente este problema.
Si estás pensando en un desarrollo rápido, Ruby on Rails es el mejor entre todos. El lema principal de este marco (ROR) es brindar una experiencia cómoda a los desarrolladores. Si comparas a Ruby y Python, ambos tienen casi la misma sintaxis.
Google App Engine es un servicio muy bueno, pero te vinculará en su alcance, no tienes oportunidad de experimentar cosas nuevas. En lugar de eso, puede usar la nube de Digital Ocean que solo cobrará $ 5 / mes por su gota más simple. Heroku es otro servicio gratuito donde puedes implementar tu producto.
¡Sí! ¡Sí! Lo que escuchó es totalmente correcto, pero aquí hay algunos ejemplos que utilizan otras tecnologías.
- Rails: Github, Twitter (anteriormente), Shopify, Airbnb, Slideshare, Heroku, etc.
- PHP: Facebook, Wikipedia, Flickr, Yahoo, Tumbler, Mailchimp, etc.
La conclusión es que un marco o lenguaje no hará todo por ti. Una mejor arquitectura, diseño y estrategia le dará un sitio web escalable. Instagram es el mayor ejemplo, este pequeño equipo está administrando datos tan grandes. Aquí hay un blog sobre su arquitectura que debe leerse.
Si tiene un sitio con contenido estático, poner un servidor de Varnish al frente aumentará dramáticamente su rendimiento. Incluso una sola caja puede escupir fácilmente 100 Mbit / s de tráfico.
Tenga en cuenta que con el contenido dinámico, usar algo como Varnish se vuelve mucho más complicado.
Tenga en cuenta que si espera 100K usuarios por día, que están activos por horas a la vez (lo que significa un máximo de 20K + usuarios concurrentes), necesitará MUCHOS servidores. SO tiene ~ 15,000 usuarios registrados, y la mayoría de ellos probablemente no estén activos diariamente. Si bien la mayor parte del tráfico proviene de usuarios no registrados, supongo que muy pocos de ellos permanecen en el sitio más de un par de minutos (es decir, siguen los resultados de búsqueda de Google y luego se van).
Para ese volumen, espere al menos 30 servidores ... que aún son 1.000 usuarios concurrentes por servidor.
¿Cuál es el sitio "más grande" que se basa en Django hoy? (Mido el tamaño principalmente por el tráfico del usuario) Pinterest
disqus.com
Más aquí https://www.shuup.com/en/blog/25-of-the-most-popular-python-and-django-websites/
¿Puede Django tratar con 100,000 usuarios diariamente, cada uno visitando el sitio por un par de horas?
Sí, pero use la arquitectura adecuada, el diseño de la base de datos, el uso del caché, el uso de balances de carga y múltiples servidores / nods
¿Podría un sitio como Desbordamiento de pila ejecutarse en Django?
Sí, solo necesito seguir la respuesta mencionada en la segunda pregunta.
El problema es no saber si django puede escalar o no.
La forma correcta es entender y saber cuáles son los patrones de diseño de red y las herramientas que se deben colocar en su proyecto django / symfony / rails para escalar bien.
Algunas ideas pueden ser:
- Multiplexación.
- Proxy inverso. Ej: Nginx, Barniz
- Sesión Memcache. Ej: Redis
- Clusterización en su proyecto y db para equilibrio de carga y tolerancia a fallas: Ej: Docker
- Utilice terceros para almacenar activos. Ej: Amazon S3
Espero que te ayude un poco. Esta es mi pequeña roca a la montaña.