Bagaimana Django bisa menangani 100 juta permintaan per hari

Hari ini saya akan menulis tentang Django, kerangka kerja yang telah melayani saya dengan setia selama lima tahun terakhir. Dia membantu saya berhasil mengembangkan solusi beban tinggi yang digunakan oleh jutaan pengguna saat ini.



Memang, Python bukanlah bahasa pemrograman yang β€œcepat”, tetapi sederhana, nyaman dan orang menyukainya. Dari sudut pandang kinerja, ini mungkin tidak secepat Go atau Node.js, tetapi menjadi tidak relevan saat mempertimbangkan kerangka kerja modern dan pengembangan modular.



Sejak saya berada dalam "pot perkembangan Django" selama beberapa tahun sekarang, saya telah menemukan beberapa wawasan berharga yang akan saya bagikan dengan Anda.



gambar

1. Infrastruktur memutuskan



Selain dari kinerja aplikasi, hal pertama yang Anda perlukan adalah kerangka kerja yang memungkinkan Anda untuk menskalakan ketika aplikasi mencapai batasnya, dan Django dapat menskalakan dengan mudah jika Anda mengikuti petunjuk berikut:



  • Bagi aplikasi Anda menjadi layanan mikro, tetapi pertimbangkan jumlah data yang ditransfer di antaranya, terutama karena redundansi data dan seringnya sinkronisasi menyebabkan peningkatan sumber daya server dan komunikasi, dan akibatnya, biaya yang lebih tinggi;
  • Gunakan kontainer Docker untuk mendorong kode Anda ke produksi (kira-kira. Per: ke produksi);
  • 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'],
    }
}


:



gambar





β€” PostgreSQL, pghero.



4.



, . Django , - .



CONN_MAX_AGE β€” , . . 5 . , , , , 100 , .



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



gambar



5. (middlewares)



, , Django REST API. (sessions) (messages) β€” . , .



gambar



6. bulk-



bulk-, . Django ORM SQL-.



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



gambar



bulk- Django





, JOIN.



, 11 :



gambar



, , :



gambar



select_related , ORM SQL- JOIN. , WHERE .



8.



. , .

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



gambar





9. API



, API. JSON , , .



: 1 , 1 , 1 , 30 β€” (. .: ) .





, Django Python, , : Β« β€” Β».



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



, , . , .



Instagram, Pinterest Disqus β€” Django Β« Β», . , , , , , , .



, bulk-, , . .




All Articles