写点什么

不要让消费者和服务提供者直接通信

  • 2008-03-11
  • 本文字数:2025 字

    阅读完需:约 7 分钟

有人 在过去的几年里指出 一些人仅仅使用Web Services 做开发并不就意味着他们遵循了SOA 原则。这与REST 的说法相同:你仅是使用HTTP 和HTML 并不就意味着你进入了那个阵营,反之亦然。然而,在他的最新的文章中,Ron Schmelzer 将责任归咎于“以集成为核心的专家(integration-centric techies)”,因为: > 妨碍SOA 成功的可能原因是你们自己对SOA 应该如何工作的错误理解和概念混淆。

如同Ron 所看到的,问题在于通信和传统集成项目中开发者典型的工作的方式: > ……他们考虑从一个系统获得数据或者应用功能的方式,把它放入另一个系统的方式,从一个地方到另一个地方得到信息或者功能所用的机制,接着考虑将它从一个格式、协议、上下文、流程或者策略转换到另一个的过程中所需处理它的东西。

因此根据Ron 的观点,其意思是,以集成为中心的开发者在基于服务的环境中寻找的是一个数据传输与转换的方式,很多供应商很乐于帮助摆脱现有的集成解决方案,这个方案不是SOA 感知的(SOA-aware)而是RPC 。至于为什么这是一种不好的方式,有很多原因。但是Ron 认为通信方面是关键: > 为什么?首先,SOA 最主要的概念是我们希望通过构建一个架构模型,原则,以及在一个持续异构的环境中将消费者能力与提供者能力松耦合的抽象来处理频繁的和无法预测的变化。这意味着我们不得不在对他们可能如何被使用一无所知的情况下进行功能开发。

此时必然出现的常见挑战是,确保在某些事情发生变化时,不需要改动其他任何东西。在复杂、大规模的系统中,可以发生变化的变量(服务位置与可用性、服务实现与契约的版本、业务流程与策略的变更)的数量非常大,足以使未预见到的变化很有可能在某处引起破坏。 > 然而,如果你认为服务只是一个API,那么当你试图将一个服务消费者直接连接到服务提供者时,所有该死的破坏就会被释放出来。如果提供者位置移动了呢?如果服务契约改变了呢?如果提供者不再可用了呢?如果你现在需要一个新的通信机制或者数据模式变化了呢?

给 软件增加另一个间接层来隔离变化的方法,在这里仍然有效。通过把一些东西放在服务消费者与服务提供者之间,你可以缓解这个问题。这是目前的实现方式,但是 Ron 认为这样也是错误的,开发者不应该纯粹的依赖技术来解决这个问题:就像我们行业中的很多事情一样,你能做的最坏的事情是一脚踏入来解决问题,而不考 虑问题的各种情况。在这个特殊情况下,系统架构是解决方案的关键,而某些厂商的产品是次要的。 > 假设你想构建一个服务消费者来消费或者组合一些功能,但是你不知道这个功能在哪儿,或者甚至不知道如何与其通信。至少有3 种 方式来解决这种特殊的挑战。首先,你可以以一种你确实理解的语言与你确实知道位置的一个代理(proxy)通话(或者叫做 broker 或intermediary),并向这个代理发送一个请求,然后这个代理将会表现出消费者的行为。

显然,假定代理不会改变! > 这种方式简化了服务消费者必须了解位置变更的问题,因为它们只需要知道代理和最终接收者。从技术的角度,WS- Addressing 的使用简化了这种方式。本质上说,一个服务消费者只需要知道一个提供者的WS-Addressing,然后把它传给一个服务代理去解 析和分发。

很不幸Ron 忘记了就SOA 来说,WS-Addressing 并不总是表现良好。然而…… > 这种方式的问题在于服务代理仍需找到一个方式来分发消息,如果代理将所有的规则包含在黑盒子里,我们就会得到与EAI2.0 风格的ESB 解决方案相同的问题。这正是注册中心大显身手的地方。服务代理不应该存储它们自己的规则,而应该从一个中心记录系统得到所有它们的路由、位置 和基于策略的绑定规则。

现在即使注册中心帮助缓解了这个问题,消费者与代理的连接问题仍然存在。仅仅不加考虑的用代理来增加另一个间接层只是把问题推到了其它地方,而不是解决它。 > 对这个挑战的回答是基于注册中心的“延迟绑定”。在这种场景下,服务消费者查找注册中心得到代理的位置,或许根据服务消费者当前 的位置以及它使用的通信协议通信。有人会认为可以在注册中心找到服务提供者的元数据后,再把服务消费者与服务提供者直接绑定起来,但是这是错误的。问题在 于如果服务提供者在使用一些替代协议,或者其位于某个服务消费者无法到达的位置,就会产生通信问题。所以,即使我们在注册中心中找到了元数据,我们仍然不 要试图在服务消费者和提供者之间直接通信。

