Async, Swoole рдЖрдгрд┐ Parallel рд╡рд╛рдкрд░реВрди Tarantool рд╕рд╛рдареА PHP рдХрдиреЗрдХреНрдЯрд░рд▓рд╛ рдЧрддреА рджреЗрдгреЗ

Async, Swoole рдЖрдгрд┐ Parallel рд╡рд╛рдкрд░реВрди Tarantool рд╕рд╛рдареА PHP рдХрдиреЗрдХреНрдЯрд░рд▓рд╛ рдЧрддреА рджреЗрдгреЗ

PHP рдЗрдХреЛрд╕рд┐рд╕реНрдЯрдордордзреНрдпреЗ рд╕рдзреНрдпрд╛ рдЯрд╛рд░рдВрдЯреВрд▓ рд╕рд░реНрд╡реНрд╣рд░рд╕рд╣ рдХрд╛рдо рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рджреЛрди рдХрдиреЗрдХреНрдЯрд░ рдЖрд╣реЗрдд - рд╣реЗ рдЕрдзрд┐рдХреГрдд рдкреАрдИрд╕реАрдПрд▓ рд╡рд┐рд╕реНрддрд╛рд░ рдЖрд╣реЗ tarantool/tarantool-php, C рдордзреНрдпреЗ рд▓рд┐рд╣рд┐рд▓реЗрд▓реЗ, рдЖрдгрд┐ tarantool-php/client, PHP рдордзреНрдпреЗ рд▓рд┐рд╣рд┐рд▓реЗрд▓реЗ. рдореА рдирдВрддрд░рдЪрд╛ рд▓реЗрдЦрдХ рдЖрд╣реЗ.

рдпрд╛ рд▓реЗрдЦрд╛рдд, рдореА рджреЛрдиреНрд╣реА рд▓рд╛рдпрдмреНрд░рд░реАрдВрдЪреНрдпрд╛ рдХрд╛рд░реНрдпрдкреНрд░рджрд░реНрд╢рди рдЪрд╛рдЪрдгреАрдЪреЗ рдкрд░рд┐рдгрд╛рдо рд╕рд╛рдорд╛рдпрд┐рдХ рдХрд░реВ рдЗрдЪреНрдЫрд┐рддреЛ рдЖрдгрд┐ рдХреЛрдбрдордзреНрдпреЗ рдХрдореАрдд рдХрдореА рдмрджрд▓ рдХрд░реВрди, рдЖрдкрдг 3-5 рдХрд╛рдордЧрд┐рд░реА рд╡рд╛рдв рдХрд╢реА рдорд┐рд│рд╡реВ рд╢рдХрддрд╛ рд╣реЗ рджрд░реНрд╢рд╡реВ рдЗрдЪреНрдЫрд┐рддреЛ (рд╕рд┐рдВрдереЗрдЯрд┐рдХ рдЪрд╛рдЪрдгреНрдпрд╛рдВрд╡рд░!).

рдЖрдореНрд╣реА рдХрд╛рдп рдЪрд╛рдЪрдгреА рдХрд░реВ?

рдЖрдореНрд╣реА рд╡рд░ рдирдореВрдж рдХреЗрд▓реЗрд▓реНрдпрд╛рдВрдЪреА рдЪрд╛рдЪрдгреА рдХрд░реВ рд╕рдордХрд╛рд▓рд┐рдХ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕, рд╕рдорд╛рдВрддрд░ рдЖрдгрд┐ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕-рд╕рдорд╛рдВрддрд░рдкрдгреЗ рдЪрд╛рд▓рдгрд╛рд░реЗ рдХрдиреЗрдХреНрдЯрд░. ЁЯЩВ рдЖрдореНрд╣реА рд╕реНрд╡рддрдГ рдХрдиреЗрдХреНрдЯрд░рдЪреНрдпрд╛ рдХреЛрдбрд▓рд╛ рджреЗрдЦреАрд▓ рд╕реНрдкрд░реНрд╢ рдХрд░реВ рдЗрдЪреНрдЫрд┐рдд рдирд╛рд╣реА. рддреБрдореНрд╣рд╛рд▓рд╛ рд╣рд╡реЗ рддреЗ рд╕рд╛рдзреНрдп рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕рдзреНрдпрд╛ рдЕрдиреЗрдХ рд╡рд┐рд╕реНрддрд╛рд░ рдЙрдкрд▓рдмреНрдз рдЖрд╣реЗрдд:

  • рд╕реНрд╡реВрд▓реЗ - PHP рд╕рд╛рдареА рдЙрдЪреНрдЪ-рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдлреНрд░реЗрдорд╡рд░реНрдХ. Alibaba рдЖрдгрд┐ Baidu рд╕рд╛рд░рдЦреНрдпрд╛ рдЗрдВрдЯрд░рдиреЗрдЯ рджрд┐рдЧреНрдЧрдЬрд╛рдВрдиреА рд╡рд╛рдкрд░рд▓реЗ. рдЖрд╡реГрддреНрддреА рек.рез.реж рдкрд╛рд╕реВрди рдПрдХ рдЬрд╛рджреВрдЪреА рдкрджреНрдзрдд рджрд┐рд╕реВрди рдЖрд▓реА SwooleRuntime::enableCoroutine(), рдЬреЗ рддреБрдореНрд╣рд╛рд▓рд╛ "рд╕рд┐рдВрдХреНрд░реЛрдирд╕ PHP рдиреЗрдЯрд╡рд░реНрдХ рд▓рд╛рдпрдмреНрд░рд░реАрдВрдирд╛ рдХреЛрдбрдЪреНрдпрд╛ рдПрдХрд╛ рдУрд│реАрд╕рд╣ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕рдордзреНрдпреЗ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЗ."
  • Async рдЕрд▓реАрдХрдбреЗ рдкрд░реНрдпрдВрдд PHP рдордзреНрдпреЗ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХрд╛рд░реНрдпрд╛рд╕рд╛рдареА рдПрдХ рдЕрддрд┐рд╢рдп рдЖрд╢рд╛рджрд╛рдпрдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╣реЛрддрд╛. рдЕрд▓реАрдХрдбреЗ рдкрд░реНрдпрдВрдд рдХрд╛? рджреБрд░реНрджреИрд╡рд╛рдиреЗ, рдорд▓рд╛ рдЕрдЬреНрдЮрд╛рдд рдХрд╛рд░рдгрд╛рд╕реНрддрд╡, рд▓реЗрдЦрдХрд╛рдиреЗ рднрд╛рдВрдбрд╛рд░ рд╣рдЯрд╡рд▓реЗ рдЖрдгрд┐ рдкреНрд░рдХрд▓реНрдкрд╛рдЪреЗ рднрд╡рд┐рд╖реНрдп рдЕрд╕реНрдкрд╖реНрдЯ рдЖрд╣реЗ. рдорд▓рд╛ рддреЗ рд╡рд╛рдкрд░рд╛рд╡реЗ рд▓рд╛рдЧреЗрд▓ рдПрдХ рдХрд╛рдЯреЗ рдкрд╛рд╕реВрди. Swoole рдкреНрд░рдорд╛рдгреЗ, рд╣рд╛ рд╡рд┐рд╕реНрддрд╛рд░ рддреБрдореНрд╣рд╛рд▓рд╛ TCP рдЖрдгрд┐ TLS рдкреНрд░рд╡рд╛рд╣рд╛рдВрдЪреА рдорд╛рдирдХ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рддреНрдпрд╛рдВрдЪреНрдпрд╛ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдЖрд╡реГрддреНрддреНрдпрд╛рдВрд╕рд╣ рдмрджрд▓реВрди рдЕрд╕рд┐рдВрдХреНрд░реЛрдиреА рд╕рдХреНрд╖рдо рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдордирдЧрдЯрд╛рдЪреНрдпрд╛ рдПрдХрд╛ рдЭрдЯрдХреНрдпрд╛рдиреЗ рд╕рд╣рдЬрдкрдгреЗ рддреБрдордЪреА рдкреЕрдВрдЯ рдЪрд╛рд▓реВ рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЛ. рд╣реЗ рдкрд░реНрдпрд╛рдпрд╛рджреНрд╡рд╛рд░реЗ рдХреЗрд▓реЗ рдЬрд╛рддреЗ "async.tcp = 1".
  • рд╕рдорд╛рдВрддрд░ - phpdbg, apcu, pthreads, pcov, uopz рд╕рд╛рд░рдЦреНрдпрд╛ рд▓рд╛рдпрдмреНрд░рд░реАрдВрдЪреЗ рд▓реЗрдЦрдХ, рд╕реБрдкреНрд░рд╕рд┐рджреНрдз рдЬреЛ рд╡реЕрдЯрдХрд┐рдиреНрд╕рдЪреЗ рдПрдХ рдирд╡реАрди рд╡рд┐рд╕реНрддрд╛рд░. рд╡рд┐рд╕реНрддрд╛рд░ PHP рдордзреНрдпреЗ рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧрд╕рд╛рдареА API рдкреНрд░рджрд╛рди рдХрд░рддреЛ рдЖрдгрд┐ pthreads рдЪреНрдпрд╛ рдмрджрд▓реА рдореНрд╣рдгреВрди рд╕реНрдерд┐рдд рдЖрд╣реЗ. рд▓рд╛рдпрдмреНрд░рд░реАрдЪреА рдПрдХ рдорд╣рддреНрддреНрд╡рд╛рдЪреА рдорд░реНрдпрд╛рджрд╛ рдореНрд╣рдгрдЬреЗ рддреА рдлрдХреНрдд PHP рдЪреНрдпрд╛ ZTS (Zend Thread Safe) рдЖрд╡реГрддреНрддреАрд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рддреЗ.

