rpc

大型分布式网站架构设计--第1章 面向服务体系的架构

匿名 (未验证) 提交于 2019-12-03 00:27:02
本章目录: 分布式Java应用图: 分布式Java应用:大型系统会被拆分成多个子系统来实现,对于Java来说,这些子系统可能部署在同一台机器上不同的JVM,或者部署在不同机器上,但是这些子系统之间要进行相互通信来共同实现业务功能。 分布式应用架构的演变 分布式应用架构面临的首要问题,便是如何实现应用之间的远程调用(RPC)。有两种方式:一种是基于HTTP的RPC,一种是基于TCP的RPC。 RPC也就是远程调用,RPC的实现包括客户端和服务端,也就是服务提供方和服务调用方,服务调用方发送RPC请求到服务提供方,服务提供方根据服务调用方的参数执行请求方法,将执行结果返回给调用方,这就是一次RPC请求。 要注意 无论是什么类型的数据,最终都是要转成二进制在网络上传输。 对象的序列化:就是将对象转成二进制流的过程。 对象的反序列化:就是将二进制流转成对象的过程。 Java中的序列化代码: //定义一个字节数组的输出流 ByteArrayOutputStream os= new ByteArrayOutputStream(); //对象的输出流 ObjectOutputStream out = new ObjectOutputStream(os); //将对象写入字节数组输出,进行序列化 out .writeObject(zhangsan); byte [] zhangsanByte=os

Glusterfs的rpc模块实现(第四部分)

匿名 (未验证) 提交于 2019-12-03 00:27:02
前面两个小节分别对rpc服务端和客户端的建立流程做了详细的分析,也就是说rpc客户端和服务器端已经能够进行正常的通信了(rpc客户端已经通过connect链接上rpc服务器了),那么这一小节主要根据一个实际的例子来分析一个完整的rpc通信过程。 下面以客户端创建逻辑卷(volume)为例来分析rpc的通信过程,就以下面这个客户端的命令开始: gluster volume create test-volume server3:/exp3 server4:/exp4 先简单看看glusterfs的客户端是怎样开始提交rpc请求的,提交准备过程流程图如下: 从上面的流程图可以看出真正开始提交 rpc 请求调用还是从具体命令的回调函数开始发起的,上面的流程图主要展示的是准备工作,下面从具体命令的回调函数开始分析,这里分析的实例是创建逻辑卷的命令,执行的函数是 cli_cmd_volume_create_cbk ,主要实现代码如下: 1 proc = &cli_rpc_prog->proctable[GLUSTER_CLI_CREATE_VOLUME]; // 从rpc程序表中选择对应函数 2 3 frame = create_frame (THIS, THIS->ctx->pool); // 创建帧 4 5 ret = cli_cmd_volume_create_parse (words,

史上最详细的使用Zookeeper注册中心搭建Motan Rpc 的完整Demo

匿名 (未验证) 提交于 2019-12-03 00:26:01
Zookeeper Motan Rpc Demo zookeeper 1.1 (1)zookeeper /usr/local/zookeeper zookeeper Linux JDK (2)zookeeper zookeeper tar -xzvf (3)conf zoo_sample.cfg zoo.cfg zoo.cfg TickTime zk 1*tickTime zk 2*tickTime TickTime 2000 TickTime CPU clientPort zk TCP 2181 dataDir dataLogDir (4)Zookeeper bin sh zkServer.sh start sh zkServer.sh status , 1.2 1 Linux rpm -qa|grep iptables service iptables status (2)ping ping Linux vi /etc/sysconfig/network-scripts/ifcfg-eth0 FooService.java FooServiceImpl.java Server.java 2.5 调用端代码 FooService.java Client.java 2.6 pom.xml pom.xml添加如下依赖: < dependency > < groupId > com

RPC协议底层原理与实现

