gearmanforbeginners-091102040759-phpapp02

Upload: le-luc-kim-sach

Post on 06-Apr-2018

219 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/2/2019 gearmanforbeginners-091102040759-phpapp02

    1/63

    Sunday, 25 October 2009

  • 8/2/2019 gearmanforbeginners-091102040759-phpapp02

    2/63

    Gearman: a technologyfor distributed

    computingGiuseppe MaxiaMySQL Community Team Lead

    Sun Microsystems

    Sunday, 25 October 2009

  • 8/2/2019 gearmanforbeginners-091102040759-phpapp02

    3/63

    Mainframe

    Mainframe

    operating system

    hardware

    application

    terminal

    client

    USER FRIENDLINESS

    0 100

    terminal

    terminal

    terminal

    Sunday, 25 October 2009

  • 8/2/2019 gearmanforbeginners-091102040759-phpapp02

    4/63

    Mini computers

    Mainframe

    operating system

    hardware

    application

    client

    USER FRIENDLINESS

    0 100

    Mini terminal

    terminal

    terminal

    terminal

    Mini

    Sunday, 25 October 2009

  • 8/2/2019 gearmanforbeginners-091102040759-phpapp02

    5/63

    Networks

    server

    hardware

    application

    client

    USER FRIENDLINESS

    0 100

    personalcomputer

    personalcomputer

    personalcomputer

    personalcomputer

    hardware

    operatingsystem

    operatingsystem

    hardware

    Sunday, 25 October 2009

  • 8/2/2019 gearmanforbeginners-091102040759-phpapp02

    6/63

    Web applications

    web server

    hardware

    application

    client

    USER FRIENDLINESS

    0 100

    browser

    browser

    browser

    browser

    operatingsystem

    hardware

    operatingsystem

    operatingsystem

    hardware

    operating

    system

    Sunday, 25 October 2009

  • 8/2/2019 gearmanforbeginners-091102040759-phpapp02

    7/63

    Cloud applications

    web

    server

    hardware

    application

    client

    USER FRIENDLINESS

    0 100

    browser

    browser

    browser

    browser

    operatingsystem

    hardware

    operatingsystem

    operatingsystem

    hardware

    serviceprovider

    applicationapplication

    serviceproviderservice

    providerserviceprovider

    Sunday, 25 October 2009

  • 8/2/2019 gearmanforbeginners-091102040759-phpapp02

    8/63

    Some actors

    memcached

    gearman

    Used in production by Facebook and Digg

    Sunday, 25 October 2009

  • 8/2/2019 gearmanforbeginners-091102040759-phpapp02

    9/63

    MAG A NE R

    Sunday, 25 October 2009

  • 8/2/2019 gearmanforbeginners-091102040759-phpapp02

    10/63

    MG A NER!=

    Sunday, 25 October 2009

  • 8/2/2019 gearmanforbeginners-091102040759-phpapp02

    11/63

    MAG A NE R ?

    Sunday, 25 October 2009

  • 8/2/2019 gearmanforbeginners-091102040759-phpapp02

    12/63

    M A GA N E R

    Sunday, 25 October 2009

  • 8/2/2019 gearmanforbeginners-091102040759-phpapp02

    13/63

    server worker client

    taskjob

    request

    http://gearman.orgSunday, 25 October 2009

    http://gearman.org/http://gearman.org/http://gearman.org/http://gearman.org/http://gearman.org/
  • 8/2/2019 gearmanforbeginners-091102040759-phpapp02

    14/63

    Distributed

    Sunday, 25 October 2009

  • 8/2/2019 gearmanforbeginners-091102040759-phpapp02

    15/63

    Multiple operating systems

    Sunday, 25 October 2009

  • 8/2/2019 gearmanforbeginners-091102040759-phpapp02

    16/63

    multiple languages

    Sunday, 25 October 2009

  • 8/2/2019 gearmanforbeginners-091102040759-phpapp02

    17/63

    freedom ofchoice

    Sunday, 25 October 2009

  • 8/2/2019 gearmanforbeginners-091102040759-phpapp02

    18/63

    redundancy

    Sunday, 25 October 2009

  • 8/2/2019 gearmanforbeginners-091102040759-phpapp02

    19/63

    USING GEARMAN

    Server:gearmand

    Client libraries:

    C/C++ Java

    Perl PHP

    PythonSunday, 25 October 2009

  • 8/2/2019 gearmanforbeginners-091102040759-phpapp02

    20/63

    Simple usage

    GEARMAN

    Command line client and worker

    Sunday, 25 October 2009

  • 8/2/2019 gearmanforbeginners-091102040759-phpapp02

    21/63

    /usr/local/sbin/gearmand -d

    # started as daemon.# No feedback given on the command line

    Sunday, 25 October 2009

  • 8/2/2019 gearmanforbeginners-091102040759-phpapp02

    22/63

    /usr/local/sbin/gearmand -v -vINFO Starting upINFO Listening on :::4730 (5)INFO Listening on 0.0.0.0:4730 (6)

    # started as normal application# verbose output requested

    Sunday, 25 October 2009

  • 8/2/2019 gearmanforbeginners-091102040759-phpapp02

    23/63

    gearman -w -h hostname -p 4730 \-f conta wc

    # -w = act as worker# -f = function

    # conta = function name# wc = command to execute when function# 'conta' is called

    Sunday, 25 October 2009

  • 8/2/2019 gearmanforbeginners-091102040759-phpapp02

    24/63

    /usr/local/sbin/gearmand -v -vINFO Starting upINFO Listening on :::4730 (5)INFO Listening on 0.0.0.0:4730 (6)

    INFO Accepted connection from 127.0.0.1:4994INFO [ 0] 127.0.0.1:4994 Connected

    Sunday, 25 October 2009

  • 8/2/2019 gearmanforbeginners-091102040759-phpapp02

    25/63

    gearman -h hostname -p 4730 \-f conta < ~/.bashrc

    57 135 2149 #

  • 8/2/2019 gearmanforbeginners-091102040759-phpapp02

    26/63

    /usr/local/sbin/gearmand -v -v

    INFO Starting upINFO Listening on :::4730 (5)

    INFO Listening on 0.0.0.0:4730 (6)

    INFO Accepted connection from 127.0.0.1:4994INFO [ 0] 127.0.0.1:4994 Connected

    INFO Accepted connection from 127.0.0.1:5181

    INFO [ 0] 127.0.0.1:5181 Connected

    INFO [ 0] 127.0.0.1:5181 Disconnected

    Sunday, 25 October 2009

  • 8/2/2019 gearmanforbeginners-091102040759-phpapp02

    27/63

    What happened

    1 server start

    listen to port 4730

    Sunday, 25 October 2009

  • 8/2/2019 gearmanforbeginners-091102040759-phpapp02

    28/63

    What happened

    2 worker starts

    registers function 'conta' to server

    Sunday, 25 October 2009

  • 8/2/2019 gearmanforbeginners-091102040759-phpapp02

    29/63

    What happened

    3 client starts

    requires function 'conta' from server

    provides input data

    Sunday, 25 October 2009

  • 8/2/2019 gearmanforbeginners-091102040759-phpapp02

    30/63

    What happened

    4 server sends client request to worker

    passes all input data to worker

    Sunday, 25 October 2009

  • 8/2/2019 gearmanforbeginners-091102040759-phpapp02

    31/63

    What happened

    5 worker receives request and data

    processes input

    Sunday, 25 October 2009

  • 8/2/2019 gearmanforbeginners-091102040759-phpapp02

    32/63

    What happened

    6 worker returns processed data

    server passes it to client

    Sunday, 25 October 2009

  • 8/2/2019 gearmanforbeginners-091102040759-phpapp02

    33/63

    What happened

    7 client receives processed data

    client displays result

    Sunday, 25 October 2009

  • 8/2/2019 gearmanforbeginners-091102040759-phpapp02

    34/63

    A simple Perl worker

    Sunday, 25 October 2009

  • 8/2/2019 gearmanforbeginners-091102040759-phpapp02

    35/63

    A simple perl worker

    1. add server

    2. add function

    3. loop

    4. function definition

    Sunday, 25 October 2009

  • 8/2/2019 gearmanforbeginners-091102040759-phpapp02

    36/63

    use strict;

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

    my $host = '127.0.0.1';my $port = 4730;

    my $worker = new Gearman::XS::Worker;

    my $ret = $worker->add_server($host, $port);if ($ret != GEARMAN_SUCCESS) {printf(STDERR "%s\n", $worker->error());exit(1);

    }Sunday, 25 October 2009

  • 8/2/2019 gearmanforbeginners-091102040759-phpapp02

    37/63

    my $options = '';

    $ret = $worker->add_function("reverse", # public function name0, # timeout

    \&myreverse, # reference to function$options); # function arguments

    if ($ret != GEARMAN_SUCCESS) {printf(STDERR "%s\n", $worker->error());

    }

    Sunday, 25 October 2009

  • 8/2/2019 gearmanforbeginners-091102040759-phpapp02

    38/63

    while (1) {

    my $ret = $worker->work();if ($ret != GEARMAN_SUCCESS) {printf(STDERR "%s\n", $worker->error());

    }

    }

    Sunday, 25 October 2009

  • 8/2/2019 gearmanforbeginners-091102040759-phpapp02

    39/63

    sub myreverse {

    my ($job) = @_;

    my $workload = $job->workload();my $result = reverse($workload);

    printf("Job=%s F_Name=%s Workload=%s Result=%s\n",

    $job->handle(),$job->function_name(),$job->workload(),$result);

    return $result;}

    Sunday, 25 October 2009

  • 8/2/2019 gearmanforbeginners-091102040759-phpapp02

    40/63

    A simple Perl client

    Sunday, 25 October 2009

  • 8/2/2019 gearmanforbeginners-091102040759-phpapp02

    41/63

    A simple perl client

    add server run a task

    Sunday, 25 October 2009

  • 8/2/2019 gearmanforbeginners-091102040759-phpapp02

    42/63

    use strict;

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

    my $client = new Gearman::XS::Client;

    my $host = '127.0.0.1';my $port = 4730;my $ret = $client->add_server($host, $port);if ($ret != GEARMAN_SUCCESS) {printf(STDERR "%s\n", $client->error());exit(1);

    }

    Sunday, 25 October 2009

  • 8/2/2019 gearmanforbeginners-091102040759-phpapp02

    43/63

    my $input = shift || 'teststring';

    my ($return, $result) =$client->do("reverse", $input);

    if ($return == GEARMAN_SUCCESS) {

    printf("Result=%s\n", $result);}

    Sunday, 25 October 2009

  • 8/2/2019 gearmanforbeginners-091102040759-phpapp02

    44/63

    A sample run

    Sunday, 25 October 2009

  • 8/2/2019 gearmanforbeginners-091102040759-phpapp02

    45/63

    perl worker.pl

    Sunday, 25 October 2009

  • 8/2/2019 gearmanforbeginners-091102040759-phpapp02

    46/63

    perl client.pl

    Result=gnirtstset

    Sunday, 25 October 2009

  • 8/2/2019 gearmanforbeginners-091102040759-phpapp02

    47/63

    perl worker.pl

    Job=H:gmac3.local:4 F_Name=reverseWorkload=teststring Result=gnirtstset

    Sunday, 25 October 2009

  • 8/2/2019 gearmanforbeginners-091102040759-phpapp02

    48/63

    more client functions

    do_background add_task

    run_tasks

    Sunday, 25 October 2009

  • 8/2/2019 gearmanforbeginners-091102040759-phpapp02

    49/63

    Some advanced usage

    DBIx::SQLCrosstab Data cubes

    Perl only

    Sunday, 25 October 2009

  • 8/2/2019 gearmanforbeginners-091102040759-phpapp02

    50/63

    Sunday, 25 October 2009

  • 8/2/2019 gearmanforbeginners-091102040759-phpapp02

    51/63

    Image processing

    CPU intensive Large storage needed

    Application is OS specific

    Sunday, 25 October 2009

  • 8/2/2019 gearmanforbeginners-091102040759-phpapp02

    52/63

    Sunday, 25 October 2009

  • 8/2/2019 gearmanforbeginners-091102040759-phpapp02

    53/63

    Sunday, 25 October 2009

  • 8/2/2019 gearmanforbeginners-091102040759-phpapp02

    54/63

    Using GEARMAN

    client server architecture

    N servers

    N workers

    N clients

    Supports multiple languages

    Sunday, 25 October 2009

  • 8/2/2019 gearmanforbeginners-091102040759-phpapp02

    55/63

    worker1 worker2

    worker4

    func1

    func2

    worker3

    worker5

    func1

    func1

    func3

    func3

    func1

    func3

    func1

    func3

    worker0func1

    func3

    client

    Gearmanserver

    Gearmanserver

    Sunday, 25 October 2009

  • 8/2/2019 gearmanforbeginners-091102040759-phpapp02

    56/63

    worker1 worker2

    worker4

    func1

    func2

    worker3

    worker5

    func1

    func1

    func3

    func3

    func1

    func3

    func1

    func3

    worker0func1

    func3

    Master

    Slave2

    Slave1

    client

    Gearmanserver

    Gearmanserver

    Gearmanserver

    Sunday, 25 October 2009

    Remote sandbox

  • 8/2/2019 gearmanforbeginners-091102040759-phpapp02

    57/63

    Remote sandbox

    worker

    add server

    add functionloop

    function definition

    Sunday, 25 October 2009

  • 8/2/2019 gearmanforbeginners-091102040759-phpapp02

    58/63

    $ret = $worker->add_function(

    "make_sandbox",0,\&make_sandbox,'');

    if ($ret != GEARMAN_SUCCESS) {printf(STDERR "%s\n", $worker->error());}

    Sunday, 25 October 2009

  • 8/2/2019 gearmanforbeginners-091102040759-phpapp02

    59/63

    sub make_sandbox {

    my ($job, $options) = @_;

    my $command = $job->workload();chomp $command;

    print STDERR "\n";my $result = qx(make_sandbox $command) ;if ($?) {

    print $result, "\n";return "Error ($!)\n";

    }else {

    return "ok\n"}

    }Sunday, 25 October 2009

    Client to install

  • 8/2/2019 gearmanforbeginners-091102040759-phpapp02

    60/63

    Client to install

    Remote sandboxes

    add server

    run remote installation on masterrun remote installation on each slave

    run configuration queries on slaves

    Sunday, 25 October 2009

  • 8/2/2019 gearmanforbeginners-091102040759-phpapp02

    61/63

    my $ret =

    qx(echo "$MASTER_SANDBOX" |gearman -h $master_ip -f make_sandbox ) ;

    # using the gearman command line utility

    Sunday, 25 October 2009

  • 8/2/2019 gearmanforbeginners-091102040759-phpapp02

    62/63

    More on similar matters

    FOSS.MY, Kuala Lumpur, Malaysia, 25-Oct-2009 CodeBits, Lisbon, Portugal, 3-4-5-Dec-2009

    http://datacharmer.blogspot.com

    http://gearman.org

    Sunday, 25 October 2009

    http://gearman.org/http://gearman.org/http://gearman.org/http://gearman.org/http://datacharmer.blogspot.com/http://datacharmer.blogspot.com/
  • 8/2/2019 gearmanforbeginners-091102040759-phpapp02

    63/63

    THANKS

    Let's talk!

    http://creativecommons.org/licenses/by-sa/3.0/