分布式服务-通信方式对比

远程通信方式
  • RPC(Remote Procedure Call Protocol)
    • C/S方式
    • tcp协议,发送请求,等待响应
    • 请求包括一个参数集和一个文本值,常形成“classname.methodname”形式
    • 优点
      • 跨语言跨平台,C端和S端有更大的独立性
    • 缺点
      • 不支持对象,无法在编译期检查错误,只能在运行期检查
  • RMI(Remote Method Invocation)
    • 采用stubs和skeletons进行远程对象通讯
    • stub充当远程对象的客户端代理,和远程对象有相同接口
    • 远程对象的调用实际是调用stub来完成的,RMI就好比是本地工作
    • tcp/ip协议,客户端直接调用服务端上的一些方法
    • 优点
      • 强类型,编译期可检查错误
    • 缺点
      • 只基于JAVA语言,客户端与服务器紧耦合
  • JMS(Java Messaging Service)
    • Java的消息服务
    • JMS客户端之间可以通过JMS服务进行异步消息传输
    • 消息模型
      • Point-to-Point,点对点
      • Publish/Subscribe,发布订阅
  • Web Service
    • 基于web容器
    • 底层使用http协议
    • 类似一个远程服务提供者
    • 通过一个servlet,提供服务
    • 机制
      • 客户端从服务器得到WSDL,生成代理类
      • 代理类负责与WebService服务器的Request和Response
      • 数据(XML)被封装成SOAP(Simple Oject Access Protocol)格式发送到服务器
      • 服务器生成一个进程解析Request中的SOAP包
      • 业务处理
      • 对计算结果进行SOAP包装
      • 将包作为Response发送给客户端代理类
      • 客户端代理类对SOAP包进行解析
      • 后续操作
    • 5个层次
      • http传输信道
      • XML数据格式
      • SOAP封装格式
      • WSDL描述方式
      • UDDI
        • 目录服务,可以用它对Webservices进行注册和搜索
对比
  • RPC与RMI
    • RPC跨语言,RMI只支持Java
    • 可以说RMI是面向对象方式的Java RPC
    • RMI调用远程对象方法,允许返回Java对象及基本数据类型;RPC不支持对象,消息由外部数据表示语言(External Data Representation,XDR)表示,这种语言抽象了字节序类和数据类型结构之间的差异
    • RMI中,远程接口使每个远程方法都具有方法签名;如果一个方法在服务器上执行,但是没有相匹配的签名被添加到远程接口,就不能被RMI客户方调用
    • RPC中,到达RPC服务器的请求包含一个参数集和一个文本值,通常形成“classname.methodname”的形式
  • JMS与RMI
    • JMS是消息通知机制;RMI对象绑定在本地JVM中,只有函数参数和返回值是通过网络传送的(请求应答机制)
    • RMI一般都是同步的;JMS一般只是发出Message到Server,发出之后一般不关心谁用了message
    • 所以,一般RMI应用是紧耦合,JMS应用相对来说是松耦合
  • Web Service与RMI
    • RMI在tcp协议上传递可序列化java对象,语言仅java;Web Service是在http协议上传递xml数据,语言平台无关
  • Web Service与JMS
    • Web Service专注于远程调用,JMS专注于消息交换
    • 多数情况下Web Service是两系统间直接交互(consumer < - > producer),而JMS是三方系统交互(consumer <- broker -> producer)为主
    • 当然,JMS也可以实现request-response模式的通信,只要consumer或producer其中一方兼任broker即可
    • JMS的异步调用可以抵御流量洪峰
    • Web Service通常为同步调用,有复杂的对象转换,相比SOAP,JSON和REST都是很好的http架构方案
    • 举个例子:电子商务分布式系统中,有支付系统和业务系统,支付系统负责用户付款,付款成功后需通知各业务系统,这个时候,既可以用同步也可以用异步,使用异步的好处是能抵御流量高峰
    • JMS是java平台消息规范;JMS消息一般不是xml,而是java对象;很明显,JMS没考虑异构系统,说白了,JMS就没考虑非java的东西;但是好在现在大多数的JMS Provider都解决了异构问题;相比Web Service的跨平台各有千秋吧
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Eddy咸鱼

感谢大佬加鸡蛋~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值