GithubHelp home page GithubHelp logo

hiparker / lint-rpc-framework Goto Github PK

View Code? Open in Web Editor NEW
89.0 8.0 17.0 50 KB

一个轻量级Java RPC 框架, 底层采用Netty实现, 模拟Dubbo运行模式(闲来无事 练习一下)

License: Apache License 2.0

Java 100.00%
factory netty nio proxy rpc-framework spi

lint-rpc-framework's Introduction

Lint RPC Framework



AUR netty Stars Forks

关于

LintRPC是一个轻量级Java RPC 框架, 底层采用Netty实现, 模拟Dubbo运行模式(闲来无事 练习一下)

本质上就是代替完成网络请求,让程序调用接口如调用本地的一个Interface一样简单

地址

相关技术栈

名称 版本号
Netty版本 4.1.90.Final

启动顺序

  1. lint-rpc-demo-provide2 (提供 drink结果 和 drinkListAll)
  2. lint-rpc-demo-provide1 (提供 eat结果 ,同时调用provide2,进行组合结果)
  3. lint-rpc-demo-consumer (分别调用 provide1、provide2)

技术介绍

  1. lint-rpc-demo 为使用 lint-rpc框架做的demo,包含一个 consumer 两个provide
    • 其中 consumer 开启20个线程 去定时请求 2个 provide,其中一个provide调用了另外一个provide
  2. lint-rpc-spi 利用SPI技术 固定服务列表扩展模式
    • 先支持本地服务列表,后序可扩展成 nacos、zk等服务列表
  3. lint-rpc-support 为整个框架的核心包
    • 其工作的原理便是,使用jdk自身的proxy去动态代理 rpc接口,
    • 底层使用netty作为网络通信(懒得使用原生的nio网络模型了,太麻烦了 还需要处理一大堆东西)
    • 在netty channel 的 handler中,定义了 protocol 自定义协议,用于规定网络传输格式和为后序jdk序列化做足准备
    • 当provide收到请求后,通过序列化的结果,从本地spi库中查询本地服务,并通过反射进行invoke执行

相关技术点(读源码,你可以学习到)

1. 可扩展接口设计(类似与springboot的autoconfigure)
   SPI

2. 相关设计模式
   动态代理、策略模式、工厂模式、单例模式
   
3. 池化**

4. Java反射

5. 自定义消息协议 与 网络请求粘包拆包

6. 多线程与高并发与线程锁

RPC需要什么

想要实现一个基本的RPC框架,其实需要什么?

  1. 网络IO,BIO\NIO\AIO,Socket编程,HTTP通信,一个就行。
  2. 序列化,JDK序列化,JSON、Hessian、Kryo、ProtoBuffer、ProtoStuff、Fst知道一个就行。
  3. 反射,JDK或者Cglib的动态代理。

那一个优秀的RPC框架,还需要考虑什么问题?

  1. 一个服务可能有多个实例,你在调用时,要如何获取这些实例的地址?
  2. 服务注册中心多个实例,选哪个调用好?
  3. 负载均衡服务注册中心每次都查?
  4. 缓存相关客户端每次要等服务器返回结果?
  5. 异步调用服务是要升级的?
  6. 版本控制多个服务依赖,某个有问题?
  7. 熔断器某个服务出了问题怎么办?监控 ..

支持

谢谢您愿意支持开源

lint-rpc-framework's People

Contributors

hicarina avatar hiparker avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.