我在 Zookeeper 之上构建了一个服务发现层,用于在分布式环境中查找 Thrift 服务。我现在正在寻找在生产环境中运行这些服务的最佳方式。
目前,它是通过打包部署到 Tomcat 的战争来完成的。在 servlet 实例化期间,会创建 Spring ApplicationContext,这会创建TThreadPoolServer
Tomcat 内部。
我不喜欢这个有几个原因:
- 它使 Tomcat 有点无用,感觉就像是一种便于部署的 hack
- 它避免了 Tomcat 线程池和所有用于找出分发请求的最佳方式的逻辑
在试图找到处理这个问题的最佳策略的过程中,我想出了几个替代方案:
- 将 thrift 服务作为独立的 JAR 启动(我不喜欢这样,主要是因为我现在需要重新发明应用程序容器开发人员花费大量时间制定的逻辑
- 通过 HTTP 进行主机节俭,从而利用 Tomcat 线程池和服务请求逻辑(关于这一点的不确定性,因为这将导致性能下降 - 尽管很小 - 性能损失)
- 使用不同类型的应用程序容器来托管这些服务
有没有人对他们以前如何处理托管分布式服务器有任何建议。我最好在 Tomcat 中使用 HTTP 吗?