我在Zookeeper上构建了一个服务发现层,用于在分布式环境中查找Thrift服务。我正在寻找在生产环境中运行这些服务的最佳方式。
目前,它是通过打包部署到Tomcat的战争来完成的。在servlet实例化期间,将创建Spring ApplicationContext,从而在Tomcat中创建TThreadPoolServer
。
由于以下几个原因,我不喜欢这个:
在尝试找到解决此问题的最佳策略的过程中,我提出了几个选择:
是否有人建议他们之前如何处理托管分布式服务器。我最好只在Tomcat中使用HTTP吗?
答案 0 :(得分:6)
我尝试使用Tomcat作为Thrift服务器的主机,发现它没有带来任何额外的价值:在这种情况下,servlet容器的所有功能(请求路由等)都不是必需的。另一方面,Tomcat增加了复杂性和移动部件(即,它很难解决PermGen问题)。
使用Thrift over HTTP会对性能产生重大影响,尤其是在具有大量客户端连接的高负载情况下。
所以我最终得到了在Supervisor Daemon(http://supervisord.org/)下运行的独立Thrift服务。它使分布式部署的管理非常方便。当需要通过HTTP公开Thrift API时(例如,对于JS客户端),我们使用在vert.x(http://vertx.io/)中实现的精简异步代理。