RPC和WebService的关系

RPC(Remote Procedure Call)— 远程过程调用,是一个很大的概念, 它是一种通过网络从远程计算机程序上跨语言跨平台的请求服务,rpc能省略部分接口代码的开发,可以跨机器之间访问对象(java rmi),可以有更方便的加密和更高效的数据传输性能, 而不需要了解底层网络技术的协议, RPC不仅可以走HTTP/HTTPS, 也可以自定义 tcp 协议, 从而省略HTTP繁杂的规则和冗余信息。

web service接口实际上就是RPC调用的一种实现,只考虑RPC的stub层实现, soap restfull都是固定走HTTP/HTTPS, 都有定义了自己的规则和实现(xmll和json等), 规定了server能够提供的服务(web service),也是跨语言跨平台的。参考WebService的概诉

图片.png

可以看到RPC模型中多了一个stub的组件,这个是约定的接口,也就是server提供的服务, web service就是基于这一层考虑了实现的, 至于调用的协议都是固定的, 注意这里的“接口”,不是指JAVA中的interface,因为RPC是跨平台跨语言的,用JAVA写的客户端,应该能够调用用C语言提供的过程。

目前常用的RPC框架:参考

dubbo --阿常用, 虽然现在都是 HSL

RMI

grpc

Hessian

HTTP2发布了, RPC什么时候需要实现自定义 tcp 协议呢?

HTTP1版本的Http(TCP)本身的三次握手协议,就会带来大概1MS的延迟(emmm,这个数据其实我有点不确定了,也可能是几微秒,很早之前做过测试)。 每发送一次请求,都会有一次建立连接的过程,加上Http 1报文本身的庞大,以及Json的庞大,业务量一大, 都需要作一些优化。

http2.0协议已经优化编码效率问题,像grpc这种rpc库使用的就是http2.0协议。

http容器的性能测试单位通常是kqps,RPC自定义tpc协议则通常是以10kqps到100kqps为基准,不仅比HTTPS相比有些优势, 还可以根据具体业务具体实现, 良好的rpc调用是面向服务的封装,针对服务的可用性和效率等都做了优化。单纯使用http调用则缺少了这些特性。

RPC主要的作用是:

解决分布式系统中,服务之间的调用问题。

远程调用时,要能够像本地调用一样方便,让调用者感知不到远程调用的逻辑。

RPC主要是用在大型企业里面,因为大型企业里面系统繁多,业务线复杂,而且效率优势非常重要的一块,这个时候RPC的优势就比较明显了。

由于小型企业一般业务简单,不需要进行分布式架构, 小型企业主要还是使用webservicer中的restfull webservic , 部分特殊业务会使用soap sercice

java rpc与webservice_RPC体系,RPC和WebService的区别详解相关推荐

  1. java中public_java中public class与class的区别详解

    以下是对java中public class与class的区别进行了分析介绍,需要的朋友可以过来参考下 在编写类的时候可以使用两种方式定义类:public class定义类: class定义类:如果一个 ...

  2. java ear_Jar/War/Ear等包的作用与区别详解

    以客户角度来看,jar文件就是一种封装格式,用户不需要知道jar包中有多少个.class格式的文件及每个文件中的功能与作用,也可以得到相应的访问的结果.java中除了jar格式还有war和ear等包文 ...

  3. java controller注解原理_@Controller、@RestController注解区别详解

    @Controller.@RestController注解区别: @RestController 注解相当于 @Controller + @ResponseBody 合在一起的作用. 一.@Contr ...

  4. 第43课: Spark 1.6 RPC内幕解密:运行机制、源码详解、Netty与Akka等

    第43课: Spark 1.6 RPC内幕解密:运行机制.源码详解.Netty与Akka等 Spark 1.6推出了以RpcEnv.RPCEndpoint.RPCEndpointRef为核心的新型架构 ...

  5. WEB后台--邮件和短信业务实现(包括Java一键实现、封装和异步)以及原理详解

    本来就打算针对一些固定的特别点的业务(QQ与网易邮件.拦截设计.短信.定时器等等)来进行记录以及解析原理,这些会比较零散记录在JavaWeb的分类里面,感兴趣的童鞋可以去看下. 有人问为什么要邮件短信 ...

  6. java mod %区别_Java中 % 与Math.floorMod() 区别详解

    %为取余(rem),Math.floorMod()为取模(mod) 取余取模有什么区别呢? 对于整型数a,b来说,取模运算或者取余运算的方法都是: 1.求 整数商: c = a/b; 2.计算模或者余 ...

  7. Java构造和解析Json数据的两种方法详解一

    在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面首先介绍用json-lib构造和解析Jso ...

  8. Java中print、printf、println的区别 详解

    Java中print.printf.println的区别详解 printf主要是继承了C语言的printf的一些特性,可以进行格式化输出 print就是一般的标准输出,但是不换行 println和pr ...

  9. java throw与throws_基于Java中throw和throws的区别(详解)

    系统自动抛出的异常 所有系统定义的编译和运行异常都可以由系统自动抛出,称为标准异常,并且 Java 强烈地要求应用程序进行完整的异常处理,给用户友好的提示,或者修正后使程序继续执行. 语句抛出的异常 ...

最新文章

  1. Redis的安装以及基本操作简介
  2. oracle常见问题
  3. STM32 设置片外SRAM分散加载
  4. .Net 中的封装知识点
  5. 记一次尴尬的git reset丢失分支故障
  6. Linux 搭建zcash结点
  7. pool win10提示bad_快速解决Win10出现Bad pool caller蓝屏故障的技巧
  8. win8.1硬盘安装ubuntu14.04双系统
  9. js 的arguments的一些理解资料
  10. Visual Studio 2019上安装AnkhSVN2019
  11. 58同城峰会落幕 智能化平台和下沉市场能让继续神奇吗?
  12. favicon.ico图标在线制作+ico下载
  13. spring-scop (单例模式?)
  14. [Android]朝花夕拾之使用DexClassLoader动态加载广点通jar包
  15. Linux内核下载(包括历史版本)
  16. 腾讯系持续集成(CI)方案
  17. 奇葩面试大赏:四年没见的前女友成了我的面试官
  18. tkinter绘制组件(18)——菜单
  19. 定制一个Android的Launcher(Home)
  20. unittest框架知识总结

热门文章

  1. Kafka 优化参数 unclean.leader.election.enable
  2. MaxCompute管家详解--管家助力,轻松玩转MaxCompute
  3. 长沙营智:PolarDB助力长沙营智提速资讯搜索业务
  4. 仅用1天,为湖北黄冈中学搭建直播课堂!
  5. 揭秘 | 双11逆天记录背后的数据库技术革新
  6. 数十万应用结点全息监控,ARMS新上线的应用监控神器到底有多牛?
  7. HTTPS 协议到底比 HTTP 协议多些什么?
  8. 国家能源集团携手华为首次部署矿鸿操作系统,开创工控新纪元
  9. 为普及再助一把力!《2021年中国低代码/无代码市场研究报告》正式发布
  10. 搞定面试算法系列 | 分治算法三步走