WS-Addressing 在这里也有帮助。最后 Ron 以回答在这个场景下 ESB 是否有用的问题来结尾: > 需要 ESB 吗?不是必须的。不管怎么样,买一个是不是会让你感觉好一点?或许吧。当然,这些代理是什么?ESB 的商家肯定想让你 相信他们的产品在这种配置下能够用作代理,并且绝对是真的。他们肯定能。关键问题不是 ESB 不能制造好的代理。他们当然能,我也想特别指出这一点。但是即 便你不使用一个 ESB 或者或使用你现有的基础设施也可以蒙混过关,它仍然会继续工作。

查看英文原文: Don’t Let Consumers and Service Providers Communicate Directly

2008-03-11 01:073534
用户头像

发布了 29 篇内容, 共 49779 次阅读, 收获喜欢 2 次。

关注

评论

发布
暂无评论
发现更多内容

license是什么意思?谁能解释一下?

行云管家

云计算 LICENSE IT运维

1万字长文高速你千万级并发架构下如何提高数据库存储性能,使用指南

Java 程序员 后端

迎接10亿快递高峰,看百度OCR如何助力物流企业提速

百度大脑

人工智能 OCR

2021年总结阿里、腾讯、百度等大厂11个Redis系列高频面试题,哪些你还不会

Java 程序员 后端

15 高可用网站的软件质量保证,java技术基础知识总结

Java 程序员 后端

代码覆盖率VS测试覆盖率

FunTester

测试 测试覆盖率 覆盖率 FunTester 代码覆盖率

免费试用的堡垒机哪里有?哪家好?咨询电话多少?

行云管家

网络安全 数据安全 等级保护 IT运维

名震GitHub,字节跳动内部顶级数据结构刷题学习笔记根本停不下来

Java 程序员 数据结构 面试 字节

2020淘宝双十一快速刷金币工具,这份字节跳动历年校招Java面试真题解析

Java 程序员 后端

进击的Java(四)

ES_her0

11月日更

15W字!腾讯总监手写“Netty速成手册”(1),SpringBoot项目瘦身指南

Java 程序员 后端

2020年春招复盘:技术三面+HR面,成功斩获京东offer,springboot项目实战源码

Java 程序员 后端

2020百度、小米、乐视、美团,小米java面试几轮

Java 程序员 后端

2021年10月最新版Java面试真题+视频解析(价值24980赶紧收藏码住!

Java 程序员 后端

2021年最新基于Spring Cloud的微服务架构分析,java技术经理岗位职责

Java 程序员 后端

100道 IT名企前端面试真题,java教程pdf百度网盘

Java 程序员 后端

10个 解放双手的 IDEA 插件,少些冤枉代码,java程序员进阶路线

Java 程序员 后端

2020年Java篇:蚂蚁金服、拼多多、字节跳动的面试总结,mysqlserver使用教程

Java 程序员 后端

2021 年最新版 68道Redis面试题,20000字,赶紧收藏起来备用,成功入职阿里

Java 程序员 后端

1小时破千万点击量!阿里巴巴首发:Java实践指南,mysql使用教程图解目录

Java 程序员 后端

2021BATJ面试题大全500道:Redis+数据库+分布式,java面试简历百度云

Java 程序员 后端

2021字节总监最新发布:JVM +GC优质手册!面试专属,mongodb集群搭建原理

Java 程序员 后端

1024 的那天,我这个三线的程序员是这样度过的,阿里巴巴高级java工程师薪酬

Java 程序员 后端

10万字Spring Boot详细学习笔记+源码免费开放下载,京东T7大牛纯手写出来的!

Java 程序员 后端

10个经典场景带你玩转SQL优化,Java笔试题算法题

Java 程序员 后端

10分钟手把手教你快速入门SpringBoot!,字节跳动java研发面试题社招

Java 程序员 后端

15W字!腾讯总监手写“Netty速成手册”,mysql索引优化面试题

Java 程序员 后端

大开眼界,终于有人将Spring技术精髓收录成册,已在Github上获赞百万

Java spring 编程 程序员 SpringCloud

2021年五面蚂蚁、三面拼多多、字节跳动最终拿offer入职拼多多,我是如何收割多家大厂offer的

Java 程序员 后端

从OA到COP,致远互联成引领行业的“灯塔”

海比研究院

致远互联 COP 协同运营平台

2020-6次面试阿里,持续一个多月,终于拿到offer了!,java三层架构登录功能实现

Java 程序员 后端

不要让消费者和服务提供者直接通信_SOA_Mark Little_InfoQ精选文章