SlideShare a Scribd company logo
Distributed
Applications With
Perl & Gearman
Issac Goldstand
issac@itsgoodconsulting.com
ABOUT THE PRESENTOR

http://linkedin.com/in/margol
60 seconds before we get started…
Why Distributed?
 Allow



horizontal scaling of compute nodes

Normal resources (CPU, RAM, Disk)
Other resources (specialized HW, SW)

 True

asynchronous worker processing
 Cross-Language support
 Redundant application availability
Gearman Architecture
Worker
Worker

Server

Client

Server (Cluster)

Client

Server

Worker

Worker Pool
Example 1 – Video Processing



User uploads a video
Server processes the video






Server must transcode the video to
several pre-set resolutions/codecs
Server must extract sample still images
Server must run speech-to-text
recognition to extract subtitles (closed
captions)

Once all of that is completed, server
must update the video metadata to
contain all of the newly available
data and metadata
Example 2 – Map/Reduce Style Big Data
 User

searches for information

Server must search catalog 1
 Server must search catalog 2
…
 Server must search catalog n


 Server

must return combined
search results to user
Example 3 – AntiVirus Scanner


User uploads a file
Server must scan with McAfee
 Server must scan with Norton 360
 Server must scan with Sophos
…
 Server must scan with Engine XYZ




Server returns scan results to user
Gearman Performance Stats
 Collected

