SlideShare uma empresa Scribd logo
1 de 35
Написание multi-
process runtime
приложений на PHP
Карпенко Игорь
CONCERT.UA
Написание multi-process runtime
приложений на PHP
• WAMP – The Web Application Messaging Protocol
• Crossbar.io – open source WAMP router
• voryx/Thruway – WAMP client implementation (PHP)
• WyriHaximus/reactphp-child-process-pool
WAMP - Web Application Messaging Protocol
WAMP – протокол прикладного уровня, реализует 2 паттерна:
RPC – Remote Procedure Call
PubSub – Publish/Subscribe
Работает поверх протокола TCP/IP, по умолчанию в качестве транспорта использует
Websockets.
WAMP - Web Application Messaging Protocol
Имеет структуру взаимодействия «клиент-клиент» + маршрутизатор (роутер).
Клиенты подключаются к маршрутизатору
Маршрутизатор выдает клиентам права на текущий сеанс
Клиенты отправляют сообщение маршрутизатору, он перенаправляет их получателям
WAMP - Web Application Messaging Protocol
RPC & Pub/Sub из коробки
Открытый стандарт
Web Native
Cross language
WAMP - Web Application Messaging Protocol
Предоставляет открытый стандарт обмена сообщениями между отдельными компонентами
приложения в реальном времени.
WAMP - Web Application Messaging Protocol
Routing of both: events and rpc calls in one protocol
Вызов RPC – Старый добрый подход
Чтобы Caller мог вызвать Callee:
Вызов RPC – Старый добрый подход
Чтобы Caller мог вызвать Callee:
Caller должен знать, где находится Callee
Вызов RPC – Старый добрый подход
Чтобы Caller мог вызвать Callee:
Caller должен знать, где находится Callee
Должен знать, как обратиться к Callee
Вызов RPC – Старый добрый подход
Чтобы Caller мог вызвать Callee:
Caller должен знать, где находится Callee
Должен знать, как обратиться к Callee
Тесная связь между Callee и Caller ведет к усложнению приложения.
Вызов RPC – WAMP
Вызов RPC – WAMP
Caller и Callee – общаются через
посредника, которым выступает Dealer.
Вызов RPC – WAMP
Когда Caller хочет вызвать Callee, он обращается к Dealer, предоставляя
ему URI вызываемой процедуры и аргументы вызова.
PubSub – WAMP
Когда Caller хочет вызвать Callee, он обращается к Dealer, предоставляя
ему URI вызываемой процедуры и аргументы вызова.
PubSub – WAMP
Publisher отправляет информацию в абстрактный “topic”.
Subscriber подписывается на определенные “topic”.
Broker знает, кто на что подписан.
PubSub – WAMP
Publisher отправляет информацию в абстрактный “topic”.
Subscriber подписывается на определенные “topic”.
Broker знает, кто на что подписан.
В модели Pub/Sub определение подписчиков и направление
информации подписчикам – называется routing.
WAMP Router
Crossbar.IO - An advanced, open-source
WAMP router
Crossbar.IO - An advanced, open-source
WAMP router
Принимает соединения от WAMP клиентов и занимается маршрутизацией вызовов и событий
между ними.
Crossbar.IO - An advanced, open-source
WAMP router
Принимает соединения от WAMP клиентов и занимается маршрутизацией вызовов и событий
между ними.
RPC & Pub/Sub Routing
Realms (domains)
Multi-transport (WebSockets, Raw sockets, HTTP Long Poll)
Thruway - Open source client and router
implementation of WAMP, for PHP
Использует ReactPHP.
Отлично подходит для реализации real-time приложения на PHP.
Thruway - Open source client and router
implementation of WAMP, for PHP
• URI: com.vticket.shoppingcart.create
• [{“eventId”: 2008, “userId”: 280}]
• public function __invoke(RequestInterface $requestMessage)
{
$eventId = $requestMessage->getAttribute('eventId');
$sellerId = $requestMessage->getAttribute('userId');
$order = $this->orderFactory->makeOrder($eventId, $sellerId);
$this->orderRepository->save($order);
return $this->response->response($order);
}
WyriHaximus/reactphp-child-process-pool
WyriHaximus/reactphp-child-process-pool
Компонент для ReactPHP, который позволяет реализовать child process pooling и организовать
обмен сообщениями между родительским host-процессом и его дочерними процессами.
WyriHaximus/reactphp-child-process-pool
Компонент для ReactPHP, который позволяет реализовать child process pooling и организовать
обмен сообщениями между родительским host-процессом и его дочерними процессами.
Автор разработал multi-process messenger, который позволяет реализовать RPC-like
коммуникацию между родительским и дочерними процессами.
WyriHaximus/reactphp-child-process-pool
”react/child-process is very flexible and can work a lot of ways but sometimes you don't want to be
bothered with the details of how it works and just want a simpler API to do that.”
Проект вырос из обертки над react/child-process, которая брала на себе всю работу по
коммуникации между процессами, в отдельный компонент для ReactPHP.
WyriHaximus/reactphp-child-process-pool
Предоставляет множество фабрик, которые позволяет создавать разные пуллы процессов.
WyriHaximus/reactphp-child-process-pool
Dummy – пулл-заглушка
$loop = EventLoopFactory::create();
Dummy::createFromClass(ReturnChild::class, $loop)->then(function (PoolInterface $pool) {
// Now you have a Dummy pool, which does absolutely nothing
});
WyriHaximus/reactphp-child-process-pool
Fixed – пулл с фиксированным количеством дочерних процессов
$loop = EventLoopFactory::create();
$options = [ Options::SIZE => 5, ];
Fixed::createFromClass(ReturnChild::class, $loop, $options)->then(function (PoolInterface $pool) {
// You now have a pull with 5 always running child processes
});
WyriHaximus/reactphp-child-process-pool
Flexible – пулл с плавающим количеством дочерних процессов
$loop = EventLoopFactory::create();
$options = [ Options::MIN_SIZE => 0, Options::MAX_SIZE => 5, Options::TTL => 0, ];
Flexible::createFromClass(ReturnChild::class, $loop, $options)->then(function (PoolInterface $pool) {
// You now have a pool that spawns no child processes on start.
// But when you call rpc a new child process will be started for
// as long as the pool has work in the queue. With a maximum of five.
});
Multi-process WAMP application
ApplicationHostProccess.php
public function run($action, ServerRequestInterface $request) : PromiseInterface
{
$msgFactory = $this->msgFactory;
return $this->pool->rpc(Factory::rpc(
ApplicationProcess::RPC_RUN,
[
ChildProcessApp::PAYLOAD_ACTION => $action,
ChildProcessApp::PAYLOAD_REQUEST => $request->getAttributes()
]
))->then(
function (Payload $payload = null) use ($msgFactory) {
$result = $payload ? $payload->getPayload() : [];
return $msgFactory->makeResponseMessage($result);
},
function (Exception $exception) use ($msgFactory) {
return $msgFactory->makeResponseMessageByThrowable($exception);
}
);
}
Multi-process WAMP application
ApplicationProccess.php
public function __construct(Messenger $messenger, LoopInterface $loop)
{
$messenger->registerRpc(static::RPC_BUILD, function (Payload $payload) {
$build = $payload[static::PARAM_BUILD];
$config = $payload[static::PARAM_CONFIG];
$this->app = $this->build($build, $config);
});
$messenger->registerRpc(static::RPC_RUN, function (Payload $payload) {
return resolve($this->app->run($payload));
});
}
REFERENCES
http://wamp-proto.org/
http://crossbar.io/
https://github.com/voryx/Thruway
https://github.com/WyriHaximus/reactphp-child-process-pool
https://github.com/WyriHaximus/reactphp-doctrine-dbal
Написание multi-process runtime
приложений на PHP
<?php
exit(0);

