![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
分布式服务
xiaofang233
开源互联网技术追随者、狂热者。
展开
-
深入理解RPC—健康检测
为什么要有健康检测?因为有了集群,所以每次发请求前,RPC 框架会根据路由和负载均衡算法选择一个具体的IP 地址。为了保证请求成功,我们就需要确保每次选择出来的 IP 对应的连接是健康的,这个逻辑你应该理解。但你也知道,调用方跟服务集群节点之间的网络状况是瞬息万变的,两者之间可能会出现闪断或者网络设备损坏等情况,那怎么保证选择出来的连接一定是可用的呢?从我的角度看,终极的解决方案是让调用方实时感知到节点的状态变化,这样他们才能做出正确的选择。这个道理像我们开车一样,车有各种各样的零件,我们不可能在开车原创 2020-09-24 16:17:34 · 1977 阅读 · 1 评论 -
深入理解RPC—架构设计
RPC 架构说起架构设计,我相信你一定不陌生。我理解的架构设计呢,就是从顶层角度出发,厘清各模块组件之间数据交互的流程,让我们对系统有一个整体的宏观认识。我们先看看 RPC 里面都有哪些功能模块。我们讲过,RPC 本质上就是一个远程调用,那肯定就需要通过网络来传输数据。虽然传输协议可以有多种选择,但考虑到可靠性的话,我们一般默认采用 TCP 协议。为了屏蔽网络传输的复杂性,我们需要封装一个单独的数据传输模块用来收发二进制数据,这个单独模块我们可以叫做传输模块。用户请求的时候是基于方法调用,方法出入参数原创 2020-09-21 21:18:23 · 1002 阅读 · 0 评论 -
深入理解RPC—动态代理
动态代理如果我问你,你知道动态代理吗? 你可能会如数家珍般地告诉我动态代理的作用以及好处。那我现在接着问你,你在项目中用过动态代理吗?这时候可能有些人就会犹豫了。那我再换一个方式问你,你在项目中有实现过统一拦截的功能吗?比如授权认证、性能统计等等。你可能立马就会想到,我实现过呀,并且我知道可以用 Spring 的AOP 功能来实现。没错,进一步再想,在 Spring AOP 里面我们是怎么实现统一拦截的效果呢?并且是在我们不需要改动原有代码的前提下,还能实现非业务逻辑跟业务逻辑的解耦。这里的核心就是采用原创 2020-09-21 13:04:57 · 2473 阅读 · 2 评论 -
深入理解RPC—网络IO
网络通信和RPC首先我们知道RPC 是解决进程间通信的一种方式。一次 RPC 调用,本质就是服务消费者与服务提供者间的一次网络信息交换的过程。服务调用者通过网络 IO 发送一条请求消息,服务提供者接收并解析,处理完相关的业务逻辑之后,再发送一条响应消息给服务调用者,服务调用者接收并解析响应消息,处理完相关的响应逻辑,一次 RPC 调用便结束了。可以说,网络通信是整个 RPC 调用流程的基础。常见的网络 IO 模型那说到网络通信,就不得不提一下网络 IO 模型。为什么要讲网络 IO 模型呢?因为所谓的两原创 2020-09-20 02:47:05 · 1453 阅读 · 0 评论 -
深入理解RPC—序列化
为什么需要序列化?首先,我们得知道什么是序列化与反序列化。我们先回顾下RPC通信的流程:网络传输的数据必须是二进制数据,但调用方请求的出入参数都是对象。对象是不能直接在网络中传输的,所以我们需要提前把它转成可传输的二进制,并且要求转换算法是可逆的,这个过程我们一般叫做“序列化”。这时,服务提供方就可以正确地从二进制数据中分割出不同的请求,同时根据请求类型和序列化类型,把二进制的消息体逆向还原成请求对象,这个过程我们称之为“反序列化”。这两个过程如下图所示:总结来说,序列化就是将对象转换成二进原创 2020-09-18 16:38:22 · 6115 阅读 · 3 评论 -
深入理解RPC—协议
协议一提到协议,你最先想到的可能是 TCP 协议、UDP 协议等等,并且这些网络传输协议的实现有点晦涩难懂。虽然在 RPC 中我们也会用到这些协议,但这些协议更多的是对我们上层应用是透明的,我们 RPC 在使用过程中并不太需要关注他们的细节。那RPC 协议到底是什么呢?可能我举个例子,你立马就明白了。HTTP 协议是不是很熟悉(本博客里面所说的 HTTP 默认都是 1.X)? 这应该是我们日常工作中用得最频繁的协议了,每天打开浏览器浏览的网页就是使用的 HTTP 协议。那 HTTP 协议跟 RPC 协议原创 2020-09-18 14:04:31 · 2589 阅读 · 1 评论 -
深入理解RPC—核心原理
什么是 RPC?RPC 的全称是 Remote Procedure Call,即远程过程调用。简单解读字面上的意思,远程肯定是指要跨机器而非本机,所以需要用到网络编程才能实现,但是不是只要通过网络通信访问到另一台机器的应用程序,就可以称之为 RPC 调用了?显然并不够。我理解的 RPC 是帮助我们屏蔽网络编程细节,实现调用远程方法就跟调用本地一样的体验,我们不需要因为这个方法是远程调用就需要编写很多与业务无关的代码。这就好比建在小河上的桥一样连接着河的两岸,如果没有小桥,我们需要通过划船、绕道等其他方原创 2020-09-17 11:31:20 · 1848 阅读 · 2 评论