部署并提供节俭服务

时间:2013-07-14 12:37:52

标签: java thrift

我在Zookeeper上构建了一个服务发现层,用于在分布式环境中查找Thrift服务。我正在寻找在生产环境中运行这些服务的最佳方式。

目前,它是通过打包部署到Tomcat的战争来完成的。在servlet实例化期间,将创建Spring ApplicationContext,从而在Tomcat中创建TThreadPoolServer

由于以下几个原因,我不喜欢这个:

  • 它使Tomcat变得毫无用处,感觉就像是一个简化部署的黑客行为
  • 它避免了Tomcat线程池以及用于确定分发请求的最佳方式的所有逻辑

在尝试找到解决此问题的最佳策略的过程中,我提出了几个选择:

  • 作为一个独立的JAR启动thrift服务(我不喜欢这个,主要是因为我现在需要重新发明app容器开发人员花了很多时间来完成的逻辑
  • 主机通过HTTP进行节俭,从而利用Tomcat线程池和服务请求的逻辑(如果由于 - 虽然很小 - 这会导致性能下降而导致这个问题)
  • 使用其他类型的应用程序容器来托管这些服务

是否有人建议他们之前如何处理托管分布式服务器。我最好只在Tomcat中使用HTTP吗?

1 个答案:

答案 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/)中实现的精简异步代理。