SlideShare une entreprise Scribd logo
1  sur  86
Télécharger pour lire hors ligne
Concurrent PHP
in the Etsy API
Matthew Graham
@lapsu
@EtsyAPI Lead
#phpday
2014 April
@lapsu@EtsyAPI
@lapsu@EtsyAPI
$1.3 Billion
Things That Matter
@lapsu@EtsyAPI
@lapsu
Etsy's PHP
www api admin
queues cron
@EtsyAPI
@lapsu
~200 engineers
30+ deploys / day
@EtsyAPI
Also, Rasmus
@lapsu@EtsyAPI
Spoilers
@lapsu
Mobile Clients Are Special
1 Thread != No Concurrency
@EtsyAPI
@lapsu
<motivation>
@EtsyAPI
Premise:
@lapsu
The Future is Mobile
@EtsyAPI
@lapsu
Past
The Future is Mobile
November 2013
@EtsyAPI
@lapsu@EtsyAPI
@EtsyAPI
Mobile Networks Suck
@lapsu
<
@EtsyAPI
Not Mobile
@lapsu
www.etsy.com/shop/AVintageWanderer
@EtsyAPI
Network Performance
@lapsu
3G < 4G
@EtsyAPI
Network Coverage
@lapsu
3G > 4G
@EtsyAPI
Mobile Requests
@lapsu
More != Better
@lapsu@EtsyAPI
@lapsu
1000ms Time To Glass
@EtsyAPI
@lapsu
1000ms
- 900ms
-------------
100ms
Network/Client
------------------------
Server
@EtsyAPI
@lapsu
100ms = Bespoke
+ Concurrent
@EtsyAPI
@lapsu
Single Threads
@EtsyAPI
Concurrency
@lapsu@EtsyAPI
Main “Thread”
Child “Thread” Child “Thread”
@lapsu
</motivation><interface>
@EtsyAPI
Paul goes to Netflix
@lapsu@EtsyAPI
1 View : 1 Bespoke
@lapsu@EtsyAPI
ClientView
Bespoke
View View
Bespoke Bespoke
API
Multiple Clients
@lapsu@EtsyAPI
ClientsView
Bespoke
View View
Bespoke Bespoke
API
Bespoke : Components
@lapsu@EtsyAPI
Bespoke Bespoke Bespoke
API
Item User Shop Favs Tx
Components as REST
@lapsu@EtsyAPI
Bespoke Bespoke
API
Item User Shop Favs Tx
@lapsu
?includes=User
@EtsyAPI
Android User View
@lapsu
function handle($cli, $inp) {
$shop = $cli->shop($inp->user_id);
$favs = $cli->favs($inp->user_id);
$items = $cli->items($shop->shop_id);
Curl_Orchestrator::run(
[$shop,$favs,$items]);
return [$favs,$items];
}
@EtsyAPI
Concurrent Client
@lapsu
function handle($cli, $inp) {
$shop = $cli->shop($inp->user_id);
$favs = $cli->favs($inp->user_id);
$items = $cli->items($shop->shop_id);
Curl_Orchestrator::run(
[$shop,$favs,$items]);
return [$favs,$items];
}
@EtsyAPI
Making Requests
@lapsu
function handle($cli, $inp) {
$shop = $cli->shop($inp->user_id);
$favs = $cli->favs($inp->user_id);
$items = $cli->items($shop->shop_id);
Curl_Orchestrator::run(
[$shop,$favs,$items]);
return [$favs,$items];
}
@EtsyAPI
@lapsu@EtsyAPI
shop
favs
t0 t1
Inputs
@lapsu
function handle($cli, $inp) {
$shop = $cli->shop($inp->user_id);
$favs = $cli->favs($inp->user_id);
$items = $cli->items($shop->shop_id);
Curl_Orchestrator::run(
[$shop,$favs,$items]);
return [$favs,$items];
}
@EtsyAPI
Future Parameters
@lapsu
function handle($cli, $inp) {
$shop = $cli->shop($inp->user_id);
$favs = $cli->favs($inp->user_id);
$items = $cli->items($shop->shop_id);
Curl_Orchestrator::run(
[$shop,$favs,$items]);
return [$favs,$items];
}
@EtsyAPI
@lapsu@EtsyAPI
shop
favs
items
t0 t1 t2 t3 t4
~6 Lines
@lapsu
function handle($cli, $inp) {
$shop = $cli->shop($inp->user_id);
$favs = $cli->favs($inp->user_id);
$items = $cli->items($shop->shop_id);
Curl_Orchestrator::run(
[$shop,$favs,$items]);
return [$favs,$items];
}
@EtsyAPI
@lapsu
</interface><performance>
@EtsyAPI
@lapsu
Web Pages Are Clients Too
@EtsyAPI
Web First
@lapsu@EtsyAPI
API First
@lapsu@EtsyAPI
Android User View
@lapsu
function handle($cli, $inp) {
$shop = $cli->shop($inp->user_id);
$favs = $cli->favs($inp->user_id);
$items = $cli->items($shop->shop_id);
Curl_Orchestrator::run(
[$shop,$favs,$items]);
return [$favs,$items];
}
@EtsyAPI
Desktop Web User View
@lapsu
function handle($cli, $inp) {
$shop = $cli->shop($inp->user_id);
$favs = $cli->favs($inp->user_id);
$items = $cli->items($shop->shop_id);
$teams = $cli->teams($inp->user_id);
Curl_Orchestrator::run(
[$shop,$favs,$items,$teams]);
return [$favs,$items,$teams];
}
@EtsyAPI
@lapsu
Activity Feed
@EtsyAPI
@lapsu
Activity Feed
Page
@EtsyAPI
Home
Page
30s of HTTP Time
@lapsu@EtsyAPI
30s of HTTP Time
@lapsu
880ms Real Time
@EtsyAPI
Components
@lapsu@EtsyAPI
Bespoke Bespoke Bespoke
API
Item User Shop Favs Tx
Components Cache
@lapsu@EtsyAPI
Bespoke Bespoke Bespoke
Cache
API
Item User Shop Favs Tx
Local Call
@lapsu@EtsyAPI
Me
Long Distance Call
@lapsu@EtsyAPI
Atlantic
Ocean User
Long Distance Call
@lapsu@EtsyAPI
Atlantic
Ocean
API
Templates
User
@lapsu
</performance><internals>
@EtsyAPI
@lapsu
curl_multi_*
@EtsyAPI
@lapsu@EtsyAPI
curl?
General Sequence
@lapsu@EtsyAPI
curl_multi_init();
curl_multi_add();
curl_multi_exec();
while (!$done) {
curl_multi_select();
curl_multi_exec();
curl_multi_info_read();
}
curl_multi_init
@lapsu@EtsyAPI
$mh = curl_multi_init();
curl_multi_add_handle
@lapsu@EtsyAPI
$mh = curl_multi_init();
$ch = curl_init($url);
curl_setopt_array($ch, $options);
curl_multi_add_handle($mh, $ch);
@lapsu@EtsyAPI
multi handle
handle handle handle
curl_multi_exec
@lapsu@EtsyAPI
do {
$code = curl_multi_exec($mh, $r);
} while ($code == CURLM_CALL_MULTI_PERFORM);
curl_multi_select
@lapsu@EtsyAPI
$cnt = curl_multi_select($mh, $tmout);
curl_multi_info_read
@lapsu@EtsyAPI
$info = curl_multi_info_read($mh);
$ch = $info['handle'];
$content = curl_multi_getcontent($ch);
@lapsu@EtsyAPI
localhost: Expected
@lapsu@EtsyAPI
R1
R2
R3
t0
Network: Actual
@lapsu@EtsyAPI
R2
R3
t0 t1
R1
curl Protocols
@lapsu@EtsyAPI
HTTP
LDAP
Gopher POP3
IMAP
TELNET TFTP
curl_get_multi_handle_state
@lapsu@EtsyAPI
$state = CURLM_STATE_FIRST;
curl_multi_get_handle_state(
$mh, $ch, $state);
$sent = $state > CURLM_STATE_FIRST
&& $state < CURLM_STATE_PERFORM;
Expected, Actual
@lapsu@EtsyAPI
R1
R2
R3
t0
Revised Sequence
@lapsu@EtsyAPI
curl_multi_init();
curl_multi_add();
while (!$sent) {
curl_multi_exec();
curl_multi_get_handle_state();
}
while (!$done) {
curl_multi_select();
curl_multi_exec();
curl_multi_info_read();
}
Still Headed Upstream
@lapsu@EtsyAPI
Patch URL
@lapsu
bit.ly/etsy_curl_multi_patch
@EtsyAPI
Recursion?
@lapsu@EtsyAPI
Recursion?
@lapsu
No.
@EtsyAPI
Recursion?
@lapsu
No?
Not yet.
@EtsyAPI
Visibility
@lapsu@EtsyAPI
@lapsu
PHP Coroutines
@EtsyAPI
More Code
@lapsu
Available Upon Request
@EtsyAPI
@lapsu
codeascraft.etsy.com
@EtsyAPI
@lapsu
</internals><wrap/>
@EtsyAPI
@lapsu
Address Mobile Challenges
@EtsyAPI
@lapsu
PHP Does Concurrency
@EtsyAPI
PHP Abides
@lapsu@EtsyAPI
Concurrent PHP
in the Etsy API
Matthew Graham
@lapsu
@EtsyAPI Lead
#phpday
2014 April
Thank You
Reminder:
@lapsu
Repeat the questions
@EtsyAPI
@lapsu
SPDY / HTTP 2.0
@EtsyAPI