Mais conteúdo relacionado

Semelhante a Igor Karpenko "Development of multi-process runtime applications in PHP"

Phalcon - самый быстрый PHP Framework
Phalcon - самый быстрый PHP FrameworkPhalcon - самый быстрый PHP Framework
Phalcon - самый быстрый PHP FrameworkOleksandr Torosh
 
6 создание распределенных приложений по технологии remoting
6 создание распределенных приложений по технологии remoting6 создание распределенных приложений по технологии remoting
6 создание распределенных приложений по технологии remotingKewpaN
 
SOA: Строим свой service mesh
SOA: Строим свой service meshSOA: Строим свой service mesh
SOA: Строим свой service meshIvan Kruglov
 
SOA: строим свой service mesh / Иван Круглов (Booking.com)
SOA: строим свой service mesh / Иван Круглов (Booking.com)SOA: строим свой service mesh / Иван Круглов (Booking.com)
SOA: строим свой service mesh / Иван Круглов (Booking.com)Ontico
 
Сетевая безопасность в 2014: новые проблемы и их решение на базе Cisco
Сетевая безопасность в 2014: новые проблемы и их решение на базе CiscoСетевая безопасность в 2014: новые проблемы и их решение на базе Cisco
Сетевая безопасность в 2014: новые проблемы и их решение на базе CiscoSkillFactory
 
