0

我的公司计划实施一个包含大量服务的集群系统,这些服务将自动部署在不同的机器上并相互互连(SOA 风格)。有时服务会相互依赖。

例如:服务 B(应用程序)只有在服务 A(数据库)启动并运行时才能启动。

每个服务都计划作为不同的 java 进程运行,可能部署为 WAR(在专用 tomcat 内部),甚至根本没有 web。

现在,我们在同一个 WAR 中拥有所有服务,并且只有一个部署 WAR 的 tomcat。所有的服务都是通过 Spring 定义的,Spring 为我们管理依赖关系。

所以我问自己是否存在一些框架可以帮助管理分布式环境中的服务,就像我上面描述的那样?

提前致谢

4

2 回答 2

2

Netflix发布了他们的开源工具——Asgard,它可以管理实例并将其部署到云中。它与 EC2 紧密耦合(我最后一次检查)。根据您是否部署到亚马逊云,您可能会发现这很有用。我不知道它是否支持依赖项,但它确实管理分布式环境上的部署。Netflix 确实在他们的博客上讨论了很多服务依赖关系,所以部署解决方案可能有一个功能可以解决这个问题。

我不知道有任何其他服务/框架可以做到这一点。如果您要自己编写此代码,我想您可以配置几个部署服务的Jenkins任务。一项任务可以依赖另一项任务来模拟服务依赖性。Pinging URL 端点可以在部署 B 之前检查服务 A 是否存在。

还有另一种看待这个的方式。如果您确保您的服务都正常运行,则无需检查依赖性。像Nagios这样的监控工具可以在这里提供帮助。立即排除故障服务可以帮助您专注于部署服务 A,而不是检查您对每个部署的依赖关系。

于 2013-04-17T13:46:02.543 回答
2

使用动物园管理员

更正,使用 Netflix 的Curator,这是一个基于 zookeeper 的框架,可以简化使用它的工作。

在我工作的地方,我最近实现了一个Coordinator有两种方法的类:

waitForDependencies- 一种同步方法,用于检查当前服务的依赖项的活动性并阻塞当前线程,直到通知所有依赖项服务都处于活动状态。活跃度检查是通过验证依赖服务创建的节点的存在来完成的,在它们的初始化过程结束时,通过调用notifyUp

notifyUp- 一种同步方法,通知世界调用该方法的当前服务是活动的。通知是通过在 zk 集群中创建一个临时(临时,只要创建它的连接处于活动状态时保持活动状态)节点来完成的,依赖它的其他服务会使用它来查找该节点,使用waitForDependencies

于 2014-07-13T13:27:48.070 回答