Giter VIP home page Giter VIP logo

littlerpc's Introduction

LittleRpc Go Report Card Ci codecov Go Version GitHub

高性能、轻量实现、少依赖、跨语言的玩具级RPC实现

Features

  • 可替换的底层传输协议
    • tcp
    • webSocket
    • other
  • 可替换的序列化/反序列化组件
    • json
    • other
  • 可替换的压缩算法
    • gzip
  • 调用描述接口
    • Sync
    • Async
  • 负载均衡
    • 地址列表解析器
    • 轮询
    • 一致性Hash(问题很大,需要优化)
  • 客户端的实现
    • go
    • java
    • javascript
  • 完善的服务治理拓展API
    • 熔断
    • 限流
    • 网关
    • 注册中心
  • 完善可用的代码生成器
    • 生成async api
    • 生成sync api
  • 完善的示例

Benchmark

基准测试的指标来自rpcx-benchmark,以下结果仅供参考,不同平台的结果可能会不一致,想要清晰的测量结果之前最好自己动手试一试

Platfrom

Server
CPU 		: AMD EPYC 7T83 16Core
Memory  	: 16GB * 4 ECC
Network 	: 7.5G
NumaNode	: 0~0

Client
CPU 		: AMD EPYC 7T83 16Core
Memory  	: 16GB * 4 ECC
Network 	: 7.5G
NumaNode	: 0~0

在测试中, client/server分别在一台机器上运行

Mock 10us result

Install

go get github.com/nyan233/littlerpc

Process-Defined

littlerpc中一个合法的过程是如下那样,必须有一个接收器,参数可以是指针类型或者非指针类型,返回结果集允许指针/非指针类型,返回值列表中最后的值类型必须是error

Type的约束, 如上所说, 参数的类型可以是指针/非指针类型, 但是指针只不允许多重指针的出现, 另外参数不能为接口类型, 不管它是空接口还是非空接口, 除了LittleRpc能够理解的context.Context&stream.Stream&error

type Type interface {
    Pointer(NoInterface) | NoPointer(NoInterface)
}
func(receiver) FuncName(...Type) (...Type,error)

littlerpc并不规定合法的过程必须要传递参数,以下的声明也是合法的

func(receiver) FuncName() (...Type,error)

littlerpc也不规定,一定要返回一个值,但是error必须在返回值列表中被声明,以下的声明也是合法的

func(receiver) FuncName() error

关于context.Context&stream.Stream, 输入参数可以有context.Context也可以没有stream.Stream同理, 如果有的话context.Context必须被放置在第一个参数的位置, 当它们同时存在时, stream.Stream必须被放置在第二个位置, 以下列出了参数的几种排列情况, ...表示参数列表的长度为0...N

  •   func(receiver Type) FuncName(context.Context,...Type) (...result,error)
  •   func(receiver Type) FuncName(context.Context,stream.Stream,...Type) (...Type,error)
  •   func(receiver Type) FuncName(stream.Stream,...Type) (...Type,error)
  •   func(receiver Type) FuncName(...Type) (...Type,error)

LittleRpc-Utils

Code-Generator

在编写每个客户端的代理对象时有很多繁琐的动作需要人工去完成,所以为了减轻这些不必要的工作,我提供了一个简易实现的代码生成器,自动生成代理对象和对应的过程。

代理对象生成器只会识别接收器类型为指针、拥有可导出名字(首字母大写)的过程,其它类型的过程均不会被生成器识别

Install(安装)

go install github.com/nyan233/littlerpc/cmd/pxtor

LittleRpc-Example中也使用了pxtor,这是其中的一个例子: proxy

LittleRpc-Curl

这是一个通过使用LittleRpc默认注册的reflection service来提供调试和调用测试的工具

Install(安装)

go install github.com/nyan233/littlerpc/cmd/lrpcurl

Example

Quick-Start

Transport

  • TCP
  • WebSocket

Custom

  • Codec
  • Encoder

Balancer & Resolver

  • Todo

Thanks

感谢,以下这些项目给本项目的一些设计带来了想法和灵感

Lisence

The LittleRpc Use Mit licensed. More is See Lisence

littlerpc's People

Contributors

zbh255 avatar

Watchers

 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.