كيف يمكن لـ Django التعامل مع 100 مليون طلب يوميًا

اليوم سأكتب عن Django ، إطار عمل خدمني بإخلاص خلال السنوات الخمس الماضية. لقد ساعدني في النجاح في تطوير حلول عالية التحميل يستخدمها ملايين المستخدمين اليوم.



في الواقع ، بايثون ليست لغة برمجة "سريعة" جدًا ، لكنها بسيطة ومريحة ويحبها الناس. من وجهة نظر الأداء ، قد لا يكون بنفس سرعة 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