#上一次我们了解了数据复制的类型(类型和复制类型),分布式事务(概念,情况)和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结构![](https://i-blog.csdnimg.cn/blog_migrate/45e10581cc4156432e5b8d703ed06a56.png)
客户端: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