Django如何每天处理1亿个请求

今天,我将撰写有关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