50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

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

  • 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:073542
用户头像

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

关注

评论

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

一步步实现React-Hooks核心原理

helloworld1024fd

JavaScript

汽车报告丨分析了比亚迪宋全网口碑,我们得出这个结论

前嗅大数据

数据分析 数据采集 爬虫工具 汽车咨询 比亚迪宋

部署 SAP UI5 应用到 SAP BTP 时遇到的 fiori not found 错误消息

汪子熙

JavaScript 前端开发 Fiori SAP UI5 10月月更

在一个公司死磕了5-10年的程序员,最后都哪里去了?

源字节1号

CEF | VS2017+Qt5.14.2+cef 实现基于CEF框架的客户端

YOLO.

qt 10月月更 C++

OpenHarmony Liteos_A内核之iperf3移植心得

OpenHarmony开发者

OpenHarmony

cstdio的源码学习分析10-格式化输入输出函数fprintf---宏定义/辅助函数分析06

桑榆

源码刨析 10月月更 C++

五个堡垒机常见问题解答-行云管家

行云管家

网络安全 堡垒机 资产安全 IT资产安全

【一】ERNIE:飞桨开源开发套件,入门学习,看看行业顶尖持续学习语义理解框架,如何取得世界多个实战的SOTA效果?

汀丶人工智能

nlp 知识图谱

【LeetCode】 LRU 缓存机制Java题解

Albert

算法 LeetCode 10月月更

DTT第7期直播回顾 | 低代码应用构建流程和适用场景,与你想的一样吗?

华为云开发者联盟

云计算 低代码 华为云 企业号十月 PK 榜

PaddleNLP--UIE(二)--小样本快速提升性能(含doccona标注)

汀丶人工智能

NLP 大模型

华为云从入门到实战 | 云容器服务

TiAmo

华为 华为云 云开发 10月月更

过等保是什么意思?能简单解释下吗?

行云管家

网络安全 等保 等级保护 过等保

HUAWEI AppGallery Connect全新升级,支持HarmonyOS生态全生命周期服务!

HarmonyOS开发者

HarmonyOS

十大 CI/CD 安全风险(五)

SEAL安全

DevOps CI/CD 软件供应链安全 日志记录

《SREWorks 云原生数智运维工程实践》电子书重磅来袭!(免费下载)

阿里云大数据AI技术

大数据 运维 云原生 电子书 企业号十月PK榜

pyside6 qml TableView列表 用QSortFilterProxyModel模糊查询

Mr_No爱学习

从零到一手写迷你版Vue

helloworld1024fd

JavaScript

【Mybatis】Mybatis generator如何修改Mapper.java文件

石臻臻的杂货铺

mybatis 10月月更

KubeEdge SIG AI发布首个分布式协同AI Benchmark调研

华为云开发者联盟

人工智能 深度学习 云原生 华为云 企业号十月 PK 榜

再添神器!Paddle.js 发布 OCR SDK

百度Geek说

JavaScript paddle 企业号十月 PK 榜

AiTrust下预训练和小样本学习在中文医疗信息处理挑战榜CBLUE表现

汀丶人工智能

nlp

一步步实现React-Hooks核心原理

helloworld1024fd

JavaScript

虚拟蜜罐:从信息模拟到实现虚拟蜜罐技术

郑州埃文科技

Linux IP地址 蜜罐

探索智能化测试技术

华为云开发者联盟

软件 测试 开发 华为云 企业号十月 PK 榜

京东云TiDB SQL优化的最佳实践

京东科技开发者

数据库 索引 sql SQL优化 TiDB

大数据测试之大数据系统及特点

千锋IT教育

颜值经济下,车企的必备武器

华为云开发者联盟

云计算 后端 SaaS 华为云 企业号十月 PK 榜

深入react源码看setState究竟做了什么?

flyzz177

React

美团前端手写面试题总结

helloworld1024fd

JavaScript

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