Accelerans PHP connexiones ad Tarantool utens Async, Swoole et Parallel

Accelerans PHP connexiones ad Tarantool utens Async, Swoole et Parallel

In ecosystem PHP nunc sunt duo connexiones ad operandum cum servo Tarantool - haec est extensio officialis PECL tarantool/tarantool-php, scriptum in C et tarantool-php/clientscripta in PHP. Horum auctor sum.

In hoc articulo, eventus perficiendi utriusque bibliothecae probationem communicare vellem et ostendere quomodo, minimis mutationibus in codice, incrementa 3-5 perficiendi consequi possis (in synthetica probat!).

Quid temptabimus?

Probabimus, de quibus supra synchronum connexiones asynchrone, parallele et asynchrono-paralleli currentes. πŸ™‚ Nos quoque codicem ipsorum iungentium tangere noluimus. Plures extensiones hodie sunt praesto ad id quod vis consequi;

  • Swoole summus perficientur asynchronae compages PHP. Talibus interretialibus gigantibus utuntur sicut Alibaba et Baidu. Cum version 4.1.0 magicae modum apparuit SwooleRuntime :: enableCoroutine (), quod te permittit ut bibliothecas synchronas PHP retis ad asynchronas cum una codicis linea convertas.
  • Async usque nuper amplissima extensio operis asynchroni in PHP pollicebatur. Cur usque nuper? Infeliciter, causa incognita, auctor repositorium delevit et futurum incertum fatum consilii. Ut youll 'have ut illud unus de tridentes. Sicut Swoole, haec extensio permittit ut facile braccas tuas in scopulo carpi flectas ut asynchronyam efficiat, reponat vexillum exsequendum TCP et TLS fluminum cum suis versionibus asynchronis. Hoc fit per optionem "async.tcp = 1".
  • parallel satis novam extensionem a notissimo Joe Watkins, authore talium librariorum phpdbg, apcu, pthreads, pcov, uopz. Extensio API multiplicationem praebet in PHP et pro pthreads subrogando ponitur. Nota limitatio bibliothecae tantum laborat cum ZTS (Zend Thread Tutus) versione PHP.

Quomodo temptabimus?

Demus a Tarantool exempli gratia cum scribe-ante colligationem debilitatum (wal_mode = none) Ac quiddam network auctus (readahead = 1* 1024* 1024). Prima optio opus cum orbe eliminabit, secunda faciet ut plures petitiones e quiddam systematis operantis legere possit ac per hoc numerum vocat rationum minuere.

Pro benchmarks qui operantur cum notitia (insertio, deletio, lectio, etc.), antequam probationis initium, spatium memtx creatum erit, in quo valores primi indexes a generante valorum integrorum ordinatorum creantur. (sequentia).
Spatium DDL hoc simile est:

space = box.schema.space.create(config.space_name, {id = config.space_id, temporary = true})
space:create_index('primary', {type = 'tree', parts = {1, 'unsigned'}, sequence = true})
space:format({{name = 'id', type = 'unsigned'}, {name = 'name', type = 'string', is_nullable = false}})

Si opus est, ante cursus probationis spatium impletur 10,000 tuplis formae

{id, "tuplΠ΅_<id>"}

Tuples accessed utentes pretii incerti clavis.

Probatio ipsa rogatio unica est ministris, quae decem millies (revolutiones) efficitur, quae vicissim in iterationibus efficiuntur. Iterationes iterantur usque ad omne tempus deviationes inter 10,000 iterationes intra acceptabilem errorem 5%*. Post hoc medium sumitur. Secunda interposita mora inter iterationes est ne processus e suffocationibus intercludatur. Purgamentum init collector Luae ante quamlibet iterationem debilitata est et committitur cum perficit cogitur. Processus PHP solum cum extensionibus necessariis ad probationis causa mittitur, cum output buffering parato ac quisquiliarum collectore debilitata.

* Numerus revolutionum, iterationum et errorum limen mutari potest in occasus Probationis.

Test environment

