rpc协议

Hadoop RPC源码分析

大城市里の小女人 提交于 2020-01-27 11:25:43
Hadoop RPC源码分析 上一篇文章 http://www.cnblogs.com/dycg/p/rpc.html 讲了Hadoop RPC的使用方法,这一次我们从demo中一层层进行分析。 RPC说白了,就3个核心,交互协议、服务端、客户端。 在Hadoop RPC(hadoop-common-2.4.jar)中也是这样 交互协议 org.apache.hadoop.ipc.VersionedProtocol ,所有协议的父类 其实就2个方法,版本与签名。不同版本与签名的协议,就算同一个类名也无法通信。 服务端: RPC.Server 处理客户端的连接请求,并处理相关业务,最后返回结果 客户端: Client,封装请求数据,并接收Response 好,正式开始分析源码吧。 协议部分,我就不说了,就是实现VersionedProtocol接口并添加一些业务方法即可。 我们从客户端程序入口点开始分析,先看看客户端是如何取得协议对象的。 想要与服务端通信就先要得到协议对象,RPC.getProxy就是得到协议对象的方法,沿着代码进入最底层,你会发现,它默认先得到一个RpcEngine(默认实现是WritableRpcEngine),它是什么呢?简单点说就是,它相当于我们启动服务器,获取协议的类。有了WritableRpcEngine后,调用它的getProxy方法

Rpc和Rest 笔记

别说谁变了你拦得住时间么 提交于 2020-01-27 02:55:22
1.20 笔记 REST设计风格遵循的要点 1.利用http方法让接口统一化,rest充分利用http自身的GET,POSST,PUT,DELETE的方法实现接口的统一化,比如对统一资源进行crud操作 2.利用http状态码返回状态信息 200 ok 400 bedRequest 404 资源路径未找到 500 网络服务端错误 3.利用Http报头告知对方如何处理本次请求,http报头是描述客户端与服务器之间的请求或者响应应该如何处理本次请求的 4.无状态,rest设计风格要求Server无状态,服务器不保存请求信息,客户端每次都必须带上自己的状态去请求服务器,然后返回sessionID,保存chookies。 通过session保存状态不是rest的设计风格,因为session将状态信息保存到服务器上,是靠服务器维持的,不是rest的设计风格 通过Token保存状态时rest的设计风格,因为token是保存在客户端中的,当用户登录成功后,服务器会返回一个token给客户端,客户端将Token保存到Chookies中,每次客户端发起请求都是从客户端的Chookies中,再通过服务器验证Token的有效性即可 有状态:信息保存在服务器上 无状态:信息保存在客户端的Chookies 通过无状态实现负载均:通过rest的无状态的原则,在分布式的web系统上,有多个可用服务器

NFS介绍及简单实施

孤人 提交于 2020-01-26 10:22:56
什么是NFS ? NFS 是Network File System的缩写,即网络文件系统。一种使用于分散式文件系统的协定,由Sun公司开发,于1984年向外公布。功能是通过网络让不同的机器、不同的操作系统能够彼此分享个别的数据,让应用程序在客户端通过网络访问位于服务器磁盘中的数据,是在类Unix系统间实现磁盘文件共享的一种方法 它的主要功能是通过网络让不同的机器系统之间可以彼此共享文件和目录。NFS服务器可以允许NFS客户端将远端NFS服务器端的共享目录挂载到本地的NFS客户端中。在本地的NFS客户端的机器看来,NFS服务器端共享的目录就好像自己的磁盘分区和目录一样。一般客户端挂载到本地目录的名字可以随便,但为方便管理,我们要和服务器端一样比较好。 NFS一般用来存储共享视频,图片等静态数据。 NFS挂载原理 NFS是通过网络来进行服务端和客户端之间的数据传输。两者之间要传输数据就要有想对应的网络端口来进行传输。NFS服务器到底使用什么网络端口来传输数据的,NFS服务器端其实是随机选择端口来进行数据传输。那NFS客户端又是如何知道NFS服务器端到底使用的是哪个端口呢?其实NFS服务器时通过远程过程调用(remote procedure call 简称RPC)协议/服务来实现的。也就是说RPC服务会统一管理NFS的端口,客户端和服务端通过RPC来先沟通NFS使用了哪些端口