рдЖрдореНрд╣реА рдЪрд╛рдЪрдгреА рдХрд╢реА рдХрд░рдгрд╛рд░?

рд░рд╛рдИрдЯ-рдЕрд╣реЗрдб рд▓реЙрдЧрд┐рдВрдЧ рдЕрдХреНрд╖рдо рдХрд░реВрди рдЯрд╛рд░рдВрдЯреВрд▓ рдЙрджрд╛рд╣рд░рдг рд╕реБрд░реВ рдХрд░реВрдпрд╛ (wal_mode = рдХрд╛рд╣реАрд╣реА рдирд╛рд╣реА) рдЖрдгрд┐ рд╡рд╛рдврд▓реЗрд▓реЗ рдиреЗрдЯрд╡рд░реНрдХ рдмрдлрд░ (readahead = 1 * 1024 * 1024). рдкрд╣рд┐рд▓рд╛ рдкрд░реНрдпрд╛рдп рдбрд┐рд╕реНрдХрд╕рд╣ рдХрд╛рд░реНрдп рдХрд╛рдвреВрди рдЯрд╛рдХреЗрд▓, рджреБрд╕рд░рд╛ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдмрдлрд░рдХрдбреВрди рдЕрдзрд┐рдХ рд╡рд┐рдирдВрддреНрдпрд╛ рд╡рд╛рдЪрдгреЗ рд╢рдХреНрдп рдХрд░реЗрд▓ рдЖрдгрд┐ рддреНрдпрд╛рджреНрд╡рд╛рд░реЗ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓рдЪреА рд╕рдВрдЦреНрдпрд╛ рдХрдореА рдХрд░реЗрд▓.

рдбреЗрдЯрд╛рд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгрд╛рд░реНтАНрдпрд╛ рдмреЗрдВрдЪрдорд╛рд░реНрдХрд╕рд╛рдареА (рдЗрдиреНрд╕рд░реНрдЯреЗрд╢рди, рдбрд┐рд▓реАрдЯ, рд░реАрдбрд┐рдВрдЧ рдЗ.), рдмреЗрдВрдЪрдорд╛рд░реНрдХ рд╕реБрд░реВ рдХрд░рдгреНрдпрд╛рдкреВрд░реНрд╡реА, рдПрдХ memtx рд╕реНрдкреЗрд╕ (рдкреБрдиреНрд╣рд╛) рддрдпрд╛рд░ рдХреЗрд▓реА рдЬрд╛рдИрд▓, рдЬреНрдпрд╛рдордзреНрдпреЗ рдкреНрд░рд╛рдердорд┐рдХ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдореВрд▓реНрдпреЗ рдСрд░реНрдбрд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдкреВрд░реНрдгрд╛рдВрдХ рдореВрд▓реНрдпрд╛рдВрдЪреНрдпрд╛ рдЬрдирд░реЗрдЯрд░рджреНрд╡рд╛рд░реЗ рддрдпрд╛рд░ рдХреЗрд▓реА рдЬрд╛рддрд╛рдд. (рдХреНрд░рдо).
рд╕реНрдкреЗрд╕ DDL рдЕрд╕реЗ рджрд┐рд╕рддреЗ:

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}})

рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реНрдпрд╛рд╕, рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдЪрд╛рд▓рд╡рдгреНрдпрд╛рдкреВрд░реНрд╡реА, рдЬрд╛рдЧрд╛ рдлреЙрд░реНрдордЪреНрдпрд╛ 10,000 рдЯреНрдпреБрдкрд▓реНрд╕рдиреЗ рднрд░рд▓реА рдЬрд╛рддреЗ.

{id, "tupl╨╡_<id>"}

рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдХреА рдореВрд▓реНрдп рд╡рд╛рдкрд░реВрди рдЯреНрдпреВрдкрд▓реНрд╕рдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдХреЗрд▓рд╛ рдЬрд╛рддреЛ.