Eventus infra evulgatus factus in MacBookPro (2015), systema operandi - Fedora 30 (versio nuclei 5.3.8-200.fc30.x86_64). Tarantool iactum est cum modulo in nauale "--network host".

Sarcina versiones:

Tarantool: 2.3.0-115-g5ba5ed37e
Docker: 19.03.3, aedificare a872fc2f86
PHP: 7.3.11 (cli) (aedificavit: Oct 22 2019 08:11:04)
tarantool/client: 0.6.0
rybakit/msgpack: 0.6.1
ext-tarantool: 0.3.2 (+ patch for 7.3)*
ext-msgpack: 2.0.3
ext-async: 0.3.0-8c1da46
ext-swoole: 4.4.12
ext-parallel: 1.1.3

* Infeliciter, connector officialis cum PHP versione non laborat > 7.2. Extensionem ordinare et currere in PHP 7.3, uti debebam panni rudis.

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹

Synchroni modus

Tarantool protocollo binario forma utitur MessagePack nuntiis ad serialize. In connectore PECL, serialization penitus in profundis bibliothecae absconditur et processus modum translitationis ex codice userland afficit. non videtur posse. Mundus PHP iungo, contra, facultatem praebet ut processus modum translitterandi customizet ut vexillum encoder extendendo vel exsequendo tuo utendo. Duo encoders praesto sunt ex archa, alter innititur msgpack/msgpack-php (Officialis MessagePack PECL extensio), alter on rybakit / msgpack (in pure PHP).

Priusquam connexiones comparemus, exsecutionem MessagePack encoders pro PHP connexoris metiri debebimus et in ulterioribus probationibus unum quod optimum exitum ostendit;

Accelerans PHP connexiones ad Tarantool utens Async, Swoole et Parallel
Etsi versio PHP (Pure) minor est extensione PECL in celeritate, in inceptis realibus tamen suadeo utendo ea rybakit / msgpack, quia in extenso officiali MessagePack forma specificationis tantum ex parte impletur (exempli gratia, nulla est typi notitiarum consuetudinum subsidia, sine quibus uti Decimal - nova notitia speciei Tarantool 2.3) inducta et habet. multis aliis problems (including convenientiae quaestiones cum PHP 7.4). Bene in commune deserunt spectet.

Itaque connexiones modo synchrono metiamur;

Accelerans PHP connexiones ad Tarantool utens Async, Swoole et Parallel
Ut ex graphio videri potest, iungo PECL (Tarantool) melior effectus cum iungo PHP (Client) ostendit. Sed hoc non mirum est, cum haec, praeterquam in sermone tardiore, magis operetur actu: novum obiectum creatur cum unaquaque voce. Request ΠΈ Response (in casu Selectae - etiam criteriaEt apud Update / Upsert. opera) entia Connection, Packer ΠΈ Handl addunt etiam caput. Videlicet mollities pretio venit. Attamen, generatim, interpres PHP bene gestum ostendit, quamvis intersit, levis est, fortasse etiam minus erit, cum in PHP 7.4 praelocet, nedum JIT in PHP 8 .

Transeamus in. Tarantool 2.0 subsidium SQL additum est. Conemur facere Selecta, Insert, Update et Delere operationes utentes SQL protocollo et comparare eventus cum adumbrationibus noSQL (binarii)

Accelerans PHP connexiones ad Tarantool utens Async, Swoole et Parallel
Eventus SQL non valde infigtus (me admonemus nos adhuc probare modum synchronum). Nolo tamen perturbari hoc ante tempus, auxilium SQL adhuc sub actuoso progressu (relative nuper, exempli gratia, subsidium accedebat. dictis paratus) et diiudicans per album exitusmachina SQL in futurum plures optimizationes subitura.

async

Age, nunc videamus quomodo extensio Async iuvare nos possit supra proventus meliores. Ad programmata asynchrona scribenda, extensio praebet API sub coroutinis, quibus utemur. Empirice invenimus meliorem numerum coroutinorum pro ambitu nostro 25 esse;

