缩放symfony / mongo应用程序

时间:2016-08-06 10:33:52

标签: mongodb symfony rabbitmq scaling

感谢您阅读 我需要有关扩展实际堆栈的技术专业知识。

  • 使用php(symfony 3)编码的主要应用程序
  • rabbit mq作为后端系统以避免延迟(消息由php cli脚本处理,symfony再次处理)
  • mongo db
  • 主持一切的主服务器

我的应用程序类似于mailchimp,sendInblue,它是一个电子邮件自动化工具。

  • 客户可以在我们的系统(api)中上传自己的联系人数据库
  • 客户端可以配置要发送到特定时间的电子邮件。
  • 客户端可以定义一些规则来确定是否应该将电子邮件发送给特定联系人。

它适用于400万个联系人,我们每天发送15万封电子邮件。

我们的活动增长非常快,我们希望每天发送 3M 电子邮件,并提供 200M 文档的联系人数据库。

  • 我可以使用doctrine + mongodb处理数十亿行文档吗?
  • 我可以期待哪些表演问题?
  • 我知道我可以使用分片在多个系统中分发数据集,还有其他方法吗?
  • 在这种情况下,PHP代码是否需要(完全?)重构以进行缩放?
  • 我想让我的管理系统升级系统以处理数十亿行,我是否需要在我的代码中考虑一下?

现在让我们谈谈更具体的事情,如何处理联系人发送电子邮件? 我的实际实现是这样的:

  • 我有4百万客户在上午9点到晚上21点之间进行评估
  • cron dispatch 6000每分钟联系id到兔子mq
  • php进程(symfony控制台脚本)始终在运行并等待处理新的联系人ID
    • 从mongodb
    • 获取联系文件
    • 评估规则
    • 如果规则为真,则发送电子邮件

我使用supervisorD来管理一个始终运行的php cli脚本 因为它不够快,我把6个运行过程放在supervisord中。

但我不能把60个并行的php进程快10倍吧? 你如何扩展这样的系统?
你会以不同的方式实现这个,如果是这样的话?

最后但又很重要的问题,考虑到所有这些,我可以期待将收益转移到nodejs堆栈吗?

非常感谢

0 个答案:

没有答案