рдмреЗрдВрдЪрдорд╛рд░реНрдХ рд╕реНрд╡рддрдГ рд╕рд░реНрд╡реНрд╣рд░рд▓рд╛ рдПрдХрдЪ рд╡рд┐рдирдВрддреА рдЖрд╣реЗ, рдЬреА 10,000 рд╡реЗрд│рд╛ рдЕрдВрдорд▓рд╛рдд рдЖрдгрд▓реА рдЬрд╛рддреЗ (рдХреНрд░рд╛рдВрддреА), рдЬреА рдпрд╛рдордзреВрди, рдкреБрдирд░рд╛рд╡реГрддреНрддреАрдордзреНрдпреЗ рдЕрдВрдорд▓рд╛рдд рдЖрдгрд▓реА рдЬрд╛рддреЗ. 5 рдкреБрдирд░рд╛рд╡реГрддреНрддреНрдпрд╛рдВрдордзреАрд▓ рд╕рд░реНрд╡ рд╡реЗрд│ рд╡рд┐рдЪрд▓рди 3%* рдЪреНрдпрд╛ рд╕реНрд╡реАрдХрд╛рд░реНрдп рддреНрд░реБрдЯреАрдордзреНрдпреЗ рд╣реЛрдИрдкрд░реНрдпрдВрдд рдкреБрдирд░рд╛рд╡реГрддреНрддреА рдкреБрдирд░рд╛рд╡реГрддреНрддреА рдХреЗрд▓реА рдЬрд╛рддреЗ. рдпрд╛рдирдВрддрд░, рд╕рд░рд╛рд╕рд░реА рдирд┐рдХрд╛рд▓ рдШреЗрддрд▓рд╛ рдЬрд╛рддреЛ. рдкреНрд░реЛрд╕реЗрд╕рд░рд▓рд╛ рдереНрд░реЛрдЯрд▓ рд╣реЛрдгреНрдпрд╛рдкрд╛рд╕реВрди рд░реЛрдЦрдгреНрдпрд╛рд╕рд╛рдареА рдкреБрдирд░рд╛рд╡реГрддреНрддреА рджрд░рдореНрдпрд╛рди 1 рд╕реЗрдХрдВрджрд╛рдЪрд╛ рд╡рд┐рд░рд╛рдо рдЖрд╣реЗ. рд▓реБрдЖрдЪрд╛ рдХрдЪрд░рд╛ рдЧреЛрд│рд╛ рдХрд░рдгрд╛рд░рд╛ рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддреАрдкреВрд░реНрд╡реА рдЕрдХреНрд╖рдо рдХреЗрд▓рд╛ рдЬрд╛рддреЛ рдЖрдгрд┐ рддреЛ рдкреВрд░реНрдг рдЭрд╛рд▓реНрдпрд╛рдирдВрддрд░ рд╕реБрд░реВ рдХрд░рдгреНрдпрд╛рд╕ рднрд╛рдЧ рдкрд╛рдбрд▓реЗ рдЬрд╛рддреЗ. PHP рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗрд╡рд│ рдмреЗрдВрдЪрдорд╛рд░реНрдХрд╕рд╛рдареА рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рд╡рд┐рд╕реНрддрд╛рд░рд╛рдВрд╕рд╣ рд▓реЙрдиреНрдЪ рдХреЗрд▓реА рдЬрд╛рддреЗ, рдЖрдЙрдЯрдкреБрдЯ рдмрдлрд░рд┐рдВрдЧ рд╕рдХреНрд╖рдо рдХреЗрд▓реЗ рдЬрд╛рддреЗ рдЖрдгрд┐ рдХрдЪрд░рд╛ рдЧреЛрд│рд╛ рдХрд░рдгрд╛рд░реЗ рдЕрдХреНрд╖рдо рдХреЗрд▓реЗ рдЬрд╛рддреЗ.

* рдХреНрд░рд╛рдВрддреАрдЪреА рд╕рдВрдЦреНрдпрд╛, рдкреБрдирд░рд╛рд╡реГрддреНрддреА рдЖрдгрд┐ рддреНрд░реБрдЯреА рдереНрд░реЗрд╢реЛрд▓реНрдб рдмреЗрдВрдЪрдорд╛рд░реНрдХ рд╕реЗрдЯрд┐рдВрдЧреНрдЬрдордзреНрдпреЗ рдмрджрд▓рд▓реЗ рдЬрд╛рдК рд╢рдХрддрд╛рдд.

рдЪрд╛рдЪрдгреА рд╡рд╛рддрд╛рд╡рд░рдг

рдЦрд╛рд▓реА рдкреНрд░рдХрд╛рд╢рд┐рдд рдХреЗрд▓реЗрд▓реЗ рдкрд░рд┐рдгрд╛рдо MacBookPro (2015), рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯреАрдо - Fedora 30 (kernel version 5.3.8-200.fc30.x86_64) рд╡рд░ рдХреЗрд▓реЗ рдЧреЗрд▓реЗ. рдЯреЕрд░рдВрдЯреВрд▓ рдкреЕрд░рд╛рдореАрдЯрд░рд╕рд╣ рдбреЙрдХрд░рдордзреНрдпреЗ рд▓реЙрдиреНрдЪ рдХреЗрд▓реЗ рдЧреЗрд▓реЗ.--network host".

рдкреЕрдХреЗрдЬ рдЖрд╡реГрддреНрддреНрдпрд╛:

Tarantool: 2.3.0-115-g5ba5ed37e
рдбреЙрдХрд░: резреп.режрей.рей, рдмрд┐рд▓реНрдб a19.03.3fc872f2
PHP: 7.3.11 (cli) (рдмрд┐рд▓реНрдЯ: 22 рдСрдХреНрдЯреЛрдмрд░ 2019 08:11:04)
рдЯрд╛рд░рдВрдЯреВрд▓/рдХреНрд▓рд╛рдпрдВрдЯ: 0.6.0
rybakit/msgpack: 0.6.1
ext-tarantool: 0.3.2 (+ 7.3 рд╕рд╛рдареА рдкреЕрдЪ)*
ext-msgpack: 2.0.3
ext-async: 0.3.0-8c1da46
ext-swoole: 4.4.12
ext-рд╕рдорд╛рдВрддрд░: 1.1.3

* рджреБрд░реНрджреИрд╡рд╛рдиреЗ, рдЕрдзрд┐рдХреГрдд рдХрдиреЗрдХреНрдЯрд░ PHP рдЖрд╡реГрддреНрддреА > 7.2 рд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдд рдирд╛рд╣реА. PHP 7.3 рд╡рд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕рдВрдХрд▓рд┐рдд рдЖрдгрд┐ рдЪрд╛рд▓рд╡рд┐рдгреНрдпрд╛рд╕рд╛рдареА, рдорд▓рд╛ рд╡рд╛рдкрд░рд╛рд╡реЗ рд▓рд╛рдЧрд▓реЗ рдкреЕрдЪ.

рдирд┐рдХрд╛рд▓

рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдореЛрдб

рдЯрд╛рд░рдирдЯреВрд▓ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдмрд╛рдпрдирд░реА рдлреЙрд░рдореЕрдЯ рд╡рд╛рдкрд░рддреЛ рдореЗрд╕реЗрдЬрдкреЕрдХ рд╕рдВрджреЗрд╢ рдЕрдиреБрдХреНрд░рдорд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА. рдкреАрдИрд╕реАрдПрд▓ рдХрдиреЗрдХреНрдЯрд░рдордзреНрдпреЗ, рд╕реАрд░рд┐рдпрд▓рд╛рдпрдЭреЗрд╢рди рд▓рд╛рдпрдмреНрд░рд░реАрдЪреНрдпрд╛ рдЦреЛрд▓рд╡рд░ рд▓рдкрд▓реЗрд▓реЗ рдЕрд╕рддреЗ рдЖрдгрд┐ рдпреВрдЬрд░рд▓рдБрдб рдХреЛрдбрдордзреАрд▓ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпреЗрд╡рд░ рдкрд░рд┐рдгрд╛рдо рдХрд░рддреЗ. рд╢рдХреНрдп рд╡рд╛рдЯрдд рдирд╛рд╣реА. рдПрдХ рд╢реБрджреНрдз PHP рдХрдиреЗрдХреНрдЯрд░, рддреНрдпрд╛рдЙрд▓рдЯ, рдорд╛рдирдХ рдПрдиреНрдХреЛрдбрд░рдЪрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реВрди рдХрд┐рдВрд╡рд╛ рдЖрдкрд▓реНрдпрд╛ рд╕реНрд╡рддрдГрдЪреНрдпрд╛ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рд╛рдиреБрдХреВрд▓рд┐рдд рдХрд░рдгреНрдпрд╛рдЪреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреЗ. рдмреЙрдХреНрд╕рдЪреНрдпрд╛ рдмрд╛рд╣реЗрд░ рджреЛрди рдПрдиреНрдХреЛрдбрд░ рдЙрдкрд▓рдмреНрдз рдЖрд╣реЗрдд, рдПрдХ рддреНрдпрд╛рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдЖрд╣реЗ msgpack/msgpack-php (рдЕрдзрд┐рдХреГрдд MessagePack PECL рд╡рд┐рд╕реНрддрд╛рд░), рджреБрд╕рд░рд╛ рдЪрд╛рд▓реВ рдЖрд╣реЗ rybakit/msgpack (рд╢реБрджреНрдз PHP рдордзреНрдпреЗ).

рдХрдиреЗрдХреНрдЯрд░реНрд╕рдЪреА рддреБрд▓рдирд╛ рдХрд░рдгреНрдпрд╛рдкреВрд░реНрд╡реА, рдЖрдореНрд╣реА PHP рдХрдиреЗрдХреНрдЯрд░рд╕рд╛рдареА MessagePack рдПрдиреНрдХреЛрдбрд░рдЪреЗ рдХрд╛рд░реНрдпрдкреНрд░рджрд░реНрд╢рди рдореЛрдЬреВ рдЖрдгрд┐ рдкреБрдвреАрд▓ рдЪрд╛рдЪрдгреНрдпрд╛рдВрдордзреНрдпреЗ рдЖрдореНрд╣реА рд╕рд░реНрд╡реЛрддреНрддрдо рдкрд░рд┐рдгрд╛рдо рджрд░реНрд╢рд╡рд┐рдгрд╛рд░рд╛ рдПрдХ рд╡рд╛рдкрд░реВ:

Async, Swoole рдЖрдгрд┐ Parallel рд╡рд╛рдкрд░реВрди Tarantool рд╕рд╛рдареА PHP рдХрдиреЗрдХреНрдЯрд░рд▓рд╛ рдЧрддреА рджреЗрдгреЗ
рдЬрд░реА PHP рдЖрд╡реГрддреНрддреА (рд╢реБрджреНрдз) рд╡реЗрдЧрд╛рдд рдкреАрдИрд╕реАрдПрд▓ рд╡рд┐рд╕реНрддрд╛рд░рд╛рдкреЗрдХреНрд╖рд╛ рдирд┐рдХреГрд╖реНрдЯ рдЖрд╣реЗ, рддрд░реАрд╣реА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рдХрд▓реНрдкрд╛рдВрдордзреНрдпреЗ рдореА рддреЗ рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреА рд╢рд┐рдлрд╛рд░рд╕ рдХрд░рддреЛ rybakit/msgpack, рдХрд╛рд░рдг рдЕрдзрд┐рдХреГрдд MessagePack рдПрдХреНрд╕реНрдЯреЗрдВрд╢рдирдордзреНрдпреЗ рдлреЙрд░рдореЕрдЯ рд╕реНрдкреЗрд╕рд┐рдлрд┐рдХреЗрд╢рди рдХреЗрд╡рд│ рдЕрдВрд╢рддрдГ рдЕрдВрдорд▓рд╛рдд рдЖрдгрд▓реЗ рдЧреЗрд▓реЗ рдЖрд╣реЗ (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рд╕рд╛рдиреБрдХреВрд▓ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░рд╛рдВрд╕рд╛рдареА рдХреЛрдгрддреЗрд╣реА рд╕рдорд░реНрдерди рдирд╛рд╣реА, рдЬреНрдпрд╛рд╢рд┐рд╡рд╛рдп рддреБрдореНрд╣реА рджрд╢рд╛рдВрд╢ рд╡рд╛рдкрд░реВ рд╢рдХрдгрд╛рд░ рдирд╛рд╣реА - рдПрдХ рдирд╡реАрди рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ Tarantool 2.3 рдордзреНрдпреЗ рд╕рд╛рджрд░ рдХреЗрд▓рд╛ рдЖрд╣реЗ) рдЖрдгрд┐ рдЗрддрд░рд╛рдВрдЪреА рд╕рдВрдЦреНрдпрд╛ рд╕рдорд╕реНрдпрд╛ (PHP 7.4 рд╕рд╣ рд╕реБрд╕рдВрдЧрддрддрд╛ рд╕рдорд╕реНрдпрд╛рдВрд╕рд╣). рдмрд░рдВ, рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ, рдкреНрд░рдХрд▓реНрдк рдмреЗрдмрдВрдж рджрд┐рд╕рддреЛ.

рддрд░, рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдореЛрдбрдордзреНрдпреЗ рдХрдиреЗрдХреНрдЯрд░реНрд╕рдЪреЗ рдХрд╛рд░реНрдпрдкреНрд░рджрд░реНрд╢рди рдореЛрдЬреВрдпрд╛:

Async, Swoole рдЖрдгрд┐ Parallel рд╡рд╛рдкрд░реВрди Tarantool рд╕рд╛рдареА PHP рдХрдиреЗрдХреНрдЯрд░рд▓рд╛ рдЧрддреА рджреЗрдгреЗ
рдЖрд▓реЗрдЦрд╛рд╡рд░реВрди рдкрд╛рд╣рд┐рд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ, PECL рдХрдиреЗрдХреНрдЯрд░ (Tarantool) PHP рдХрдиреЗрдХреНрдЯрд░ (рдХреНрд▓рд╛рдпрдВрдЯ) рдЪреНрдпрд╛ рддреБрд▓рдиреЗрдд рдЪрд╛рдВрдЧрд▓реА рдХрд╛рдордЧрд┐рд░реА рджрд╛рдЦрд╡рддреЗ. рдкрд░рдВрддреБ рд╣реЗ рдЖрд╢реНрдЪрд░реНрдпрдХрд╛рд░рдХ рдирд╛рд╣реА, рдХрд╛рд░рдг рдирдВрддрд░рдЪреЗ, рд╣рд│реВрд╡рд╛рд░ рднрд╛рд╖реЗрдд рдЕрдВрдорд▓рд╛рдд рдЖрдгрдгреНрдпрд╛рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд рдЕрдзрд┐рдХ рдХрд╛рд░реНрдп рдХрд░рддреЗ: рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓рд╕рд╣ рдПрдХ рдирд╡реАрди рдСрдмреНрдЬреЗрдХреНрдЯ рддрдпрд╛рд░ рдХреЗрд▓рд╛ рдЬрд╛рддреЛ. рд╡рд┐рдирдВрддреА ╨╕ рдкреНрд░рддрд┐рд╕рд╛рдж (рд╕рд┐рд▓реЗрдХреНрдЯрдЪреНрдпрд╛ рдмрд╛рдмрддреАрдд - рджреЗрдЦреАрд▓ рдорд╛рдкрджрдВрдб, рдЖрдгрд┐ рдЕрдкрдбреЗрдЯ/рдЕрдкреНрд╕рд░реНрдЯрдЪреНрдпрд╛ рдмрд╛рдмрддреАрдд - рдСрдкрд░реЗрд╢рди), рд╕реНрд╡рддрдВрддреНрд░ рд╕рдВрд╕реНрдерд╛ рдХрдиреЗрдХреНрд╢рди, рдкреЕрдХрд░ ╨╕ рд╣рдБрдбрд▓рд░ рддреЗ рдУрд╡реНрд╣рд░рд╣реЗрдб рджреЗрдЦреАрд▓ рдЬреЛрдбрддрд╛рдд. рдЕрд░реНрдерд╛рдд, рд▓рд╡рдЪрд┐рдХрддрд╛ рдХрд┐рдВрдорддреАрд▓рд╛ рдпреЗрддреЗ. рддрдерд╛рдкрд┐, рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ, PHP рджреБрднрд╛рд╖реА рдЪрд╛рдВрдЧрд▓реЗ рдХрд╛рд░реНрдпрдкреНрд░рджрд░реНрд╢рди рджрд░реНрд╢рд╡рд┐рддреЗ, рдЬрд░реА рдлрд░рдХ рдЖрд╣реЗ, рддреЛ рдХреНрд╖реБрд▓реНрд▓рдХ рдЖрд╣реЗ рдЖрдгрд┐, рдХрджрд╛рдЪрд┐рдд, PHP 7.4 рдордзреНрдпреЗ рдкреНрд░реАрд▓реЛрдбрд┐рдВрдЧ рд╡рд╛рдкрд░рддрд╛рдирд╛ рдЖрдгрдЦреА рдХрдореА рдЕрд╕реЗрд▓, PHP 8 рдордзреНрдпреЗ JIT рдЪрд╛ рдЙрд▓реНрд▓реЗрдЦ рди рдХрд░рддрд╛.

рдЪрд▓рд╛ рдкреБрдвреЗ рдЬрд╛рдКрдпрд╛. Tarantool 2.0 рдиреЗ SQL рд╕рд╛рдареА рд╕рдорд░реНрдерди рдЬреЛрдбрд▓реЗ. рдЪрд▓рд╛ рдПрд╕рдХреНрдпреВрдПрд▓ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╡рд╛рдкрд░реВрди рд╕рд┐рд▓реЗрдХреНрдЯ, рдЗрдиреНрд╕рд░реНрдЯ, рдЕрдкрдбреЗрдЯ рдЖрдгрд┐ рдбрд┐рд▓реАрдЯ рдСрдкрд░реЗрд╢рдиреНрд╕ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░реВрдпрд╛ рдЖрдгрд┐ рдкрд░рд┐рдгрд╛рдорд╛рдВрдЪреА рддреБрд▓рдирд╛ noSQL (рдмрд╛рдпрдирд░реА) рд╕рдордХрдХреНрд╖рд╛рдВрд╕рд╣ рдХрд░реВрдпрд╛:

Async, Swoole рдЖрдгрд┐ Parallel рд╡рд╛рдкрд░реВрди Tarantool рд╕рд╛рдареА PHP рдХрдиреЗрдХреНрдЯрд░рд▓рд╛ рдЧрддреА рджреЗрдгреЗ
рдПрд╕рдХреНрдпреВрдПрд▓ рдкрд░рд┐рдгрд╛рдо рдлрд╛рд░ рдкреНрд░рднрд╛рд╡реА рдирд╛рд╣реАрдд (рдореА рддреБрдореНрд╣рд╛рд▓рд╛ рдЖрдард╡рдг рдХрд░реВрди рджреЗрддреЛ рдХреА рдЖрдореНрд╣реА рдЕрджреНрдпрд╛рдк рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдореЛрдбрдЪреА рдЪрд╛рдЪрдгреА рдШреЗрдд рдЖрд╣реЛрдд). рддрдерд╛рдкрд┐, рдореА рд╡реЗрд│реЗрдкреВрд░реНрд╡реА рдпрд╛рдмрджреНрджрд▓ рдирд╛рд░рд╛рдЬ рд╣реЛрдгрд╛рд░ рдирд╛рд╣реА; SQL рд╕рдорд░реНрдерди рдЕрджреНрдпрд╛рдк рд╕рдХреНрд░рд┐рдп рд╡рд┐рдХрд╛рд╕рд╛рдзреАрди рдЖрд╣реЗ (рддреБрд▓рдиреЗрдиреЗ рдЕрд▓реАрдХрдбреЗ, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рд╕рдорд░реНрдерди рдЬреЛрдбрд▓реЗ рдЧреЗрд▓реЗ. рддрдпрд╛рд░ рд╡рд┐рдзрд╛рдиреЗ) рдЖрдгрд┐, рдпрд╛рджреАрдиреБрд╕рд╛рд░ рдиреНрдпрд╛рдп рдХрд░рдгреЗ рд╕рдорд╕реНрдпрд╛, SQL рдЗрдВрдЬрд┐рдирд▓рд╛ рднрд╡рд┐рд╖реНрдпрд╛рдд рдЕрдиреЗрдХ рдСрдкреНрдЯрд┐рдорд╛рдпрдЭреЗрд╢рди рдХреЗрд▓реЗ рдЬрд╛рддреАрд▓.