in October 2013 (https://groups.google.com/forum/#!topic/gearman/ror1rd6EGX0)
 DealNews – 40 foreground tasks/sec (2 datacenters, 4
servers, 350 workers)
 Etsy – 1000 tasks/sec (2 datacenters, 4 servers, 40 workers)
 Shazam – 10K tasks/sec
 From

my own experience – 30 tasks/sec (1 datacenter, 1
server, 240 workers)
Gearman in Perl
 Gearman

/ Gearman::Server (PP)
 Gearman::XS (“official” libgearman)
 AnyEvent::Gearman and AnyEvent::Gearman::Client (not
the same)
 They aren’t 100% up-to-date
 They aren’t 100% feature-compatible
 The first two are both (individually) good for 90% of use
cases (in my personal experience )
Gearman in other languages










C/C++ - official libgearman+ CLI
PHP – GearmanManager – well maintained
framework, PHP_Gearman (PECL), Net_Gearman (Pure PHP)
Node.JS
.NET/C#
JAVA
Python
UDFs – MySQL, PostgreSQL, Drizzle
Write your own to implement the Gearman binary protocol
Creating a worker
use strict;
use warnings;
use Gearman::Worker;
my $worker = Gearman::Worker->new;
$worker->job_servers('127.0.0.1:4730');
$worker->register_function('say_hello', &hello);
$worker->work ; # will never return
sub hello {
my $arg = $_[0]->arg;
return "Hello, $argn";
}
Testing the worker
[issac@localhost ~]$ gearman -f say_hello 'world'
Hello, world
[issac@localhost ~]$
Writing a client
use strict;
use warnings;
use Gearman::Client;
my $client = Gearman::Client->new;
$client->job_servers('127.0.0.1:4730');
print ${$client->do_task(say_hello => 'world')};
# do_task returns a reference to the response
Writing an asynchronous client
use strict;
use warnings;
use Gearman::Client;
my $client = Gearman::Client->new;
$client->job_servers('127.0.0.1:4730');
my $tasks = $client->new_task_set;
$tasks->add_task(say_hello => 'world', {
on_complete => &done
});
$tasks->wait;
sub done {
print ${$_[0]};
}
Worker response (packet) types
 SUCCESS
 FAIL
 STATUS
 DATA
 EXCEPTION*

 WARNING*
A more sophisticated worker 1/3
use
use
use
use

strict;
warnings;
Gearman::XS qw(:constants);
Gearman::XS::Worker;

my $worker = new Gearman::XS::Worker;
my $ret = $worker->add_server('127.0.0.1');
if ($ret != GEARMAN_SUCCESS) {
printf(STDERR "%sn", $worker->error());
exit(1);
}
$worker->add_options(GEARMAN_WORKER_NON_BLOCKING);
$worker->set_timeout(500);
A more sophisticated worker 2/3
$ret = $worker->add_function("hello", 3, &hello, {});
$ret = $worker->add_function("uhoh", 3, &uhoh, {});
if ($ret != GEARMAN_SUCCESS) {
printf(STDERR "%sn", $worker->error());
}
my $go = 1;
$SIG{TERM} = sub {print "Caught SIGTERMn";$go = 0;};
while ($go) {
my $ret = $worker->work(); # will return after 500ms since we set timeout + nonblocking mode above
if (!($ret == GEARMAN_SUCCESS ||
$ret == GEARMAN_IO_WAIT ||
$ret == GEARMAN_NO_JOBS)) {
printf(STDERR "%sn", $worker->error());
}
$worker->wait();
}
A more sophisticated worker 3/3
sub hello {
my $job = shift;
$job->send_status(1,2);
my $string = "Hello, “.$job->workload()."n";
$job->send_status(2,2);
return $string;
}
sub uhoh{
my $job = shift;
$job->send_warning("uh oh");
$job->send_data($job->workload() . "n");
$job->send_fail();
}
Testing the (slightly) sophisticated worker
[issac@localhost ~]$ gearman -f hello 'world'
50% Complete
100% Complete
Hello, world
[issac@localhost ~]$ gearman -f uhoh 'world'
uh ohworld
Job failed
[issac@localhost ~]$
A more sophisticated client 1/3
use
use
use
use

strict;
warnings;
Gearman::XS qw(:constants);
Gearman::XS::Client;

my $client = Gearman::XS::Client->new;
my $task;
my $ret = $client->add_server('127.0.0.1');
if ($ret != GEARMAN_SUCCESS) {
printf(STDERR "%sn", $client->error());
exit(1);
}
A more sophisticated client 2/3
$client->set_complete_fn(sub {
my $task = shift;
print "COMPLETE: " . $task->data() . "n";
return GEARMAN_SUCCESS;
});
$client->set_data_fn(sub {
print "DATA: " . $_[0]->data() . "n";
return GEARMAN_SUCCESS;
});
$client->set_warning_fn(sub {
print "WARNING: " . $_[0]->data() . "n";
return GEARMAN_SUCCESS;
});
A more sophisticated client 3/3
$client->set_fail_fn(sub {
print "FAIL: " . $_[0]->function_name() . "n";
return GEARMAN_SUCCESS;
});
$client->set_status_fn(sub {
print "STATUS: " . $_[0]->numerator() .
"/" . $_[0]->denominator() . "n";
return GEARMAN_SUCCESS;
});
($ret, $task) = $client->add_task("hello", "world");
($ret, $task) = $client->add_task("uhoh", "it broke");
$ret = $client->run_tasks();
A more sophisticated client (output)
[issac@localhost ~]$ perl asclient.pl
STATUS: 1/2
STATUS: 2/2
COMPLETE: Hello, world
WARNING: uh oh
DATA: it broke
FAIL: uhoh
[issac@localhost ~]$
That’s All, Folks!
Issac Goldstand
issac@itsgoodconsulting.com

Link To Slides

http://www.itsgoodconsulting.com/blog/issac-presenting-distributed-apps-with-gearman-at-telaviv-pm/

More Related Content

What's hot

Gearman
GearmanGearman
Gearman
Brian Moon
 
Gearman, Supervisor and PHP - Job Management with Sanity!
Gearman, Supervisor and PHP - Job Management with Sanity!Gearman, Supervisor and PHP - Job Management with Sanity!
Gearman, Supervisor and PHP - Job Management with Sanity!
Abu Ashraf Masnun
 
Gearman and asynchronous processing in PHP applications
Gearman and asynchronous processing in PHP applicationsGearman and asynchronous processing in PHP applications
Gearman and asynchronous processing in PHP applications
Dinh Pham
 
The Current State of Asynchronous Processing With Ruby
The Current State of Asynchronous Processing With RubyThe Current State of Asynchronous Processing With Ruby
The Current State of Asynchronous Processing With Ruby
mattmatt
 
Asynchronous Processing with Ruby on Rails (RailsConf 2008)
Asynchronous Processing with Ruby on Rails (RailsConf 2008)Asynchronous Processing with Ruby on Rails (RailsConf 2008)
Asynchronous Processing with Ruby on Rails (RailsConf 2008)
Jonathan Dahl
 
PowerShell: Automation for everyone
PowerShell: Automation for everyonePowerShell: Automation for everyone
PowerShell: Automation for everyone
Gavin Barron
 
Performance Optimization of Rails Applications
Performance Optimization of Rails ApplicationsPerformance Optimization of Rails Applications
Performance Optimization of Rails ApplicationsSerge Smetana
 
Rails Application Optimization Techniques & Tools
Rails Application Optimization Techniques & ToolsRails Application Optimization Techniques & Tools
Rails Application Optimization Techniques & Toolsguest05c09d
 
Making Symofny shine with Varnish - SymfonyCon Madrid 2014
Making Symofny shine with Varnish - SymfonyCon Madrid 2014Making Symofny shine with Varnish - SymfonyCon Madrid 2014
Making Symofny shine with Varnish - SymfonyCon Madrid 2014
Barel Barelon
 
Care and feeding notes
Care and feeding notesCare and feeding notes
Care and feeding notes
Perrin Harkins
 
Cachopo - Scalable Stateful Services - Madrid Elixir Meetup
Cachopo - Scalable Stateful Services - Madrid Elixir MeetupCachopo - Scalable Stateful Services - Madrid Elixir Meetup
Cachopo - Scalable Stateful Services - Madrid Elixir Meetup
Abel Muíño
 
Choosing a Web Architecture for Perl
Choosing a Web Architecture for PerlChoosing a Web Architecture for Perl
Choosing a Web Architecture for Perl
Perrin Harkins
 
Building Scalable Websites with Perl
Building Scalable Websites with PerlBuilding Scalable Websites with Perl
Building Scalable Websites with Perl
Perrin Harkins
 
Ruby/rails performance and profiling
Ruby/rails performance and profilingRuby/rails performance and profiling
Ruby/rails performance and profilingDanny Guinther
 
Why a new CPAN client cpm is fast
Why a new CPAN client cpm is fastWhy a new CPAN client cpm is fast
Why a new CPAN client cpm is fast
Shoichi Kaji
 
Mad scalability: Scaling when you are not Google
Mad scalability: Scaling when you are not GoogleMad scalability: Scaling when you are not Google
Mad scalability: Scaling when you are not Google
Abel Muíño
 
Ruby 1.9 Fibers
Ruby 1.9 FibersRuby 1.9 Fibers
Ruby 1.9 Fibers
Kevin Ball
 
Serverless Rust
Serverless RustServerless Rust
Serverless Rust
Stefan Baumgartner
 
No callbacks, No Threads - Cooperative web servers in Ruby 1.9
No callbacks, No Threads - Cooperative web servers in Ruby 1.9No callbacks, No Threads - Cooperative web servers in Ruby 1.9
No callbacks, No Threads - Cooperative web servers in Ruby 1.9
Ilya Grigorik
 
Celery: The Distributed Task Queue
Celery: The Distributed Task QueueCelery: The Distributed Task Queue
Celery: The Distributed Task Queue
Richard Leland
 

What's hot (20)

Gearman
GearmanGearman
Gearman
 
Gearman, Supervisor and PHP - Job Management with Sanity!
Gearman, Supervisor and PHP - Job Management with Sanity!Gearman, Supervisor and PHP - Job Management with Sanity!
Gearman, Supervisor and PHP - Job Management with Sanity!
 
Gearman and asynchronous processing in PHP applications
Gearman and asynchronous processing in PHP applicationsGearman and asynchronous processing in PHP applications
Gearman and asynchronous processing in PHP applications
 
The Current State of Asynchronous Processing With Ruby
The Current State of Asynchronous Processing With RubyThe Current State of Asynchronous Processing With Ruby
The Current State of Asynchronous Processing With Ruby
 
Asynchronous Processing with Ruby on Rails (RailsConf 2008)
Asynchronous Processing with Ruby on Rails (RailsConf 2008)Asynchronous Processing with Ruby on Rails (RailsConf 2008)
Asynchronous Processing with Ruby on Rails (RailsConf 2008)
 
PowerShell: Automation for everyone
PowerShell: Automation for everyonePowerShell: Automation for everyone
PowerShell: Automation for everyone
 
Performance Optimization of Rails Applications
Performance Optimization of Rails ApplicationsPerformance Optimization of Rails Applications
Performance Optimization of Rails Applications
 
Rails Application Optimization Techniques & Tools
Rails Application Optimization Techniques & ToolsRails Application Optimization Techniques & Tools
Rails Application Optimization Techniques & Tools
 
Making Symofny shine with Varnish - SymfonyCon Madrid 2014
Making Symofny shine with Varnish - SymfonyCon Madrid 2014Making Symofny shine with Varnish - SymfonyCon Madrid 2014
Making Symofny shine with Varnish - SymfonyCon Madrid 2014
 
Care and feeding notes
Care and feeding notesCare and feeding notes
Care and feeding notes
 
Cachopo - Scalable Stateful Services - Madrid Elixir Meetup
Cachopo - Scalable Stateful Services - Madrid Elixir MeetupCachopo - Scalable Stateful Services - Madrid Elixir Meetup
Cachopo - Scalable Stateful Services - Madrid Elixir Meetup
 
Choosing a Web Architecture for Perl
Choosing a Web Architecture for PerlChoosing a Web Architecture for Perl
Choosing a Web Architecture for Perl
 
Building Scalable Websites with Perl
Building Scalable Websites with PerlBuilding Scalable Websites with Perl
Building Scalable Websites with Perl
 
Ruby/rails performance and profiling
Ruby/rails performance and profilingRuby/rails performance and profiling
Ruby/rails performance and profiling
 
Why a new CPAN client cpm is fast
Why a new CPAN client cpm is fastWhy a new CPAN client cpm is fast
Why a new CPAN client cpm is fast
 
Mad scalability: Scaling when you are not Google
Mad scalability: Scaling when you are not GoogleMad scalability: Scaling when you are not Google
Mad scalability: Scaling when you are not Google
 
Ruby 1.9 Fibers
Ruby 1.9 FibersRuby 1.9 Fibers
Ruby 1.9 Fibers
 
Serverless Rust
Serverless RustServerless Rust
Serverless Rust
 
No callbacks, No Threads - Cooperative web servers in Ruby 1.9
No callbacks, No Threads - Cooperative web servers in Ruby 1.9No callbacks, No Threads - Cooperative web servers in Ruby 1.9
No callbacks, No Threads - Cooperative web servers in Ruby 1.9
 
Celery: The Distributed Task Queue
Celery: The Distributed Task QueueCelery: The Distributed Task Queue
Celery: The Distributed Task Queue
 

Viewers also liked

Gearman for MySQL
Gearman for MySQLGearman for MySQL
Gearman for MySQL
Giuseppe Maxia
 
The promise of asynchronous php
The promise of asynchronous phpThe promise of asynchronous php
The promise of asynchronous php
Wim Godden
 
Gearman Introduction
Gearman IntroductionGearman Introduction
Gearman Introduction
Green Wang
 
MapReduce Using Perl and Gearman
MapReduce Using Perl and GearmanMapReduce Using Perl and Gearman
MapReduce Using Perl and Gearman
Jamie Pitts
 
Gearman For Beginners
Gearman For BeginnersGearman For Beginners
Gearman For Beginners
Giuseppe Maxia
 
Scalability In PHP
Scalability In PHPScalability In PHP
Scalability In PHP
Ian Selby
 
Klangv2
Klangv2Klangv2
Klangv2
萌 徐
 
Gearman
GearmanGearman
Gearman
Jui-Nan Lin
 
Scale like an ant, distribute the workload - DPC, Amsterdam, 2011
Scale like an ant, distribute the workload - DPC, Amsterdam,  2011Scale like an ant, distribute the workload - DPC, Amsterdam,  2011
Scale like an ant, distribute the workload - DPC, Amsterdam, 2011
Helgi Þormar Þorbjörnsson
 
ZeroMQ: Super Sockets - by J2 Labs
ZeroMQ: Super Sockets - by J2 LabsZeroMQ: Super Sockets - by J2 Labs
ZeroMQ: Super Sockets - by J2 LabsJames Dennis
 
Gearman work queue in php
Gearman work queue in phpGearman work queue in php
Gearman work queue in php
Bo-Yi Wu
 
Object-Oriented Programming with Perl and Moose
Object-Oriented Programming with Perl and MooseObject-Oriented Programming with Perl and Moose
Object-Oriented Programming with Perl and MooseDave Cross
 
Building a Scalable Web Crawler with Hadoop
Building a Scalable Web Crawler with HadoopBuilding a Scalable Web Crawler with Hadoop
Building a Scalable Web Crawler with Hadoop
Hadoop User Group
 

Viewers also liked (14)

Gearman for MySQL
Gearman for MySQLGearman for MySQL
Gearman for MySQL
 
The promise of asynchronous php
The promise of asynchronous phpThe promise of asynchronous php
The promise of asynchronous php
 
Gearman Introduction
Gearman IntroductionGearman Introduction
Gearman Introduction
 
MapReduce Using Perl and Gearman
MapReduce Using Perl and GearmanMapReduce Using Perl and Gearman
MapReduce Using Perl and Gearman
 
Gearman For Beginners
Gearman For BeginnersGearman For Beginners
Gearman For Beginners
 
Scalability In PHP
Scalability In PHPScalability In PHP
Scalability In PHP
 
Klangv2
Klangv2Klangv2
Klangv2
 
Gearman
GearmanGearman
Gearman
 
Scale like an ant, distribute the workload - DPC, Amsterdam, 2011
Scale like an ant, distribute the workload - DPC, Amsterdam,  2011Scale like an ant, distribute the workload - DPC, Amsterdam,  2011
Scale like an ant, distribute the workload - DPC, Amsterdam, 2011
 
ZeroMQ: Super Sockets - by J2 Labs
ZeroMQ: Super Sockets - by J2 LabsZeroMQ: Super Sockets - by J2 Labs
ZeroMQ: Super Sockets - by J2 Labs
 
Gearman work queue in php
Gearman work queue in phpGearman work queue in php
Gearman work queue in php
 
Object-Oriented Programming with Perl and Moose
Object-Oriented Programming with Perl and MooseObject-Oriented Programming with Perl and Moose
Object-Oriented Programming with Perl and Moose
 
MapReduce入門
MapReduce入門MapReduce入門
MapReduce入門
 
Building a Scalable Web Crawler with Hadoop
Building a Scalable Web Crawler with HadoopBuilding a Scalable Web Crawler with Hadoop
Building a Scalable Web Crawler with Hadoop
 

Similar to Distributed Applications with Perl & Gearman

Gearmanpresentation 110308165409-phpapp01
Gearmanpresentation 110308165409-phpapp01Gearmanpresentation 110308165409-phpapp01
Gearmanpresentation 110308165409-phpapp01
longtuan
 
Gearman & PHP
Gearman & PHPGearman & PHP
Gearman & PHP
Nemanja Krivokapic
 
Nko workshop - node js crud & deploy
Nko workshop - node js crud & deployNko workshop - node js crud & deploy
Nko workshop - node js crud & deploySimon Su
 
Exploiting the newer perl to improve your plugins
Exploiting the newer perl to improve your pluginsExploiting the newer perl to improve your plugins
Exploiting the newer perl to improve your pluginsMarian Marinov
 
Creating "Secure" PHP Applications, Part 1, Explicit Code & QA
Creating "Secure" PHP Applications, Part 1, Explicit Code & QACreating "Secure" PHP Applications, Part 1, Explicit Code & QA
Creating "Secure" PHP Applications, Part 1, Explicit Code & QAarchwisp
 
Charla EHU Noviembre 2014 - Desarrollo Web
Charla EHU Noviembre 2014 - Desarrollo WebCharla EHU Noviembre 2014 - Desarrollo Web
Charla EHU Noviembre 2014 - Desarrollo Web
Mikel Torres Ugarte
 
Burn down the silos! Helping dev and ops gel on high availability websites
Burn down the silos! Helping dev and ops gel on high availability websitesBurn down the silos! Helping dev and ops gel on high availability websites
Burn down the silos! Helping dev and ops gel on high availability websites
Lindsay Holmwood
 
fog or: How I Learned to Stop Worrying and Love the Cloud
fog or: How I Learned to Stop Worrying and Love the Cloudfog or: How I Learned to Stop Worrying and Love the Cloud
fog or: How I Learned to Stop Worrying and Love the Cloud
Wesley Beary
 
Lean Php Presentation
Lean Php PresentationLean Php Presentation
Lean Php Presentation
Alan Pinstein
 
JUDCon London 2011 - Bin packing with drools planner by example
JUDCon London 2011 - Bin packing with drools planner by exampleJUDCon London 2011 - Bin packing with drools planner by example
JUDCon London 2011 - Bin packing with drools planner by example
Geoffrey De Smet
 
Scaling python webapps from 0 to 50 million users - A top-down approach
Scaling python webapps from 0 to 50 million users - A top-down approachScaling python webapps from 0 to 50 million users - A top-down approach
Scaling python webapps from 0 to 50 million users - A top-down approach
Jinal Jhaveri
 
fog or: How I Learned to Stop Worrying and Love the Cloud (OpenStack Edition)
fog or: How I Learned to Stop Worrying and Love the Cloud (OpenStack Edition)fog or: How I Learned to Stop Worrying and Love the Cloud (OpenStack Edition)
fog or: How I Learned to Stop Worrying and Love the Cloud (OpenStack Edition)
Wesley Beary
 
Yapc::Asia 2008 Tokyo - Easy system administration programming with a framewo...
Yapc::Asia 2008 Tokyo - Easy system administration programming with a framewo...Yapc::Asia 2008 Tokyo - Easy system administration programming with a framewo...
Yapc::Asia 2008 Tokyo - Easy system administration programming with a framewo...Gosuke Miyashita
 
Troubleshooting Strategies for CloudStack Installations by Kirk Kosinski
Troubleshooting Strategies for CloudStack Installations by Kirk Kosinski Troubleshooting Strategies for CloudStack Installations by Kirk Kosinski
Troubleshooting Strategies for CloudStack Installations by Kirk Kosinski buildacloud
 
Postman On Steroids
Postman On SteroidsPostman On Steroids
Postman On Steroids
Sara Tornincasa
 
Debugging: Rules & Tools
Debugging: Rules & ToolsDebugging: Rules & Tools
Debugging: Rules & Tools
Ian Barber
 
Rhebok, High Performance Rack Handler / Rubykaigi 2015
Rhebok, High Performance Rack Handler / Rubykaigi 2015Rhebok, High Performance Rack Handler / Rubykaigi 2015
Rhebok, High Performance Rack Handler / Rubykaigi 2015
Masahiro Nagano
 
Facebook的缓存系统
Facebook的缓存系统Facebook的缓存系统
Facebook的缓存系统yiditushe
 
OSMC 2014: Monitoring VoIP Systems | Sebastian Damm
OSMC 2014: Monitoring VoIP Systems | Sebastian DammOSMC 2014: Monitoring VoIP Systems | Sebastian Damm
OSMC 2014: Monitoring VoIP Systems | Sebastian Damm
NETWAYS
 

Similar to Distributed Applications with Perl & Gearman (20)

Gearmanpresentation 110308165409-phpapp01
Gearmanpresentation 110308165409-phpapp01Gearmanpresentation 110308165409-phpapp01
Gearmanpresentation 110308165409-phpapp01
 
Gearman & PHP
Gearman & PHPGearman & PHP
Gearman & PHP
 
Nko workshop - node js crud & deploy
Nko workshop - node js crud & deployNko workshop - node js crud & deploy
Nko workshop - node js crud & deploy
 
Exploiting the newer perl to improve your plugins
Exploiting the newer perl to improve your pluginsExploiting the newer perl to improve your plugins
Exploiting the newer perl to improve your plugins
 
Creating "Secure" PHP Applications, Part 1, Explicit Code & QA
Creating "Secure" PHP Applications, Part 1, Explicit Code & QACreating "Secure" PHP Applications, Part 1, Explicit Code & QA
Creating "Secure" PHP Applications, Part 1, Explicit Code & QA
 
Charla EHU Noviembre 2014 - Desarrollo Web
Charla EHU Noviembre 2014 - Desarrollo WebCharla EHU Noviembre 2014 - Desarrollo Web
Charla EHU Noviembre 2014 - Desarrollo Web
 
Burn down the silos! Helping dev and ops gel on high availability websites
Burn down the silos! Helping dev and ops gel on high availability websitesBurn down the silos! Helping dev and ops gel on high availability websites
Burn down the silos! Helping dev and ops gel on high availability websites
 
fog or: How I Learned to Stop Worrying and Love the Cloud
fog or: How I Learned to Stop Worrying and Love the Cloudfog or: How I Learned to Stop Worrying and Love the Cloud
fog or: How I Learned to Stop Worrying and Love the Cloud
 
Lean Php Presentation
Lean Php PresentationLean Php Presentation
Lean Php Presentation
 
JUDCon London 2011 - Bin packing with drools planner by example
JUDCon London 2011 - Bin packing with drools planner by exampleJUDCon London 2011 - Bin packing with drools planner by example
JUDCon London 2011 - Bin packing with drools planner by example
 
Scaling python webapps from 0 to 50 million users - A top-down approach
Scaling python webapps from 0 to 50 million users - A top-down approachScaling python webapps from 0 to 50 million users - A top-down approach
Scaling python webapps from 0 to 50 million users - A top-down approach
 
fog or: How I Learned to Stop Worrying and Love the Cloud (OpenStack Edition)
fog or: How I Learned to Stop Worrying and Love the Cloud (OpenStack Edition)fog or: How I Learned to Stop Worrying and Love the Cloud (OpenStack Edition)
fog or: How I Learned to Stop Worrying and Love the Cloud (OpenStack Edition)
 
Yapc::Asia 2008 Tokyo - Easy system administration programming with a framewo...
Yapc::Asia 2008 Tokyo - Easy system administration programming with a framewo...Yapc::Asia 2008 Tokyo - Easy system administration programming with a framewo...
Yapc::Asia 2008 Tokyo - Easy system administration programming with a framewo...
 
Cooking with Chef
Cooking with ChefCooking with Chef
Cooking with Chef
 
Troubleshooting Strategies for CloudStack Installations by Kirk Kosinski
Troubleshooting Strategies for CloudStack Installations by Kirk Kosinski Troubleshooting Strategies for CloudStack Installations by Kirk Kosinski
Troubleshooting Strategies for CloudStack Installations by Kirk Kosinski
 
Postman On Steroids
Postman On SteroidsPostman On Steroids
Postman On Steroids
 
Debugging: Rules & Tools
Debugging: Rules & ToolsDebugging: Rules & Tools
Debugging: Rules & Tools
 
Rhebok, High Performance Rack Handler / Rubykaigi 2015
Rhebok, High Performance Rack Handler / Rubykaigi 2015Rhebok, High Performance Rack Handler / Rubykaigi 2015
Rhebok, High Performance Rack Handler / Rubykaigi 2015
 
Facebook的缓存系统
Facebook的缓存系统Facebook的缓存系统
Facebook的缓存系统
 
OSMC 2014: Monitoring VoIP Systems | Sebastian Damm
OSMC 2014: Monitoring VoIP Systems | Sebastian DammOSMC 2014: Monitoring VoIP Systems | Sebastian Damm
OSMC 2014: Monitoring VoIP Systems | Sebastian Damm
 

Recently uploaded

Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
Ana-Maria Mihalceanu
 
JMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and GrafanaJMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and Grafana
RTTS
 
Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........
Alison B. Lowndes
 
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Thierry Lestable
 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
ControlCase
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance
 
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
Product School
 
Essentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with ParametersEssentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with Parameters
Safe Software
 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
DianaGray10
 
Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
OnBoard
 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
Kari Kakkonen
 
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Product School
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
DanBrown980551
 
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMsTo Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
Paul Groth
 
Generating a custom Ruby SDK for your web service or Rails API using Smithy
Generating a custom Ruby SDK for your web service or Rails API using SmithyGenerating a custom Ruby SDK for your web service or Rails API using Smithy
Generating a custom Ruby SDK for your web service or Rails API using Smithy
g2nightmarescribd
 
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
Product School
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
Product School
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Albert Hoitingh
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
DianaGray10
 

Recently uploaded (20)

Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
 
JMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and GrafanaJMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and Grafana
 
Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........
 
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
 
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
 
Essentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with ParametersEssentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with Parameters
 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
 
Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
 
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
 
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMsTo Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
 
Generating a custom Ruby SDK for your web service or Rails API using Smithy
Generating a custom Ruby SDK for your web service or Rails API using SmithyGenerating a custom Ruby SDK for your web service or Rails API using Smithy
Generating a custom Ruby SDK for your web service or Rails API using Smithy
 
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
 

Distributed Applications with Perl & Gearman

  • 1. Distributed Applications With Perl & Gearman Issac Goldstand issac@itsgoodconsulting.com ABOUT THE PRESENTOR http://linkedin.com/in/margol
  • 2. 60 seconds before we get started…
  • 3. Why Distributed?  Allow   horizontal scaling of compute nodes Normal resources (CPU, RAM, Disk) Other resources (specialized HW, SW)  True asynchronous worker processing  Cross-Language support  Redundant application availability
  • 5. Example 1 – Video Processing   User uploads a video Server processes the video     Server must transcode the video to several pre-set resolutions/codecs Server must extract sample still images Server must run speech-to-text recognition to extract subtitles (closed captions) Once all of that is completed, server must update the video metadata to contain all of the newly available data and metadata
  • 6. Example 2 – Map/Reduce Style Big Data  User searches for information Server must search catalog 1  Server must search catalog 2 …  Server must search catalog n   Server must return combined search results to user
  • 7. Example 3 – AntiVirus Scanner  User uploads a file Server must scan with McAfee  Server must scan with Norton 360  Server must scan with Sophos …  Server must scan with Engine XYZ   Server returns scan results to user
  • 8. Gearman Performance Stats  Collected in October 2013 (https://groups.google.com/forum/#!topic/gearman/ror1rd6EGX0)  DealNews – 40 foreground tasks/sec (2 datacenters, 4 servers, 350 workers)  Etsy – 1000 tasks/sec (2 datacenters, 4 servers, 40 workers)  Shazam – 10K tasks/sec  From my own experience – 30 tasks/sec (1 datacenter, 1 server, 240 workers)
  • 9. Gearman in Perl  Gearman / Gearman::Server (PP)  Gearman::XS (“official” libgearman)  AnyEvent::Gearman and AnyEvent::Gearman::Client (not the same)  They aren’t 100% up-to-date  They aren’t 100% feature-compatible  The first two are both (individually) good for 90% of use cases (in my personal experience )
  • 10. Gearman in other languages         C/C++ - official libgearman+ CLI PHP – GearmanManager – well maintained framework, PHP_Gearman (PECL), Net_Gearman (Pure PHP) Node.JS .NET/C# JAVA Python UDFs – MySQL, PostgreSQL, Drizzle Write your own to implement the Gearman binary protocol
  • 11. Creating a worker use strict; use warnings; use Gearman::Worker; my $worker = Gearman::Worker->new; $worker->job_servers('127.0.0.1:4730'); $worker->register_function('say_hello', &hello); $worker->work ; # will never return sub hello { my $arg = $_[0]->arg; return "Hello, $argn"; }
  • 12. Testing the worker [issac@localhost ~]$ gearman -f say_hello 'world' Hello, world [issac@localhost ~]$
  • 13. Writing a client use strict; use warnings; use Gearman::Client; my $client = Gearman::Client->new; $client->job_servers('127.0.0.1:4730'); print ${$client->do_task(say_hello => 'world')}; # do_task returns a reference to the response
  • 14. Writing an asynchronous client use strict; use warnings; use Gearman::Client; my $client = Gearman::Client->new; $client->job_servers('127.0.0.1:4730'); my $tasks = $client->new_task_set; $tasks->add_task(say_hello => 'world', { on_complete => &done }); $tasks->wait; sub done { print ${$_[0]}; }
  • 15. Worker response (packet) types  SUCCESS  FAIL  STATUS  DATA  EXCEPTION*  WARNING*
  • 16. A more sophisticated worker 1/3 use use use use strict; warnings; Gearman::XS qw(:constants); Gearman::XS::Worker; my $worker = new Gearman::XS::Worker; my $ret = $worker->add_server('127.0.0.1'); if ($ret != GEARMAN_SUCCESS) { printf(STDERR "%sn", $worker->error()); exit(1); } $worker->add_options(GEARMAN_WORKER_NON_BLOCKING); $worker->set_timeout(500);
  • 17. A more sophisticated worker 2/3 $ret = $worker->add_function("hello", 3, &hello, {}); $ret = $worker->add_function("uhoh", 3, &uhoh, {}); if ($ret != GEARMAN_SUCCESS) { printf(STDERR "%sn", $worker->error()); } my $go = 1; $SIG{TERM} = sub {print "Caught SIGTERMn";$go = 0;}; while ($go) { my $ret = $worker->work(); # will return after 500ms since we set timeout + nonblocking mode above if (!($ret == GEARMAN_SUCCESS || $ret == GEARMAN_IO_WAIT || $ret == GEARMAN_NO_JOBS)) { printf(STDERR "%sn", $worker->error()); } $worker->wait(); }
  • 18. A more sophisticated worker 3/3 sub hello { my $job = shift; $job->send_status(1,2); my $string = "Hello, “.$job->workload()."n"; $job->send_status(2,2); return $string; } sub uhoh{ my $job = shift; $job->send_warning("uh oh"); $job->send_data($job->workload() . "n"); $job->send_fail(); }
  • 19. Testing the (slightly) sophisticated worker [issac@localhost ~]$ gearman -f hello 'world' 50% Complete 100% Complete Hello, world [issac@localhost ~]$ gearman -f uhoh 'world' uh ohworld Job failed [issac@localhost ~]$
  • 20. A more sophisticated client 1/3 use use use use strict; warnings; Gearman::XS qw(:constants); Gearman::XS::Client; my $client = Gearman::XS::Client->new; my $task; my $ret = $client->add_server('127.0.0.1'); if ($ret != GEARMAN_SUCCESS) { printf(STDERR "%sn", $client->error()); exit(1); }
  • 21. A more sophisticated client 2/3 $client->set_complete_fn(sub { my $task = shift; print "COMPLETE: " . $task->data() . "n"; return GEARMAN_SUCCESS; }); $client->set_data_fn(sub { print "DATA: " . $_[0]->data() . "n"; return GEARMAN_SUCCESS; }); $client->set_warning_fn(sub { print "WARNING: " . $_[0]->data() . "n"; return GEARMAN_SUCCESS; });
  • 22. A more sophisticated client 3/3 $client->set_fail_fn(sub { print "FAIL: " . $_[0]->function_name() . "n"; return GEARMAN_SUCCESS; }); $client->set_status_fn(sub { print "STATUS: " . $_[0]->numerator() . "/" . $_[0]->denominator() . "n"; return GEARMAN_SUCCESS; }); ($ret, $task) = $client->add_task("hello", "world"); ($ret, $task) = $client->add_task("uhoh", "it broke"); $ret = $client->run_tasks();
  • 23. A more sophisticated client (output) [issac@localhost ~]$ perl asclient.pl STATUS: 1/2 STATUS: 2/2 COMPLETE: Hello, world WARNING: uh oh DATA: it broke FAIL: uhoh [issac@localhost ~]$
  • 24. That’s All, Folks! Issac Goldstand issac@itsgoodconsulting.com Link To Slides http://www.itsgoodconsulting.com/blog/issac-presenting-distributed-apps-with-gearman-at-telaviv-pm/