{"id":53530,"date":"2019-12-04T00:00:00","date_gmt":"2019-12-03T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/uskoryaem-php-konnektory-dlya-tarantool-s-pomoshhyu-async-swoole-i-parallel"},"modified":"2020-02-18T14:01:26","modified_gmt":"2020-02-18T11:01:26","slug":"uskoryaem-php-konnektory-dlya-tarantool-s-pomoshhyu-async-swoole-i-parallel","status":"publish","type":"post","link":"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/uskoryaem-php-konnektory-dlya-tarantool-s-pomoshhyu-async-swoole-i-parallel","title":{"rendered":"We versnellen PHP-connectoren voor Tarantool met Async, Swoole en Parallel","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"We versnellen PHP-connectoren voor Tarantool met Async, Swoole en Parallel\" src=\"\/wp-content\/uploads\/2019\/12\/a4bfc8a3f7f7de0298623b1bf9dcfc54.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIn het PHP-ecosysteem zijn er momenteel twee connectors beschikbaar voor het werken met de Tarantool-server: de offici\u00eble PECL-extensie <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/tarantool\/tarantool-php\">tarantool\/tarantool-php<\/a><\/noindex>, geschreven in C, en <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/tarantool-php\/client\">tarantool-php\/client<\/a><\/noindex>, geschreven in PHP. Ik ben de auteur van de laatste.<\/p>\n<p>In dit artikel wil ik de resultaten delen van de prestatie-testen van beide bibliotheken en laten zien hoe je met minimale codewijzigingen een prestatieverbetering van 3-5% kunt bereiken (<i>bij synthetische tests!<\/i>).<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Wat gaan we testen?<\/h2>\n<p>\nWe gaan de hierboven genoemde <i>synchrone<\/i> connectors testen, uitgevoerd asynchroon, parallel en asynchroon-parallel. \ud83d\ude42 Ook willen we de code van de connectors zelf niet aanpassen. Op dit moment zijn er verschillende extensies beschikbaar die het gewenste resultaat kunnen leveren:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/swoole\/swoole-src\">Swoole<\/a><\/noindex> \u2015 een hoogwaardige asynchrone framework voor PHP. Het wordt gebruikt door internetgiganten zoals Alibaba en Baidu. Sinds versie 4.1.0 is er een magische methode toegevoegd, <i>SwooleRuntime::enableCoroutine()<\/i>, waarmee \"met \u00e9\u00e9n regel code synchrone netwerken PHP-bibliotheken in asynchrone kunnen worden omgezet.\"\n<\/li>\n<li>Async \u2015 tot voor kort een veelbelovende extensie voor asynchrone werking in PHP. Waarom tot voor kort? Helaas heeft de auteur om mij onbekende redenen de repository verwijderd en is de toekomst van het project onzeker. We zullen gebruik moeten maken van <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/dreamsxin\/ext-async\">\u00e9\u00e9n<\/a><\/noindex> uit de forks. Net als Swoole maakt deze extensie het mogelijk om met een eenvoudige handbeweging de broek om te zetten in asynchroniteit door de standaardimplementatie van TCP en TLS-stromen te vervangen door hun asynchrone versies. Dit gebeurt via de optie &#171;<i>async.tcp = 1<\/i>&#171;.\n<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/krakjoe\/parallel\">Parallel<\/a><\/noindex> \u2015 een vrij nieuwe extensie van de bekende Joe Watkins, de auteur van bibliotheken zoals phpdbg, apcu, pthreads, pcov, uopz. Deze extensie biedt een API voor multithreading in PHP en wordt gepositioneerd als een vervanging voor pthreads. Een belangrijk nadeel van de bibliotheek is dat deze alleen werkt met de ZTS (Zend Thread Safe) versie van PHP.\n<\/li>\n<\/ul>\n<p><\/p>\n<h2>Hoe gaan we testen?<\/h2>\n<p>\nLaten we een instantie van Tarantool starten met het logboek van anticiperende schrijvers uitgeschakeld (<i>wal_mode = none<\/i>) en een vergroot netwerkbuffer (<i>readahead = 1 * 1024 * 1024<\/i>). De eerste optie sluit schijfactiviteit uit, de tweede geeft de mogelijkheid om meer verzoeken uit de buffer van het besturingssysteem te lezen en vermindert daarmee het aantal systeemaanroepen.<\/p>\n<p>Voor benchmarks die met gegevens werken (invoegen, verwijderen, lezen, enz.) zal v\u00f3\u00f3r de start van de benchmark een memtx-ruimte worden (her)gecre\u00eberd, waarin de waarden van de primaire index worden gegenereerd door een generator van geordende gehele getallen (sequence).<br \/>\nDDL van de ruimte ziet er als volgt uit:<\/p>\n<pre><code class=\"lua\">space = box.schema.space.create(config.space_name, {id = config.space_id, temporary = true})\nspace:create_index('primary', {type = 'tree', parts = {1, 'unsigned'}, sequence = true})\nspace:format({{name = 'id', type = 'unsigned'}, {name = 'name', type = 'string', is_nullable = false}})<\/code><\/pre>\n<p>\nDesgewenst, v\u00f3\u00f3r de uitvoering van de benchmark, wordt de ruimte gevuld met 10.000 tuple's van de vorm<\/p>\n<pre><code class=\"lua\">{id, \"tuple_\"}<\/code><\/pre>\n<p>\nToegang tot de tuple's is mogelijk via een willekeurige sleutelwaarde.<\/p>\n<p>De benchmark zelf bestaat uit een enkele aanvraag aan de server die 10.000 keer (revoluties) wordt uitgevoerd, die op hun beurt in iteraties worden uitgevoerd. De iteraties worden herhaald totdat alle afwijkingen in de tijd tussen 5 iteraties binnen de toegestane foutmarge van 3% vallen. Daarna wordt het gemiddelde resultaat genomen. Tussen de iteraties is er een pauze van 1 seconde om te voorkomen dat de processor in throttling gaat. De Lua-garbage collector wordt v\u00f3\u00f3r elke iteratie uitgeschakeld en gedwongen gestart na de voltooiing ervan. Het PHP-proces wordt alleen gestart met de voor de benchmark benodigde extensies, met ingeschakelde uitvoerbuffer en uitgeschakelde garbage collector.<\/p>\n<p><i>* Het aantal revoluties, iteraties en de foutdrempel kan worden aangepast in de benchmarkinstellingen.<\/i><\/p>\n<h2>Testomgeving<\/h2>\n<p>\nDe hieronder gepubliceerde resultaten zijn gemaakt op een MacBookPro (2015), besturingssysteem \u2014 Fedora 30 (kernelversie 5.3.8-200.fc30.x86_64). Tarantool werd in Docker uitgevoerd met de parameter &#171;<code>--network host\"<\/code>.<\/p>\n<p>Versies van de pakketten:<\/p>\n<p>Tarantool: 2.3.0-115-g5ba5ed37e<br \/>\nDocker: 19.03.3, build a872fc2f86<br \/>\nPHP: 7.3.11 (cli) (gebouwd: 22 okt 2019 08:11:04)<br \/>\ntarantool\/client: 0.6.0<br \/>\nrybakit\/msgpack: 0.6.1<br \/>\next-tarantool: 0.3.2 (+ patch voor 7.3)*<br \/>\next-msgpack: 2.0.3<br \/>\next-async: 0.3.0-8c1da46<br \/>\next-swoole: 4.4.12<br \/>\next-parallel: 1.1.3<\/p>\n<p>* <i>Helaas werkt de offici\u00eble connector niet met PHP-versie &gt; 7.2. Om de extensie te compileren en uit te voeren op PHP 7.3 moest ik gebruikmaken van <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/tarantool\/tarantool-php\/pull\/148\/files\">patch<\/a><\/noindex>.<\/i><\/p>\n<h2>Resultaten<\/h2>\n<p><\/p>\n<h4>Synchrone modus<\/h4>\n<p>\nHet protocol van Tarantool gebruikt een binair formaat <noindex><a rel=\"nofollow\" href=\"https:\/\/msgpack.org\/\">MessagePack<\/a><\/noindex> voor het serialiseren van berichten. In de PECL-connector is serialisatie diep verborgen in de fundamenten van de bibliotheek en heeft geen invloed op het coderingsproces vanuit userland-code <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/tarantool\/tarantool-php\/issues\/89\">niet mogelijk.<\/a><\/noindex>. De connector in schone PHP biedt daarentegen de mogelijkheid om het coderingproces aan te passen door het standaardcoderingstype uit te breiden of een eigen implementatie te gebruiken. Er zijn standaard twee coderingstypes beschikbaar, de ene is gebaseerd op <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/msgpack\/msgpack-php\/\">msgpack\/msgpack-php<\/a><\/noindex> (offici\u00eble MessagePack PECL-extensie), de andere is gebaseerd op <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/rybakit\/msgpack.php\">rybakit\/msgpack<\/a><\/noindex> (in schone PHP).<\/p>\n<p>Voordat we de connectors vergelijken, laten we de prestaties van de MessagePack-coders voor de PHP-connector meten, en in de verdere tests zullen we die gebruiken die het beste resultaat oplevert:<\/p>\n<p><img decoding=\"async\" alt=\"We versnellen PHP-connectoren voor Tarantool met Async, Swoole en Parallel\" src=\"\/wp-content\/uploads\/2019\/12\/a293ec51cb8bf18cb88df2dc276142c4.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nHoewel de PHP-versie (Pure) in snelheid inferieur is aan de PECL-extensie, zou ik in praktische projecten toch aanbevelen om juist <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/rybakit\/msgpack.php\">rybakit\/msgpack<\/a><\/noindex>, omdat in de offici\u00eble MessagePack-extensie de specificatie van het formaat slechts gedeeltelijk is ge\u00efmplementeerd (bijvoorbeeld, er is geen ondersteuning voor aangepaste datatypes, zonder welke je de Decimal - een nieuw datatype ge\u00efntroduceerd in Tarantool 2.3 - niet kunt gebruiken) en een aantal andere <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/msgpack\/msgpack-php\/issues\">problemen<\/a><\/noindex> (waaronder compatibiliteitsproblemen met PHP 7.4). En over het algemeen lijkt het project verlaten.<\/p>\n<p>Laten we dus de prestaties van de connectors in synchrone modus meten:<\/p>\n<p><img decoding=\"async\" alt=\"We versnellen PHP-connectoren voor Tarantool met Async, Swoole en Parallel\" src=\"\/wp-content\/uploads\/2019\/12\/d8c5765956c62b927014ec4f26547820.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nZoals te zien is in de grafiek, biedt de PECL-connector (Tarantool) betere prestaties in vergelijking met de PHP-connector (Client). Maar dat is ook niet verwonderlijk, rekening houdend met het feit dat de laatstgenoemde naast het feit dat deze is ge\u00efmplementeerd in een langzamere taal, in wezen meer werk verricht: bij elke oproep wordt er een nieuw object aangemaakt <i>Request<\/i> en <i>Response<\/i> (in het geval van Select - ook nog eens <i>Criteria<\/i>, en in het geval van Update\/Upsert - <i>Operations<\/i>), aparte entiteiten <i>Verbinden<\/i>, <i>Packer <\/i>en <i>Handler<\/i> voegen ook overhead toe. Het is duidelijk dat we moeten betalen voor flexibiliteit. Desalniettemin toont de PHP-interpreter over het geheel genomen goede prestaties, hoewel er een verschil is, dit is minimaal en zal mogelijk nog kleiner zijn met het gebruik van preloading in PHP 7.4, om nog maar te zwijgen over JIT in PHP 8.<\/p>\n<p>Laten we verder gaan. In Tarantool 2.0 werd SQL-ondersteuning ge\u00efntroduceerd. Laten we proberen de operaties Select, Insert, Update en Delete uit te voeren met behulp van het SQL-protocol en de resultaten vergelijken met de noSQL (binaire) equivalenten:<\/p>\n<p><img decoding=\"async\" alt=\"We versnellen PHP-connectoren voor Tarantool met Async, Swoole en Parallel\" src=\"\/wp-content\/uploads\/2019\/12\/cbc61697d9670dc7384c25de3c63c8d5.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nDe SQL-resultaten zijn niet bijzonder indrukwekkend (ik herinner eraan dat we nog steeds de synchrone modus testen). Maar ik zou me daar eerder niet te druk over maken, de ondersteuning van SQL is nog steeds actief in ontwikkeling (relatief recent is bijvoorbeeld de ondersteuning voor <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/tarantool\/tarantool\/commit\/ff2091e09b5a7e9b7aa3f3e996dc7a06189889f3\">prepared statements<\/a><\/noindex>) toegevoegd, en gezien de lijst <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/tarantool\/tarantool\/issues?q=is%3Aissue+is%3Aopen+sql+label%3Aperformance\">issues<\/a><\/noindex>, staat de SQL-engine nog een aantal optimalisaties te wachten.<\/p>\n<h4>Asynchroon<\/h4>\n<p>\nLaten we nu eens kijken hoe de Async-extensie ons kan helpen om de bovenstaande resultaten te verbeteren. Voor het schrijven van asynchrone programma's biedt de extensie een API op basis van coroutines, die we zullen gebruiken. Door experimenteel vast te stellen, komen we erachter dat het optimale aantal coroutines voor onze omgeving gelijk is aan 25:<\/p>\n<p><img decoding=\"async\" alt=\"We versnellen PHP-connectoren voor Tarantool met Async, Swoole en Parallel\" src=\"\/wp-content\/uploads\/2019\/12\/4ceefef522b3bd91db7327c609ddda09.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nWe 'verdeling' 10.000 operaties over 25 coroutines en kijken wat we hebben gekregen:<\/p>\n<p><img decoding=\"async\" alt=\"We versnellen PHP-connectoren voor Tarantool met Async, Swoole en Parallel\" src=\"\/wp-content\/uploads\/2019\/12\/916e461dfa5d1be08317e3703c267afe.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nHet aantal operaties per seconde is meer dan verdrievoudigd voor <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/tarantool-php\/client\">tarantool-php\/client<\/a><\/noindex>!<\/p>\n<p>Helaas, de PECL-connector startte niet met ext-async.<\/p>\n<p>En SQL?<\/p>\n<p><img decoding=\"async\" alt=\"We versnellen PHP-connectoren voor Tarantool met Async, Swoole en Parallel\" src=\"\/wp-content\/uploads\/2019\/12\/39a0da214b893a217d9ae4eae23c4168.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nZoals je ziet, is het verschil tussen het binaire protocol en SQL in asynchrone modus binnen de foutmarge gekomen.<\/p>\n<h4>Swoole<\/h4>\n<p>\nLaten we opnieuw het optimale aantal coroutines vaststellen, dit keer voor Swoole:<br \/>\n<img decoding=\"async\" alt=\"We versnellen PHP-connectoren voor Tarantool met Async, Swoole en Parallel\" src=\"\/wp-content\/uploads\/2019\/12\/70d5bb26b91b7459e2f0b80a3fab7e06.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nWe blijven bij 25. We herhalen dezelfde truc als met de Async-extensie - we verdelen 10.000 operaties over 25 coroutines. Bovendien voegen we een test toe waarbij we al het werk verdelen over 2 processen (dat wil zeggen, elk proces zal 5.000 operaties uitvoeren in 25 coroutines). Processen worden aangemaakt met behulp van <i>SwooleProcess<\/i>. <\/p>\n<p>Resultaten:<\/p>\n<p><img decoding=\"async\" alt=\"We versnellen PHP-connectoren voor Tarantool met Async, Swoole en Parallel\" src=\"\/wp-content\/uploads\/2019\/12\/55f55d2661aa43ca3b6641abfff078a6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nSwole laat een iets lager resultaat zien in vergelijking met Async wanneer uitgevoerd in \u00e9\u00e9n proces, maar met 2 processen verandert het beeld dramatisch (het nummer 2 is niet toevallig gekozen, op mijn machine lieten juist 2 processen het beste resultaat zien).<\/p>\n<p><i>Overigens, de Async-extensie heeft ook een API voor het werken met processen, maar daar heb ik geen verschil opgemerkt tussen het uitvoeren van benchmarks in \u00e9\u00e9n of meerdere processen (het is mogelijk dat ik ergens een fout heb gemaakt).<\/i><\/p>\n<p>SQL vs binaire protocol:<\/p>\n<p><img decoding=\"async\" alt=\"We versnellen PHP-connectoren voor Tarantool met Async, Swoole en Parallel\" src=\"\/wp-content\/uploads\/2019\/12\/dfa56be01ebba25edbec492838112778.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nNet als bij Async, wordt het verschil tussen binaire en SQL-operaties in de asynchrone modus opgeheven.<\/p>\n<h4>Parallel<\/h4>\n<p>\nAangezien de Parallel-extensie niet over coroutines gaat, maar over threads, meten we het optimale aantal parallelle threads:<\/p>\n<p><img decoding=\"async\" alt=\"We versnellen PHP-connectoren voor Tarantool met Async, Swoole en Parallel\" src=\"\/wp-content\/uploads\/2019\/12\/acc6796d5731b0402ad6323e0f5bf38f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nHet is gelijk aan 16 op mijn machine. Laten we de benchmarks van de connectors uitvoeren op 16 parallelle threads:<\/p>\n<p><img decoding=\"async\" alt=\"We versnellen PHP-connectoren voor Tarantool met Async, Swoole en Parallel\" src=\"\/wp-content\/uploads\/2019\/12\/03210b70f15e445fdd311a17c1034290.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nZoals je ziet, is het resultaat zelfs beter dan met de asynchrone extensies (behalve Swoole die op 2 processen draait). Merk op dat er voor de PECL-connector op de Update en Upsert-operaties niets is ingevuld. Dit heeft te maken met het feit dat deze operaties met een fout zijn be\u00ebindigd - ik weet niet of het de schuld van ext-parallel, ext-tarantool of beide is.<\/p>\n<p>Laten we nu de prestaties van SQL vergelijken:<\/p>\n<p><img decoding=\"async\" alt=\"We versnellen PHP-connectoren voor Tarantool met Async, Swoole en Parallel\" src=\"\/wp-content\/uploads\/2019\/12\/4be3025b424ad6485dc96968ce224bf5.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nZie je de overeenkomst met de grafiek voor de connectors die synchroon zijn uitgevoerd?<\/p>\n<h4>Alles samen<\/h4>\n<p>\nEn tot slot, laten we alle resultaten samenvoegen in \u00e9\u00e9n grafiek om een algemeen beeld te krijgen van de geteste extensies. We voegen slechts \u00e9\u00e9n nieuwe test toe die we nog niet hebben gedaan - we zullen Async coroutines parallel uitvoeren met behulp van Parallel*. Het idee om de bovengenoemde extensies te integreren is reeds <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/krakjoe\/parallel\/issues\/25\">besproken<\/a><\/noindex> door de auteurs, maar er is geen consensus bereikt, dus zullen we het zelf moeten doen. <\/p>\n<p><i>* Het is niet gelukt om Swoole coroutines met Parallel uit te voeren; het lijkt erop dat deze extensies niet compatibel zijn.<\/i><\/p>\n<p>Dus, de finale resultaten:<\/p>\n<p><img decoding=\"async\" alt=\"We versnellen PHP-connectoren voor Tarantool met Async, Swoole en Parallel\" src=\"\/wp-content\/uploads\/2019\/12\/85478d9dd5d8bd166f4aa91963c1af95.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h2>Ter afsluiting<\/h2>\n<p>\nIk vind de resultaten behoorlijk goed, en om de een of andere reden ben ik ervan overtuigd dat dit nog niet het eindpunt is! Of dit nuttig voor u is in een echt project, is volledig aan u zelf om te bepalen. Ik kan alleen zeggen dat het voor mij een interessante experiment was, waardoor ik kon inschatten hoeveel men kan 'halen' uit een synchroon TCP-verbinding met minimale inspanning. Als u idee\u00ebn heeft om de benchmarks te verbeteren, dan zie ik graag uw pull request tegemoet. Alle code met instructies voor uitvoering en resultaten is gepubliceerd in een aparte <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/tarantool-php\/benchmarks\">de repository<\/a><\/noindex>.<br \/>\n<br \/>Bron: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/mailru\/blog\/478336\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412 \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u0435 PHP \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0434\u0432\u0430 \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u0430 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c Tarantool \u2015 \u044d\u0442\u043e \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 PECL tarantool\/tarantool-php, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0435 \u043d\u0430 \u0421, \u0438 tarantool-php\/client, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 PHP. \u042f \u044f\u0432\u043b\u044f\u044e\u0441\u044c \u0430\u0432\u0442\u043e\u0440\u043e\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c\u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043e\u0431\u0435\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c, \u043a\u0430\u043a \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 \u043a\u043e\u0434\u0435 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-53530","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412 \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u0435 PHP.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/uskoryaem-php-konnektory-dlya-tarantool-s-pomoshhyu-async-swoole-i-parallel\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"nl_NL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0423\u0441\u043a\u043e\u0440\u044f\u0435\u043c PHP-\u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u044b \u0434\u043b\u044f Tarantool \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Async, Swoole \u0438 Parallel | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412 \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u0435 PHP.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/uskoryaem-php-konnektory-dlya-tarantool-s-pomoshhyu-async-swoole-i-parallel\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-12-03T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:01:26+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Versnelling van PHP-connectoren voor Tarantool met Async, Swoole en Parallel | ProHoster","description":"In het PHP-ecosysteem.","canonical_url":"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/uskoryaem-php-konnektory-dlya-tarantool-s-pomoshhyu-async-swoole-i-parallel","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"nl_NL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0423\u0441\u043a\u043e\u0440\u044f\u0435\u043c PHP-\u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u044b \u0434\u043b\u044f Tarantool \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Async, Swoole \u0438 Parallel | ProHoster","og:description":"\u0412 \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u0435 PHP.","og:url":"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/uskoryaem-php-konnektory-dlya-tarantool-s-pomoshhyu-async-swoole-i-parallel","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-12-03T21:00:00+00:00","article:modified_time":"2020-02-18T11:01:26+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"53530","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-24 07:46:24","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 20:23:55","updated":"2026-01-24 07:46:24","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts\/53530","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/comments?post=53530"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts\/53530\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media?parent=53530"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/categories?post=53530"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/tags?post=53530"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}