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

SendGrid untuk PHP lambat. Apakah permintaan non-pemblokiran mungkin?

Untuk menjawab bagian pertama dari pertanyaan Anda:Ya, Anda dapat membuat permintaan asinkron dengan PHP , dan bahkan mengabaikan respons layanan. Namun, seperti yang Anda katakan dengan benar, itu bukan solusi yang sangat bagus.

Permintaan Asinkron

Pos blog luar biasa ini tentang Permintaan Asinkron PHP oleh Segment.io sampai pada beberapa kesimpulan:

  • Anda dapat membuka soket dan menulis ke soket tersebut , seperti yang dijelaskan oleh Topik Stack Overflow ini - Namun, tampaknya ini benar-benar memblokir dan cukup lambat (300 md dalam pengujian mereka).
  • Anda dapat menulis ke file log lalu memprosesnya dengan cara lain (pada dasarnya antrian, seperti yang Anda jelaskan) - Namun, ini memerlukan proses lain untuk membaca log dan memprosesnya. Menggunakan sistem file dapat menjadi lambat, dan file yang dibagikan dapat menyebabkan berbagai masalah.
  • Anda dapat membayar permintaan cURL - Namun, ini berarti Anda tidak menunggu tanggapan, jadi jika SendGrid (atau layanan lain) merespons dengan kesalahan, Anda tidak dapat menangkapnya dan bereaksi.

Tanah Opini

Kami sekarang memasuki ranah semi-opini , tetapi antrian seperti yang Anda gambarkan (seperti yang mySQL dengan tugas cron, atau file teks, atau sesuatu yang lain) cenderung sangat terukur karena Anda dapat melemparkan pekerja ke antrian jika Anda membutuhkannya untuk memproses lebih cepat. Ini dapat berada di luar sistem yang dihadapi pengguna Anda (dan karenanya tidak membagikan sumber daya).

Antrian

Dengan antrean, Anda akan memiliki layanan yang terpisah yang akan bertanggung jawab untuk mengirim email dengan SendGrid (mis.). Itu akan menarik tugas dari antrian (misalnya "mengirim email ke Nick") dan kemudian mengeksekusinya.

Ada beberapa cara untuk mengimplementasikan antrean yang dapat Anda proses.

  • Anda dapat menulis sendiri - Karena Anda tampaknya ingin tetap menggunakan PHP/mySQL, jika Anda melakukan ini, Anda harus mempertimbangkan banyak masalah antrian dan kasus tepi yang aneh. Namun, Anda akan memiliki kendali mutlak dan untuk aplikasi sederhana mungkin ini akan berhasil.
  • Anda dapat menerapkan antrean tugas yang dihosting sendiri - Seledri dimaksudkan sebagai antrean tugas terdistribusi, øMQ (ZeroMQ) dan RabbitMQ juga dapat digunakan sebagai Antrian Tugas. Ini dimaksudkan untuk menjadi cepat dan didistribusikan dan memiliki banyak pemikiran yang dimasukkan ke dalamnya. Anda perlu membandingkannya di sistem Anda untuk melihat apakah mereka mempercepatnya. Itu juga berarti Anda harus meng-host potongan tambahan sendiri. Namun, ini kemungkinan akan menjadi solusi tercepat dari sudut pandang komunikasi.
  • Anda dapat meneruskan sesuatu ke antrean tugas yang dihosting - IronMQ dan Amazon SQS keduanya merupakan solusi host keren yang berarti Anda tidak perlu mendedikasikan sumber daya untuk mereka, selain itu dengan IronWorkers (mis.) Anda dapat meminta layanan lain diurus. Namun, karena Anda mencoba mengoptimalkan permintaan ke layanan eksternal, ini mungkin bukan solusi dalam skenario ini.

Antri Email

Pada topik antrian email (khususnya), ini adalah sesuatu yang umum untuk pengirim email. Seperti yang lainnya, ini berarti Anda dapat memiliki keandalan yang lebih baik (karena jika suatu layanan gagal, Anda dapat menyimpannya dalam antrean dan mencoba lagi).

Namun dengan email, ada beberapa layanan khusus di luar sana untuk mengantri pesan. Ini adalah Server SMTP. Secara teoritis Anda dapat mengatur server seperti sendmail lalu setel SendGrid sebagai "smarthost" Anda atau estafet dan minta server mengirim ke SendGrid. Kemudian mengantri dan menangani gangguan layanan dan mengirim email dengan sedikit kode tambahan. Namun , server SMTP sulit untuk ditangani, meskipun hanya meneruskan pesan. Selain itu, SMTP bahkan lebih lambat daripada HTTP untuk membuat sambungan dan karena itu mungkin bukan yang Anda inginkan, tetapi ada baiknya untuk diketahui.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nilai kolom konstan di tabel MySQL

  2. Kesalahan sintaks karena menggunakan kata yang dicadangkan sebagai nama tabel atau kolom di MySQL

  3. kesalahan (objek 'datetime.datetime' tidak memiliki atribut 'split') di Django 1.11.4

  4. MySQL INSERT ... PADA DUPLICATE KEY UPDATE di Java:Cara Membedakan status Disisipkan/Diperbarui/NoChange

  5. Perbarui dan pilih dalam satu kueri