Djangoが1日あたり1億件のリクエストを処理する方法

今日は、過去5年間忠実に役立ってきたフレームワークであるDjangoについて書きます。彼は私が今日何百万ものユーザーによって使用される高負荷ソリューションの開発に成功するのを助けてくれました。



確かに、Pythonはそれほど「高速」なプログラミング言語ではありませんが、シンプルで便利であり、人々はそれを気に入っています。パフォーマンスの観点からは、GoやNode.jsほど高速ではないかもしれませんが、最新のフレームワークやモジュラー開発を検討する場合は関係ありません。



私はこの「Django開発のポット」に数年携わっているので、あなたと共有しようとしているいくつかの貴重な洞察に到達しました。



画像

1.インフラストラクチャが決定



アプリケーションのパフォーマンスとは別に、最初に必要なのは、アプリケーションが限界に達したときにスケーリングできるフレームワークです。Djangoは、次のガイドラインに従えば簡単にスケーリングできます。



  • , , , , , , ;
  • 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'],
    }
}


:



画像





— PostgreSQL, pghero.



4.



, . Django , - .



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



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



画像



5. (middlewares)



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



画像



6. bulk-



bulk-, . Django ORM SQL-.



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



画像



bulk- Django





, JOIN.



, 11 :



画像



, , :



画像



select_related , ORM SQL- JOIN. , WHERE .



8.



. , .

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



画像





9. API



, API. JSON , , .



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





, Django Python, , : « — ».



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



, , . , .



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



, bulk-, , . .




All Articles