微服务简介

匆匆过客 提交于 2020-01-26 07:21:13
常见的远程调用方式有以下几种: - RPC:Remote Produce Call远程过程调用,类似的还有RMI。自定义数据格式,基于原生TCP通信,速度快,效率高。早期的webservice,现在热门的dubbo,都是RPC的典型 - Http:http其实是一种网络传输协议,基于TCP,规定了数据传输的格式。现在客户端浏览器与服务端通信基本都是采用Http协议。也可以用来进行远程服务调用。缺点是消息封装臃肿。 现在热门的Rest风格,就可以通过http协议来实现。 RPC,即 Remote Procedure Call(远程过程调用),是一个计算机通信协议。 该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而程序员无需额外地为这个交互作用编程。说得通俗一点就是:A计算机提供一个服务,B计算机可以像调用本地服务那样调用A计算机的服务。 通过上面的概念,我们可以知道,实现RPC主要是做到两点: - 实现远程调用其他计算机的服务 - 要实现远程调用,肯定是通过网络传输数据。A程序提供服务,B程序通过网络将请求参数传递给A,A本地执行后得到结果,再将结果返回给B程序。这里需要关注的有两点: - 1)采用何种网络通讯协议? - 现在比较流行的RPC框架,都会采用TCP作为底层传输协议 - 2)数据传输的格式怎样? - 两个程序进行通讯,必须约定好数据传输格式。就好比两个人聊天

linux nfs文件共享

天大地大妈咪最大 提交于 2020-01-25 17:51:20
这节我们介绍NFS的相关概念,以及怎样配置NFS和在client中查看NFS。 NFS的配置过程非常easy。 在server端中编辑 /etc/exports 文件,加入例如以下内容: /home/nfs-share 192.168.1.122 *(rw,sync) 第一项是要共享的文件夹。后者为共享的配置參数一般为:*(rw,sync,no_root_squash,no_all_squash,no_subtree_check) 然后开启NFS和portmap服务: /etc/init.d/nfs start //用service nfs start也能够 /etc/init.d/portmap start //用service portmap stasrt也能够 在centos6.5中portmap已经改为rpcbind 在client。用mount –t nfs 192.168.123:/home/nfs-share /home/remote_file挂载server端的共享文件夹到本地的/home/remote-file挂载点,然后我们就能够在client上应用到远程主机上的/home/nfs-share文件夹了。 想要系统在开机时自己主动挂载,改动/etc/fstab文件,把NFSserver的共享文件夹加入进去就能够了,这个不用多说。

资料搜集-JAVA系统的梳理知识12-Dubbo