Contenu connexe

Similaire à Concurrent PHP in the Etsy API

Smarter Interfaces with jQuery (and Drupal)
Smarter Interfaces with jQuery (and Drupal)Smarter Interfaces with jQuery (and Drupal)
Smarter Interfaces with jQuery (and Drupal)aasarava
 
Evolution of API With Blogging
Evolution of API With BloggingEvolution of API With Blogging
Evolution of API With BloggingTakatsugu Shigeta
 
How To Make Money From Apps: Pirate metrics & growth hacking
How To Make Money From Apps: Pirate metrics & growth hackingHow To Make Money From Apps: Pirate metrics & growth hacking
How To Make Money From Apps: Pirate metrics & growth hackingPol Valls Soler
 
jQuery Performance Rules
jQuery Performance RulesjQuery Performance Rules
jQuery Performance Rulesnagarajhubli
 
Build REST API clients for AngularJS
Build REST API clients for AngularJSBuild REST API clients for AngularJS
Build REST API clients for AngularJSAlmog Baku
 
jQuery - Doing it right
jQuery - Doing it rightjQuery - Doing it right
jQuery - Doing it rightgirish82
 
Ep2014 hypermedia APIs
Ep2014 hypermedia APIsEp2014 hypermedia APIs
Ep2014 hypermedia APIsadrianavasiu
 
