回归自然 microsoft message queue...

5
TechEd 2005 20059271135© 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary. 1 ARC314 ARC314 消息 消息传递 传递 - - 面向消息的中间件设计基础 面向消息的中间件设计基础 微软的中间件 微软的中间件 回归自然 回归自然 MSMQ MSMQ Microsoft Message Queue Microsoft Message Queue 日程 日程 应用集成技术的发展与回顾 应用集成技术的发展与回顾 消息传递基础 消息传递基础 面向消息的集成中间件设计实践 面向消息的集成中间件设计实践 展望 展望Indigo Indigo与未来的集成 与未来的集成 应用集成技术的发展与回顾 应用集成技术的发展与回顾 RPC RPC与应用集成 与应用集成 应用集成中间件设计的目标 应用集成中间件设计的目标 应用程序之间需要互相 应用程序之间需要互相交谈 交谈不违反 不违反Once and Only Once Once and Only Once规则 规则 在计算的过程中需要集中处理以确保正确性 在计算的过程中需要集中处理以确保正确性 在计算的过程中需要分布处理以确保可缩放性 在计算的过程中需要分布处理以确保可缩放性 总之机器与机器需要进行 总之机器与机器需要进行交谈 交谈传统建议我们使用 传统建议我们使用RPC RPC来解决这一问题 来解决这一问题 让远程通信和本地调用一样容易 让远程通信和本地调用一样容易" " 定义一个接口 定义一个接口 编写服务器端实现 编写服务器端实现 工具生成两者之间需要的通信管道 工具生成两者之间需要的通信管道 RPC RPC 编程模型 编程模型 public long add(long l1,long l2); 编译器 method stub method skeleton 响应消息 long I = add(5,10); public long add (long l1, long l2) { return l1+l2; } 请求消息 Method: add Method: add Params Params: 5(long),10(long) : 5(long),10(long) Return: 15(long) Return: 15(long) 实现 接口 客户端

Upload: others

Post on 12-Jun-2020

9 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 回归自然 Microsoft Message Queue 微软的中间件download.microsoft.com/download/4/8/3/483f1af8-f41... · This presentation is for informational purposes only. Microsoft makes

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)

实现

接口

客户端

Page 2: 回归自然 Microsoft Message Queue 微软的中间件download.microsoft.com/download/4/8/3/483f1af8-f41... · This presentation is for informational purposes only. Microsoft makes

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

架构模式由一组词汇、结构和设计约束组成架构模式由一组词汇、结构和设计约束组成

Page 3: 回归自然 Microsoft Message Queue 微软的中间件download.microsoft.com/download/4/8/3/483f1af8-f41... · This presentation is for informational purposes only. Microsoft makes

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,文本文本))

消息传递的灵活性使得集成更容易消息传递的灵活性使得集成更容易

Page 4: 回归自然 Microsoft Message Queue 微软的中间件download.microsoft.com/download/4/8/3/483f1af8-f41... · This presentation is for informational purposes only. Microsoft makes

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与未来的集成与未来的集成

未来的挑战未来的挑战极大的简化分布式应用程序开发极大的简化分布式应用程序开发

不同的任务需要不同的编程模型不同的任务需要不同的编程模型

我们需要安全和可靠的消息传递我们需要安全和可靠的消息传递

应用程序需要与其它平台互操作应用程序需要与其它平台互操作

我们需要更有效的面向服务的编程模型我们需要更有效的面向服务的编程模型

Page 5: 回归自然 Microsoft Message Queue 微软的中间件download.microsoft.com/download/4/8/3/483f1af8-f41... · This presentation is for informational purposes only. Microsoft makes

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

集成技术的未来之路集成技术的未来之路

您的反馈对我们很重您的反馈对我们很重要要!!

非常感谢您参加今天的交流非常感谢您参加今天的交流