Giter Site home page Giter Site logo

Comments (4)

asim avatar asim commented on May 5, 2024

This is a bit of a crude example of overloading a server to a point that the host itself cannot provide the resources required to serve the request. If I take the same example and apply it against a basic net/http server it will yield the same result.

Here's a gist https://gist.github.com/asim/11aa2e31ddece57b41bf. And the result:

call err:  Get http://localhost:9099: dial tcp [::1]:9099: socket: too many open files
2016/03/19 10:55:36 http: Accept error: accept tcp [::]:9099: accept: too many open files; retrying in 5ms
call err:  Get http://localhost:9099: EOF
2016/03/19 10:55:36 http: Accept error: accept tcp [::]:9099: accept: too many open files; retrying in 5ms
call err:  Get http://localhost:9099: EOF
2016/03/19 10:55:36 http: Accept error: accept tcp [::]:9099: accept: too many open files; retrying in 10ms
call err:  Get http://localhost:9099: EOF
2016/03/19 10:55:36 http: Accept error: accept tcp [::]:9099: accept: too many open files; retrying in 20ms
call err:  Get http://localhost:9099: EOF

I think its probably first important to determine an appropriate benchmarking test to gauge current performance, then target the bottlenecks. The above is not a test of a "real production system".

from go-micro.

henrypfhu avatar henrypfhu commented on May 5, 2024

@asim, thanks for your quick response. Just as you mentioned, even net/http client request without client connection pool will cause the issue.

My point is that go-micro rpc framework will be more robust and performance boosting to reuse the established long-live connection.

Http2 protocol can be used to keep long-live connection between go-micro rpc client and server. Maybe go-micro can rely on golang.com/x/net/http2/client_conn_pool.go to provide keep-alive long connection feature to boost the performance.

from go-micro.

asim avatar asim commented on May 5, 2024

I will look into the connection pooling however the thing to remember is that go-micro is a pluggable library made up of a number of components. A client Call will use the client, selector, registry and transport. The server will also make use of the transport. We provide sane defaults but if you want to build performance optimised plugins for each interface you can do this. You're not limited to using the defaults within go-micro. Example plugins are here https://github.com/micro/go-plugins.

Connection pooling is potentially something solved at the transport layer. Either by implementing a new http2 plugin or by adding a connection pooling Option to the existing transport.

from go-micro.

asim avatar asim commented on May 5, 2024

First steps. Benchmarking the transport https://github.com/micro/go-micro/blob/master/transport/http/http_test.go

go test -bench=. -benchtime=10s
testing: warning: no tests to run
PASS
BenchmarkTransport1-4      50000        277117 ns/op
BenchmarkTransport8-4     100000        190061 ns/op
BenchmarkTransport16-4    100000        186685 ns/op
BenchmarkTransport64-4    100000        194432 ns/op
BenchmarkTransport128-4   100000        251565 ns/op
ok      github.com/micro/go-micro/transport/http    107.467s

This is on my horrific 1.7 GHz Intel Core i5 2011 macbook air.

from go-micro.

Related Issues (20)

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.