分布式系统漫谈【伍】_远程调用

 

上篇文章:分布式系统漫谈【肆】_负载层技术:CDN

 

当我们的系统由单体应用拆分成多个子应用分布式部署后,就要去考虑各个应用之前的调用问题了。因为之前单体应用的时候,各个接口的调用只是本地调用,是在一个JVM中完成的;而我们要跨应用(JVM)调用的时候,这就使用到了远程调用。

 

远程调用

 

什么是远程调用?先了解一下RPC(Remote Procedure Call Protocol),远程过程调用协议。是指客户端在不知道调用细节(底层网络技术的协议)的情况下,调用存在于远程计算机上的某个对象,就像调用本地应用程序中的对象一样。

 

远程调用有如下特点:

 

1.网络协议和网络I/O模型对其透明;
2.信息格式对其透明:参数会以某种信息格式传递给网络上的另一台计算机,格式细节调用方不用关心;
3.支持跨语言;

 

那么RPC有如下两个常用的技术栈:RMI和WSDL。

 

RMI

 

RMI全称是Remote Method Invocation(远程方法调用),是java为远程调用的一种实现。

 

RMI服务器端通过启动RMI注册对象在一个端口上监听对外提供的接口,其实现实例以字符串的方式绑定到RMI注册对象上。RMI客户端通过proxy的方式代理了对服务器端接口的访问,RMI客户端将要访问的服务器端对象字符串方法和参数封装成一个对象,序列化成流后通过TCP/IP+BIO传输到RMI服务器端。RMI服务器端接收到客户端请求对象后,解析其中的对象字符串、方法及参数,通过对象字符串从RMI注册对象上找到提供业务功能的实例,之后结合要访问的方法来反射获取到方法实例对象,传入参数完成对服务器端对象实例的调用,返回的结果则序列化为流以TCP/IP+BIO返回给客户端,客户端在接收到此流后反序列化为对象,并返回给调用者。

 

RMI实现机制如下:

 

 

RMI有如下特点:

 

1.远程方法接口必须实现remote接口;

2.远程方法接口参数与返回值必须是可序列化的;

3.远程方法接口的所有方法都必须抛出RemoteException;

4.服务端与客户端都必须为java编写;

5.每新增一个接口,服务端与客户端都需要修改;

 


WSDL

 

WSDL是一种跨语言的系统间交互标准,对外提供功能的一方以HTTP的方式提供服务,该服务采用WSDL(Web Service Description Language,web服务描述语言)描述,在这个文件中描述服务所用的协议、参数和参数格式等。调用端和服务端通过SOAP(Simple Object Access Protocol)方式来进行交互,SOAP协议通常是一种在http或https通道上传输xml数据来实现的协议。对于基于WSDL标准提供服务的接口,我们称之为WebService接口。

 

WebService是基于xml文件为消息格式的,服务端和客户端可以是不同语言开发的。

 

 

上图为WebService服务间调用图,每个服务都要依赖中心化web service目录来发现现存的服务。可知WebService有如下问题:


1.依赖中心化的服务发现机制;
2.使用SOAP通信协议,通常使用xml格式来序列化通信数据,xml格式的数据冗余太大,协议太重;
 

WebService两个开源框架:CXF和Axis。这两个框架都是Apache基金会旗下孵化的,相比配置繁琐的Axis而言,CFX的使用更加简单,并且可以和Spring容器轻松整合,更加受到开发者的喜爱。

 

REST

 

REST全称为Representational State Transfer,表述性状态传递。它不是一种技术实现,而是一种架构风格,通常使用Http + JSON来实现。它的出现也是受WSDL启发,以资源为中心,将外部访问的所有信息定义成不同的资源,根据接口调用的参数不同来获取不同的资源,根据调用的方法(post、get、put和delete)不同来进行不同操作。

 

REST的特点如下:

1.每个资源有一个ID;

2.连接资源在一起;

3.使用标准方法;

4.资源多种表述;

5.无状态通信;

 

通过以上的总结,我们可以总结出远程调用的几种实现方式了。那么当一个应用拆分成多个子应用时,需要有多个接口暴露出来提供服务,那么我们应该根据什么样的维度来进行拆分应用而可以保证接口可以协调集中地提供服务不那么杂乱无章呢,这就不得不说到SOA了。下文我们继续讨论。

 

分布式系统漫谈【壹】_发展历程

分布式系统漫谈【贰】_分布式系统带来的问题

分布式系统漫谈【叁】_负载层技术:Nginx

分布式系统漫谈【肆】_负载层技术:CDN

分布式系统漫谈【伍】_远程调用

分布式系统漫谈【陆】_SOA和微服务

分布式系统漫谈【柒】_微服务的挑战和解决方案

分布式系统漫谈【捌】_分布式事务一致性:理论基础

分布式系统漫谈【玖】_分布式事务一致性:协议支持

分布式系统漫谈【拾】_分布式事务一致性:阿里方案

分布式系统漫谈【拾壹】_分布式事务一致性:秒杀实现

分布式系统漫谈【拾贰】_分库分表带来的问题和解决方案

分布式系统漫谈【拾叁】_缓存带来的问题和解决方案

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值