SpringCloud远程调用为啥要采用HTTP,而不是RPC?
- 一个简单HTTP请求处理
- RPC
- Restful(HTTP)
- RPC和HTTP的区别
关于SpringCloud远程调用采用HTTP而非RPC。
- 首先SpringCloud开启Web服务依赖于内部封装的Tomcat容器,而今信息飞速发展,适应大流量的微服务,采用Tomcat处理HTTP请求,开发者编写Json作为资源传输,服务器做出相应的响应,可以更加的灵活处理业务数据,而HTTP协议是跨平台的,符合微服务B/C数据交互的方式,可以的一套服务器对应移动H5、App、小程序提供服务。
- RPC基于TCP协议,客服端与服务端需要进行三次握手完成可靠连接,第四步进行数据传输。因为TCP是数据传输层,传输协议需要服务器统一编写,进行二进制传输,依赖序列化和反序列化规则,对于大部分应用需要灵活变动数据则不适用,RPC常用于Socket连接或一些基本不变动的传输格式数据,减少数据变动带来的开发成本
建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket ,另一个运行于服务器端,称为ServerSocket ,套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认。
一个简单HTTP请求处理
在Web应用中,浏览器请求一个URL,服务器就把生成的HTML网页发送给浏览器,而浏览器和服务器之间的传输协议是HTTP,那么接下来我们看下如何用Java来实现一个简单的HTTP服务器。
RPC
RPC(Remote Procedure Call:远程过程调用):是一种进程间通信方式,是一种技术的思想,而不是规范。它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不用程序员显式编码这个远程调用的细节。即程序员无论是调用本地的还是远程的函数,本质上编写的调用代码基本相同。
通俗的说法就是:比如说现在有两台服务器A和B,一个应用部署在A服务器上,另一个应用部署在B服务器上,如果A应用想要调用B应用提供的方法,由于他们不在一台机器下,也就是说它们不在一个JVM内存空间中,是无法直接调用的,需要通过网络进行调用,那这个调用过程就叫做RPC。
RPC两个核心模块:通讯,序列化。
❝
注意:无论是何种类型的数据,最终都需要序列化转换成二进制流在网络上进行传输,数据的发送方需要将对象序列化转换为二进制流,而数据的接收方则需要把二进制流反序列化为对象。
❞
Restful(HTTP)
Restful 指的是一组架构约束条件和原则。" 如果一个架构符合 Restful 的约束条件和原则,就称它为 Restful 架构。隐藏在 Restful 背后的理念就是使用 Web的现有特征和能力,更好地使用现有 Web 标准中的一些准则和约束。
虽然 Restful 本身受 Web技术的影响很深, 但是理论上 Restful 架构风格并不是绑定在 HTTP 上,只不过目前 HTTP 是唯一与 Restful 相关的实例。所以我们这里描述的 Restful 也是通过 HTTP 实现的 Restful。
RPC和HTTP的区别
首先,两者十分相似,有请求有响应。
不同:
- RPC需要满足像调用本地服务一样调用远程服务,也就是对调用过程在API层面进行封装。
- Http协议没有这样的要求,因此请求、响应等细节需要我们自己去实现。
优点
- RPC更加透明,对用户方便。
- HTTP方式更加灵活,没有规定API和语言,跨语言,跨平台。
缺点
- RPC需要在API层面进行封装,限制了开发的语言环境。
选择
- 速度方面:RPC速度比HTTP快,底层都是TCP,HTTP消息往往比较臃肿,但是可以采用gzip压缩。
- 难度方面:RPC实现有点儿复杂,HTTP相对比较简单。
- 灵活性方面:HTTP更灵活,不需要关系实现的细节,可以跨平台,跨语言。
未来发展方向
- 微服务,强调独立,自治,灵活。RPC限制较多,因此微服务框架中,一般都会采用基于HTTP的rest风格服务。
相关文章:

