اليوم سأكتب عن 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
7. select_related
, 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-, , . .