使用 Python 横向扩展或分片 Python-RQ 或 Redis

Posted

技术标签:

【中文标题】使用 Python 横向扩展或分片 Python-RQ 或 Redis【英文标题】:Horizontally scaling out or sharding Python-RQ or Redis with Python 【发布时间】:2013-02-24 10:06:25 【问题描述】:

尝试横向扩展作为Python-RQ 的任务服务器的 Redis 实例。

据我所知,最好的方法是将分片逻辑(很可能使用Consistent Hashing)添加到自定义ConnectionPool 和/或Connection 类中。我宁愿为一致性哈希机制使用一个库——因为它似乎应该是可用的,并且很可能比本土解决方案更好/更久经考验。

什么是做这种事情的好模式?是否有一些我应该研究的图书馆?有什么我应该考虑的遗漏吗?

非常感谢!

【问题讨论】:

【参考方案1】:

我认为您应该记住几件事。

第一个是关于你的瓶颈在哪里以及为什么你应该在一个 Python-Rq 范式下在你的 Redis 后端提供分区架构方式。我认为 Redis 有足够的performance 来相信引导项应该是你的工人数量和你想要在给定时间处理的工作数量。

您可以说:我可以等待多少时间才能处理该作业?如果你能算出这个值,延迟。您将拥有在架构中添加/删除更多节点的密钥。

顺便说一句,如果您正在寻找一些具有一致性哈希的分片解决方案来改进您的基础架构,您必须考虑在删除或添加新节点时重新平衡密钥背后的问题。

例如,一个当前工作人员可能会为一个已存在的作业连接到错误的 redis 服务器,因为在新作业启动之后和之前它已经结束时,已经添加或删除了一个新服务器。

【讨论】:

是的,我认为这是需要考虑的问题的重要部分。但是,我不认为它回答了我的问题:我如何允许应用程序使用 RQ 水平扩展?我应该遵循什么技术来做到这一点? 但是您希望将哪个资源扩展到您的应用程序中?

以上是关于使用 Python 横向扩展或分片 Python-RQ 或 Redis的主要内容,如果未能解决你的问题,请参考以下文章

ES入门

ES入门

mysql分片

分片与分区的区别

python系列教程152——range函数与分片

在 MySQL 中查询分片数据