分布式系统之RPC,RMI,SOAP,REST

#上一次我们了解了数据复制的类型(类型和复制类型),分布式事务(概念,情况)和DDBMS(分布式数据处理系统),这次我们来看CS交换协议,RPC,RMI和SOAP及REST

一.cs exchange protocols

三种类型:R,RR,RRA

R:只需要客户端发出请求即可

RR:需要客户端发出请求并受到服务器的回复

RRA: 需要客户端发出请求,收到回复并发送acknowledge reply表示自己收到了回复

二.Remote Invocation(远程文件调取)

remotely invoking program procedure/s in different address space (often in different machines).一种机制来远程调用不同设备上的程序或函数【一般用ip地址定位到目标设备】

三.RPC(Remote Procedural Call)远程程序调用

概念:通过网络从远程计算机程序上请求服务,通过定义的接口建立远程组件之间的连接和交流,允许客户端在本地调用远程服务器上的函数,并获取执行结果,就像是调用本地函数一样

RPC处于中间件层,提供中间件(Middleware)的服务

常见的RPC有:XML-RPC,JSON-RPC,EJB,GlassFish(免费的,所以一般推荐用这个,但是它和NetBeans的结合会有Java版本的限制,jdk环境的限制,Tomcat+Idea会更方便一些!(but,要企业版))

中间件(提供服务):提供操作系统之外的服务,使分布式系统的组件能够通信和管理数据

中间件包括web servers,application servers,content management systems;数据库方面的中间件包括ODBC (Open database Connectivity), JDBC (Java Database Connectivity)

中间件使用接口来提供服务,客户端不需要知道服务具体的实现细节,接口也是一个软件更新的重要支持,这样的话,软件更新不会影响其他的部件和整个系统

RPC结构

客户端:1.proxies:(pretend to be) as a local version of the remote interface远程接口的本地接口:输入,输出,远程函数名

               2.client stub(用户桩):为输入IDL文件中定义的每个操作提供客户机上的代理入口点,可以理解为:存放服务端的地址消息,再将客户端的请求参数打包成网络消息,然后通过网络远程发送给服务方。//当一个客户端向远程程序发送调用请求时,它的请求会先到用户桩。

作用:1. marshal arguments——封装参数等使得它们可以通过网络传递给服务器

           2.Calls the client’s run-time library——将参数传输到远程地址空间以调用服务器地址空间中的远程过程

           3.unmarshals output arguments——客户桩解封output

服务器端:

                1.Dispatcher(调度器):Receives incoming messages and direct them to an appropriate server stub【服务器拥有的,接收到来的消息并把他们发送到正确的服务桩上,由正确的服务器进行处理】

                2.Server stub(服务桩):1.解封客户桩发来的带有输入参数的封装包

                                                            2.调用服务器上客户端希望的函数,把参数放入得到结果

                                                            3.封装输出结果再传回到客户桩

  RPC的语义问题

本地调用只需要一次guarantee,但是RPC要有很多不同的guarantee types

RPC的通信需要提供一个模仿本地过程调用语义的协议,在通信过程中会有一些潜在的问题出现:请求的信息丢了;回复的信息丢了;客户端坏了;服务器坏了。

Lightweight protocols:at least once:当客户端发送信息的时候如果没有收到回复就会再重发信息,但是有个问题:这保证了调用至少一次,但是这种调用会导致触发多次远程程序【假如ATM向数据库发出减少钱的指令,没有收到回复,它发了好多次,会导致账户的钱一直少!!!】

At most Once最多一次:Server RPC 会检测重复的请求,返回之前的回应而不是重新运行handler【更好一些!】

从At Most Once到Exactly Once:step1:先建立at most once 协议   step 2:对于原子性还需要多余的支持

RPC实现工具:Java RMI

Java RMI(Java Remote Method Invocation):将RPC和面向对象的编程结合【基于接口,使用Request-Reply protocols】Java实现RPC(好处:Java RMI allows a Java object to call methods on another Java object in a different Java Virtual Machine (JVM))

四.REST &SOAP

SOAP(RPC technology)

SOAP:lightweight XML-based protocol, OS indepent(在不同系统上或者不同语言写的应用都可以互相交流)语言和操作系统独立,支持多种数据格式(文本、HTML、XML、JSON等)

Strong built-in security management mechanism.

使用WSDL file(Web Service Description Language):格式: http://{your IP}:{portNum}/{web-service-name}/{web-service-object-name}?WSDL

SOAP Client and Servicecommunicate by sending messages in envelopes (信封)to each other!

REST(Java Servelet is one approaches for developing RESTful services)

REST(REpresentational State Transfer):面向资源的web服务的集合体,特点包括状态无关、使用HTTP协议、使用URI访问资源等【Example request: http://myserver.com/catalog?userName=Scott】任何符合主要REST体系结构和原则(可能不完全)的web服务都是RESTful的。

servelet(Java):a Java programming language class used to extend the capabilities of servers (commonly web servers) that host applications accessed by means of a request-response programming model.

这只是对SOAP和REST的简要概述,具体的实现方式可自行网上查找,可以采用servlet+glassfish+netbeans的方式来develop web service

  • 33
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值