SpringCloud Alibaba集成 Gateway(自定义负载均衡器)、Nacos(配置中心、注册中心)、Loadbalancer
要为未被某些网关路由谓词处理的请求提供相同的CORS配置,请将属性spring.cloud.gateway.globalcors.add-to-simple-url-handler-mapping设置为true。断言(Predicate):Java8中的断言函数,Spring Cloud Gateway中的断言函数输入类型是 Spring5.0框架中的ServerWebExchange。对于所有GET请求的路径,来自docs.spring.io的请求都将允许CORS请求。

一键部署 SpringCloud 微服务,这套流程值得学习一波儿!
一键部署 springcloud 微服务,需要用到 Jenkins K8S Docker等工具。本文使用jenkins部署,流程如下图开发者将代码push到git运维人员通过jenkins部署,自动到git上pull代码通过maven构建代码将maven构建后的jar打包成docker镜像 并 push docker镜像到docker registry通过k8s发起 发布/更新 服务 操作其中 2~5步骤都会在jenkins中进行操作。

一键部署 SpringCloud 微服务,这套流程值得学习一波儿!
一键部署 springcloud 微服务,需要用到 Jenkins K8S Docker等工具。本文使用jenkins部署,流程如下图开发者将代码push到git运维人员通过jenkins部署,自动到git上pull代码通过maven构建代码将maven构建后的jar打包成docker镜像 并 push docker镜像到docker registry通过k8s发起 发布/更新 服务 操作其中 2~5步骤都会在jenkins中进行操作。

Spring Boot应用程序如何配置 HTTPS 访问方式
在 Spring Boot 应用程序中配置 HTTPS 访问方式可以根据你是否拥有由受信任的证书颁发机构(CA)签发的证书来分为两种情况:使用自签名证书和使用 CA 签发的证书。

TCP怎么保证传输过程的可靠性?
校验和发送方在发送数据之前计算校验和,接收方收到数据后同样计算,如果不一致,那么传输有误确认应答,序列号TCP进行传输时数据都进行了编号,每次接收方返回ACK都有确认序列号。超时重试这里是引用连接管理流量控制阻塞控制..._tcp传输过程可靠性

websocket介绍并模拟股票数据推流
Websockt是一种网络通信协议,允许客户端和服务器双向通信。最大的特点就是允许服务器主动推送数据给客户端,比如股票数据在客户端实时更新,就能利用websocket。

Nginx实战 | 高性能HTTP和反向代理神器Nginx前世今生,以及它的“繁花之境”
Nginx 的历史可以追溯到 1990 年代末期,当时互联网开始迅速发展,传统的 HTTP 服务器如 Apache 开始显得力不从心,无法满足日益增长的访问量和并发请求。Nginx 的设计理念是追求极高的性能和稳定性,同时还具有较低的内存消耗和资源占用,这使得它能够处理大量并发请求,非常适合于需要处理高负载的服务器环境。通过这些测试和优化方法,你可以了解 Nginx 的性能瓶颈,并采取相应的措施来提高其性能。Nginx 的测试和优化可以通过多种方式进行,包括负载测试、性能测试、配置优化和代码级优化。

C++:stack、queue、priority_queue增删查改模拟实现、deque底层原理
一、C++stack的介绍和使用;二、C++queue的介绍和使用;3.1 deque的简单介绍(了解)、3.2 deque的缺陷、3.3 为什么选择deque作为stack和queue的底层默认容器四、priority_queue的介绍和实现4.1 priority_queue的介绍4.1 priority_queue的介绍增删查改模拟实现前言4.1.1 push()4.1.2 pop()4.3 top()、size()、empty()4.1 priority_queue(优先级队列)增删查

java中如何使用elasticsearch—RestClient操作文档(CRUD)
去数据库查询酒店数据,导入到hotel索引库,实现酒店数据的CRUD基本步骤如下。新建一个测试类,实现文档相关操作,并且完成JavaRestClient的初始化。方式一(全量更新):再次写入id一样的文档,就会删除旧文档,添加新文档。根据id查询到的文档数据是json,需要反序列化为java对象。(2)根据id查询数据库数据,并转换。方式二(局部更新):只更新部分字段。(1)创建文档对应实体。修改文档数据有两种方式。

