rpc协议

RPC原理及实现

岁酱吖の 提交于 2019-11-29 23:42:01
#0 系列目录# 聊聊远程通信 Java远程通讯技术及原理分析 聊聊Socket、TCP/IP、HTTP、FTP及网络编程 RMI原理及实现 RPC原理及实现 轻量级分布式 RPC 框架 使用 RMI + ZooKeeper 实现远程调用框架 深入浅出SOA思想 微服务、SOA 和 API对比与分析 聊聊同步、异步、阻塞与非阻塞 聊聊Linux 五种IO模型 聊聊IO多路复用之select、poll、epoll详解 聊聊C10K问题及解决方案 #1 简介# RPC 的主要功能 目标是让构建分布式计算(应用)更容易 ,在提供强大的远程调用能力时不损失本地调用的语义简洁性。为实现该目标,RPC 框架需提供一种透明调用机制让使用者 不必显式的区分本地调用和远程调用 。 #2 调用分类# RPC 调用分以下两种: 同步调用 客户方等待调用执行完成并返回结果。 异步调用 客户方调用后不用等待执行结果返回,但依然可以通过回调通知等方式获取返回结果。 若客户方不关心调用返回结果,则变成单向异步调用,单向调用不用返回结果。 异步和同步的区分在于是否等待服务端执行完成并返回结果 。 #3 结构拆解# RPC 服务方通过 RpcServer 去导出(export)远程接口方法 ,而 客户方通过 RpcClient 去引入(import)远程接口方法 。 客户方像调用本地方法一样去调用远程接口方法,

zz 花了一个星期,我终于把RPC框架整明白了!

耗尽温柔 提交于 2019-11-29 21:14:01
https://www.jianshu.com/p/193634cca86a RPC(Remote Procedure Call):远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的思想。 RPC 是一种技术思想而非一种规范或协议,常见 RPC 技术和框架有: 应用级的服务框架:阿里的 Dubbo/Dubbox、Google gRPC、Spring Boot/Spring Cloud。 远程通信协议:RMI、Socket、SOAP(HTTP XML)、REST(HTTP JSON)。 通信框架:MINA 和 Netty。 目前流行的开源 RPC 框架还是比较多的,有阿里巴巴的 Dubbo、Facebook 的 Thrift、Google 的 gRPC、Twitter 的 Finagle 等。 下面重点介绍三种: gRPC:是 Google 公布的开源软件,基于最新的 HTTP 2.0 协议,并支持常见的众多编程语言。RPC 框架是基于 HTTP 协议实现的,底层使用到了 Netty 框架的支持。 Thrift:是 Facebook 的开源 RPC 框架,主要是一个跨语言的服务开发框架。 用户只要在其之上进行二次开发就行,应用对于底层的 RPC 通讯等都是透明的。不过这个对于用户来说需要学习特定领域语言这个特性,还是有一定成本的。 Dubbo

【2016-05-08】Jersey vs. SpringMVC

痞子三分冷 提交于 2019-11-29 19:13:38
当前Web Service 常用的风格有两种,RESTful风格和RPC风格。 一、RESTful与RPC简介 RPC的中心是方法,REST的中心是资源。 RPC: 其中RPC风格中常见的有XML-RPC和JSON-RPC,JSON以其简洁、传输高效见长。 RESTful: 如果一个Web Service满足REST的几个条件,那么就称他们是RESTful的。 这里提到的条件包括:(来自参考资料1) C/S结构 (这是Internet服务的一个基本特征) 无状态 (很熟悉吧,呵呵) 可以cache (想起了浏览器?) 分层系统 (想起了无数的架构?) 统一的接口 (如果这是可能的,程序员有福了, :D) code on demand(可选, 其实是一种扩展性的要求) 以上几个特征和HTTP如此相像, RESTful之于RPC之优点:(来自参考资料1) 根据经验,建议能够使用REST就尽量使用REST, 主要基于下面几个考虑: 易扩展 松耦合(意味着,不用强制要求客户端去更新相应的代码) 客户端实现语言无关 性能 安全性(例如HTTPS) 当然上述的几点也并非 RPC 都不满足,不过相对而言, REST 更加清晰和简洁, 再辅以 JSON 相应的服务会在性能和稳定性(简单通常意味着robust)方面有很大的提高. 二、Jersey与SpringMVC比较

Thrift使用入门---RPC服务

