Giter VIP home page Giter VIP logo

sozu's People

Contributors

alkavan avatar ameliabradley avatar bheesham avatar blackyoup avatar bthuillier avatar cheesedosa avatar divarvel avatar florentindubois avatar fteychene avatar gaelreyrol avatar geal avatar guillaumeassier avatar hcaumeil avatar irevoire avatar jpds avatar keksoj avatar keruspe avatar mbstavola avatar messense avatar nicompte avatar notbad4u avatar obreidenich avatar pantsman0 avatar pims avatar roosmaa avatar shirshak55 avatar stevenleroux avatar tazou avatar waxzce avatar wonshtrum 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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 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

sozu's Issues

Ambiguous state management in `yxorp/src/state.rs`

In gitlab by @divarvel on Jun 1, 2016, 15:54

(see line 13, there is a 1 to 1 relationship between frontend (hostname * path begin) and app_id (whereas it should be one to many, so that indicates duplicate app_id), and a 1 to many relationship between frontend and instance (it should be between frontend and app_id).

The proxy should maintain a state for applications as well (sticky sessions, redirect to https, deployment in progress… )

Design a good benchmark

In gitlab by @Geal on Mar 9, 2016, 18:02

Current tests are done on a 512MB droplet from Digital Ocean, with HTTP requests generated by ab or wrk, from a Dedibox. The proxy is forwarding requests to the Clever Cloud frontend, with the hostname "http://wp-perf-test.cleverapps.io" or "http://rust.cleverapps.io".

Issues with this:

  • the wp-perf-test website is a Wordpress, so it has a very high latency by default
  • the rust website returns a very small response, it does not look like real traffic
  • ab is too limited
  • wrk does not give much indication of why some requests failed
  • the digital ocean droplet is too small

Ideally, a benchmark would compare to haproxy, with load balancing on multiple backends, and it would gradually increase the number of concurrent requests, until the proxy starts failing.
That benchmark would also record perf info, with sysdig or something else.

abstract TCP socket and TLS stream

In gitlab by @Geal on Jan 7, 2016, 16:43

HTTP and HTTPS proxies have a lot of code in common, but socket reads and writes, socket errors and the accept() behaviour are different.

They should be abstracted to allow HTTP or HTTPS connections to backend, independently from the frontend connection. accept() can stay proxy-specific

When a client request was handled, return data to the ServerConfiguration object

In gitlab by @Geal on Mar 30, 2016, 18:47

The Serverobject makes decisions based on what a Client(an active frontend connection with possibly a related backend connection) returns, like accepting reads or writes on which socket, or which socket should be closed.
That Server or the ServerConfiguration for the related proxy should accumulate metrics from the multiples Clients, like request handling latency

Reimplement buffer rewriting for headers

In gitlab by @Geal on Apr 11, 2016, 19:11

Right now, the additional headers are inserted right into the input buffer, and if it is nearly full, we might not be able to insert them.

A better solution (the one implemented in HAProxy, I think) would be to avoid editing the buffer, and instead remember which slices of the input buffer to send (if some data was deleted), and which external slices (header rewriting, additional header) should be inserted.

Then, in the writable and back_writable, instead of passing just one buffer, the proxy would go through a list of slices to write to the socket. Some would advance the input buffer position, some would not.

This solution requires the parser to send back a list of subslices, and the proxy to track the end of headers (to insert headers at the right position).

Refactor TCP proxy

In gitlab by @Geal on Mar 9, 2016, 16:32

it does not use network::buffer::Buffer and the splicing part does not compile

Implement Forwarded header parsing and writing according to specification

In gitlab by @Geal on Apr 11, 2016, 19:14

The current solution is very simple: generate a header Forwarded: for=client_ip;by=front_ip" and delete any Forwarded, X-Forwarded-For, X-Forwarded-Proto, X-Forwarded-Port headers provided by the client.

A more correct solution would, according to the specification, parse any of those headers in a structure assembling forwarding info, check the list of forwarded addresses (with the by element as well), delete the incoming headers, then write out a correct Forwarded header

Allow building without sslv3 support

In gitlab by @Keruspe on Mar 1, 2016, 14:22

Currently, openssl is unconditionally built with sslv3 support (features = ["tlsv1_2", "tlsv1_1", "sslv3"]).

This makes the build fail with libressl which onlysupports TLS

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.