Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Penguraian email dan arsitektur pemrosesan

Seperti banyak pertanyaan arsitektur "gambaran besar", solusi terbaik adalah salah satunya ... itu tergantung. Bisakah Anda mengontrol lingkungan penerapan? Yaitu... dapatkah Anda menggunakan server email apa pun yang Anda inginkan, atau apakah Anda dibatasi untuk menggunakan server yang sudah diinstal dan dihosting? Bisakah Anda menjalankan kode pada mesin yang sama dengan layanan SMTP? Pertanyaan-pertanyaan ini, dan banyak pertanyaan lainnya harus dipertimbangkan untuk menghasilkan arsitektur yang (hampir) optimal.

Karena itu, saya akan membuat beberapa asumsi dan menawarkan beberapa ide yang menurut saya layak untuk ditelusuri...

Anda harus melihat ke dalam sistem pesan berkinerja tinggi. Secara khusus, lihat RabbitMQ . RabbitMQ dapat diandalkan dan efisien, dan distribusi beban kerja berdasarkan peristiwa masuk yang tidak sinkron adalah pola yang secara khusus mereka diskusikan dalam tutorial mereka (menurut saya, sangat bagus).

Dengan server pesan seperti ini, Anda memiliki satu proses yang menerima email masuk. Sebaiknya ini dilakukan sebagai bagian dari proses SMTP, atau setidaknya sangat dekat dengannya - terutama dengan beban kerja yang telah Anda sebutkan. Jika Anda tidak punya pilihan lain, maka ide Anda tentang menggunakan cron untuk mengumpulkan pesan melalui POP atau IMAP harus berhasil, untuk saat ini.

Proses pengumpulan email kemudian akan mendorong pesan ke antrian RabbitMQ. (Mungkin tidak secara harfiah email itu sendiri, meskipun itu kemungkinan, tapi saya berpikir lebih seperti referensi ke mana email disimpan secara efisien). Anda kemudian menjalankan beberapa proses pekerja yang berlangganan antrian pesan bernama. RabbitMQ (atau layanan perpesanan apa pun yang Anda putuskan) kemudian akan mendistribusikan pesan-pesan itu dalam mode round-robin ke pelanggan individu. Jika sudah dimuat, proses pekerja dapat NACK pesan, atau mengirim pesan aliran kontrol mereka sendiri kembali ke layanan. Dengan beban kerja yang SANGAT tinggi (sekali lagi, seperti yang Anda usulkan), saya sangat merekomendasikan beberapa jenis proses manajemen yang mengawasi kesehatan keseluruhan sistem terdistribusi. Manajer akan mengumpulkan statistik waktu berjalan (SANGAT berguna untuk perencanaan pertumbuhan di masa depan, pengoptimalan, dan pemfaktoran ulang sistem secara keseluruhan), dan memiliki kemampuan untuk memutar dan mematikan proses pekerja baru. Sebelum Anda mencapai beban kerja yang sangat tinggi itu, dan dengan asumsi bahwa proses pekerja Anda stabil dan dapat bertahan lama tanpa fragmentasi memori, dll., maka cukup menggunakan server pesan untuk mendistribusikan pekerjaan saja sudah cukup.

Untuk apa nilainya, saya memiliki beberapa pengalaman dalam menulis prosesor email (khususnya xmail - salah satu yang saya sarankan jika Anda baru memulai proyek Anda dan memiliki banyak kendali atas tahap awalnya). Selain itu, saat ini saya menggunakan RabbitMQ untuk membangun sistem cache hasil multi-agen untuk jaringan komputasi ilmiah utama.

Pokoknya... semoga berhasil dengan proyek Anda!




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tanda Euro tidak muncul di situs

  2. Cara Memeriksa Ukuran Semua Tabel dalam Database di MySQL

  3. Apakah aneh bahwa koneksi SQLAlchemy MySQL saya selalu berakhir tidur?

  4. Cara Mengatur Kumpulan Karakter dan Susunan Basis Data di MySQL

  5. MYSQL pilih teman bersama