Accelerans PHP connexiones ad Tarantool utens Async, Swoole et Parallel
" Expande " 10,000 operationes per 25 coroutines et vide quid acciderit;

Accelerans PHP connexiones ad Tarantool utens Async, Swoole et Parallel
Numerus operationum secundorum augetur plus quam 3 temporibus pro tarantool-php/client!

Triste, iungo PECL ab ext-async non initium fecit.

Quid de SQL?

Accelerans PHP connexiones ad Tarantool utens Async, Swoole et Parallel
Ut vides, asynchrono modo differentia inter binarii protocolli et SQL intra marginem erroris facta est.

Swoole

Iterum invenimus coroutinum numerum meliorem, hoc tempus Swoole:
Accelerans PHP connexiones ad Tarantool utens Async, Swoole et Parallel
25. Repeamus eandem cautelam quam cum extensione Async - operationes 10,000 distribuere inter 25 coroutinos. Praeterea aliam probationem addemus in qua omne opus in duos processus dividemus (hoc est, singuli processus 2 operationum in 5,000 coroutinis facient). Processus utens creabitur SwooleProcess.

Proventus:

Accelerans PHP connexiones ad Tarantool utens Async, Swoole et Parallel
Swole ostendit effectum aliquantulum inferiori comparatum cum Async cum in uno processu currere, sed cum 2 processibus picturae dramatically mutat (numerus 2 casu non electus est; in machina mea, 2 processuum optimum exitum ostendit).

Obiter extensio Async etiam habet API ad operandum cum processibus, sed ibi nullam differentiam observavi a benchmarks in uno vel pluribus processibus currentibus (fieri potest ut alicubi messui).

SQL vs protocollum binarium:

Accelerans PHP connexiones ad Tarantool utens Async, Swoole et Parallel
Ut apud Async, eliminatur differentia operationum inter binarii et SQL in modo asynchrono.

parallel

Quoniam extensio parallela non est de coroutinis, sed de filis, meliorem numerum staminum parallelarum metiamur;

Accelerans PHP connexiones ad Tarantool utens Async, Swoole et Parallel
16 Est machina mea. Curramus iungo benchmarks in 16 filis parallelis:

Accelerans PHP connexiones ad Tarantool utens Async, Swoole et Parallel
Ut videre potes, effectus melior est quam extensionibus asynchronis (non computatis Swoole cursus in 2 processibus). Nota quod ad connectorem PECL, renovationem et operationes Upsert vacuas sunt. Hoc ex eo, quod hae operationes errori defecerunt - nescio an culpa fuit ext-parallelis, ext-tarantool, vel utriusque.

Nunc comparemus SQL effectum:

Accelerans PHP connexiones ad Tarantool utens Async, Swoole et Parallel
Vide similitudinem cum graphe pro connexionibus synchrone currentibus?

simul

Postremo omnes eventus in una graphe compendiemus ut altiorem imaginem pro extensionibus probatis videam. Unam tantum novam probationem ad chartulam addamus, quod adhuc non fecimus - coroutines Async in parallelis Parallel* utentes curramus. Idea integralis extensionum suprascriptorum iam est dictum est auctoribus, sed ad consensum non perventum est, te ipsum facere debebis.

* Swole coroutines cum Parallelis mittere non potuit, has extensiones videntur esse repugnantes.

Extremos igitur eventus:

Accelerans PHP connexiones ad Tarantool utens Async, Swoole et Parallel

Sed in finem

Opinor, eventus evasit satis dignus, et aliqua de causa certo scio hunc terminum non esse! Utrum opus hoc in re vera pro te solo decernere, tantum dicam mihi experimentum interesting fuisse quod permittit te aestimare quantum potes "exprimendum" ex synchrono TCP iungo minimo conatu. Si notiones habes ad benchmarks augendas, laetus ero ut petitionem tuam trahas consideres. Totum codicem cum mandatis et proventibus launch in separato divulgatum est repositoria.

Source: www.habr.com