Cómo Django puede manejar 100 millones de solicitudes por día

Hoy escribiré sobre Django, un framework que me ha servido fielmente durante los últimos cinco años. Me ayudó a tener éxito en el desarrollo de soluciones de alta carga utilizadas por millones de usuarios en la actualidad.



De hecho, Python no es un lenguaje de programación muy "rápido", pero es simple, conveniente y a la gente le encanta. Desde el punto de vista del rendimiento, puede que no sea tan rápido como Go o Node.js, pero se vuelve irrelevante cuando se consideran los marcos modernos y el desarrollo modular.



Desde que he estado en esta "olla de desarrollo de Django" durante varios años, he llegado a algunas ideas valiosas que voy a compartir con ustedes.



imagen

1. La infraestructura decide



Aparte del rendimiento de la aplicación, lo primero que necesita es un marco que le permita escalar cuando la aplicación alcanza su límite, y Django puede escalar fácilmente si sigue estas pautas:



  • Divida su aplicación en microservicios, pero tenga en cuenta la cantidad de datos transferidos entre ellos, especialmente porque la redundancia de datos y la sincronización frecuente provocan un aumento en los recursos del servidor y las comunicaciones y, en consecuencia, mayores costos;
  • Utilice contenedores Docker para enviar su código a producción (aprox. Per: a producción);
  • Docker , , Kubernetes, ;
  • : / ;
  • : - , (. .: — Kubernetes), Kubernetes, , . — .


2. —



, . , , , , :



  • . PostgreSQL, , , , ;
  • . - (IOPS) ;
  • , ;
  • , — , : ( SELECT), ( INSERT, UPDATE). Django , , .


3. Django ORM



, ORM, . , , 100 — 20 .



, , settings.py:



LOGGING = {
    'version': 1,
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
        },
    },
    'loggers': {
        'django.db.backends': {
            'level': 'DEBUG',
        },
    },
    'root': {
        'handlers': ['console'],
    }
}


:



imagen





— PostgreSQL, pghero.



4.



, . Django , - .



CONN_MAX_AGE — , . . 5 . , , , , 100 , .



, 0 300 . AWS Aurora db.r5.8xlarge, db.r5.4xlarge, , , , .



imagen



5. (middlewares)



, , Django REST API. (sessions) (messages) — . , .



imagen



6. bulk-



bulk-, . Django ORM SQL-.



5000 , batch_size (. .: ). Python, , , .



imagen



bulk- Django





, JOIN.



, 11 :



imagen



, , :



imagen



select_related , ORM SQL- JOIN. , WHERE .



8.



. , .

Django ORM QuerySet .only() , .defer(), Django , :



imagen





9. API



, API. JSON , , .



: 1 , 1 , 1 , 30 — (. .: ) .





, Django Python, , : « — ».



Django . , , (. .: «») , «» .



, , . , .



Instagram, Pinterest Disqus — Django « », . , , , , , , .



, bulk-, , . .




All Articles