当前位置: 首页 > news >正文

rpc 理解

RPC=Remote Produce Call 是一种技术的概念名词. HTTP是一种协议,RPC可以通过HTTP来实现,也可以通过Socket自己实现一套协议来实现.
rpc是一种概念,http也是rpc实现的一种方式

rpc http实现   Hessian  ,webservices,webservicesrestful等

Socket实现  Netty,nio等



RPC是一个抽象的概念

RPC,即 Remote Procedure Call(远程过程调用),说得通俗一点就是:调用远程计算机上的服务,就像调用本地服务一样。

RPC 可基于 HTTP 或 TCP 协议,Web Service 就是基于 HTTP 协议的 RPC,它具有良好的跨平台性,但其性能却不如基于 TCP 协议的 RPC。会两方面会直接影响 RPC 的性能,一是传输方式,二是序列化。

众所周知,TCP 是传输层协议,HTTP 是应用层协议,而传输层较应用层更加底层,在数据传输方面,越底层越快,因此,在一般情况下,TCP 一定比 HTTP 快。就序列化而言,Java 提供了默认的序列化方式,但在高并发的情况下,这种方式将会带来一些性能上的瓶颈,于是市面上出现了一系列优秀的序列化框架,比如:Protobuf、Kryo、Hessian、Jackson 等,它们可以取代 Java 默认的序列化,从而提供更高效的性能。

为了支持高并发,传统的阻塞式 IO 显然不太合适,因此我们需要异步的 IO,即 NIO。Java 提供了 NIO 的解决方案,Java 7 也提供了更优秀的 NIO.2 支持,用 Java 实现 NIO 并不是遥不可及的事情,只是需要我们熟悉 NIO 的技术细节。

我们需要将服务部署在分布式环境下的不同节点上,通过服务注册的方式,让客户端来自动发现当前可用的服务,并调用这些服务。这需要一种服务注册表(Service Registry)的组件,让它来注册分布式环境下所有的服务地址(包括:主机名与端口号)。

应用、服务、服务注册表之间的关系见下图:

系统架构

本文将为您揭晓开发轻量级分布式 RPC 框架的具体过程,该框架基于 TCP 协议,提供了 NIO 特性,提供高效的序列化方式,同时也具备服务注册与发现的能力。


相关文章:

  • spark使用
  • 基于 html5的 jquery 轮播插件 flickerplate
  • 定义运算符
  • [转]ZooKeeper 集群环境搭建 (本机3个节点)
  • https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins
  • 《大学章句》光剑续编
  • 犀牛Phinoceros 如何切换中文语言
  • Spring4-EL中正则表达式的使用
  • web开发之Cookie使用
  • Python之Seaborn
  • php5.6源码安装及php-fpm配置与nginx集成
  • Hibernate(1)
  • 史上最详细 VUE2.0 全套 demo 讲解 基础3(计算属性)
  • JS+CSS实现数字滚动
  • [Lucas定理]【学习笔记】
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • Invalidate和postInvalidate的区别
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • JavaScript创建对象的四种方式
  • Java深入 - 深入理解Java集合
  • markdown编辑器简评
  • spring boot 整合mybatis 无法输出sql的问题
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 解析带emoji和链接的聊天系统消息
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 深入 Nginx 之配置篇
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • 以太坊客户端Geth命令参数详解
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • 如何用纯 CSS 创作一个货车 loader
  • #git 撤消对文件的更改
  • #laravel 通过手动安装依赖PHPExcel#
  • (10)STL算法之搜索(二) 二分查找
  • (12)Hive调优——count distinct去重优化
  • (7)STL算法之交换赋值
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (rabbitmq的高级特性)消息可靠性
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (六)激光线扫描-三维重建
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • .bat批处理(二):%0 %1——给批处理脚本传递参数
  • .NET CORE 第一节 创建基本的 asp.net core
  • .NET Core 控制台程序读 appsettings.json 、注依赖、配日志、设 IOptions
  • .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?
  • .net下简单快捷的数值高低位切换
  • [<事务专题>]
  • [1181]linux两台服务器之间传输文件和文件夹
  • [8-27]正则表达式、扩展表达式以及相关实战