我正忙于使用ZeroMQ编写Python应用程序,并实现ZGuide中描述的Majordomo模式的变体。
我有一位经纪人,作为一组工人和客户之间的中间人。我想对每个传入的请求进行大量的日志记录,但我不想让代理浪费时间。代理应该将日志记录请求传递给其他东西。
我想了两种方法:-
我不知道在这件事上哪一个更好,哪个更快。第一个选项确实允许我使用我已经为普通工作人员使用的当前工人基类,但第二个选项实现起来似乎更快。
我希望对上述建议或意见,或可能有不同的解决方案。
发布于 2013-07-22 09:46:55
您可能需要考虑实现远程日志记录的第三种可能性。如果您使用标准Python模块,您可以考虑在工作人员、客户端和代理中使用logging.QueueHandler
类,在远程日志过程中使用logging.QueueListener
类。
与其使用普通的Python作为应用程序进程和日志记录过程之间的传输,不如使用multiprocessing.Queue
类型使用ZeroMQ实现自己的Queue
替换类,使类成为标准Queue
的插入替代。这样,您的应用程序就可以通过分布式数据中心在任何环境中不受更改地从一台多核计算机运行。
总之,在所有员工、客户和代理中使用标准的Python和QueueHandler
,并基于QueueListener
和您选择的Pythonlogging
处理程序(S)创建一个独立的流程来处理日志记录的繁重工作。
发布于 2013-11-05 17:23:43
这些是完全不同的方法,每种方法都有各自的优缺点,您很可能会在稍后的开发阶段看到这些方法:
我想了两种方法:-
您可以尝试的一种方法是有一个额外的日志工作者,如方法1所示,您可以让您的工作人员登录到memcache日志记录集群,日志工作者监视当前的资源负载,并且在指定给定的资源加载参数时,工作人员登录到IOP有限的设备(例如硬盘)。
我还喜欢Jonathan的方法,但是我也经常使用Python2.x,而且您可能需要设置自己的日志后端才能真正实现性能限制。
如果我错了,请纠正我,但我的看法是,您正在执行一些真正的数据密集型任务,存储IOP是您的瓶颈。
一种方便的方法仍然是让代理执行brokerage
日志记录(如所描述的形式),同时具有中央代理实例的所有缺点。例如,如果代理需求如此之大,以至于永远没有空间将memcached日志写回存储,则需要采取另一种方法。
你最终可能会得到一个没有经纪公司的模型。那就是工人们自己管理他们的工作。在一个简单的例子中,通过一个分布式循环算法。
https://softwareengineering.stackexchange.com/questions/201580
复制相似问题