【问题标题】:Python System Design. Master Slave? Or Multiple Masters?Python 系统设计。主从?还是多个大师?
【发布时间】:2016-06-11 03:03:57
【问题描述】:

最初它是一个小项目,只有 150 个帐户,我用 python 编写了一个 selenium 程序来与他们一起做一个小任务。它使用一台计算机,大约需要 5 个小时。但是,现在我希望扩展到 1000 个帐户。出于显而易见的原因,我不想在一台计算机上执行此操作,这项任务需要每天完成一次,并且显然需要大约 30-35 小时才能在一台计算机上完成此任务。我想使用多台机器,但也希望能够轻松扩展到三台、四台或更多。

我已将所有帐户的数据移至亚马逊云数据库,并且可以从我的 python 程序轻松连接到它。但是,正如我之前提到的,我希望这个项目易于扩展。我不想硬编码值,也就是让一台计算机执行帐户 1-500,另一台执行 501-1000(如果我添加 500 个帐户和 2 台机器怎么办?我希望每台机器执行 1500/4)。我正在考虑一种主从方法。在每台机器上,我都有一个程序,可以将一些帐户作为数组调用。还有一个在我的机器上运行的主程序,每 24 小时可以发送一个命令,其中包含每台机器应该使用的帐户。

然后我希望程序将数据返回给我,当每个从机完成时,主程序将合并每个从机发回的数据并相应地更新表。或者每个从站独立更新表,但我不确定这是否可能由于表锁(如果有人可以对此发表评论,这也会有所帮助)

感谢阅读!

编辑:如果您认为这太宽泛,我不是在寻找确切的答案。只是想找到以前做过类似事情的人。仅列出一项我可以研究的技术或方法对我有很大帮助

【问题讨论】:

  • 可能值得一试CoreOS。使用 Fleet 分配另一个容器很简单,并且 etcd 可用于保存全局信息,例如数据库在哪里,谁是主服务器(如果您使用主/从方法)。使维护/管理分布式系统变得非常容易。
  • 非常感谢!我现在一定会开始研究的

标签: python mysql system-design


【解决方案1】:

我之前做过类似的事情,最终使用了主从设计。

我有一个拥有“工作”数据库的主人,奴隶们查询它以获取他们的任务。

在我的情况下,过程是这样的:

  1. 作业的从属查询主机
  2. Master 发送 50 个作业并在 DB 中使用 slave 名称更改状态
  3. 奴隶完成工作并告诉主人
  4. 主数据库更改状态以完成和发送新任务
  5. 重复直到队列全部完成

这样我可以在作业队列变大时添加更多从属设备,并且它们可以具有不同的性能。我的一些奴隶比最慢的奴隶多 3 倍,这取决于互联网连接和页面加载时间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-08
    • 1970-01-01
    • 1970-01-01
    • 2017-05-23
    相关资源
    最近更新 更多