Coder Social home page Coder Social logo

gorpc's Introduction

gorpc

A simple, easy to use, high performance, pluggable micro services framework

Installation

Before installing gorpc, you need to install go and configure the go environment

In gopath mode, you simply execute the following command to install

go get -u -v github.com/lubanproj/gorpc

In the go modules mode, you simply import the package "github.com/lubanproj/gorpc", which automatically downloads the dependency when you execute the go [build|run|test]

Quick Start

git clone https://github.com/lubanproj/gorpc.git
cd gorpc/examples/helloworld
# start server
go run server/server.go
# start client,start another terminal and execute
go run client/client.go

Example

You only need three steps to complete a service call

  1. define a service
  2. use a server to publish a service
  3. use a client to initiate a service call

1. define a service

type Service struct {

}

type HelloRequest struct {
	Msg string
}

type HelloReply struct {
	Msg string
}

func (s *Service) SayHello(ctx context.Context, req *HelloRequest) (*HelloReply, error) {
	rsp := &HelloReply{
		Msg : "world",
	}

	return rsp, nil
}

2. use a server to publish a service

func main() {
	opts := []gorpc.ServerOption{
		gorpc.WithAddress("127.0.0.1:8000"),
		gorpc.WithNetwork("tcp"),
		gorpc.WithSerializationType("msgpack"),
		gorpc.WithTimeout(time.Millisecond * 2000),
	}
	s := gorpc.NewServer(opts ...)
	if err := s.RegisterService("/helloworld.Greeter", new(helloworld.Service)); err != nil {
		panic(err)
	}
	s.Serve()
}

3. use a client to initiate a service call

func main() {
	opts := []client.Option {
		client.WithTarget("127.0.0.1:8000"),
		client.WithNetwork("tcp"),
		client.WithTimeout(2000 * time.Millisecond),
		client.WithSerializationType("msgpack"),
	}
	c := client.DefaultClient
	req := &helloworld.HelloRequest{
		Msg: "hello",
	}
	rsp := &helloworld.HelloReply{}
	err := c.Call(context.Background(), "/helloworld.Greeter/SayHello", req, rsp, opts ...)
	fmt.Println(rsp.Msg, err)
}

See helloworld for more details

Documentation

Features

  • High performance, performance far exceeds that of the grpc, refer to Performance
  • Support reflection, code generation two ways to call
  • All plug-ins are configurable
  • Multi-protocol support, currently supported tcp, extensible and customizable
  • Support interceptor, extensible and customizable
  • Support connection pooling, extensible and customizable
  • Support service discovery, provides the consul plug-in implementation, extensible and customizable
  • Support load balancing, provides the randomround robinweighted round robinconsistent hash implementation, extensible and customizable
  • Support opentracing, provides the jaeger plug-in implementation, extensible and customizable
  • Support for a variety of serialization methods, the default reflection calls using protobuf serialization, code generation calls using msgpack serialization,support custom serialization
  • More features are being supported ......

Performance

Environment :

  • CPU : Intel(R) Xeon(R) Gold 61xx CPU @2.44GHz
  • CPU cores : 8
  • Memory : 16G
  • Disk : 540G

Result : The results were performed using gorpc-benchmark ,which performed three times to get the maximum

gorpc :

git clone https://github.com/lubanproj/gorpc-benchmark.git
cd gorpc-benchmark
# start gorpc server
go run server.go
# start gorpc-benchmark client,start another terminal and execute
go run client.go -concurrency=100 -total=1000000

The performance test results are as follows :

> go run client.go -concurrency=100 -total=1000000
2020/02/29 15:56:57 client.go:71: [INFO] took 5214 ms for 1000000 requests
2020/02/29 15:56:57 client.go:72: [INFO] sent     requests      : 1000000
2020/02/29 15:56:57 client.go:73: [INFO] received requests      : 1000000
2020/02/29 15:56:57 client.go:74: [INFO] received requests succ : 1000000
2020/02/29 15:56:57 client.go:75: [INFO] received requests fail : 0
2020/02/29 15:56:57 client.go:76: [INFO] throughput  (TPS)      : 191791

grpc :

Test grpc with the same machine :

git clone https://github.com/lubanproj/gorpc-benchmark.git
cd gorpc-benchmark/grpc
# run gorpc server
go run server.go
# run gorpc-benchmark client, start another terminal and execute 
go run client.go -concurrency=100 -total=1000000

The performance test results are as follows :

> go run client.go -concurrency=100 -total=1000000
2020/02/29 15:46:14 client.go:77: [INFO] took 17169 ms for 1000000 requests
2020/02/29 15:46:14 client.go:78: [INFO] sent     requests      : 1000000
2020/02/29 15:46:14 client.go:79: [INFO] received requests      : 1000000
2020/02/29 15:46:14 client.go:80: [INFO] received requests succ : 1000000
2020/02/29 15:46:14 client.go:81: [INFO] received requests fail : 0
2020/02/29 15:46:14 client.go:82: [INFO] throughput  (TPS)      : 58244

Contributing

Contributors

How to contribute?

refer to Contributing

gorpc's People

Contributors

lubanproj avatar

Watchers

James Cloos 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.