部署并提供节俭服务

Col*_*n M 6 java thrift

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

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

我不喜欢这个,原因有两个:

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

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

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

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

Wil*_*ire 6

我已经尝试使用Tomcat作为Thrift服务器的主机,并发现它没有带来任何额外的价值:在这种情况下,servlet容器的所有功能(请求路由等)都不是必需的.另一方面,Tomcat增加了复杂性和移动部件(即,它很难解决PermGen问题).

使用Thrift over HTTP会对性能产生重大影响,尤其是在具有大量客户端连接的高负载情况下.

所以我最终得到了在Supervisor守护进程(http://supervisord.org/)下运行的独立Thrift服务.它使分布式部署的管理非常方便.当需要通过HTTP公开Thrift API时(例如,对于JS客户端),我们使用在vert.x(http://vertx.io/)中实现的精简异步代理.