小新是也
小新是也
全部文章
造轮子系列之RPC
Redis(10)
归档
标签
去牛客网
登录
/
注册
小新是也的博客
全部文章
/ 造轮子系列之RPC
(共9篇)
从零开始实现简单 RPC 框架 1:RPC 框架的结构和设计
前言 RPC 框架是后端攻城狮永远都绕不开的知识点,目前业界比较知名有 Dubbo、Spring Cloud 等。很多人都停留在了只会用的阶段,作为程序猿,拥有好奇心深入学习,才能有效提高自己的竞争力。再进一层的同学,会去翻源码,看功能是如何实现的,这是很好的开始。看源码过一段时间容易忘记,我觉得...
2021-09-10
0
587
从零开始实现简单 RPC 框架 2:扩展利器 SPI
RPC 框架有很多可扩展的地方,如:序列化类型、压缩类型、负载均衡类型、注册中心类型等等。 假设框架提供的注册中心只有zookeeper,但是使用者想用Eureka,修改框架以支持使用者的需求显然不是好的做法。 最好的做法就是留下扩展点,让使用者可以不需要修改框架,就能自己去实现扩展。 JDK 原生...
2021-09-10
0
625
从零开始实现简单 RPC 框架 3:配置总线 URL
URL 的定义 URL 对于大部分程序猿来说都是很熟悉的,其全称是 Uniform Resource Locator (统一资源定位器)。它是互联网的统一资源定位标志,也就是指网络地址。 一个标准的 URL 格式可以包含如下的几个部分: protocol://username:password...
2021-09-10
0
723
从零开始实现简单 RPC 框架 4:注册中心
RPC 中服务消费端(Consumer) 需要请求服务提供方(Provider)的接口,必须要知道 Provider 的地址才能请求到。 那么,Consumer 要从哪里获取 Provider 的地址呢? 能不能 Consumer 自己配置 Provider 的地址? 这种方式理论上是可行的,不过...
2021-09-10
0
591
从零开始实现简单 RPC 框架 5:网络通信之序列化
我们在接下来会开始讲网络通信相关的内容了。既然是网络通信,那必然会涉及到序列化的相关技术。 下面是 ccx-rpc 序列化器的接口定义。 /** * 序列化器 */ public interface Serializer { /** * 序列化 * * @param objec...
2021-09-10
0
478
从零开始实现简单 RPC 框架 6:网络通信之 Netty
网络通信的开发,就涉及到一些开发框架:Java NIO、Netty、Mina 等等。 理论上来说,类似于序列化器,可以为其定义一套统一的接口,让不同类型的框架实现,事实上,Dubbo 就是这么干的。 但是,作为一个简单的 RPC 框架,ccx-rpc 就先不统一了,因为基本上网络框架是不会换的,而且...
2021-09-10
0
487
从零开始实现简单 RPC 框架 7:网络通信之自定义协议(粘包拆包、编解码)
当 RPC 框架使用 Netty 通信时,实际上是将数据转化成 ByteBuf 的方式进行传输。 那如何转化呢?可不可以把 请求参数 或者 响应结果 直接无脑序列化成 byte 数组发出去? 答:直接序列化传输是不行的,会出现粘包拆包的问题。 粘包拆包 什么是粘包拆包 RPC 通信使用 TPC...
2021-09-10
0
395
从零开始实现简单 RPC 框架 8:网络通信之 Request-Response 模型
Netty 在服务端与客户端的网络通信中,使用的是异步双向通信(双工)的方式,即客户端和服务端可以相互主动发请求给对方,发消息后不会同步等响应。这样就会有一下问题: 如何识别消息是请求还是响应? 请求如何正确对应到响应? 1. 如何识别消息是请求还是响应 为了识别消息类型是请求或者响应...
2021-09-10
0
653
从零开始实现简单 RPC 框架 9:网络通信之心跳与重连机制
一、心跳 什么是心跳 在 TPC 中,客户端和服务端建立连接之后,需要定期发送数据包,来通知对方自己还在线,以确保 TPC 连接的有效性。如果一个连接长时间没有心跳,需要及时断开,否则服务端会维护很多无用连接,浪费服务端的资源。 IdleStateHandler Netty 已经为我们提供了...
2021-09-10
0
481