匿名 (未验证) 提交于 2019-12-03 00:26:01
RPC协议基本组成 在一个典型RPC的使用场景中,包含了服务发现、负载、容错、 网络传输 、 序列化 等组件,其中RPC协议就指明了程序如何进行网络传输和序列化 。也就是说一个RPC协议的实现就等于一个非透明的RPC调用,如何做到的的呢? Client 客户端 Server 服务端 协议基本组成: 1. 地址:服务提供者地址; 2. 端口:协议指定开放的端口; 3. 运行服务: 1. netty(默认) 2. mina 3. RMI 服务 4. servlet 容器(jetty、Tomcat、Jboss) 4. 报文编码(编解码):协议报文编码 。 注①:http 报文编码 。注②:Dubbo 报文编码 5. 序列化方式: 1. Hessian2Serialization 、(默认) 2. DubboSerialization 、 3. JavaSerialization 4. JsonSerialization RPC协议报文编码与实现详解 注①:http 报文编码 注②Dubbo 协议报文编码: (注:相关源码参见 c om.alibaba.dubbo.rpc.protocol.dubbo.DubboCodec ) 协议的编解码过程: Dubbo 协议编解码实现过程 (源码来源于 dubbo2.5.8 ) 1、DubboCodec.encodeRequestData()

Netty实战高性能分布式RPC视频

匿名 (未验证) 提交于 2019-12-03 00:26:01
课程目录 01.Netty实现高性能分布式RPC架构介绍.avi 02.分布式rpc架构的整个架构图.avi 03.采用netty编写java服务器.avi 04.zookeeper安装与操作.avi 05.服务器注册到zookeeper上.avi 06.netty客户端编写.avi 07.netty长连接心跳包设置.avi 08.netty客户端长连接异步获取响应.avi 09.netty长连接异步得到响应结果.avi 10.与最新版spring整合.avi 11.服务器架构实现.avi 12.客户端与服务器架构通信.avi 13.优化服务器.avi 14.客户端加上动态代理.avi 15.优化netty客户端.avi 16.netty客户端加上zk,监听服务器变化.avi 17.netty客户端动态管理连接.avi 18.演示分布式rpc连接管理以及实现服务器加权管理.avi 19.课程总结以及下期预告.avi 本文转载自: http://www.javaxxz.com/thread-360226-1-1.html 文章来源: Netty实战高性能分布式RPC视频

rest和rpc的区别

匿名 (未验证) 提交于 2019-12-03 00:22:01
一、rest: REST 不是一种协议,它是一种架构, 大部分的REST的实现中使用了RPC的机制,大致与有 三部分组成: 1、method: 动词 (get,post之类的) 2、Host/post: URI(统一资源标识)、 服务器,端口 3、Path:名词(路径,服务器里面的某个东西)路径的结尾是 资源的形态(如text, html, image, pdf等)。 即、对host里面的某个Path里面的东西做一些get或post操作。 二、rpc: 2、通常的调用过程,把函数序列化,远端收到后,再把函数反序列化,完成函数调用。 三、rest和rpc的区别 rpc:想对服务器里面的资源进行修改,首先需要了解服务器中各个接口都是干啥的,然后把相关参数传给服务器提供的接口,让服务器自己去执行修改。 修改代码在服务端。 所以 RPC服务端逻辑更复杂些,服务器会有很大的工作量,但分工明确,不容易造成失误。可以基于tcp或http,如果基于tcp,将少一层协议。 REST风格: 想对服务器里面的资源进行操作, 下载服务器端的当前状态,修改之后将最终用户所期待的状态发送给服务器,服务器按照客户的期待进行修改。 修改代码在客户端。 所以 REST风格客户端逻辑相比rpc客户端更复杂。自由度更大一些,但因此造成失误的可能性也大一些。 传输层基于HTTP,相比于TCP,多了一层协议。但

什么是rpc

