Saya sibuk menulis aplikasi Python menggunakan ZeroMQ dan mengimplementasikan variasi pola Majordomo seperti yang dijelaskan dalam ZGuide .
Saya memiliki broker sebagai perantara antara serangkaian pekerja dan klien. Saya ingin melakukan logging yang luas untuk setiap permintaan yang masuk, tetapi saya tidak ingin broker membuang waktu untuk melakukan itu. Pialang harus meneruskan permintaan penebangan itu ke hal lain.
Saya telah memikirkan dua cara: -
- Buat pekerja yang hanya untuk logging dan gunakan transportasi ZeroMQ IPC
- Gunakan Multiprocessing dengan Antrian
Saya tidak yakin mana yang lebih baik atau lebih cepat dalam hal ini. Opsi pertama memungkinkan saya untuk menggunakan kelas basis pekerja saat ini yang sudah saya gunakan untuk pekerja normal, tetapi opsi kedua tampaknya lebih cepat untuk diterapkan.
Saya ingin saran atau komentar di atas atau mungkin solusi yang berbeda.
sumber
Anda mungkin ingin mempertimbangkan kemungkinan ketiga untuk menerapkan logging jarak jauh. Jika Anda menggunakan modul pendataan Python standar, Anda dapat mempertimbangkan untuk menggunakan
logging.QueueHandler
kelas di pekerja Anda, klien dan broker, danlogging.QueueListener
kelas dalam proses logging jarak jauh Anda.Alih-alih menggunakan Python normal
multiprocessing.Queue
sebagai transportasi antara proses aplikasi Anda dan proses logging Anda, terapkanQueue
kelas pengganti Anda sendiri menggunakan ZeroMQ dengan mengetik bebek untuk membuat kelas Anda menjadi pengganti drop-in untuk Python standarQueue
. Dengan cara ini aplikasi Anda akan dapat berjalan tanpa diubah di lingkungan apa pun dari satu komputer multi-inti melalui pusat data terdistribusi.Untuk meringkas, gunakan logger Python standar dengan
QueueHandler
semua pekerja, klien dan broker Anda dan buat proses independen berdasarkanQueueListener
danlogging
pawang Python (s) pilihan Anda untuk menangani pengangkatan logging yang berat.sumber
Ini adalah pendekatan yang sangat berbeda, masing-masing dengan serangkaian pro dan kontra, yang kemungkinan besar akan Anda lihat pada tahap pengembangan selanjutnya:
Salah satu cara Anda dapat mencoba adalah memiliki pekerja penebangan tambahan, seperti dalam pendekatan 1. Anda dapat membiarkan pekerja Anda login ke cluster logging memcache, dan pekerja logging memantau beban sumber daya saat ini dan setelah menentukan parameter beban sumber daya yang diberikan, log pekerja ke perangkat terbatas IOP (mis. harddisk).
Saya juga menyukai pendekatan Jonathan dengan peringatan bahwa saya kebanyakan menggunakan Python 2.x, dan bahwa Anda mungkin harus mengatur backend logging Anda sendiri untuk benar-benar mendorong kinerja-amplop.
Perbaiki saya jika saya salah, tetapi pendapat saya adalah Anda melakukan tugas yang sangat intensif data, dengan TIO penyimpanan menjadi hambatan Anda.
Cara yang masih mudah adalah membiarkan broker melakukan
brokerage
logging - dalam bentuk seperti yang dijelaskan - dengan semua kelemahan instance broker sentral. Sebagai contoh, jika broker memiliki permintaan tinggi sehingga tidak pernah mendapatkan ruang bernapas untuk menulis log memcached kembali ke penyimpanan, Anda perlu mengambil pendekatan lain.Pada akhirnya Anda mungkin berakhir dengan model tanpa perantara. Itu adalah dengan pekerja mengelola pekerjaan mereka di antara mereka sendiri. Dalam contoh sederhana, melalui algoritma round-robin Terdistribusi .
sumber