• 对Gearman中client,worker,jobserver的理解


    在gearman的官网http://gearman.org/有以下的一段说明

    A Gearman powered application consists of three parts: a client, a worker, and a job server.

    The client is responsible for creating a job to be run and sending it to a job server.

    The job server will find a suitable worker that can run the job and forwards the job on.

    The worker performs the work requested by the client and sends a response to the client through the job server.

    Gearman由client,worker,jobserver 3的部分组成的.

    客户端(client)负责生成一个任务并且将任务发送到jobserver.

    任务服务器(jobserver)找到某个能够执行该任务的worker后将该任务发送给他.

    工人(worker)执行由jobserver发过来的任务并且将结果通过jobserver,发送回client.

    这个是以上的中文翻译.

    从这段描述中,发现client和worker是无法直接通信的,换句话说,client根本不知道worker的存在,反过来也是如此.而client和worker两者都只能和jobserver进行通信.

    gearman为何要如此设计这3个不同的部件(part)呢? 我们可以通过发生在现实世界的场景来理解.

    现实场景:

    某个客户c1 需要商品p1,但是他没有能力自己生产该商品p1,所以客户c1只好将生产商品p1的任务(job1)委托给某个生产企业e1来做.

    该生产企业e1接受了来自客户c1的生产商品p1的任务job1之后, 将任务job1派发给了能够生产该商品的工人w1.

    工人w1接受生产任务job1并开始了生产商品p1的工作.当完成了生产任务job1后,通知生产企业e1,最后生产企业e1将生产好的商品p1给到了客户A.

    结论:

    1 在整个流程中,客户c1根本不认识生产商品的工人w1(其实也没有认识工人w1的必要),客户c1只和生产企业e1进行联系(发送任务,接受结果)

    2 工人w1也不需要知道客户c1是谁.工人只需要知道任务(job)是什么,工人w1也只和生产企业e1进行联系(接受任务,发送结果).

    而 gearman的工作流程就是以上过程模拟.

    客户c1对应了gearman的client;

    生产企业e1对应了gearman的jobserver;

    工人w1对应了gearman的worker;

    这种设计能够带来很多的好处.

    好处1:各司其职,互不干扰,耦合度低

    工人w1 只做一件事情,就是生产商品p1. 如果要生产商品p2的话,那么对不起请让专门做商品p2的工人w2来做吧

    客户c1 也只做一件事情,就是将生产商品p1的任务委托给生产企业e1,然后从e1拿到生产完成的商品p1.如何生产商品p1的细节(比如说需要多少工人,机器做还是手工做,再外包等等)他不需要关心.

    生产企业 也只做一件事情,就是接受生产商品p1的任务委托给能做该任务的工人w1,然后从w1拿到生产完成的商品p1,给到客户c1就可以了.如何生产商品p1的细节他也不需要关心.

    好处2: 易扩展

    工人w1 和客户c1和生产企业e1,他们两两间的关系好像给人的感觉是都是一对一的.其实不然,完全可以是多对多的关系.

    一个工人可以从多个生产企业获取任务,一个生产企业可以给多个工人派发任务, 一个客户可以将任务委托给多个生产企业,同时一个生产企业也可以接受从多个客户来的任务

    所以当我们发现负载增加的时候,完全可以通过增加jobsever 和 worker的数量来应对.

    好处3:client和worker可以由不同的编程语言实现.不同系统间需要交互的时候,尤其明显.

  • 相关阅读:
    20145312 实验四《Andoid开发基础》
    20145312 《Java程序设计》第九周学习总结
    20145312 《Java程序设计》第八周学习总结
    20145312 实验三《敏捷开发与XP实践》
    20145312 《Java程序设计》第七周学习总结
    20145312 实验二《 Java面向对象程序设计》
    20145309李昊 信息安全系统设计基础第1周学习总结
    20145309《信息安全系统设计基础》第0周学习总结
    20145303课程总结
    20145215刘俊谦实验五 Java网络编程及安全
  • 原文地址:https://www.cnblogs.com/guoyongrong/p/4306049.html
Copyright © 2020-2023  润新知