ESB是SOA解决方案中用于路由,消息转换,协议桥接等的传统中间件。 现在,几家供应商提供了一种名为API Gateway的新型中间件解决方案。这些解决方案通常被描述为访问组织公开提供的REST和SOAP服务的中心点。但是,API网关解决方案似乎提供了典型ESB功能的子集。
那么,ESB和API网关之间有什么区别?我什么时候应该使用其中一种?
答案 0 :(得分:6)
API网关通常充当您的Web服务的代理并提供有趣的价值,例如:日志记录,使SOAP服务可调用,如REST服务,调试帮助,跟踪等...因为API网关是在消费者和您的服务之间,它可以轻松捕获流量并执行这些操作。
企业服务总线(如nServiceBus)旨在位于消息传递协议(如RabbitMQ)之上,为其提供基本消息传递或pub-sub不具备的功能(或难以实现的功能)例如:数据库存储持久消息,重试逻辑,监听器封装,订阅消息的简单方法和传奇。您可以在不使用ESB的情况下使用消息传递协议,但不能使用其他方式。例如,您可以在不使用RabbitMQ的情况下使用nServiceBus。
答案 1 :(得分:3)
由于API网关和ESB都能够为服务代理服务,如果只考虑两种工具的中介和转换功能,它们可能看起来相同。 API网关与我的关键区别在于它所培育的特定目的。除了提供转换和一些路由功能之外,API网关应该能够充当它所支持的资源的入口点。此外,他们应该能够将访问控制和限制方面委托给其他专用组件,利用它们应该能够保证所需的行为。由于API网关将作为API管理解决方案的一部分,因此OOTB将支持所有这些功能。
使用ESB和其他外部组件或软件可能会为服务代理实现类似的行为。但是,由于ESB旨在用于满足更广泛的集成要求,并且不专门用于API管理,因此实现它们的用例将更加困难。
答案 2 :(得分:3)
两者都可以执行服务的中介和汇总。主要区别在于API网关公开了一组要使用的服务,并负责代理服务的其他一些功能;例如速率限制。
另一方面,ESB建立了双向关系,因此提供商和消费者(服务)都可以参与以获得所需的结果。换句话说,ESB允许计算实体既是服务又是消费者。 API网关将a服务限制为具有单个行为。
答案 3 :(得分:1)
API网关是为客户端提供的代理。网关为客户端提供了一个一致的接口,而不管整个系统中的任何更改。它还允许内部系统进行更改而不会影响客户端。
ESB提供了一种服务到服务通信的方法。使用此技术,服务无需相互通信,从而减少了耦合。
有很多变体和实现细节,但这是基本的区别。
答案 4 :(得分:0)
我同意其他答案,但是我想补充一点,很重要的区别是Gateway不应包含任何业务逻辑。
它们都在服务之间进行某种中介,例如验证,转换和路由,但是例如在网关验证的情况下,应该仅验证数据的格式。
此外,我认为ESB可以使我更多地了解来自多个服务的数据聚合,并且在不引入业务逻辑的情况下进行任何聚合都是非常困难的。