Skip to content

Release 1.0.0

Latest
Compare
Choose a tag to compare
@FlorentinDUBOIS FlorentinDUBOIS released this 16 Apr 08:24
· 5 commits to main since this release
17e1148

This is the first release of Sōzu which is a huge steps since the beginning of the project.
We would like to thanks every people involved in the development of Sōzu.
The next steps is to implements h2(c) on top of kawa with a rework of session to be able to use http 1.x clients with h2 backends and h2 clients with h2 backends, h2 clients with http 1.x backends.

🌟 Features

  • This release is the first one that use protobuf-everywhere. It means that we are moving out from the old exchange model for sockets (which are data exchanges between main process and workers processes and also main process and control plane process) that use Rust structures that we serialize into json to structures described in protobuf that generate Rust source code and then communicate with binary format. Besides, this work also have some nice side-effects on fork when creating new workers (due to a self-healing or at start) which allow to reduce the time to configure a worker by around 50%. It also introduces a new way to emit access logs in a binary way, see [ dfacdb7 ], [ a6ffebe ], [ fb11245 ], [ 6daf43c ], [ 8e81a02 ], [ 24a941b ], [ 6d160b4 ], [ e382a1c ], [ 4f2d760 ], [ 6d43eb1 ] and [ 5852c6b ].
  • We have reworked emitted logs and access logs format, if you are tools that parse them, you have to take a look at the new one. Besides, it will be easier to parse. Furthermore, we have added color on logs to improve readability, see [ 0885863 ], [ d3eeddc ], [ 3bb3997 ] and [ 5f55561 ].
  • We have bump the minimum Rust supported version to v1.74.0, see [ 2c4363d ], [ 96f5329 ] and [ e6bcfe0 ].
  • We have introduce a way to define custom http response for a wide range of status code, see 3f0bfa1, 4923153, b9df0c1, ee2430f, 3030944, 6023216, 55242ba, 55242ba, 8faa16c, a5058c2, fb6aad9 and a2236d1.
  • We also fix a bug that could occur on some streaming https requests with tcp-keepalive when going through multiple Sōzu which does not flush correctly the ending chunk of data when calling rustls::write_vectored, see d83f399.
  • We also change how works timeout on frontends as it is now closed by the backend, once we have received a first chunk of data, see 6114e17.

🚀 Performance

  • Thanks to the work achieved on Rustls (v0.23.0) with the help of maintainers (a huge thanks to them ❤️), we have gain between 10% and 20% performance on https requests depending of the workload, see [ 7fa680d ].

⛑️ Fixed

  • We have fixed a bug that occurs during http request when doing streaming and tcp keep-alive which prevent to send the close-delimiter on response, see [ 59c0615 ].
  • We have fix a few bugs on certificate replacement and improve the resolution of certificates, see [ 6aa45b9 ].
  • We have fix a bug that involved timeout on frontend sockets which did not take the given value, see [ d20e759 ].

✍️ Changed

  • We have work on errors to have a better context when something happens, see [ ba8b51a ], [ 629551f ] and [ 1c90c04 ].

📚 Documentation

  • We have added some documentation about logs and access logs, see [ d44b227 ] and [ 7241c0e ].
  • We have reworked or improved examples, see [ 31bc55e ] and [ 95624e6 ].
  • We have added some documentation of using Sōzu with firewalld (thanks @obreidenich), see [ 4cba552 ].
  • We have setup a github continuous integration to provides and document a way to benchmark Sōzu (values on the ci are not reliable), see [ 8df9ba5 ].

Changelog

🚀 Performance

  • 7fa680d ] update dependencies, notably rustls [Emmanuel Bosquet] (2024-03-11)

