Skip to content

yifanzheng/light-rpc

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

31 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Light RPC

light-rpc 是一个基于 Netty 实现的轻量级 RPC 框架。个人进行 RPC 和 Netty 学习时的实践项目。

主要借鉴了国内两款优秀的 PRC 框架:DubboMotan

架构

Architecture

特性

  • 基于 Netty(NIO) 实现网络传输;
  • 使用 Zookeeper 实现注册中心;
  • 四种序列化方式:Hessian2、JSON、Kryo、Protobuf;
  • 三种负载均衡算法:随机算法、(加权)轮询算法、一致性哈希算法;
  • 三种数据压缩算法:Gzip、Bzip2、Snappy;

传输协议设计

考虑到 TCP 沾包问题,使用定长头+字节数组作为自定义编码协议,使用 Netty 提供的 LengthFieldBasedFrameDecoder 类作为解码器。

      0     1     2     3      4        5        6        7         8   9   10   11    12    13    14   15
   +-----+-----+-----+-----+-------+--------+-------+-------------+---+---+----+----+-----+-----+-----+----+
   |   magic   number      |version|compress| codec | messageType |   messageId     |     dataLength       |
   +-----------------------+--------+---------------------+-----------+-----------+-----------+------------+
   |                                                                                                       |
   |                                         data                                                          |
   |                                                                                                       |
   |                                        ... ...                                                        |
   +-------------------------------------------------------------------------------------------------------+
 4Byte magic number(魔法数)  1Byte version(版本)     1Byte compress(压缩类型)  1Byte codec(序列化类型)
 1Byte messageType(消息类型) 4Byte messageId(消息Id) 4Byte dataLength(消息长度)data(object类型数据)

关于 LengthFieldBasedFrameDecoder 的了解可见:https://www.cnblogs.com/java-chen-hao/p/11571229.html

About

使用 netty 实现的轻量级 rpc 框架

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages