Mysql
 sql >> база данни >  >> RDS >> Mysql

SendGrid за PHP е бавен. Възможни ли са заявки без блокиране?

За да отговоря на първата част от въпроса ви:Да, можете да правите асинхронни заявки с PHP , и дори игнорирайте отговора на услугата. Въпреки това, както правилно казвате, това не е супер страхотно решение.

Асинхронни заявки

Тази отлична публикация в блога за PHP Asynchronous Requests от Segment.io стига до няколко заключения:

  • Можете да отворите сокет и да пишете в него , както е описано от тази тема за препълване на стека - Изглежда обаче, че това всъщност блокира и е доста бавно (300 ms в техните тестове).
  • Можете да запишете в регистрационен файл и след това да го обработите по друг начин (по същество опашка, както описвате) - Това обаче изисква друг процес за четене на дневника и обработката му. Използването на файловата система може да е бавно и споделените файлове могат да причинят всякакви проблеми.
  • Можете да разклоните cURL заявка - Това обаче означава, че не чакате отговор, така че ако SendGrid (или друга услуга) отговори с грешка, не можете да я хванете и да реагирате.

Земя на мненията

Сега навлизаме в страната на полумненията , но опашките, както описвате (като mySQL с cron задание, или текстов файл, или нещо друго) са склонни да бъдат много мащабируеми, тъй като можете да хвърлите работници на опашката, ако имате нужда да обработва по-бързо. Те могат да бъдат извън вашата потребителска система (и следователно да не споделят ресурси).

Опашки

С опашка ще имате отделна услуга който ще отговаря за изпращането на имейл със SendGrid (напр.). Ще изтегли задачи от опашката (напр. „изпрати имейл до Ник“) и след това ще ги изпълни.

Има няколко начина за внедряване на опашки, които можете да обработвате.

  • Можете да напишете свой собствен - Тъй като изглежда искате да останете на PHP/mySQL, ако направите това, ще трябва да вземете под внимание куп проблеми с опашката и странни крайни случаи. Вие обаче ще имате абсолютен контрол и за просто приложение може би това ще проработи.
  • Можете да приложите самостоятелно хоствана опашка със задачи - Целина е предназначен да бъде разпределена опашка със задачи, øMQ (ZeroMQ) и RabbitMQ могат да се използват и като опашки със задачи. Те са предназначени да бъдат бързи и разпространени и са вложени много мисли в тях. Трябва да ги сравните във вашата система, за да видите дали я ускоряват. Това също би означавало, че трябва сами да хоствате допълнителни парчета. Това обаче вероятно ще бъде най-бързото решение от комуникационна гледна точка.
  • Можете да предавате неща на хоствана опашка със задачи - IronMQ и Amazon SQS и двете са страхотни хоствани решения, което означава, че няма да е необходимо да отделяте ресурси за тях, освен това с IronWorkers (напр.) бихте могли да поемете другата услуга. Тъй като обаче се опитвате да оптимизирате заявка към външна услуга, това вероятно не е решението в този сценарий.

Имейли на опашка

По темата за изпращането на имейли в опашка (по-специално), това е нещо обичайно за изпращачите на имейли. Както при всичко останало, това означава, че можете да имате по-добра надеждност (защото ако дадена услуга се провали, можете да я задържите на опашката и да опитате отново).

С имейл обаче има някои специфични услуги за подреждане на съобщения в опашка. Това са SMTP сървъри. Теоретично можете да настроите сървър като sendmail и след това задайте SendGrid като ваш "smarthost" или препредайте и накарайте сървъра да изпрати до SendGrid. След това се нарежда на опашка и се занимава с прекъсвания на услугата и изпраща поща с малко допълнителен код. Въпреки това , SMTP сървърите са трудни за работа, дори ако те просто препращат съобщения. Освен това SMTP е дори по-бавен от HTTP за установяване на връзка и следователно вероятно не е това, което искате, но е добре да знаете.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL актуализация при актуализация на дублиран ключ

  2. Можете ли да поставите заместители в избрана част от заявка, използвайки PDO?

  3. Как да използвате GROUP_CONCAT в CONCAT в MySQL

  4. Балансиране на натоварването, съобразено с базата данни:Как да мигрираме от HAProxy към ProxySQL

  5. Данните са съкратени за колона „profile_pic“ на ред 1 в mysql