Powering Content Driven Applications with the World’s Most Popular CMS #ngconf
Powering Content Driven Applications with the World’s Most Popular CMS #ngconfPowering Content Driven Applications with the World’s Most Popular CMS #ngconf
Powering Content Driven Applications with the World’s Most Popular CMS #ngconfRoy Sivan
 
"Managing API Complexity". Matthew Flaming, Temboo
"Managing API Complexity". Matthew Flaming, Temboo"Managing API Complexity". Matthew Flaming, Temboo
"Managing API Complexity". Matthew Flaming, TembooYandex
 
Crafting Quality PHP Applications: an overview (PHPSW March 2018)
Crafting Quality PHP Applications: an overview (PHPSW March 2018)Crafting Quality PHP Applications: an overview (PHPSW March 2018)
Crafting Quality PHP Applications: an overview (PHPSW March 2018)James Titcumb
 
FVCP - Facebook , Twitter and Meetup API / Widgets
FVCP - Facebook , Twitter and Meetup API / WidgetsFVCP - Facebook , Twitter and Meetup API / Widgets
FVCP - Facebook , Twitter and Meetup API / WidgetsPete DuMelle
 
Spyware/Malware FVCP
Spyware/Malware  FVCPSpyware/Malware  FVCP
Spyware/Malware FVCPPete DuMelle
 
August 10th, 2009 Pete De Mulle Twitter
August 10th, 2009 Pete De Mulle TwitterAugust 10th, 2009 Pete De Mulle Twitter
August 10th, 2009 Pete De Mulle TwitterStraight North
 

Similaire à Concurrent PHP in the Etsy API (20)

Smarter Interfaces with jQuery (and Drupal)
Smarter Interfaces with jQuery (and Drupal)Smarter Interfaces with jQuery (and Drupal)
Smarter Interfaces with jQuery (and Drupal)
 
Paypal + symfony
Paypal + symfonyPaypal + symfony
Paypal + symfony
 
SlideShare Instant
SlideShare InstantSlideShare Instant
SlideShare Instant
 