Быстрое построение backendов c помощью реактивных потоков
Быстрое построение backendов c помощью реактивных потоковБыстрое построение backendов c помощью реактивных потоков
Быстрое построение backendов c помощью реактивных потоковCodeFest
 
Catalyst – MVC framework на Perl (RIT 2008)
Catalyst – MVC framework на Perl  (RIT 2008)Catalyst – MVC framework на Perl  (RIT 2008)
Catalyst – MVC framework на Perl (RIT 2008)Sergey Skvortsov
 
SignalR
SignalRSignalR
SignalRmstDe3
 
Новые перспективы Cisco ASR 9000 в роли BNG
Новые перспективы Cisco ASR 9000 в роли BNGНовые перспективы Cisco ASR 9000 в роли BNG
Новые перспективы Cisco ASR 9000 в роли BNGCisco Russia
 
FT & HA Rails приложений приложений — это просто
FT & HA Rails приложений приложений — это простоFT & HA Rails приложений приложений — это просто
FT & HA Rails приложений приложений — это простоАлександр Ежов
 
Кулинарный мастер-класс "Готовим безопасный офис нового поколения на основе C...
Кулинарный мастер-класс "Готовим безопасный офис нового поколения на основе C...Кулинарный мастер-класс "Готовим безопасный офис нового поколения на основе C...
Кулинарный мастер-класс "Готовим безопасный офис нового поколения на основе C...Cisco Russia
 
Nginx Igor Sysoev
Nginx   Igor SysoevNginx   Igor Sysoev
Nginx Igor SysoevMedia Gorod
 
API: взгляд потребителя
API: взгляд потребителяAPI: взгляд потребителя
API: взгляд потребителяOleg Alistratov
 
Building better APIs on rails
Building better APIs on railsBuilding better APIs on rails
Building better APIs on railsRoman Gorel
 
Кэширование
КэшированиеКэширование
КэшированиеIgor Kapkov
 
Roman Gorel: Building better APIs on Rails.
Roman Gorel: Building better APIs on Rails.Roman Gorel: Building better APIs on Rails.
Roman Gorel: Building better APIs on Rails.Sphere Consulting Inc
 
Доставка данных в реальном времени.
Доставка данных в реальном времени. Доставка данных в реальном времени.
Доставка данных в реальном времени. beshkenadze
 
Triggermesh - FaaS платформа на Kubernetes
Triggermesh - FaaS платформа на KubernetesTriggermesh - FaaS платформа на Kubernetes
Triggermesh - FaaS платформа на KubernetesMad Devs
 
Новые возможности Cisco Video Communication Server (Expressway)
Новые возможности Cisco Video Communication Server (Expressway)Новые возможности Cisco Video Communication Server (Expressway)
Новые возможности Cisco Video Communication Server (Expressway)Cisco Russia
 

Semelhante a Igor Karpenko "Development of multi-process runtime applications in PHP" (20)

Phalcon - самый быстрый PHP Framework
Phalcon - самый быстрый PHP FrameworkPhalcon - самый быстрый PHP Framework
Phalcon - самый быстрый PHP Framework
 
6 создание распределенных приложений по технологии remoting
6 создание распределенных приложений по технологии remoting6 создание распределенных приложений по технологии remoting
6 создание распределенных приложений по технологии remoting
 
PHP: SAPI
PHP: SAPIPHP: SAPI
PHP: SAPI
 
SOA: Строим свой service mesh
SOA: Строим свой service meshSOA: Строим свой service mesh
SOA: Строим свой service mesh
 
