回归自然 microsoft message queue...
TRANSCRIPT
TechEd 2005 2005年9月27日11时35分
© 2005 Microsoft Corporation. All rights reserved.This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary. 1
ARC314ARC314消息消息传递传递
--面向消息的中间件设计基础面向消息的中间件设计基础
微软的中间件微软的中间件回归自然回归自然 –– MSMQMSMQ
Microsoft Message QueueMicrosoft Message Queue
日程日程
应用集成技术的发展与回顾应用集成技术的发展与回顾
消息传递基础消息传递基础
面向消息的集成中间件设计实践面向消息的集成中间件设计实践
展望展望IndigoIndigo与未来的集成与未来的集成 应用集成技术的发展与回顾应用集成技术的发展与回顾
RPCRPC与应用集成与应用集成
应用集成中间件设计的目标应用集成中间件设计的目标
应用程序之间需要互相应用程序之间需要互相““交谈交谈””不违反不违反““Once and Only OnceOnce and Only Once””规则规则
在计算的过程中需要集中处理以确保正确性在计算的过程中需要集中处理以确保正确性
在计算的过程中需要分布处理以确保可缩放性在计算的过程中需要分布处理以确保可缩放性
总之机器与机器需要进行总之机器与机器需要进行““交谈交谈””
传统建议我们使用传统建议我们使用RPCRPC来解决这一问题来解决这一问题
““让远程通信和本地调用一样容易让远程通信和本地调用一样容易""
定义一个接口定义一个接口
编写服务器端实现编写服务器端实现
工具生成两者之间需要的通信管道工具生成两者之间需要的通信管道
RPC RPC 编程模型编程模型
public long add(long l1,long l2);
编译器
methodstub
methodskeleton
响应消息
long I = add(5,10);
public long add(long l1, long l2) { return l1+l2; }
请求消息
Method: addMethod: addParamsParams: 5(long),10(long): 5(long),10(long)
Return: 15(long)Return: 15(long)
实现
接口
客户端
TechEd 2005 2005年9月27日11时35分
© 2005 Microsoft Corporation. All rights reserved.This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary. 2
RPCRPC存在的问题存在的问题
RPCRPC方法忽略了方法忽略了::
延迟延迟 ((网络、应用程序网络、应用程序))
部分失败和并发部分失败和并发
……
““Objects that interact in a distributed system need to be dealt wObjects that interact in a distributed system need to be dealt with ith in ways that are intrinsically different from objects that interin ways that are intrinsically different from objects that interact in act in a single address space.a single address space.”” Waldo et al, 1994
““95% transparent is not good enough. In fact, it is worse because95% transparent is not good enough. In fact, it is worse becauseit deceives developers.it deceives developers.”” Werner Vogels
RPCRPC存在的问题存在的问题
RPCRPC让通信更容易,但代价是让通信更容易,但代价是::
请求请求//响应通信响应通信
针对每一个请求,我们期望一个响应针对每一个请求,我们期望一个响应
阻塞调用者线程直到接收到响应(或者响应超时)阻塞调用者线程直到接收到响应(或者响应超时)
代理和代理和StubStub强绑定强绑定
强绑定和类型一致使得编程容易强绑定和类型一致使得编程容易
但强绑定和类型一致使得变化非常困难但强绑定和类型一致使得变化非常困难
RPCRPC暴露行为暴露行为
解决方案解决方案: : 消息传递消息传递
系统间通过管道通信系统间通过管道通信
管道有逻辑地址管道有逻辑地址
发送应用程序将消息放到管道中,然后处理其它工作发送应用程序将消息放到管道中,然后处理其它工作((““firefire--andand--forgetforget””))
管道将数据排队直到被接收应用程序使用(管道将数据排队直到被接收应用程序使用(FIFOFIFO))
SystemB
系统A
MessageChannel(Queue)
解决方案解决方案: : 消息传递消息传递
RPCRPC的本质的本质
RPC == RPC == 请求消息请求消息 + + 响应消息响应消息
把消息分开,独立处理把消息分开,独立处理
允许不同的消息交换模式允许不同的消息交换模式
消息传递暴露数据消息传递暴露数据
替代基于接口来创建约束替代基于接口来创建约束 (RPC)(RPC)……
基于消息类型来创建约定基于消息类型来创建约定 (messaging)(messaging)
上下文完整的通信上下文完整的通信
A Send
Rcv
BRcv
Send
是RPC还是2条消息?
面向消息的中间件面向消息的中间件MessageMessage--Oriented Middleware (MOM)Oriented Middleware (MOM)
消息消息 = = 消息头消息头 ((路由信息路由信息) + ) + 消息正文消息正文支持异步发送支持异步发送
不指定格式不指定格式((松散约束松散约束))
目的地目的地 = = 命名的消息存储仓库命名的消息存储仓库解耦合消息的产生者与消费者解耦合消息的产生者与消费者
便于重定向或者改变调用流程便于重定向或者改变调用流程
运行环境运行环境 = = 多样化的发送方式多样化的发送方式服务质量服务质量: Reliable, transacted, prioritized, : Reliable, transacted, prioritized, deadlinedeadline--basedbased
通信方式通信方式: publish: publish--andand--subscribesubscribe等等..
消息交换模式消息交换模式RequestRequest--response, fireresponse, fire--andand--forget, forget, requestrequest--asyncasync responseresponse
消息传递架构模式消息传递架构模式
消息传递是一种架构模式,而不是一种技术消息传递是一种架构模式,而不是一种技术
我们可以使用一个数据库来实现消息传递,但使用数据库我们可以使用一个数据库来实现消息传递,但使用数据库不地表我们使用的是消息传递不地表我们使用的是消息传递
与与SOA/Web ServicesSOA/Web Services的争论对比的争论对比::
我们可以不使用我们可以不使用Web ServicesWeb Services来构建来构建SOASOA
使用使用Web ServicesWeb Services并不能保证是并不能保证是SOASOA
架构模式由一组词汇、结构和设计约束组成架构模式由一组词汇、结构和设计约束组成
TechEd 2005 2005年9月27日11时35分
© 2005 Microsoft Corporation. All rights reserved.This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary. 3
消息传递系统举例消息传递系统举例
文件传输文件传输
消息消息: : 文件文件
目的地目的地: : 文件系统目录文件系统目录
运行环境运行环境: : 操作系统的文件系统操作系统的文件系统
数据库数据库
消息消息: : 数据集数据集
目的地目的地: : 数据库表数据库表
运行环境运行环境: : 数据库数据库
JMS/MSMQJMS/MSMQ
消息消息: byte, text, object, stream : byte, text, object, stream ……
目的地目的地: : 队列队列 (point(point--toto--point), point), 主题主题 (publish(publish--subscribe)subscribe)
运行环境运行环境: MO: MOMM环境支持环境支持
SOAPSOAP
消息消息: SOAP XML format: SOAP XML format
目的地目的地: (: (取决于传送方式取决于传送方式))
运行环境运行环境: : WebLogicWebLogic, WS, WS--Reliable MessagingReliable Messaging
为什么要使用消息传递为什么要使用消息传递
灵活性灵活性
可缩放性可缩放性
高负载的平缓释放高负载的平缓释放
集成性集成性
为什么要使用消息传递为什么要使用消息传递??灵活性灵活性
更多的数据流选择更多的数据流选择FireFire--andand--forget, multicast, disconnected, loadforget, multicast, disconnected, load--balancing, balancing, flow control, priority routingflow control, priority routing等等..
多粒度的处理逻辑多粒度的处理逻辑Routing SlipRouting Slip
ContentContent--Based RouterBased Router
更容易维护和变化更容易维护和变化消息格式的变化不需要重新编译不相关的客户端消息格式的变化不需要重新编译不相关的客户端
消息流的传递不需要修改中间结点消息流的传递不需要修改中间结点
避免并发死锁避免并发死锁 ((和和RPCRPC响应阻塞相比响应阻塞相比))
为什么要使用消息传递为什么要使用消息传递??可缩放性可缩放性
竞争消费竞争消费 –– 多个处理端可以读取同一队列多个处理端可以读取同一队列
发送端不需要进行任何改变发送端不需要进行任何改变
粗粒度消息可以使处理端成为粗粒度消息可以使处理端成为““无状态无状态””
发送端 消费者
消费者
消费者
1
消息
23
1
2
3 接收者
接收者
竞争消费模式
为什么要使用消息传递为什么要使用消息传递??高负载的平缓释放高负载的平缓释放
队列中存储的消息将会等待被处理队列中存储的消息将会等待被处理
消息处理端或消费者会经可能快的取走消息消息处理端或消费者会经可能快的取走消息
如果处理端阶段无法继续如果处理端阶段无法继续::
我们可以增加更多的处理端我们可以增加更多的处理端
或者等待峰值负载被释放或者等待峰值负载被释放
Rate [Msgs/sec]
Queue Length
time
time
Producer
Consumer
Peak Load
Steady processing
rate
f’(x) constant
为什么要使用消息传递为什么要使用消息传递??集成性集成性
消息传递不需要一致的类型系统消息传递不需要一致的类型系统消息就是类型消息就是类型
消息传递可以连接多个系统消息传递可以连接多个系统(.NET,(.NET,J2EE,J2EE,etc.)etc.)XMLXML消息非常适合此类场景消息非常适合此类场景
其它数据表现形式也可用其它数据表现形式也可用 (CSV,(CSV,文本文本))
消息传递的灵活性使得集成更容易消息传递的灵活性使得集成更容易
TechEd 2005 2005年9月27日11时35分
© 2005 Microsoft Corporation. All rights reserved.This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary. 4
消息传递面临的挑战消息传递面临的挑战
使用队列来通信,而不是对象使用队列来通信,而不是对象
双向通信需要至少双向通信需要至少22个队列:一个用于请求消息,另一个用于响应个队列:一个用于请求消息,另一个用于响应
不存在会话状态不存在会话状态
时序时序 –– 消息的到达可能是无序的消息的到达可能是无序的
同步通信需要进行更多的设计同步通信需要进行更多的设计
不存在对象标识不存在对象标识
消息进入队列,而不是对象消息进入队列,而不是对象
不符合通常的客户不符合通常的客户//服务器模式服务器模式
类似类似““生产者消费者生产者消费者””,甚至于,甚至于““点对点点对点””通信通信
小结小结
消息传递提供了另一种通信手段消息传递提供了另一种通信手段
消息传递具有灵活性消息传递具有灵活性
消息传递具有可缩放性消息传递具有可缩放性
消息传递可以在多个管道上操作消息传递可以在多个管道上操作
消息传递需要程序员考虑的更多消息传递需要程序员考虑的更多
在消息交换模式中,有很多不同的交换模式存在在消息交换模式中,有很多不同的交换模式存在
面向消息的集成中间件面向消息的集成中间件设计实践设计实践 本节内容仅提供给现场听众本节内容仅提供给现场听众
展望展望IndigoIndigo与未来的集成与未来的集成
未来的挑战未来的挑战极大的简化分布式应用程序开发极大的简化分布式应用程序开发
不同的任务需要不同的编程模型不同的任务需要不同的编程模型
我们需要安全和可靠的消息传递我们需要安全和可靠的消息传递
应用程序需要与其它平台互操作应用程序需要与其它平台互操作
我们需要更有效的面向服务的编程模型我们需要更有效的面向服务的编程模型
TechEd 2005 2005年9月27日11时35分
© 2005 Microsoft Corporation. All rights reserved.This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary. 5
今天的分布式技术今天的分布式技术今天的分布式技术
ASMX WSE
.NETRemoting
System.Messaging
EnterpriseServices
InteropInteropwith otherwith otherplatformsplatforms
ASMX
AttributeAttribute--BasedBased
ProgrammingProgramming
Enterprise Services
WSWS--**ProtocolProtocolSupportSupport
WSE
MessageMessage--OrientedOriented
ProgrammingProgramming
System.Messaging
ExtensibilityExtensibilityLocation Location
transparencytransparency
.NET Remoting
IndigoIndigo统一的编程模型统一的编程模型
Basic WS-I 1.0 supportBased on the ASP.NET
StackAdapter for WSE 2.0
SQL-to-SQL data messagingBinary protocol
Adapter for Indigo Indigo transport channel
BizTalk Server built natively on Indigo foundation
Service Broker uses Indigo transports for WS-* interoperability
集成技术的未来之路集成技术的未来之路
您的反馈对我们很重您的反馈对我们很重要要!!
非常感谢您参加今天的交流非常感谢您参加今天的交流