Redis
 sql >> Teknologi Basis Data >  >> NoSQL >> Redis

Menggunakan Seledri untuk Realtime, Permintaan API Eksternal Sinkron dengan Gevent

Saya akan mencoba menjawab pertanyaan sebanyak mungkin.

Bisakah ini (dan haruskah ini) dilakukan dengan menggunakan seledri?

Ya, Anda bisa

Saya menggunakan django. Haruskah saya mencoba menggunakan seledri django daripada seledri biasa?

Django memiliki dukungan yang baik untuk seledri dan akan membuat hidup lebih mudah selama pengembangan

Masing-masing dari tugas itu mungkin memunculkan tugas lain - seperti mencatat apa yang baru saja terjadi atau jenis percabangan lainnya. Apakah ini mungkin?

Anda dapat memulai subtugas dari dalam tugas dengan mengabaikan_result =true hanya untuk efek samping

Mungkinkah tugas mengembalikan data yang mereka dapatkan - yaitu berpotensi Kb data melalui seledri (dalam kasus ini redis) atau haruskah mereka menulis ke DB, dan hanya meneruskan pointer ke data tersebut?

Saya akan menyarankan untuk meletakkan hasilnya di db dan kemudian menyebarkan id akan membuat broker dan pekerja Anda senang. Lebih sedikit transfer/pengawetan data, dll.

Setiap tugas sebagian besar terikat I/O, dan pada awalnya hanya akan menggunakan acara dari utas web untuk menyebarkan permintaan dan melewati seluruh desain antrian, tetapi ternyata itu akan digunakan kembali untuk komponen yang berbeda. Mencoba untuk menjaga seluruh perjalanan pulang pergi melalui Qs secara real time mungkin akan membutuhkan banyak pekerja untuk memastikan antrian sebagian besar kosong. Atau itu? Apakah menjalankan gevent workerpool membantu dalam hal ini?

Karena prosesnya terikat io maka gevent pasti akan membantu di sini. Namun, berapa banyak konkurensi yang seharusnya untuk pekerja kumpulan gevent, adalah sesuatu yang saya cari jawabannya juga.

Apakah saya harus menulis tugas khusus gevent atau akan menggunakan pooldeal gevent dengan jaringan IO secara otomatis?

Gevent melakukan patching monyet secara otomatis saat Anda menggunakannya di kolam. Tetapi perpustakaan yang Anda gunakan harus cocok dengan gevent. Jika tidak, jika Anda menguraikan beberapa data dengan simplejson (yang ditulis dalam c) maka itu akan memblokir greenlet gevent lainnya.

Apakah mungkin untuk menetapkan prioritas untuk tugas-tugas tertentu?

Anda tidak dapat menetapkan prioritas khusus untuk tugas-tugas tertentu, tetapi merutekannya ke antrean yang berbeda dan kemudian antrean tersebut didengarkan oleh berbagai jumlah pekerja. Semakin banyak pekerja untuk antrian tertentu, semakin tinggi prioritas tugas pada antrian tersebut.

Bagaimana dengan menjaganya agar tetap teratur?

Rantai adalah salah satu cara untuk menjaga ketertiban. Chord adalah cara yang baik untuk meringkas. Seledri menanganinya, jadi Anda tidak perlu khawatir. Bahkan saat menggunakan kumpulan gevent, pada akhirnya mungkin untuk memberi alasan tentang urutan eksekusi tugas.

Haruskah saya melewatkan seledri dan menggunakan kombu saja?

Anda bisa, jika kasus penggunaan Anda tidak akan berubah menjadi sesuatu yang lebih kompleks dari waktu ke waktu dan juga jika Anda bersedia untuk mengelola proses Anda melalui celeryd + supervisord sendiri. Juga, jika Anda tidak peduli dengan pemantauan tugas yang datang dengan alat seperti seledri, bunga, dll.

Sepertinya seledri lebih diarahkan pada "tugas" yang dapat ditunda dan tidak sensitif terhadap waktu.

Seledri juga mendukung tugas terjadwal. Jika itu yang Anda maksud dengan pernyataan itu.

Apakah saya gila karena mencoba menjaga waktu nyata ini?

Saya kira tidak demikian. Selama konsumen Anda cukup cepat, itu akan sebagus waktu nyata.

Teknologi lain apa yang harus saya lihat?

Berkaitan dengan seledri, sebaiknya Anda memilih result store dengan bijak. Saran saya adalah menggunakan cassandra. Ini bagus untuk data waktu nyata (baik penulisan maupun kueri). Anda juga dapat menggunakan redis atau mongodb. Mereka datang dengan serangkaian masalah mereka sendiri sebagai penyimpanan hasil. Tapi kemudian sedikit penyesuaian dalam konfigurasi bisa sangat membantu.

Jika Anda bermaksud sesuatu yang sama sekali berbeda dari seledri, maka Anda dapat melihat ke asyncio (python3.5) dan zeromq untuk mencapai hal yang sama. Saya tidak bisa berkomentar lebih banyak tentang itu.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. simpan rentang ip di Redis

  2. Diurutkan set ukuran tetap di Redis?

  3. Berikan file ke Pekerjaan Aktif / pekerjaan latar belakang

  4. Redis / Dapatkan semua kunci &nilai dari redis dengan awalan

  5. Sambungan WebSocket ke <URL> gagal:Kesalahan selama jabat tangan WebSocket:Kode respons tak terduga:521