🌟 Features

  • 3f0bfa1 ] Dynamic automatic answers system [Eloi DEMOLIS] (2024-04-05)
  • 4923153 ] Unify template creation [Eloi DEMOLIS] (2024-04-05)
  • b9df0c1 ] add example 404 and 508 errors [Emmanuel Bosquet] (2024-04-05)
  • ee2430f ] make Http[s]ListenerConfig::http_answers optional [Emmanuel Bosquet] (2024-04-05)
  • 3030944 ] Minor changes [Eloi DEMOLIS] (2024-04-05)
  • 6023216 ] create protobuf type CustomHttpAnswers [Emmanuel Bosquet] (2024-04-05)
  • 55242ba ] rename types [Emmanuel Bosquet] (2024-04-05)
  • 8faa16c ] Restore context in logs by moving the fields in HttpContext [Eloi DEMOLIS] (2024-04-05)
  • a5058c2 ] remove 404 and 503 files [Emmanuel Bosquet] (2024-04-05)
  • fb6aad9 ] Move test_https_redirect to e2e, use immutable automatic answers for e2e [Eloi DEMOLIS] (2024-04-05)
  • a2236d1 ] More template variables [Eloi DEMOLIS] (2024-04-05)

➕ Added

  • 90ee05c ] benchmark info logs in the CI [Emmanuel Bosquet] (2024-03-15)
  • a6fde1e ] distinct PEM and X509 variants for CertificateError [Emmanuel Bosquet] (2024-03-15)
  • e793ec6 ] Edit access logs ASCII format, put logs-cache under feature [Eloi DEMOLIS] (2024-03-11)
  • 85e2653 ] implement From for Ulid [Emmanuel Bosquet] (2024-03-11)
  • 756b78b ] create type WebSocketContext [Emmanuel Bosquet] (2024-03-11)
  • 0885863 ] Logger refactor: better structured logs and colored logs [Eloi DEMOLIS] (2024-03-11)
  • dfacdb7 ] protobuf access logs [Emmanuel Bosquet] (2024-03-11)
  • 7c25133 ] create helper function server::worker_response_error [Emmanuel Bosquet] (2024-02-23)
  • a6ffebe ] binary and delimited serialization of prost messages in channels [Emmanuel Bosquet] (2024-02-02)
  • 62f3db3 ] add fields and defaults to ServerConfig [Emmanuel Bosquet] (2024-02-02)
  • fb11245 ] create protobuf type SocketAddress, use everywhere [Emmanuel Bosquet] (2024-02-02)
  • f9ac920 ] add size to ChannelError::BufferFull [Emmanuel Bosquet] (2024-02-02)

➖ Removed

  • c677b10 ] remove duplicate code of HttpsProxy creation [Emmanuel Bosquet] (2024-02-26)
  • 39af839 ] remove useless Serde error in channel module [Emmanuel Bosquet] (2024-02-02)

✍️ Changed

  • 6114e17 ] Move timeout responsibility from front to back only when first bytes are received from the back [Eloi DEMOLIS] (2024-03-20)
  • 0d7f7d6 ] Release v1.0.0-rc.1 [Florentin Dubois] (2024-03-19)
  • bcef3b8 ] chore: update dependencies [Florentin Dubois] (2024-03-14)
  • a806fb6 ] sort cluster information alphabetically when displaying [Emmanuel Bosquet] (2024-03-12)
  • 6daf43c ] write two empty bytes after each protobuf access log [Emmanuel Bosquet] (2024-03-11)
  • 8e81a02 ] rename ProtobufAccessLog::error to 'message' [Emmanuel Bosquet] (2024-03-11)
  • b6ca85b ] apply clippy suggestions for nightly [Emmanuel Bosquet] (2024-03-11)
  • 618bed0 ] apply review: cosmetic changes [Emmanuel Bosquet] (2024-03-11)
  • 182b291 ] Use error_access in lib, add log_access to make it easier [Eloi DEMOLIS] (2024-03-11)
  • 5f55561 ] rename log_acce.0.0 - 2024-04-16ss_* variables to access_logs_* [Emmanuel Bosquet] (2024-03-11)
  • d3eeddc ] Small changes mainly relative to logging [Eloi DEMOLIS] (2024-03-11)
  • 3bb3997 ] Move all logging primitives in their own module [Eloi DEMOLIS] (2024-03-11)
  • e6bcfe0 ] set dependency resolver to 2 [Emmanuel Bosquet] (2024-03-11)
  • 96f5329 ] set rust-version to 1.74.0, update Cargo.lock [Emmanuel Bosquet] (2024-03-11)
  • 2c4363d ] bump rust-toolchain to 1.74.0 [Emmanuel Bosquet] (2024-03-11)
  • c6ee01b ] move TCP pool from TcpListener to TcpProxy [Emmanuel Bosquet] (2024-02-26)
  • 1c90c04 ] propagate errors in HttpProxy and HttpsProxy [Emmanuel Bosquet] (2024-02-23)
  • 629551f ] propagate errors in TcpProxy [Emmanuel Bosquet] (2024-02-23)
  • ba8b51a ] HttpsProxy::add_listener returns Result [Emmanuel Bosquet] (2024-02-23)
  • 630b1a7 ] define buffer sizes in u64 [Emmanuel Bosquet] (2024-02-02)
  • 24a941b ] pass ServerConfig to new worker [Emmanuel Bosquet] (2024-02-02)
  • 6d160b4 ] move ServerConfig to sozu_command_lib::config [Emmanuel Bosquet] (2024-02-02)
  • f0ecc54 ] rewrite CommandServer with MIO [Eloi DEMOLIS] (2024-01-30)
  • e382a1c ] translate WorkerRequest and WorkerResponse to protobuf [Emmanuel Bosquet] (2024-02-02)
  • 4f2d760 ] translate ServerConfig in protobuf [Emmanuel Bosquet] (2024-02-02)
  • 6d43eb1 ] SCM sockets transmit listeners in binary format [Emmanuel Bosquet] (2024-02-02)
  • 5852c6b ] pass initial state to workers in protobuf [Emmanuel Bosquet] (2024-02-02)
  • cc0a221 ] apply clippy suggestions, remove unwraps [Emmanuel Bosquet] (2024-02-02)
  • a3fe0d3 ] chore: update dependencies [Florentin Dubois] (2024-04-16)
  • 8d89733 ] chore: update configuration file [Florentin Dubois] (2024-04-16)

