mca*_*uth 6 python django asynchronous twisted
全部:我正在寻求输入/指导/设计思路.我的目标是找到一种精简但可靠的方法来从HTTP POST获取XML有效负载(这部分没有问题),解析它,并异步生成一个相对长期的进程.
产生的进程是CPU密集型的,将持续大约三分钟.我一开始并不期望有太大的负载,但我确实有可能需要在服务器上横向扩展,因为流量有望增加.
我非常喜欢这种用途的Celery/Django堆栈:它非常直观,并且具有完全满足我需要的所有内置框架.我热情地开始了这条道路,但我很快发现我的512MB RAM小云服务器只有100MB的可用内存,我开始意识到,一旦我的所有进程全速运行,我就会遇到麻烦.此外,还有几个移动部件:RabbitMQ,MySQL,cerleryd,ligthttpd和django容器.
我绝对可以增加服务器的大小,但我希望在这个项目的早期阶段将成本降到最低.
作为替代方案,我正在考虑使用twisted进行流程管理,以及远程系统的透视代理,如果需要的话.但至少对我来说,虽然扭曲是辉煌的,但我觉得我正在注册这条道路:写协议,回调管理,跟踪工作状态等等.这里的好处非常明显 - 卓越的性能,更少的移动部件和更小的内存占用(注意:我需要验证内存部分).我对此严重偏向于Python - 对我而言比其他选择更令人愉快:)
我非常感谢对此的任何看法.我担心在错误的轨道上开始工作,稍后用生产流量重做这将是痛苦的.
-Matt
在我的系统上,使用非常合理的默认值运行的RabbitMQ使用大约2MB的RAM.Celeryd使用了一点,但不是过多.
在我看来,与堆栈的其余部分相比,RabbitMQ和芹菜的开销几乎可以忽略不计.如果您正在处理需要几分钟才能完成的工作,那么这些工作会在您的流量增加时淹没您的512MB服务器,而不是RabbitMQ.从RabbitMQ和Celery开始,至少会让你很好地将这些工作横向扩展,所以你肯定在那里正确的轨道.
当然,你可以在Twisted中编写自己的作业控件,但我不认为它会让你获得更多.Twisted具有相当不错的性能,但我不认为它能够超越RabbitMQ足以证明引入错误和架构限制的时间和潜力.大多数情况下,担心优化似乎是错误的.花点时间重新编写RabbitMQ并将这三分钟的工作量减少20%.或者只需花费额外的20美元/月,然后将容量增加一倍.