GithubHelp home page GithubHelp logo

hiparker / lint-rpc-framework Goto Github PK

View Code? Open in Web Editor NEW
88.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. 熔断器某个服务出了问题怎么办?监控 ..

支持

谢谢您愿意支持开源

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.