рдПрд╕рд┐рдВрдХ

рдмрд░рдВ, рдЖрддрд╛ Async рд╡рд┐рд╕реНрддрд╛рд░ рдЖрдореНрд╣рд╛рд▓рд╛ рд╡рд░реАрд▓ рдкрд░рд┐рдгрд╛рдо рд╕реБрдзрд╛рд░рдгреНрдпрд╛рдд рдХрд╢реА рдорджрдд рдХрд░реВ рд╢рдХрддреЛ рддреЗ рдкрд╛рд╣реВ. рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдореНрд╕ рд▓рд┐рд╣рд┐рдгреНрдпрд╛рд╕рд╛рдареА, рд╡рд┐рд╕реНрддрд╛рд░ рдХреЛрд░рд╛рдЙрдЯрд┐рдирд╡рд░ рдЖрдзрд╛рд░рд┐рдд API рдкреНрд░рджрд╛рди рдХрд░рддреЛ, рдЬреНрдпрд╛рдЪрд╛ рдЖрдореНрд╣реА рд╡рд╛рдкрд░ рдХрд░реВ. рдЖрдореНрд╣рд╛рд▓рд╛ рдкреНрд░рд╛рдпреЛрдЧрд┐рдХрд░рд┐рддреНрдпрд╛ рдЖрдврд│реВрди рдЖрд▓реЗ рдХреА рдЖрдордЪреНрдпрд╛ рдкрд░реНрдпрд╛рд╡рд░рдгрд╛рд╕рд╛рдареА рдХреЙрд░реЛрдЯрд┐рдирдЪреА рдЗрд╖реНрдЯрддрдо рд╕рдВрдЦреНрдпрд╛ 25 рдЖрд╣реЗ:

Async, Swoole рдЖрдгрд┐ Parallel рд╡рд╛рдкрд░реВрди Tarantool рд╕рд╛рдареА PHP рдХрдиреЗрдХреНрдЯрд░рд▓рд╛ рдЧрддреА рджреЗрдгреЗ
10,000 рдХреЛрд░реЛрдЯреАрдирдордзреНрдпреЗ 25 рдСрдкрд░реЗрд╢рдиреНрд╕ тАЬрдкрд╕рд░рд╡рд╛тАЭ рдЖрдгрд┐ рдХрд╛рдп рд╣реЛрддреЗ рддреЗ рдкрд╣рд╛:

Async, Swoole рдЖрдгрд┐ Parallel рд╡рд╛рдкрд░реВрди Tarantool рд╕рд╛рдареА PHP рдХрдиреЗрдХреНрдЯрд░рд▓рд╛ рдЧрддреА рджреЗрдгреЗ
рд╕рд╛рдареА рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдж рдСрдкрд░реЗрд╢рдиреНрд╕рдЪреА рд╕рдВрдЦреНрдпрд╛ 3 рдкрдЯреАрдиреЗ рд╡рд╛рдврд▓реА tarantool-php/client!

рджреБрд░реНрджреИрд╡рд╛рдиреЗ, PECL рдХрдиреЗрдХреНрдЯрд░ ext-async рд╕рд╣ рдкреНрд░рд╛рд░рдВрдн рдЭрд╛рд▓рд╛ рдирд╛рд╣реА.

SQL рдмрджреНрджрд▓ рдХрд╛рдп?

Async, Swoole рдЖрдгрд┐ Parallel рд╡рд╛рдкрд░реВрди Tarantool рд╕рд╛рдареА PHP рдХрдиреЗрдХреНрдЯрд░рд▓рд╛ рдЧрддреА рджреЗрдгреЗ
рддреБрдореНрд╣реА рдмрдШреВ рд╢рдХрддрд╛, рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдореЛрдбрдордзреНрдпреЗ рдмрд╛рдпрдирд░реА рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдЖрдгрд┐ SQL рдордзреАрд▓ рдлрд░рдХ рддреНрд░реБрдЯреАрдЪреНрдпрд╛ рдорд╛рд░реНрдЬрд┐рдирдордзреНрдпреЗ рдЖрд╣реЗ.

рд╕реНрд╡реВрд▓реЗ

рдкреБрдиреНрд╣рд╛ рдЖрдореНрд╣рд╛рд▓рд╛ рдХреЙрд░реЛрдЯрд┐рдирдЪреА рдЗрд╖реНрдЯрддрдо рд╕рдВрдЦреНрдпрд╛ рд╕рд╛рдкрдбрд▓реА, рдпрд╛рд╡реЗрд│реА рд╕реНрд╡реВрд▓рд╕рд╛рдареА:
Async, Swoole рдЖрдгрд┐ Parallel рд╡рд╛рдкрд░реВрди Tarantool рд╕рд╛рдареА PHP рдХрдиреЗрдХреНрдЯрд░рд▓рд╛ рдЧрддреА рджреЗрдгреЗ
рдЪрд▓рд╛ 25 рд╡рд╛рдЬрддрд╛ рдерд╛рдВрдмреВрдпрд╛. Async рд╡рд┐рд╕реНрддрд╛рд░рд╛рдкреНрд░рдорд╛рдгреЗрдЪ рддреАрдЪ рдпреБрдХреНрддреА рдкреБрдиреНрд╣рд╛ рдХрд░реВрдпрд╛ - 10,000 рдСрдкрд░реЗрд╢рдиреНрд╕ 25 coroutines рдордзреНрдпреЗ рд╡рд┐рддрд░рд┐рдд рдХрд░рд╛. рдпрд╛рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рдЖрдореНрд╣реА рдЖрдгрдЦреА рдПрдХ рдЪрд╛рдЪрдгреА рдЬреЛрдбреВ рдЬреНрдпрд╛рдордзреНрдпреЗ рдЖрдореНрд╣реА рд╕рд░реНрд╡ рдХрд╛рдо 2 рджреЛрди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдВрдордзреНрдпреЗ рд╡рд┐рднрд╛рдЧреВ (рдореНрд╣рдгрдЬреЗ, рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ 5,000 рдХреЛрд░реЛрдЯрд┐рдирдордзреНрдпреЗ 25 рдСрдкрд░реЗрд╢рдиреНрд╕ рдХрд░реЗрд▓). рд╡рд╛рдкрд░реВрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рддрдпрд╛рд░ рдХреЗрд▓реНрдпрд╛ рдЬрд╛рддреАрд▓ SwooleProcess.

рдкрд░рд┐рдгрд╛рдо:

Async, Swoole рдЖрдгрд┐ Parallel рд╡рд╛рдкрд░реВрди Tarantool рд╕рд╛рдареА PHP рдХрдиреЗрдХреНрдЯрд░рд▓рд╛ рдЧрддреА рджреЗрдгреЗ
Swole рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЪрд╛рд▓рд╡рддрд╛рдирд╛ Async рдЪреНрдпрд╛ рддреБрд▓рдиреЗрдд рдереЛрдбрд╛ рдХрдореА рдкрд░рд┐рдгрд╛рдо рджрд░реНрд╢рд╡рд┐рддреЛ, рдкрд░рдВрддреБ 2 рдкреНрд░рдХреНрд░рд┐рдпреЗрд╕рд╣ рдЪрд┐рддреНрд░ рдирд╛рдЯрдХреАрдпрд░рд┐рддреНрдпрд╛ рдмрджрд▓рддреЗ (рдХреНрд░рдорд╛рдВрдХ 2 рдпреЛрдЧрд╛рдпреЛрдЧрд╛рдиреЗ рдирд┐рд╡рдбрд▓рд╛ рдЧреЗрд▓рд╛ рдирд╛рд╣реА; рдорд╛рдЭреНрдпрд╛ рдорд╢реАрдирд╡рд░, рддреА 2 рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реЛрддреА рдЬреНрдпрд╛рдВрдиреА рд╕рд░реНрд╡реЛрддреНрддрдо рдкрд░рд┐рдгрд╛рдо рджрд░реНрд╢рд╡рд┐рд▓рд╛).

рддрд╕реЗ, рдкреНрд░рдХреНрд░рд┐рдпрд╛рдВрд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА Async рд╡рд┐рд╕реНрддрд╛рд░рд╛рдордзреНрдпреЗ API рджреЗрдЦреАрд▓ рдЖрд╣реЗ, рдкрд░рдВрддреБ рддреЗрдереЗ рдорд▓рд╛ рдПрдХ рдХрд┐рдВрд╡рд╛ рдЕрдзрд┐рдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдВрдордзреНрдпреЗ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдЪрд╛рд▓рд╡рд┐рдгреНрдпрд╛рдкрд╛рд╕реВрди рдХреЛрдгрддрд╛рд╣реА рдлрд░рдХ рджрд┐рд╕рд▓рд╛ рдирд╛рд╣реА (рдореА рдХреБрдареЗрддрд░реА рдЧреЛрдВрдзрд│ рдХреЗрд▓рд╛ рдЕрд╕рдгреНрдпрд╛рдЪреА рд╢рдХреНрдпрддрд╛ рдЖрд╣реЗ).

рдПрд╕рдХреНрдпреВрдПрд▓ рд╡рд┐ рдмрд╛рдпрдирд░реА рдкреНрд░реЛрдЯреЛрдХреЙрд▓:

Async, Swoole рдЖрдгрд┐ Parallel рд╡рд╛рдкрд░реВрди Tarantool рд╕рд╛рдареА PHP рдХрдиреЗрдХреНрдЯрд░рд▓рд╛ рдЧрддреА рджреЗрдгреЗ
Async рдкреНрд░рдорд╛рдгреЗ, рдмрд╛рдпрдирд░реА рдЖрдгрд┐ SQL рдСрдкрд░реЗрд╢рдиреНрд╕рдордзреАрд▓ рдлрд░рдХ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдореЛрдбрдордзреНрдпреЗ рдХрд╛рдвреВрди рдЯрд╛рдХрд▓рд╛ рдЬрд╛рддреЛ.

рд╕рдорд╛рдВрддрд░

рдкреЕрд░рд▓рд▓ рдПрдХреНрд╕реНрдЯреЗрдВрд╢рди рд╣реЗ рдХреЛрд░реЛрдЯреАрди рдмрджреНрджрд▓ рдирд╕реВрди рдереНрд░реЗрдбреНрд╕ рдмрджреНрджрд▓ рдЕрд╕рд▓реНрдпрд╛рдиреЗ, рд╕рдорд╛рдВрддрд░ рдереНрд░реЗрдбреНрд╕рдЪреА рдЗрд╖реНрдЯрддрдо рд╕рдВрдЦреНрдпрд╛ рдореЛрдЬреВрдпрд╛:

Async, Swoole рдЖрдгрд┐ Parallel рд╡рд╛рдкрд░реВрди Tarantool рд╕рд╛рдареА PHP рдХрдиреЗрдХреНрдЯрд░рд▓рд╛ рдЧрддреА рджреЗрдгреЗ
рдорд╛рдЭреНрдпрд╛ рдорд╢реАрдирд╡рд░ рддреЗ 16 рдЖрд╣реЗ. 16 рд╕рдорд╛рдВрддрд░ рдереНрд░реЗрдбреНрд╕рд╡рд░ рдХрдиреЗрдХреНрдЯрд░ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдЪрд╛рд▓рд╡реВ:

Async, Swoole рдЖрдгрд┐ Parallel рд╡рд╛рдкрд░реВрди Tarantool рд╕рд╛рдареА PHP рдХрдиреЗрдХреНрдЯрд░рд▓рд╛ рдЧрддреА рджреЗрдгреЗ
рддреБрдореНрд╣реА рдмрдШреВ рд╢рдХрддрд╛, рдкрд░рд┐рдгрд╛рдо рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдПрдХреНрд╕реНрдЯреЗрдВрд╢рдирдЪреНрдпрд╛ рддреБрд▓рдиреЗрдд рдЕрдзрд┐рдХ рдЪрд╛рдВрдЧрд▓рд╛ рдЖрд╣реЗ (2 рдкреНрд░рдХреНрд░рд┐рдпрд╛рдВрд╡рд░ рдЪрд╛рд▓рдгрд╛рд▒реНрдпрд╛ Swoole рдЪреА рдЧрдгрдирд╛ рдХрд░рдд рдирд╛рд╣реА). рд▓рдХреНрд╖рд╛рдд рдШреНрдпрд╛ рдХреА PECL рдХрдиреЗрдХреНрдЯрд░рд╕рд╛рдареА, рдЕрдкрдбреЗрдЯ рдЖрдгрд┐ рдЕрдкреНрд╕рд░реНрдЯ рдСрдкрд░реЗрд╢рдиреНрд╕ рд░рд┐рдХреНрдд рдЖрд╣реЗрдд. рд╣реЗ рдпрд╛ рдСрдкрд░реЗрд╢рдиреНрд╕ рддреНрд░реБрдЯреАрд╕рд╣ рдЕрдпрд╢рд╕реНрд╡реА рдЭрд╛рд▓реНрдпрд╛рдЪреНрдпрд╛ рд╡рд╕реНрддреБрд╕реНрдерд┐рддреАрдореБрд│реЗ рдЖрд╣реЗ - рдорд▓рд╛ рдорд╛рд╣рд┐рдд рдирд╛рд╣реА рдХреА рд╣реА ext-рд╕рдорд╛рдВрддрд░, ext-tarantool рдХрд┐рдВрд╡рд╛ рджреЛрдиреНрд╣реАрдЪреА рдЪреВрдХ рд╣реЛрддреА.

рдЖрддрд╛ рдПрд╕рдХреНрдпреВрдПрд▓ рдХрд╛рдордЧрд┐рд░реАрдЪреА рддреБрд▓рдирд╛ рдХрд░реВрдпрд╛:

