Wie Django 100 Millionen Anfragen pro Tag bearbeiten kann

Heute werde ich über Django schreiben, ein Rahmen, der mir in den letzten fünf Jahren treu gedient hat. Er hat mir geholfen, Hochlastlösungen zu entwickeln, die heute von Millionen von Benutzern verwendet werden.



Python ist zwar keine sehr „schnelle“ Programmiersprache, aber es ist einfach, bequem und die Leute lieben es. Unter Leistungsgesichtspunkten ist es möglicherweise nicht so schnell wie Go oder Node.js, aber es wird irrelevant, wenn moderne Frameworks und modulare Entwicklungen berücksichtigt werden.



Seit ich einige Jahre in diesem "Topf der Django-Entwicklung" bin, bin ich zu einigen wertvollen Erkenntnissen gekommen, die ich mit Ihnen teilen werde.



Bild

1. Infrastruktur entscheidet



Abgesehen von der Anwendungsleistung benötigen Sie als Erstes ein Framework, mit dem Sie skalieren können, wenn die Anwendung an ihre Grenzen stößt. Django kann problemlos skaliert werden, wenn Sie die folgenden Richtlinien befolgen:



  • , , , , , , ;
  • Docker-, (. .: );
  • 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'],
    }
}


:



Bild





— PostgreSQL, pghero.



4.



, . Django , - .



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



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



Bild



5. (middlewares)



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



Bild



6. bulk-



bulk-, . Django ORM SQL-.



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



Bild



bulk- Django





, JOIN.



, 11 :



Bild



, , :



Bild



select_related , ORM SQL- JOIN. , WHERE .



8.



. , .

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



Bild





9. API



, API. JSON , , .



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





, Django Python, , : « — ».



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



, , . , .



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



, bulk-, , . .




All Articles