从零开始写分布式RPC框架
文章平均质量分 91
本专栏将介绍如何从零开始写一个基于Netty,Zookeeper和SpringBoot的RPC框架,并将其升级、优化,由此加深对常见RPC框架的理解并掌握相关技术。
if200
开发
展开
-
从零写分布式RPC框架 系列 2.0 (3)RPC-Server和RPC-Client模块改造
2.0版本RPC-Server改动不大,主要变化在于RPC-Client使用了服务地址缓存,并引入监控机制,第一时间获取zk集群中服务地址信息变化并刷新本地缓存。另外,RPC-Client还使用了RpcClientProperties开放对负载均衡策略和序列化策略的选择。系列文章:专栏:从零开始写分布式RPC框架手写通用类型负载均衡路由引擎(含随机、轮询、哈希等及其带权形式)实现 序列化引...原创 2018-11-23 16:27:45 · 1360 阅读 · 0 评论 -
从零写分布式RPC框架 系列 2.0 (2)RPC-Common模块设计实现
RPC-Common模块相对于1.0版本复杂了很多,最主要的变化在于将 Rpc的Netty处理器从RPC-Server和RPC-Client收回。1.0 版本的设计思路是尽可能减少冗余依赖,所以RPC-Common一般只放通用的功能。现在则是尽可能都放在RPC-Common模块,以方便工程升级复杂化后的统一协调管理。以后功能将集中在一个模块下(名字不一定还是RPC-Common),RPC-Serv...原创 2018-11-23 14:16:43 · 547 阅读 · 0 评论 -
从零写分布式RPC框架 系列 2.0 (1)架构升级
针对1.0版本的性能问题,本版本做了从服务地址列表缓存等方面做了优化处理,并加入负载均衡引擎、序列化引擎、服务端限流等新功能,并对通信模型进行改造,使其支持新特性、避免粘包半包问题并对后续升级改造留下支持空间。具体可见 项目GitHub地址 。本文将介绍 2.0 版本的逻辑架构和模型设计,部分内容在 从零写分布式RPC框架 系列 1.0 (1)架构设计 已有说明,此处不再赘述。0 版本说明增...原创 2018-11-23 10:40:54 · 541 阅读 · 0 评论 -
实现 序列化引擎(支持 JDK默认、Hessian、Json、Protostuff、Xml、Avro、ProtocolBuffer、Thrift等序列化方式)
本文将实现一个包含JDK默认、Hessian、Json、Protostuff、Xml、Avro、ProtocolBuffer、Thrift等序列化方式的序列化引擎。用户可以提供使用 SerializerEngine 方便快捷地切换序列化方法实现。文章目录一 使用效果二 总体结构1 结构图2 组件介绍序列化方法分类序列化方法场景推荐3 相互关系三 结构实现1 ISerializer2 Serial...原创 2018-11-18 16:37:13 · 816 阅读 · 0 评论 -
手写通用类型负载均衡路由引擎(含随机、轮询、哈希等及其带权形式)
本文记录了通用类型负载均衡路由引擎(工厂)的实现过程和思路。通过路由引擎获取指定枚举类型的负载均衡器,降低了代码耦合,规范了各个负载均衡器的使用,减少出错的可能,并简化了其对应带权负载均衡的实现(提供默认实现),而无需另外编写和集成。文章目录一 使用效果二 总体结构1 结构图2 组件介绍3 相互关系三 结构实现1 RouteStrategy2 WeightGetAble3 WeightUtil4...原创 2018-11-15 20:34:31 · 817 阅读 · 0 评论 -
使用gpg插件发布jar包到Maven中央仓库 完整实践
本文记录了在maven环境下使用gpg插件将 jar 包部署到中央仓库的完整实践过程。相对于网上其他教程使用oss-parent作为父工程的方法,这种方法入侵度低,自由度高,也是官方推荐使用的。实践过程解决了gpg验证以及javadoc注解不规范的问题。文章目录先行知识1. 项目基础配置2. Maven发布相关网址一 注册并提交工单(register sonatype)二 使用gpg生成密钥三 ...原创 2018-11-03 18:55:51 · 6561 阅读 · 6 评论 -
从零写分布式RPC框架 系列 1.0 (5)整合测试
本篇将对前面几篇文章作整合处理,使用spring-boot-starter的形式进行发布。原创 2018-11-08 18:05:26 · 430 阅读 · 0 评论 -
从零写分布式RPC框架 系列 1.0 (4)RPC-Client模块设计实现
RPC-Client模块负责创建 动态代理对象 供 服务消费者 使用,而动态代理对象的方法执行则是通过RPC调用RPC-Server的服务实现。即RPC-Client屏蔽了底层的通信过程,使得服务消费者可以基于接口透明使用服务提供者的服务。一 介绍1 整体结构2 模块介绍整体结构如下:RpcClientRPC-Client模块核心类,也是服务消费者会直接使用到的类。该类负责根据传入...原创 2018-11-08 14:46:48 · 525 阅读 · 0 评论 -
从零写分布式RPC框架 系列 1.0 (3)RPC-Server模块设计实现
RPC-Server模块负责(1)将@RpcService注解标记的服务和自身信息注册到ZK集群,(2)对外提供RPC服务实现,处理来自RPC-Client的请求。该模块整体的核心类为 RpcServer ,而真正处理请求的核心类是 RpcServerHandler 。另外还有一个 ZKServiceRegistry 负责和 ZK集群交互。一 介绍1 整体结构2 模块介绍注意,因为最终是...原创 2018-11-07 21:20:32 · 528 阅读 · 0 评论 -
从零写分布式RPC框架 系列 1.0 (2)RPC-Common模块设计实现
RPC-Common模块提供RPC-Server和RPC-Client的通用对象,封装统一规则,使RPC Server和RPC Client 可以基于同一协议通信。主要包含底层通信的Netty所需的编码解码器(RpcEncoder,RpcDecoder),实现自定义协议的传输对象(RpcRequest、RpcResponse)以及编码解码器对Java对象序列化(反序列化)使用的工具 ProtoSe...原创 2018-11-07 13:04:59 · 500 阅读 · 1 评论 -
从零写分布式RPC框架 系列 1.0 (1)架构设计
本系列文章的目的是搭建出一个基于Netty,Zookeeper和SpringBoot的简易分布式RPC框架,并且发布到Maven中央仓库以 spring-boot-starter 的形式对外提供开箱即用的服务。1.0 版本使用 protobuf 来做序列化,最终的使用形式比较接近于 Dubbo 。最终效果可见:https://github.com/linshenkx/rpc-netty-sprin...原创 2018-11-06 12:40:02 · 811 阅读 · 1 评论