Nodejs+Express搭建HTTPS服务
最近开发需要搭建一个https的服务,正好最近在用nodejs和express,于是乎想到就近就使用这两东西来搭建一个https的服务吧。这里搭建过程总共需要两步,第一步生成证书,第二步使用https模块启动服务。

零基础搭建本地Nextcloud私有云结合内网穿透实现远程访问
本文主要讲解如何搭建本地Nextcloud私有云结合内网穿透实现远程访问

gRPC三种流和消息格式
服务端实现protocol buffer定义的方法,客户端保留一个存根,提供服务端方法的抽象,客户端只需要调用存根中的方法,就可以远程调用服务端方法。客户端多个请求发给服务端,服务端发送一个响应给客户端,比如更新业务,客户端的读个请求发过来,服务端更新完返回一个成功的结果。通信时可以是一个请求,服务端多次响应,比如查询业务,服务端模糊匹配找到一次就返回客户端一次响应这样的多次响应。客户端发送,包含3个部分:请求头信息、长度前缀的消息、流结束标记。在写入消息前,先写入长度消息表明每条消息的大小。

spring cloud 整合Feign经行远程调用
使用Feign的步骤:① 引入依赖② 添加@EnableFeignClients注解③ 编写FeignClient接口④ 使用FeignClient中定义的方法代替RestTemplate类型作用说明修改日志级别包含四种不同的级别:NONE、BASIC、HEADERS、FULL响应结果的解析器http远程调用的结果做解析,例如解析json字符串为java对象请求参数编码将请求参数编码,便于通过http请求发送支持的注解格式默认是SpringMVC的注解失败重试机制。

Docker快速入门(docker加速,镜像,容器,数据卷常见命令操作整理)
可以简单地理解为每启动一个docker镜像就会占用计算机一个进程,这个进程和另外起的docker镜像的进程是相互独立的,以数据库为例,每个镜像都会copy一份数据库,在他所在的进程中.别的镜像在修改的时候也只能修改自己镜像中的数据库,相当于每个镜像都是一台小型的相互独立的计算机。Docker本质是将代码所需的环境依赖进行打包运行,而在Docker中最重要的是镜像和容器。容器就是包裹镜像的,将镜像启动起来,使得每个镜像之间都相互隔离,互不干扰。使用docker logs 容器名,查看容器的运行日志。

【HTTP协议】简述HTTP协议的概念和特点
HTTP(Hypertext Transfer Protocol)是一种用于在Web上进行数据通信的协议。它是基于客户端-服务器模型的,其中客户端发送请求,服务器返回响应。

零基础搭建本地Nextcloud私有云结合内网穿透实现远程访问
文章浏览阅读753次,点赞53次,收藏47次。本文主要讲解如何搭建本地Nextcloud私有云结合内网穿透实现远程访问

spring cloud Eureka注册中心和Nacos注册中心
文章浏览阅读103次。代码方式:在order-service中的OrderApplication类中,定义一个新的IRule:@Bean配置文件方式:在order-service的application.yml文件中,添加新的配置也可以修改规则:userservice: # 给某个微服务配置负载均衡规则,这里是userservice服务ribbon:NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡规则注意。

如何快速本地搭建悟空CRM结合内网穿透工具高效远程办公
如何快速本地搭建悟空CRM结合内网穿透工具高效远程办公。

深入详解高性能消息队列中间件 RabbitMQ
在进行系统设计的时候,各个模块、服务器之间为了实现数据的交互,通常是建立连接通过发送消息来进行。如果将他们一一建立连接,就会出现链路太多,每一条链路都必须感知对端等问题。此场景下消息将非常混乱,后期维护也将非常痛苦。