⛑️ Fixed

  • d20e759 ] Fix some timeout edge cases [Eloi DEMOLIS] (2024-03-18)
  • 284068d ] fix: fix RUSTSEC-2024-0019 [Dimitris Apostolou] (2024-03-09)
  • 59c0615 ] Fix close propagation on close-delimited responses with front keep-alive [Eloi DEMOLIS] (2024-02-20)
  • 6aa45b9 ] fix and rewrite CertificateResolver [Emmanuel Bosquet] (2024-02-14)
  • e793ec6 ] Edit access logs ASCII format, put logs-cache under feature [Eloi DEMOLIS] (2024-03-11)
  • 85e2653 ] implement From for Ulid [Emmanuel Bosquet] (2024-03-11)
  • 756b78b ] create type WebSocketContext [Emmanuel Bosquet] (2024-03-11)
  • 0885863 ] Logger refactor: better structured logs and colored logs [Eloi DEMOLIS] (2024-03-11)
  • dfacdb7 ] protobuf access logs [Emmanuel Bosquet] (2024-03-11)
  • 7c25133 ] create helper function server::worker_response_error [Emmanuel Bosquet] (2024-02-23)
  • a6ffebe ] binary and delimited serialization of prost messages in channels [Emmanuel Bosquet] (2024-02-02)
  • 62f3db3 ] add fields and defaults to ServerConfig [Emmanuel Bosquet] (2024-02-02)
  • fb11245 ] create protobuf type SocketAddress, use everywhere [Emmanuel Bosquet] (2024-02-02)
  • f9ac920 ] add size to ChannelError::BufferFull [Emmanuel Bosquet] (2024-02-02)
  • d44b227 ] document the logs-cache feature flag [Emmanuel Bosquet] (2024-03-11)
  • 7241c0e ] document the DuplicateOwnership trait [Emmanuel Bosquet] (2024-03-11)
  • 31bc55e ] Add example in command lib to benchmark the logger [Emmanuel Bosquet] (2024-03-11)
  • 4cba552 ] A small, descriptive extension to include firewalld. Avoiding a search for those not using iptables. [obreidenich] (2024-02-21)
  • 8df9ba5 ] CI: Adding a benchmark framework [Guillaume Assier] (2024-02-07)
  • 95624e6 ] Refactor HTTP, HTTPS and TCP example code [Eloi DEMOLIS] (2024-02-02)

🥹 Contributors

Full Changelog: https://github.com/sozu-proxy/sozu/compare/0.15.19..1.0.0