sql >> Databáze >  >> RDS >> Mysql

SendGrid pro PHP je pomalý. Jsou možné žádosti o neblokování?

Odpověď na první část vaší otázky:Ano, pomocí PHP můžete zadávat asynchronní požadavky a dokonce ignorovat odpověď služby. Nicméně, jak správně říkáte, není to super skvělé řešení.

Asynchronní požadavky

Tento vynikající příspěvek na blogu o asynchronních požadavcích PHP od Segment.io dochází k několika závěrům:

  • Můžete otevřít soket a zapisovat do něj , jak je popsáno v tomto tématu přetečení zásobníku - Zdá se však, že to ve skutečnosti blokuje a je poměrně pomalé (300 ms v testech).
  • Můžete zapsat do souboru protokolu a poté jej zpracovat jiným způsobem (v podstatě fronta, jak popisujete) - To však vyžaduje další proces pro čtení protokolu a jeho zpracování. Používání souborového systému může být pomalé a sdílené soubory mohou způsobovat nejrůznější problémy.
  • Můžete rozdělit požadavek cURL - To však znamená, že nečekáte na odpověď, takže pokud SendGrid (nebo nějaká jiná služba) odpoví chybou, nemůžete ji zachytit a reagovat.

Opinion Land

Nyní vstupujeme do země polonázorů , ale fronty, jak popisujete (jako je mySQL s úlohou cron nebo textovým souborem nebo něčím jiným), bývají velmi škálovatelné, protože můžete do fronty hodit pracovníky, pokud potřebujete, aby to zpracovávalo rychleji. Ty mohou být mimo váš uživatelský systém (a proto nesdílejí zdroje).

Fronty

S frontou byste měli samostatnou službu která by byla zodpovědná za odeslání e-mailu pomocí SendGrid (např. Úkoly by se stahovaly z fronty (např. „poslat e-mail Nickovi“) a pak by se na nich spouštěly.

Existuje několik způsobů, jak implementovat fronty, které můžete zpracovat.

  • Můžete napsat vlastní - Jak se zdá, chcete zůstat na PHP/mySQL, pokud to uděláte, budete muset vzít v úvahu spoustu problémů s frontou a podivné okrajové případy. Budete však mít absolutní kontrolu a pro jednoduchou aplikaci to možná bude fungovat.
  • Můžete implementovat samostatně hostovanou frontu úkolůCeler má být distribuovaná fronta úloh, øMQ (ZeroMQ) a RabbitMQ lze také použít jako fronty úkolů. Ty mají být rychlé a distribuované a bylo do nich vloženo hodně přemýšlení. Budete je muset porovnat ve vašem systému, abyste zjistili, zda jej zrychlují. Znamenalo by to také, že další kousky musíte hostit sami. Toto však bude pravděpodobně nejrychlejší řešení z hlediska komunikace.
  • Můžete předat věci do hostované fronty úkolů - IronMQ a Amazon SQS obě jsou skvělá hostovaná řešení, což znamená, že byste jim nemuseli věnovat zdroje, navíc s IronWorkers (např.) můžete si nechat postarat o další službu. Jelikož se však pokoušíte optimalizovat požadavek na externí službu, pravděpodobně to v tomto scénáři není řešení.

Řazení e-mailů do fronty

Na téma řazení e-mailů do fronty (konkrétně) je to něco běžného pro odesílatele e-mailů. Stejně jako u všeho ostatního to znamená, že můžete mít lepší spolehlivost (protože pokud některá služba selže, můžete ji ponechat ve frontě a zkusit to znovu).

S e-mailem však existují některé specifické služby pro řazení zpráv do fronty. Jedná se o SMTP servery. Teoreticky můžete nastavit server jako sendmail a poté nastavte SendGrid jako svého "chytrého hostitele" nebo předat a nechat server odeslat SendGrid. Poté řadí do fronty a řeší přerušení služby a odesílá poštu s malým dodatečným kódem. Nicméně SMTP servery jsou náročné na práci, i když jen přeposílají zprávy. Navíc je SMTP při navazování připojení ještě pomalejší než HTTP, a proto pravděpodobně není to, co chcete, ale je dobré to vědět.



  1. Zobrazit tabulky v databázi SQLite v Pythonu

  2. Elastické vyhledávání fulltext vs mysql fulltext?

  3. Co znamená symbol SQL Select || znamenat?

  4. varchar(255) v tinyblob v tinytext