匿名 (未验证) 提交于 2019-12-03 00:22:01
RPC RPC全称为 Remote Procedure Call “远程过程调用”。目前,主流的平台中都支持各种远程调用技术,以满足分布式系统架构中不同的系统之间的远程通信和相互调用。远程调用的应用场景极其广泛,实现的方式也各式各样。 HTTP协议的( SOAP(XML)、Rest(JSON) Hessian( Binary TCP协议的(通常会借助Mina、Netty等 (例如Java平台的RMI、.NET平台Remoting) HTTP Rest、Thrift等 RPC) MQ、异步RPC) 常见的几种通信方式 / 只有二进制数据才能在网络中传输,序列化和反序列化的定义是: Java .NET Java 技术 简介 是否支持跨平台 Corbra 90 不支持 RMI EJB 不支持 WebService 基于 Http SOAP 支持 Hessain 基于 Http 支持 Rest spring mvc 支持 Http Rest API 支持 JMS MQ Java 支持 Socket 基于 Mina Netty NIO AIO 理论上支持 .NET 技术 简介 是否支持跨平台 WebService 基于 Http SOAP WCF 支持 .NET Remoting 通信效率尚可,使用复杂,逐渐被 WCF 不支持 WCF SOAP 整合了原有的 WebService 支持

任务队列,消息队列和rpc的区别是什么?

匿名 (未验证) 提交于 2019-12-03 00:22:01
首先,这几个概念本就不是同一层次上的东西,本身风马牛不相及。 先说RPC RPC通常指的是PRC框架(分布式框架),或者PRC协议,如GRPC,JSON-RPC等。这类框架主要解决远程通信间的问题,所以底层的通信机制是不需要使用者去关心去实现就能很好实现远程通信的,最出名的莫过于阿里的dubbo。 再说任务队列 这是个逻辑概念,即比如饭店高峰期时,顾客单子不得不按照下单顺序一个个放在厨房,进行先后炒菜处理,这一堆的单子就是任务队列。 最后说消息队列 消息队列(MQ)可以理解成两个应用程序间(生产者消费者间)的通信,例如短信发送模块,因为模块的发送速度跟不上,这时候需要有一个容器,暂存一下,缓解下压力,那么“消息队列”就是在消息的传输过程中保存消息的“容器”。然后短信模块就可以从容不怕的去消息队列取出要发出的短信内容,进行发送处理。 161 赞 踩 分享 举报 北京京东尚科信息技术有限公司Java软件开发工程师 04-03 20:39 关注 说实话,第一次看到这个问题,真心有点儿晕。在工作中,任务队列,消息队列和rpc都是常用的实践方案,但是这三者解决的问题似乎没有什么相关性。如:任务队列往往是需要大规模处理业务逻辑时,将相关的任务入队列,进行异步调用,从而解决任务阻塞的问题;消息队列是异构系统(或者说系统)之间异步通信的一种方法,主要是用来解决系统间信息同步问题的

关于RPC方法接口上的 oneway=true 的注解特性

匿名 (未验证) 提交于 2019-12-03 00:22:01
将oneway=true 这一特性用在void类型的返回方法上; 如果是有返回值又想异步提升性能,推荐使用 JDK Callable 的机制,自行定义一个线程来执行RPC并且在获取到Future返回值前自行调用自己的异步逻辑。 文章来源: 关于RPC方法接口上的 oneway=true 的注解特性

动手实现一个简单的RPC框架

匿名 (未验证) 提交于 2019-12-03 00:21:02
下面就开始吧。 package Caller; public interface ProductService { public Product queryById(long id); } package Caller; import java.io.Serializable; public class Product implements Serializable { private long id; private String name; private double price; /** * get/set方法 **/ @Override public String toString() { return "Product{" + "id=" + id + ", name='" + name + '\'' + ", price=" + price + '}'; } } public class ProductCaller { public static void main(String[] args) { ProductService service = (ProductService) rpc(ProductService.class); Product product = service.queryById(100); System.out.println