こ雲淡風輕ζ 提交于 2020-01-25 03:18:54
本文是作者根据官方文档以及自己平时的使用情况,对 Dubbo 所做的一个总结。如果不懂 Dubbo 的使用的话,可以参考我的这篇文章[《超详细,新手都能看懂 !使用SpringBoot+Dubbo 搭建一个简单的分布式服务》](https://mp.weixin.qq.com/s?__biz=MzU4NDQ4MzU5OA==&mid=2247484706&idx=1&sn=d413fc17023482f67ca17cb6756b9ff8&chksm=fd985343caefda555969568fdf4734536e0a1745f9de337d434a7dbd04e893bd2d75f3641aab&token=1902169190&lang=zh_CN#rd) Dubbo 官网:http://dubbo.apache.org/zh-cn/index.html Dubbo 中文文档: http://dubbo.apache.org/zh-cn/index.html <!-- MarkdownTOC --> - [一 重要的概念](#一-重要的概念) - [1.1 什么是 Dubbo?](#11-什么是-dubbo) - [1.2 什么是 RPC?RPC原理是什么?](#12-什么是-rpcrpc原理是什么) - [1.3 为什么要用 Dubbo?](#13-为什么要用-dubbo)

Dubbo框架设计-分层设计思想

£可爱£侵袭症+ 提交于 2020-01-24 19:58:38
目录 整体设计 各层说明 config 配置层: proxy 服务代理层: registry 注册中心层: cluster 路由层: monitor 监控层: protocol 远程调用层: exchange 信息交换层: transport 网络传输层: serialize 数据序列化层: 关系说明 模块分包 依赖关系 调用链 暴露服务时序 引用服务时序 领域模型 基本设计原则 整体设计 图例说明: 图中左边淡蓝背景的为服务消费方使用的接口,右边淡绿色背景的为服务提供方使用的接口,位于中轴线上的为双方都用到的接口。 图中从下至上分为十层,各层均为单向依赖,右边的黑色箭头代表层之间的依赖关系,每一层都可以剥离上层被复用,其中,Service 和 Config 层为 API,其它各层均为 SPI。 图中绿色小块的为扩展接口,蓝色小块为实现类,图中只显示用于关联各层的实现类。 图中蓝色虚线为初始化过程,即启动时组装链,红色实线为方法调用过程,即运行时调时链,紫色三角箭头为继承,可以把子类看作父类的同一个节点,线上的文字为调用的方法。 各层说明 config 配置层: 对外配置接口,以 ServiceConfig, ReferenceConfig 为中心,可以直接初始化配置类,也可以通过 spring 解析配置生成配置类 proxy 服务代理层: 服务接口透明代理,生成服务的客户端

SOAP

血红的双手。 提交于 2020-01-24 06:27:59
SOAP(Simple Object Access Protocol)简单对象访问协议是在分散或分布式的环境中交换信息的简单的协议,是一个基于XML的协议。它包括四个部分:SOAP封装(envelop),封装定义了一个描述消息中的内容是什么,是谁发送的,谁应当接受并处理它以及如何处理它们的框架;SOAP编码规则(encoding rules),用于表示应用程序需要使用的数据类型的实例; SOAP RPC表示(RPC representation),表示远程过程调用和应答的协定;SOAP绑定(binding),使用底层协议交换信息。 来源: https://www.cnblogs.com/goodbye305/archive/2008/06/23/1228084.html

WebService与使用风格RPC/SOA/REST

陌路散爱 提交于 2020-01-24 06:25:55
一 webservice Web Services 可使您的应用程序成为 Web 应用程序。Web Services 通过 Web 进行发布、查找和使用。通过使用 Web Services,您的应用程序可以向全世界发布信息,或提供某项功能。 1) 什么是Web Services? Web Services 是应用程序组件 Web Services 使用开放协议进行通信 Web Services 是独立的(self-contained)并可自我描述 Web Services 可通过使用UDDI来发现 Web Services 可被其他应用程序使用 XML 是 Web Services 的基础 2)它如何工作? 基础的 Web Services 平台是 XML + HTTP。 HTTP 协议是最常用的因特网协议。XML 提供了一种可用于不同的平台和编程语言之间的语言。 Web services 平台的元素: •SOAP (简易对象访问协议) •UDDI (通用描述、发现及整合) •WSDL (Web services 描述语言) 3)工作过程,如图: 二 SOAP SOAP 是指简单对象访问协议(simple object access protocal)。 SOAP是基于 XML 的简易协议,可使应用程序在 HTTP 之上进行信息交换。或者更简单地说:SOAP

【代码篇】从零开始一步步搭建自己的golang框架(五)

僤鯓⒐⒋嵵緔 提交于 2020-01-22 23:12:00
上篇文章讲到数据库和redis连接的初始化已经完成,接下这篇文章会比较重要一点,我们要启动一个http服务和一个rpc服务,同时抽象出一层数据处理层来封装接口。 开启http服务 老规矩,先添加配置,顺便把rpc的配置也写进去,config.json: "http_config": { "addr": ":8080" }, "rpc_config": { "addr": ":8081" } config.go: type HttpConfig struct { Addr string `json:"addr"` } type RpcConfig struct { Addr string `json:"addr"` } 接着,来看看process/http/http.go的内容: package http import ( "github.com/gin-gonic/gin" "go.uber.org/zap" "os" ) var engine *gin.Engine //启动http服务 func StartHttpServer(addr string) { engine = gin.Default() Route() if err := engine.Run(addr); err != nil { zap.Error(err) os.Exit(1) } } //路由 func