Service Web服务版本控制:ESB是否过度?

Service Web服务版本控制:ESB是否过度?,service,transformation,esb,Service,Transformation,Esb,我们的web服务有多个版本(REST和SOAP)正在生产中,而且随着每个版本的发布,这个版本的数量不断增加 在不同版本之间,请求和响应可能会有微小的更改(通常添加新字段) 如果我们要淘汰旧版本,我们如何继续为旧版本的请求提供服务 可能的解决方案的一个方面涉及创建“虚拟端点”,将以前版本的请求路由到相同服务的新版本。因此,对/v1/customer/1的请求映射到/v2/customer/1。我们正在使用mashury,通过它可以很容易地做到这一点 我们还希望对请求和响应应用转换规则,以生成符合旧

我们的web服务有多个版本(REST和SOAP)正在生产中,而且随着每个版本的发布,这个版本的数量不断增加

在不同版本之间,请求和响应可能会有微小的更改(通常添加新字段)

如果我们要淘汰旧版本,我们如何继续为旧版本的请求提供服务

可能的解决方案的一个方面涉及创建“虚拟端点”,将以前版本的请求路由到相同服务的新版本。因此,对/v1/customer/1的请求映射到/v2/customer/1。我们正在使用mashury,通过它可以很容易地做到这一点

我们还希望对请求和响应应用转换规则,以生成符合旧契约的XML和JSON响应

总之,我们需要将路由和转换规则应用于所有传入消息和响应。ESB在这方面做得过火了吗?我们的标准不太符合中概述的标准。这个问题有没有更简单的解决办法?一个不需要修改代码来实现请求和响应版本控制的工具?

如果该工具适合

如果您正在研究的ESB将满足您的版本控制和转换需求,那么继续使用它

您不希望看到的是“哦,这是我们的ESB在监听我们的一个web服务的一个端点”。那简直是疯了

在我看来,ESB可能非常适合您的需要。你不必勾选所有的方框。事实上,您需要勾选的唯一一个框是“这个工具是否值得在我们的环境中花费资源和时间来学习、利用、支持和部署,而不是使用我们更熟悉的工具”框

因为像ESB这样的软件的一个问题是,它们可能附带很多东西,因此很多文档对于平台的新手来说很难涉猎并选择合适的内容以及如何配置


我将获取一个ESB并进行试验,然后进行一些性能测试。如果你没有在试验上花费大量的时间,而且它似乎是可行的,那么就开始吧。

有一些像IBM这样的公司专门为你的用例开发软件。他们基本上有一个服务注册服务器。服务注册表充当所有服务的别名。更重要的是,大多数ServiceRegistry服务器都有一个工作流,人们可以使用该工作流来升级、降级、日落、版本,并通知服务用户某些内容已更改。大多数人把工作流称为。。。治理

试试UltraESB[http://adroitlogic.org]这显示了许多关于如何执行路由和转换的示例。您还可以使用处的基准测试对任何ESB进行负载测试,以查看它们在路由、转换等方面的执行速度。这是一个小型(约35MB)ESB,不需要更改代码,或者具有陡峭的学习曲线—当您将路由规则编写为几行Java代码,甚至Javascript、Ruby、,Groovy etc—您知道的任何JSR 223脚本语言。

ESB对于这个解决方案来说都可能是多余的。尽管我们可能会反对旧版本,并有新版本,但仍在寻求使用旧版本服务的客户端程序会发生什么情况

如果我们在新版本的服务中更改了请求/响应格式,那么尝试发送旧请求格式和期望旧响应格式的客户端将失败。因此,我们不能也不应该让旧的服务版本突然离线,而是逐步淘汰。为此,我们需要新旧服务并行运行,至少需要一段时间

因此,ESB的引入并不能解决这个问题。当我们实际停用旧服务时,在允许使用旧服务的客户端迁移到新服务的一段时间之后,我们可以将旧URL重新定向到新服务。但是,我们不需要ESB来完成这项工作,因为像httpd mod_proxy或nginx这样的简单解决方案可以完成这项工作


ESB对于客户机和实际端点之间消息的增值中介非常有用。因此,无论有什么,对于这种情况,您都应该使用简单而智能的解决方案

谢谢。这个答案让我想到了实现服务注册的开源ESB。ApacheSynapse附带了一个例子,完全符合我上面所描述的。正如另一个人所建议的,我可以用这个来做飞行员。我喜欢做飞行员的想法。如果运行起来太困难,那么我可以排除使用该特定框架的可能性。应该有一些足够轻量级的东西来支持我们的用例,但不要妨碍我们。