SlideShare Instant
SlideShare InstantSlideShare Instant
SlideShare Instant
 
Evolution of API With Blogging
Evolution of API With BloggingEvolution of API With Blogging
Evolution of API With Blogging
 
How To Make Money From Apps: Pirate metrics & growth hacking
How To Make Money From Apps: Pirate metrics & growth hackingHow To Make Money From Apps: Pirate metrics & growth hacking
How To Make Money From Apps: Pirate metrics & growth hacking
 
jQuery Performance Rules
jQuery Performance RulesjQuery Performance Rules
jQuery Performance Rules
 
Web Scraping with PHP
Web Scraping with PHPWeb Scraping with PHP
Web Scraping with PHP
 
Build REST API clients for AngularJS
Build REST API clients for AngularJSBuild REST API clients for AngularJS
Build REST API clients for AngularJS
 
jQuery - Doing it right
jQuery - Doing it rightjQuery - Doing it right
jQuery - Doing it right
 
Ep2014 hypermedia APIs
Ep2014 hypermedia APIsEp2014 hypermedia APIs
Ep2014 hypermedia APIs
 
Powering Content Driven Applications with the World’s Most Popular CMS #ngconf
Powering Content Driven Applications with the World’s Most Popular CMS #ngconfPowering Content Driven Applications with the World’s Most Popular CMS #ngconf
Powering Content Driven Applications with the World’s Most Popular CMS #ngconf
 
"Managing API Complexity". Matthew Flaming, Temboo
"Managing API Complexity". Matthew Flaming, Temboo"Managing API Complexity". Matthew Flaming, Temboo
"Managing API Complexity". Matthew Flaming, Temboo
 
Further Php
Further PhpFurther Php
Further Php
 
Crafting Quality PHP Applications: an overview (PHPSW March 2018)
Crafting Quality PHP Applications: an overview (PHPSW March 2018)Crafting Quality PHP Applications: an overview (PHPSW March 2018)
Crafting Quality PHP Applications: an overview (PHPSW March 2018)
 
FVCP - Facebook , Twitter and Meetup API / Widgets
FVCP - Facebook , Twitter and Meetup API / WidgetsFVCP - Facebook , Twitter and Meetup API / Widgets
FVCP - Facebook , Twitter and Meetup API / Widgets
 
Spyware/Malware FVCP
Spyware/Malware  FVCPSpyware/Malware  FVCP
Spyware/Malware FVCP
 
August 10th, 2009 Pete De Mulle Twitter
August 10th, 2009 Pete De Mulle TwitterAugust 10th, 2009 Pete De Mulle Twitter
August 10th, 2009 Pete De Mulle Twitter
 
Web development
Web developmentWeb development
Web development
 
Playing With The Web
Playing With The WebPlaying With The Web
Playing With The Web
 

Dernier

Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024StefanoLambiase
 
Cyber security and its impact on E commerce
Cyber security and its impact on E commerceCyber security and its impact on E commerce
Cyber security and its impact on E commercemanigoyal112
 
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdf
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdfInnovate and Collaborate- Harnessing the Power of Open Source Software.pdf
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdfYashikaSharma391629
 
Sending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdfSending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdf31events.com
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmSujith Sukumaran
 
Post Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on IdentityPost Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on Identityteam-WIBU
 
React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaHanief Utama
 
20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...
20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...
20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...Akihiro Suda
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfDrew Moseley
 
What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...Technogeeks
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesPhilip Schwarz
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsAhmed Mohamed
 
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...OnePlan Solutions
 
Introduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfIntroduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfFerryKemperman
 
Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Hr365.us smith
 
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...confluent
 
A healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfA healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfMarharyta Nedzelska
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...OnePlan Solutions
 
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Cizo Technology Services
 

Dernier (20)

Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
 
Cyber security and its impact on E commerce
Cyber security and its impact on E commerceCyber security and its impact on E commerce
Cyber security and its impact on E commerce
 
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdf
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdfInnovate and Collaborate- Harnessing the Power of Open Source Software.pdf
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdf
 
Sending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdfSending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdf
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalm
 
Post Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on IdentityPost Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on Identity
 
React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief Utama
 
20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...
20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...
20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdf
 
What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a series
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML Diagrams
 
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
 
Introduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfIntroduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdf
 
Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)
 
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
 
A healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfA healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdf
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
 
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
 
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort ServiceHot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
 

Concurrent PHP in the Etsy API