SOA: строим свой service mesh / Иван Круглов (Booking.com)
SOA: строим свой service mesh / Иван Круглов (Booking.com)SOA: строим свой service mesh / Иван Круглов (Booking.com)
SOA: строим свой service mesh / Иван Круглов (Booking.com)
 
Сетевая безопасность в 2014: новые проблемы и их решение на базе Cisco
Сетевая безопасность в 2014: новые проблемы и их решение на базе CiscoСетевая безопасность в 2014: новые проблемы и их решение на базе Cisco
Сетевая безопасность в 2014: новые проблемы и их решение на базе Cisco
 
Быстрое построение backendов c помощью реактивных потоков
Быстрое построение backendов c помощью реактивных потоковБыстрое построение backendов c помощью реактивных потоков
Быстрое построение backendов c помощью реактивных потоков
 
Catalyst – MVC framework на Perl (RIT 2008)
Catalyst – MVC framework на Perl  (RIT 2008)Catalyst – MVC framework на Perl  (RIT 2008)
Catalyst – MVC framework на Perl (RIT 2008)
 
SignalR
SignalRSignalR
SignalR
 
Новые перспективы Cisco ASR 9000 в роли BNG
Новые перспективы Cisco ASR 9000 в роли BNGНовые перспективы Cisco ASR 9000 в роли BNG
Новые перспективы Cisco ASR 9000 в роли BNG
 
FT & HA Rails приложений приложений — это просто
FT & HA Rails приложений приложений — это простоFT & HA Rails приложений приложений — это просто
FT & HA Rails приложений приложений — это просто
 
Кулинарный мастер-класс "Готовим безопасный офис нового поколения на основе C...
Кулинарный мастер-класс "Готовим безопасный офис нового поколения на основе C...Кулинарный мастер-класс "Готовим безопасный офис нового поколения на основе C...
Кулинарный мастер-класс "Готовим безопасный офис нового поколения на основе C...
 
Nginx Igor Sysoev
Nginx   Igor SysoevNginx   Igor Sysoev
Nginx Igor Sysoev
 
API: взгляд потребителя
API: взгляд потребителяAPI: взгляд потребителя
API: взгляд потребителя
 
Building better APIs on rails
Building better APIs on railsBuilding better APIs on rails
Building better APIs on rails
 
Кэширование
КэшированиеКэширование
Кэширование
 
Roman Gorel: Building better APIs on Rails.
Roman Gorel: Building better APIs on Rails.Roman Gorel: Building better APIs on Rails.
Roman Gorel: Building better APIs on Rails.
 
Доставка данных в реальном времени.
Доставка данных в реальном времени. Доставка данных в реальном времени.
Доставка данных в реальном времени.
 
Triggermesh - FaaS платформа на Kubernetes
Triggermesh - FaaS платформа на KubernetesTriggermesh - FaaS платформа на Kubernetes
Triggermesh - FaaS платформа на Kubernetes
 
Новые возможности Cisco Video Communication Server (Expressway)
Новые возможности Cisco Video Communication Server (Expressway)Новые возможности Cisco Video Communication Server (Expressway)
Новые возможности Cisco Video Communication Server (Expressway)
 

Mais de Fwdays

"How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y...
"How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y..."How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y...
"How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y...Fwdays
 
"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii
"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii
"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil TopchiiFwdays
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 
"What is a RAG system and how to build it",Dmytro Spodarets
"What is a RAG system and how to build it",Dmytro Spodarets"What is a RAG system and how to build it",Dmytro Spodarets
"What is a RAG system and how to build it",Dmytro SpodaretsFwdays
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
"Distributed graphs and microservices in Prom.ua", Maksym Kindritskyi
"Distributed graphs and microservices in Prom.ua",  Maksym Kindritskyi"Distributed graphs and microservices in Prom.ua",  Maksym Kindritskyi
"Distributed graphs and microservices in Prom.ua", Maksym KindritskyiFwdays
 
"Rethinking the existing data loading and processing process as an ETL exampl...
"Rethinking the existing data loading and processing process as an ETL exampl..."Rethinking the existing data loading and processing process as an ETL exampl...
"Rethinking the existing data loading and processing process as an ETL exampl...Fwdays
 
"How Ukrainian IT specialist can go on vacation abroad without crossing the T...
"How Ukrainian IT specialist can go on vacation abroad without crossing the T..."How Ukrainian IT specialist can go on vacation abroad without crossing the T...
"How Ukrainian IT specialist can go on vacation abroad without crossing the T...Fwdays
 
"The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ...
"The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ..."The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ...
"The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ...Fwdays
 
"[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu...
"[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu..."[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu...
"[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu...Fwdays
 
"[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care...
"[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care..."[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care...
"[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care...Fwdays
 
"4 horsemen of the apocalypse of working relationships (+ antidotes to them)"...
"4 horsemen of the apocalypse of working relationships (+ antidotes to them)"..."4 horsemen of the apocalypse of working relationships (+ antidotes to them)"...
"4 horsemen of the apocalypse of working relationships (+ antidotes to them)"...Fwdays
 
"Reconnecting with Purpose: Rediscovering Job Interest after Burnout", Anast...
"Reconnecting with Purpose: Rediscovering Job Interest after Burnout",  Anast..."Reconnecting with Purpose: Rediscovering Job Interest after Burnout",  Anast...
"Reconnecting with Purpose: Rediscovering Job Interest after Burnout", Anast...Fwdays
 
"Mentoring 101: How to effectively invest experience in the success of others...
"Mentoring 101: How to effectively invest experience in the success of others..."Mentoring 101: How to effectively invest experience in the success of others...
"Mentoring 101: How to effectively invest experience in the success of others...Fwdays
 
"Mission (im) possible: How to get an offer in 2024?", Oleksandra Myronova
"Mission (im) possible: How to get an offer in 2024?",  Oleksandra Myronova"Mission (im) possible: How to get an offer in 2024?",  Oleksandra Myronova
"Mission (im) possible: How to get an offer in 2024?", Oleksandra MyronovaFwdays
 
"Why have we learned how to package products, but not how to 'package ourselv...
"Why have we learned how to package products, but not how to 'package ourselv..."Why have we learned how to package products, but not how to 'package ourselv...
"Why have we learned how to package products, but not how to 'package ourselv...Fwdays
 
"How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin...
"How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin..."How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin...
"How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin...Fwdays
 

Mais de Fwdays (20)

"How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y...
"How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y..."How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y...
"How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y...
 
"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii
"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii
"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
"What is a RAG system and how to build it",Dmytro Spodarets
"What is a RAG system and how to build it",Dmytro Spodarets"What is a RAG system and how to build it",Dmytro Spodarets
"What is a RAG system and how to build it",Dmytro Spodarets
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
"Distributed graphs and microservices in Prom.ua", Maksym Kindritskyi
"Distributed graphs and microservices in Prom.ua",  Maksym Kindritskyi"Distributed graphs and microservices in Prom.ua",  Maksym Kindritskyi
"Distributed graphs and microservices in Prom.ua", Maksym Kindritskyi
 
"Rethinking the existing data loading and processing process as an ETL exampl...
"Rethinking the existing data loading and processing process as an ETL exampl..."Rethinking the existing data loading and processing process as an ETL exampl...
"Rethinking the existing data loading and processing process as an ETL exampl...
 
"How Ukrainian IT specialist can go on vacation abroad without crossing the T...
"How Ukrainian IT specialist can go on vacation abroad without crossing the T..."How Ukrainian IT specialist can go on vacation abroad without crossing the T...
"How Ukrainian IT specialist can go on vacation abroad without crossing the T...
 
"The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ...
"The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ..."The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ...
"The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ...
 
"[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu...
"[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu..."[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu...
"[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu...
 
"[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care...
"[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care..."[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care...
"[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care...
 
"4 horsemen of the apocalypse of working relationships (+ antidotes to them)"...
"4 horsemen of the apocalypse of working relationships (+ antidotes to them)"..."4 horsemen of the apocalypse of working relationships (+ antidotes to them)"...
"4 horsemen of the apocalypse of working relationships (+ antidotes to them)"...
 
"Reconnecting with Purpose: Rediscovering Job Interest after Burnout", Anast...
"Reconnecting with Purpose: Rediscovering Job Interest after Burnout",  Anast..."Reconnecting with Purpose: Rediscovering Job Interest after Burnout",  Anast...
"Reconnecting with Purpose: Rediscovering Job Interest after Burnout", Anast...
 
"Mentoring 101: How to effectively invest experience in the success of others...
"Mentoring 101: How to effectively invest experience in the success of others..."Mentoring 101: How to effectively invest experience in the success of others...
"Mentoring 101: How to effectively invest experience in the success of others...
 
"Mission (im) possible: How to get an offer in 2024?", Oleksandra Myronova
"Mission (im) possible: How to get an offer in 2024?",  Oleksandra Myronova"Mission (im) possible: How to get an offer in 2024?",  Oleksandra Myronova
"Mission (im) possible: How to get an offer in 2024?", Oleksandra Myronova
 
"Why have we learned how to package products, but not how to 'package ourselv...
"Why have we learned how to package products, but not how to 'package ourselv..."Why have we learned how to package products, but not how to 'package ourselv...
"Why have we learned how to package products, but not how to 'package ourselv...
 
"How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin...
"How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin..."How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin...
"How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin...
 

Igor Karpenko "Development of multi-process runtime applications in PHP"

  • 1. Написание multi- process runtime приложений на PHP Карпенко Игорь CONCERT.UA
  • 2. Написание multi-process runtime приложений на PHP • WAMP – The Web Application Messaging Protocol • Crossbar.io – open source WAMP router • voryx/Thruway – WAMP client implementation (PHP) • WyriHaximus/reactphp-child-process-pool
  • 3. WAMP - Web Application Messaging Protocol WAMP – протокол прикладного уровня, реализует 2 паттерна: RPC – Remote Procedure Call PubSub – Publish/Subscribe Работает поверх протокола TCP/IP, по умолчанию в качестве транспорта использует Websockets.
  • 4. WAMP - Web Application Messaging Protocol Имеет структуру взаимодействия «клиент-клиент» + маршрутизатор (роутер). Клиенты подключаются к маршрутизатору Маршрутизатор выдает клиентам права на текущий сеанс Клиенты отправляют сообщение маршрутизатору, он перенаправляет их получателям
  • 5. WAMP - Web Application Messaging Protocol RPC & Pub/Sub из коробки Открытый стандарт Web Native Cross language
  • 6. WAMP - Web Application Messaging Protocol Предоставляет открытый стандарт обмена сообщениями между отдельными компонентами приложения в реальном времени.
  • 7. WAMP - Web Application Messaging Protocol Routing of both: events and rpc calls in one protocol
  • 8. Вызов RPC – Старый добрый подход Чтобы Caller мог вызвать Callee:
  • 9. Вызов RPC – Старый добрый подход Чтобы Caller мог вызвать Callee: Caller должен знать, где находится Callee
  • 10. Вызов RPC – Старый добрый подход Чтобы Caller мог вызвать Callee: Caller должен знать, где находится Callee Должен знать, как обратиться к Callee
  • 11. Вызов RPC – Старый добрый подход Чтобы Caller мог вызвать Callee: Caller должен знать, где находится Callee Должен знать, как обратиться к Callee Тесная связь между Callee и Caller ведет к усложнению приложения.
  • 13. Вызов RPC – WAMP Caller и Callee – общаются через посредника, которым выступает Dealer.
  • 14. Вызов RPC – WAMP Когда Caller хочет вызвать Callee, он обращается к Dealer, предоставляя ему URI вызываемой процедуры и аргументы вызова.
  • 15. PubSub – WAMP Когда Caller хочет вызвать Callee, он обращается к Dealer, предоставляя ему URI вызываемой процедуры и аргументы вызова.
  • 16. PubSub – WAMP Publisher отправляет информацию в абстрактный “topic”. Subscriber подписывается на определенные “topic”. Broker знает, кто на что подписан.
  • 17. PubSub – WAMP Publisher отправляет информацию в абстрактный “topic”. Subscriber подписывается на определенные “topic”. Broker знает, кто на что подписан. В модели Pub/Sub определение подписчиков и направление информации подписчикам – называется routing.
  • 19. Crossbar.IO - An advanced, open-source WAMP router
  • 20. Crossbar.IO - An advanced, open-source WAMP router Принимает соединения от WAMP клиентов и занимается маршрутизацией вызовов и событий между ними.
  • 21. Crossbar.IO - An advanced, open-source WAMP router Принимает соединения от WAMP клиентов и занимается маршрутизацией вызовов и событий между ними. RPC & Pub/Sub Routing Realms (domains) Multi-transport (WebSockets, Raw sockets, HTTP Long Poll)
  • 22. Thruway - Open source client and router implementation of WAMP, for PHP Использует ReactPHP. Отлично подходит для реализации real-time приложения на PHP.
  • 23. Thruway - Open source client and router implementation of WAMP, for PHP • URI: com.vticket.shoppingcart.create • [{“eventId”: 2008, “userId”: 280}] • public function __invoke(RequestInterface $requestMessage) { $eventId = $requestMessage->getAttribute('eventId'); $sellerId = $requestMessage->getAttribute('userId'); $order = $this->orderFactory->makeOrder($eventId, $sellerId); $this->orderRepository->save($order); return $this->response->response($order); }
  • 25. WyriHaximus/reactphp-child-process-pool Компонент для ReactPHP, который позволяет реализовать child process pooling и организовать обмен сообщениями между родительским host-процессом и его дочерними процессами.
  • 26. WyriHaximus/reactphp-child-process-pool Компонент для ReactPHP, который позволяет реализовать child process pooling и организовать обмен сообщениями между родительским host-процессом и его дочерними процессами. Автор разработал multi-process messenger, который позволяет реализовать RPC-like коммуникацию между родительским и дочерними процессами.
  • 27. WyriHaximus/reactphp-child-process-pool ”react/child-process is very flexible and can work a lot of ways but sometimes you don't want to be bothered with the details of how it works and just want a simpler API to do that.” Проект вырос из обертки над react/child-process, которая брала на себе всю работу по коммуникации между процессами, в отдельный компонент для ReactPHP.
  • 28. WyriHaximus/reactphp-child-process-pool Предоставляет множество фабрик, которые позволяет создавать разные пуллы процессов.
  • 29. WyriHaximus/reactphp-child-process-pool Dummy – пулл-заглушка $loop = EventLoopFactory::create(); Dummy::createFromClass(ReturnChild::class, $loop)->then(function (PoolInterface $pool) { // Now you have a Dummy pool, which does absolutely nothing });
  • 30. WyriHaximus/reactphp-child-process-pool Fixed – пулл с фиксированным количеством дочерних процессов $loop = EventLoopFactory::create(); $options = [ Options::SIZE => 5, ]; Fixed::createFromClass(ReturnChild::class, $loop, $options)->then(function (PoolInterface $pool) { // You now have a pull with 5 always running child processes });
  • 31. WyriHaximus/reactphp-child-process-pool Flexible – пулл с плавающим количеством дочерних процессов $loop = EventLoopFactory::create(); $options = [ Options::MIN_SIZE => 0, Options::MAX_SIZE => 5, Options::TTL => 0, ]; Flexible::createFromClass(ReturnChild::class, $loop, $options)->then(function (PoolInterface $pool) { // You now have a pool that spawns no child processes on start. // But when you call rpc a new child process will be started for // as long as the pool has work in the queue. With a maximum of five. });
  • 32. Multi-process WAMP application ApplicationHostProccess.php public function run($action, ServerRequestInterface $request) : PromiseInterface { $msgFactory = $this->msgFactory; return $this->pool->rpc(Factory::rpc( ApplicationProcess::RPC_RUN, [ ChildProcessApp::PAYLOAD_ACTION => $action, ChildProcessApp::PAYLOAD_REQUEST => $request->getAttributes() ] ))->then( function (Payload $payload = null) use ($msgFactory) { $result = $payload ? $payload->getPayload() : []; return $msgFactory->makeResponseMessage($result); }, function (Exception $exception) use ($msgFactory) { return $msgFactory->makeResponseMessageByThrowable($exception); } ); }
  • 33. Multi-process WAMP application ApplicationProccess.php public function __construct(Messenger $messenger, LoopInterface $loop) { $messenger->registerRpc(static::RPC_BUILD, function (Payload $payload) { $build = $payload[static::PARAM_BUILD]; $config = $payload[static::PARAM_CONFIG]; $this->app = $this->build($build, $config); }); $messenger->registerRpc(static::RPC_RUN, function (Payload $payload) { return resolve($this->app->run($payload)); }); }