Async, Swoole рдЖрдгрд┐ Parallel рд╡рд╛рдкрд░реВрди Tarantool рд╕рд╛рдареА PHP рдХрдиреЗрдХреНрдЯрд░рд▓рд╛ рдЧрддреА рджреЗрдгреЗ
рд╕рдордХрд╛рд▓рд┐рдХрдкрдгреЗ рдЪрд╛рд▓рдгрд╛рд░реНтАНрдпрд╛ рдХрдиреЗрдХреНрдЯрд░рд╕рд╛рдареА рдЖрд▓реЗрдЦрд╛рд╢реА рд╕рдорд╛рдирддрд╛ рд▓рдХреНрд╖рд╛рдд рдШреНрдпрд╛?

рдПрдХрддреНрд░

рдЖрдгрд┐ рд╢реЗрд╡рдЯреА, рдЪрд╛рдЪрдгреА рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╡рд┐рд╕реНрддрд╛рд░рд╛рдВрд╕рд╛рдареА рдПрдХрдВрджрд░ рдЪрд┐рддреНрд░ рдкрд╛рд╣рдгреНрдпрд╛рд╕рд╛рдареА рдПрдХрд╛ рдЖрд▓реЗрдЦрд╛рдордзреНрдпреЗ рд╕рд░реНрд╡ рдкрд░рд┐рдгрд╛рдорд╛рдВрдЪрд╛ рд╕рд╛рд░рд╛рдВрд╢ рдШреЗрдК. рдЪрд▓рд╛ рдЪрд╛рд░реНрдЯрдордзреНрдпреЗ рдлрдХреНрдд рдПрдХ рдирд╡реАрди рдЪрд╛рдЪрдгреА рдЬреЛрдбреВрдпрд╛, рдЬреА рдЖрдореНрд╣реА рдЕрджреНрдпрд╛рдк рдХреЗрд▓реА рдирд╛рд╣реА - рд╕рдорд╛рдВрддрд░* рд╡рд╛рдкрд░реВрди рд╕рдорд╛рдВрддрд░ Async coroutines рдЪрд╛рд▓рд╡реВ. рд╡рд░реАрд▓ рд╡рд┐рд╕реНрддрд╛рд░ рд╕рдорд╛рдХрд▓рд┐рдд рдХрд░рдгреНрдпрд╛рдЪреА рдХрд▓реНрдкрдирд╛ рдЖрдзреАрдкрд╛рд╕реВрдирдЪ рдЖрд╣реЗ рдЪрд░реНрдЪрд╛ рдЭрд╛рд▓реА рд▓реЗрдЦрдХ, рдкрд░рдВрддреБ рдХреЛрдгрддреЗрд╣реА рдПрдХрдордд рдЭрд╛рд▓реЗ рдирд╛рд╣реА, рддреБрдореНрд╣рд╛рд▓рд╛ рддреЗ рд╕реНрд╡рддрдГ рдХрд░рд╛рд╡реЗ рд▓рд╛рдЧреЗрд▓.

* рд╕рдорд╛рдВрддрд░ рд╕рд╣ Swoole coroutines рд▓рд╛рдБрдЪ рдХрд░рдгреЗ рд╢рдХреНрдп рдирд╡реНрд╣рддреЗ; рдЕрд╕реЗ рджрд┐рд╕рддреЗ рдХреА рд╣реЗ рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд┐рд╕рдВрдЧрдд рдЖрд╣реЗрдд.

рддрд░, рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо:

Async, Swoole рдЖрдгрд┐ Parallel рд╡рд╛рдкрд░реВрди Tarantool рд╕рд╛рдареА PHP рдХрдиреЗрдХреНрдЯрд░рд▓рд╛ рдЧрддреА рджреЗрдгреЗ

рддреНрдпрд╛рдРрд╡рдЬреА рдПрдХ рдирд┐рд╖реНрдХрд░реНрд╖

рдорд╛рдЭреНрдпрд╛ рдорддреЗ, рдкрд░рд┐рдгрд╛рдо рдЕрдЧрджреА рдпреЛрдЧреНрдп рдЕрд╕рд▓реНрдпрд╛рдЪреЗ рджрд┐рд╕реВрди рдЖрд▓реЗ рдЖрдгрд┐ рдХрд╛рд╣реА рдХрд╛рд░рдгрд╛рд╕реНрддрд╡ рдорд▓рд╛ рдЦрд╛рддреНрд░реА рдЖрд╣реЗ рдХреА рд╣реА рдорд░реНрдпрд╛рджрд╛ рдирд╛рд╣реА! рддреБрдореНрд╣рд╛рд▓рд╛ рд╣реЗ рдкреНрд░рддреНрдпрдХреНрд╖ рдкреНрд░рдХрд▓реНрдкрд╛рдд рдХреЗрд╡рд│ рддреБрдордЪреНрдпрд╛рд╕рд╛рдареАрдЪ рдард░рд╡рд╛рдпрдЪреЗ рдЖрд╣реЗ рдХреА рдирд╛рд╣реА, рдореА рдлрдХреНрдд рдПрд╡рдвреЗрдЪ рдореНрд╣рдгреЗрди рдХреА рдорд╛рдЭреНрдпрд╛рд╕рд╛рдареА рд╣рд╛ рдПрдХ рдордиреЛрд░рдВрдЬрдХ рдкреНрд░рдпреЛрдЧ рд╣реЛрддрд╛ рдЬреЛ рддреБрдореНрд╣рд╛рд▓рд╛ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ TCP рдХрдиреЗрдХреНрдЯрд░рдордзреВрди рдХрдореАрдд рдХрдореА рдкреНрд░рдпрддреНрдирд╛рдд рдХрд┐рддреА "рдкрд┐рд│реВрди" рдХрд╛рдвреВ рд╢рдХрддреЛ рдпрд╛рдЪреЗ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░реВ рджреЗрддреЛ. рдЬрд░ рддреБрдордЪреНрдпрд╛рдХрдбреЗ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рд╕реБрдзрд╛рд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдХрд▓реНрдкрдирд╛ рдЕрд╕рддреАрд▓, рддрд░ рдорд▓рд╛ рддреБрдордЪреНрдпрд╛ рдкреБрд▓ рд╡рд┐рдирдВрддреАрд╡рд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдгреНрдпрд╛рдд рдЖрдирдВрдж рд╣реЛрдИрд▓. рдкреНрд░рдХреНрд╖реЗрдкрдг рд╕реВрдЪрдирд╛ рдЖрдгрд┐ рдкрд░рд┐рдгрд╛рдорд╛рдВрд╕рд╣ рд╕рд░реНрд╡ рдХреЛрдб рд╕реНрд╡рддрдВрддреНрд░рдкрдгреЗ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХреЗрд▓реЗ рдЖрд╣реЗрдд рднрд╛рдВрдбрд╛рд░.

рд╕реНрддреНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