Beanstalk与DB

时间:2011-08-13 07:44:22

标签: mysql beanstalkd

我正在编写一个db logging ruby​​ gem,它将简单地从Beanstalk队列中取出一个作业并将其写入DB中。

这是服务器A上的一个进程将一个作业(它想要记录)放在服务器B上的Beanstalk队列中,我在服务器B上的日志记录进程将其取出并将其写入服务器B上的mysql数据库。 / p>

我想知道这是否值得? 将工作放在Beanstalk队列中的速度比写入DB要快。或者,我想要登录到DB的进程可以直接将其写入数据库,而不是使用日志记录过程。

请注意,beanstalk服务器和DB都在另一台服务器上。

Beanstalk在内部进行从服务器A到服务器B的套接字调用。 我相信mysql也需要做同样的事情吗?

因此,对于另一台服务器而言,mysql的速度要比放入beanstalk队列慢。

1 个答案:

答案 0 :(得分:4)

它会快得多,主要是因为默认情况下,Beanstalkd作业are stored in-memory会丢失,例如,如果您在服务器上断电,而MySQL是一个强大的ACID兼容关系数据库,并且因此将付出很多努力并将每个日志刷新到磁盘。

我认为您会发现,在对系统生成的大量日志进行基准测试后,磁盘I / O将成为您的限制因素,而不是TCP / IP套接字的速度。您当前系统的优势在于,当服务器A在服务器B的beanstalkd实例上记录日志时,它占用的服务器A的时间非常少,而服务器B可以定期从beanstalkd到MySQL多次刷新我们的许多日志,从而提高了流程的效率。缺点是,批量日志越多,软件/电源故障时丢失的日志就越多,除非你使用beanstalkd的“-b”参数,通过将它们写入磁盘使工作变得持久(因此使过程变慢)。

当然,真正解决这个问题的唯一方法就是基准!