4. “The way I like to think of Gearman is a
massively distributed fork mechanism”
-Joe Stump, Digg
“The Not Mechanical Turk”
-Don MacAskill, SmugMug
Tuesday, June 21, 2011
5. resize_image()
do (“resize_image”) {
…
return $image;
}
Tuesday, June 21, 2011
8. Server
Provides Asynchronous and Synchronous Requests
Restarts Work
Durable Requests
Gearman Protocol/HTTP
Epoch Scheduling
Logging
Tuesday, June 21, 2011
9. Client
# Create our client object.
$gmclient= new GearmanClient();
# Add default server (localhost).
$gmclient->addServer();
$result= $gmclient->do("reverse", "Hello!");
echo "Success: $resultn";
Tuesday, June 21, 2011
10. Worker
# Create our worker object.
$gmw= new GearmanWorker();
# Add default server (localhost).
$gmw->addServer();
$gmw->addFunction("reverse", "reverse_fn");
while ($gmworker->work()) {…}
Tuesday, June 21, 2011
11. Worker Function
function reverse_fn($job)
{
$workload= $job->workload();
$result= strrev($workload);
return $result;
}
Tuesday, June 21, 2011
12. Lots of functions...
$gmw->addFunction("resize", "resize_fn");
$gmw->addFunction("grep", "grep_fn");
$gmw->addFunction("fetch_url", "fetch_url");
Tuesday, June 21, 2011
13. Function
gearman_return_t fetch_url(gearman_job_st *job, void*)
{
const char *workload= gearman_job_workload(job);
size_t workload_size= gearman_job_workload_size(job);
gearman_job_send_status(job, 0, 100);
…
gearman_job_send_data(job, chunk, sizeofchunk);
…
gearman_job_send_status(job, 50,100);
… if (issue_warning)
gearman_job_warning(job, “I'm sorry, Dave. I'm afraid I can't do that.”, size);
return GEARMAN_SUCCESS;
}
Tuesday, June 21, 2011