java rpc与webservice_RPC体系,RPC和WebService的区别详解
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的区别详解相关推荐
- java中public_java中public class与class的区别详解
以下是对java中public class与class的区别进行了分析介绍,需要的朋友可以过来参考下 在编写类的时候可以使用两种方式定义类:public class定义类: class定义类:如果一个 ...
- java ear_Jar/War/Ear等包的作用与区别详解
以客户角度来看,jar文件就是一种封装格式,用户不需要知道jar包中有多少个.class格式的文件及每个文件中的功能与作用,也可以得到相应的访问的结果.java中除了jar格式还有war和ear等包文 ...
- java controller注解原理_@Controller、@RestController注解区别详解
@Controller.@RestController注解区别: @RestController 注解相当于 @Controller + @ResponseBody 合在一起的作用. 一.@Contr ...
- 第43课: Spark 1.6 RPC内幕解密:运行机制、源码详解、Netty与Akka等
第43课: Spark 1.6 RPC内幕解密:运行机制.源码详解.Netty与Akka等 Spark 1.6推出了以RpcEnv.RPCEndpoint.RPCEndpointRef为核心的新型架构 ...
- WEB后台--邮件和短信业务实现(包括Java一键实现、封装和异步)以及原理详解
本来就打算针对一些固定的特别点的业务(QQ与网易邮件.拦截设计.短信.定时器等等)来进行记录以及解析原理,这些会比较零散记录在JavaWeb的分类里面,感兴趣的童鞋可以去看下. 有人问为什么要邮件短信 ...
- java mod %区别_Java中 % 与Math.floorMod() 区别详解
%为取余(rem),Math.floorMod()为取模(mod) 取余取模有什么区别呢? 对于整型数a,b来说,取模运算或者取余运算的方法都是: 1.求 整数商: c = a/b; 2.计算模或者余 ...
- Java构造和解析Json数据的两种方法详解一
在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面首先介绍用json-lib构造和解析Jso ...
- Java中print、printf、println的区别 详解
Java中print.printf.println的区别详解 printf主要是继承了C语言的printf的一些特性,可以进行格式化输出 print就是一般的标准输出,但是不换行 println和pr ...
- java throw与throws_基于Java中throw和throws的区别(详解)
系统自动抛出的异常 所有系统定义的编译和运行异常都可以由系统自动抛出,称为标准异常,并且 Java 强烈地要求应用程序进行完整的异常处理,给用户友好的提示,或者修正后使程序继续执行. 语句抛出的异常 ...
最新文章
- Redis的安装以及基本操作简介
- oracle常见问题
- STM32 设置片外SRAM分散加载
- .Net 中的封装知识点
- 记一次尴尬的git reset丢失分支故障
- Linux 搭建zcash结点
- pool win10提示bad_快速解决Win10出现Bad pool caller蓝屏故障的技巧
- win8.1硬盘安装ubuntu14.04双系统
- js 的arguments的一些理解资料
- Visual Studio 2019上安装AnkhSVN2019
- 58同城峰会落幕 智能化平台和下沉市场能让继续神奇吗?
- favicon.ico图标在线制作+ico下载
- spring-scop (单例模式?)
- [Android]朝花夕拾之使用DexClassLoader动态加载广点通jar包
- Linux内核下载(包括历史版本)
- 腾讯系持续集成(CI)方案
- 奇葩面试大赏:四年没见的前女友成了我的面试官
- tkinter绘制组件(18)——菜单
- 定制一个Android的Launcher(Home)
- unittest框架知识总结
热门文章
- Kafka 优化参数 unclean.leader.election.enable
- MaxCompute管家详解--管家助力,轻松玩转MaxCompute
- 长沙营智:PolarDB助力长沙营智提速资讯搜索业务
- 仅用1天,为湖北黄冈中学搭建直播课堂!
- 揭秘 | 双11逆天记录背后的数据库技术革新
- 数十万应用结点全息监控,ARMS新上线的应用监控神器到底有多牛?
- HTTPS 协议到底比 HTTP 协议多些什么?
- 国家能源集团携手华为首次部署矿鸿操作系统,开创工控新纪元
- 为普及再助一把力!《2021年中国低代码/无代码市场研究报告》正式发布
- 搞定面试算法系列 | 分治算法三步走