Apache / PHP到Nginx / Tornado / Python
我们的网站已经开发出对实时更新的需求,我们正在考虑各种彗星/长轮询解决方案.经过研究,我们已经确定nginx作为4个龙卷风实例的反向代理(托管在Amazon EC2上).我们目前正在使用传统的LAMP堆栈,并在PHP中编写了大量代码.我们愿意将PHP代码转换为Python以更好地支持此解决方案.这是我的问题:
>假设一个四核处理器,nginx可以在与4个龙卷风实例相同的服务器上运行,还是建议运行两个独立的服务器:一个用于nginx,另一个用于4个龙卷风进程?
>在Nginx前使用HAProxy有什么好处? Nginx本身不能很好地处理负载平衡吗?
>根据我的研究,Nginx似乎没有一个很棒的URL重定向模块.是否优先使用Redis进行重定向?如果是这样,Redis应该在Nginx前面,还是落后?
>我们的大部分应用程序代码都不会涉及实时更新.此代码包含多个数据库查询和文件系统读取,因此它显然不适用于非阻塞的应用程序服务器.根据我的研究,我已经读过阻止问题只是通过拥有多个Tornado实例来缓解,而其他人建议使用单独的应用服务器(例如Gunicorn / Django / Flask)阻止呼叫.使用非阻塞服务器时处理阻塞调用的最佳方法是什么?
>将我们的代码从PHP转换为Python将是一个漫长的过程.同时在Nginx后面运行Apache / PHP和Tornado是否可以接受,或者我们应该坚持语言(龙头与gunicorn / django / flask或龙卷风本身)?
解决方法:
我会逐点说:
>是的.可以在一台服务器上运行tornado和nginx.你也可以使用nginx作为龙卷风的反向代理.
>如果您有多个服务器实例,Haproxy将为您带来好处.它还允许您直接将websockets代理到龙卷风.
>实际上,nginx可用于重定向,没有任何问题.我没有听说过使用redis进行重定向 – 它的键/值存储…可能你的意思是别的什么?
>再次,您可以在django中编写阻塞部分,在龙卷风中编写非阻塞部分.龙卷风还有一些用于数据库查询的非阻塞库.不确定你在这里需要django的力量.
>是的,可以在nginx后面运行apache.很多项目在apache前面使用nginx来提供静态文件.
其实问题很基础 – 也回答.如果你愿意,我可以更详细地论述任何一点.