耗尽温柔 提交于 2019-11-29 18:28:08
https://blog.csdn.net/cjf_wei/article/details/78763517 https://blog.csdn.net/zkp_java/article/details/81879577 RPC基本原理 大部分的RPC框架都遵循如下三个开发步骤: RPC通信过程如下图所示 通信过程包括以下几个步骤: 图中Your Code是用户实现的业务逻辑,接下来的FooService.Client和Foo.write()/read()是thrift根据IDL生成的客户端和服务端的代码,对应于RPC中Client stub和Server stub。TProtocol 用来对数据进行序列化与反序列化,具体方法包括二进制,JSON 或者 Apache Thrift 定义的格式。TTransport 提供数据传输功能,使用 Apache Thrift 可以方便地定义一个服务并选择不同的传输协议。 如下图所示为thrift的网络栈结构 来源: https://www.cnblogs.com/Lee-yl/p/11526174.html

Dubbo入门---搭建一个最简单的Demo框架

别来无恙 提交于 2019-11-29 01:40:44
Dubbo入门---搭建一个最简单的Demo框架 置顶 2017年04月17日 19:10:44 是Guava不是瓜娃 阅读数 394229 更多 分类专栏: Dubbo 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/noaman_wgs/article/details/70214612 Dubbo背景和简介 Dubbo开始于电商系统,因此在这里先从电商系统的演变讲起。 单一应用框架(ORM) 当网站流量很小时,只需一个应用,将所有功能如下单支付等都部署在一起,以减少部署节点和成本。 缺点:单一的系统架构,使得在开发过程中,占用的资源越来越多,而且随着流量的增加越来越难以维护 垂直应用框架(MVC) 垂直应用架构解决了单一应用架构所面临的扩容问题,流量能够分散到各个子系统当中,且系统的体积可控,一定程度上降低了开发人员之间协同以及维护的成本,提升了开发效率。 缺点:但是在垂直架构中相同逻辑代码需要不断的复制,不能复用。 分布式应用架构(RPC) 当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心 流动计算架构(SOA) 随着服务化的进一步发展,服务越来越多,服务之间的调用和依赖关系也越来越复杂,诞生了面向服务的架构体系

RPC框架调用过程详解

ⅰ亾dé卋堺 提交于 2019-11-29 00:45:31
RPC框架调用过程详解 2017年09月16日 21:14:08 荷叶清泉 阅读数 6275 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/heyeqingquan/article/details/78006587 RPC是远程调用过程的简写,是一个协议,处于网络通信协议的第五层:会话层,其下就是TCP/IP协议,在建立在其基础上的通信会话协议。RPC定义了交互的模式,而应用程序使用这些模式,来访问其他服务器的方法,并不需要关系具体的网络上的细节。 一、RPC基础知识 1.RPC模式 RPC采用C/S模式,客户端发送请求,服务端响应。 基于底层的协议,比如TCP/IP模式。 2.设计目的 ①通过固定的协议,调用非本机的方法 ②实现不同程序语言之间的通信 ③不需要了解底层协议,像本地方法一样调。它完全封装了网络传输,以及其他细节。 二、RPC过程详解 图一 RPC调用过程 从RPC的角度看,应该有服务的提供方,即生产者;还有服务的调用方,即消费者。 对消费者来时,在RPC调用过程中,使用第1步、第2步、第3步、第4步是透明的,其他的都是使用RPC框架去封装这些事情。当应用开始调用PRC的方式时,就会去容器中去取Bean对象,所以我们应该首先注册Bean对象到容器中

如何给老婆解释什么是RPC

随声附和 提交于 2019-11-28 23:00:58
转至:https://www.jianshu.com/p/2accc2840a1b 一个阳光明媚的早晨,老婆又在翻看我订阅的技术杂志。 “老公,什么是RPC呀,为什么你们程序员那么多黑话!”,老婆还是一如既往的好奇。 “RPC,就是 Remote Procedure Call 的简称呀,翻译成中文就是 远程过程调用 嘛”,我一边看着书,一边漫不经心的回答着。 “啥?你在说啥?谁不知道翻译成中文是什么意思?你个废柴,快给我滚去洗碗!” “我去。。。”,我如梦初醒,我对面坐着的可不是一个程序员,为了不去洗碗,我瞬间调动起全部脑细胞,星辰大海在我脑中汇聚,灵感涌现...... "是这样,远程过程调用,自然是相对于本地过程调用来说的嘛。" “嗯哼,那先给老娘讲讲,本地过程调用是啥子?” “本地过程调用,就好比你现在在家里,你要想洗碗,那你直接把碗放进洗碗机,打开洗碗机开关就可以洗了。这就叫本地过程调用。” “哎呦,我可不干,那啥是远程过程调用?” “远程嘛,那就是你现在不在家,跟姐妹们浪去了,突然发现碗还没洗,打了个电话过来,叫我去洗碗,这就是远程过程调用啦”,多么通俗易懂的解释,我真是天才! “哦!我明白了”,说着,老婆开始收拾包包。 “你这是干啥去哦” “我?我要出门浪去呀,待会记得接收我的远程调用哦,哦不,咱们要专业点,应该说,待会记得接收我的RPC哦!” ......

Yarn介绍(设计理念与基本架构)

删除回忆录丶 提交于 2019-11-28 20:00:41
Yarn : 新的计算框架,是一个全局资源管理器,负责整个集群的资源管理和分配 一. Yarn产生背景 Hadoop1.0MR有局限性,概括为以下几个方面 : 扩展性差 可靠性差 资源利用率低 无法支持多种计算框架 为克服Hadoop1.0中MR存在各种问题而提出了Yarn,它将JobTracker中的资源管理和作业控制功能分开,分别由组件ResourceManager和ApplicationMaster实现,其中,ResourceManager负责所有应用程序的资源分配,而ApplicationMaster仅负责管理一个应用程序,进而诞生了全新的通用资源管理框架 - Yarn 二. Yarn基本架构 基本架构 Yarn是资源管理系统,它的基本设计思想是将Hadoop1.0MR中的JobTracker拆分成两个独立的服务 : 一个全局资源管理器ResourceManager和每个应用程序特有的ApplicationMaster Yarn总体上仍然是Master/Slave结构,在整个资源管理框架中,ResourceManager为Master,NodeManager为Slave,ResourceManager负责对各个NodeManager上的资源进行统一管理和调度.当用户提交一个应用程序时,需要提供一个用以跟踪和管理这个程序的ApplicationMaster

go RPC 远程调用

喜你入骨 提交于 2019-11-28 13:21:59
Go语言 中 RPC(Remote Procedure Call,远程过程调用)是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络细节的应用程序通信协议。RPC 协议构建于 TCP 或 UDP ,或者是 HTTP 之上,允许开发者直接调用另一台计算机上的程序,而开发者无需额外地为这个调用过程编写网络通信相关代码,使得开发包括网络分布式程序在内的应用程序更加容易。 RPC 采用客户端—服务器(Client/Server)的工作模式。请求程序就是一个客户端(Client),而服务提供程序就是一个服务器(Server)。当执行一个远程过程调用时,客户端程序首先发送一个带有参数的调用信息到服务端,然后等待服务端响应。 在服务端,服务进程保持睡眠状态直到客户端的调用信息到达为止。当一个调用信息到达时,服务端获得进程参数,计算出结果,并向客户端发送应答信息,然后等待下一个调用。最后,客户端接收来自服务端的应答信息,获得进程结果,然后调用执行并继续进行。 在 Go 中,标准库提供的 net/rpc 包实现了 RPC 协议需要的相关细节,开发者可以很方便地使用该包编写 RPC 的服务端和客户端程序,这使得用 Go语言开发的多个进程之间的通信变得非常简单。 net/rpc 包允许 RPC 客户端程序通过网络或是其他 I/O 连接调用一个远端对象的公开方法(必须是大写字母开头、可外部调用的

Dubble 01 架构模型&start project

余生长醉 提交于 2019-11-28 11:59:46
Dubbo 01 架构模型 传统架构 All in One 测试麻烦,微小修改 全都得重新测 单体架构也称之为单体系统或者是单体应用。就是一种把系统中所有的功能、模块耦合在一个应用中的架构方式。其优点为:项目易于管理、部署简单。缺点:测试成本高、可伸缩性差、可靠性差、迭代困难、跨语言程度差、团队协作难 聚合项目划分 单项目容易 因为某个功能导致整体oom 拆分完 咋实现 SOA 架构: Service-Oriented Architecture 面向服务的架构(SOA)是一个组件模型,它将应用程序拆分成不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种各样的系统中的服务可以以一种统一和通用的方式进行交互。 在没有实施SOA的年代,从我们研发的角度来看,只能在代码级别复用,即Ctrl +V。SOA出现,我们开始走向了模块、业务线的复用。 SOA年代的典型实现: SOAP协议,CXF框架,XML传输 xsd,数据校验 SOA架构伴随着软件研发行业20年的发展,在最初的时候,大型it公司内部系统规模越来越大,IT系统越来越复杂,All in One单体架构的思想导致公司内项目业务和数据相互隔离,形成了孤岛。 最初,我们使用数据库作为项目之间数据交互和中转的平台