Hi all,

This is the largest development version ever issued, 295 patches in 2 months!

We managed to keep the Exceliance team busy all the time, which means that
the code is becoming more modular with less cross-dependences, I really like
this !

First, we got an amazing amount of feedback from early adopters of dev12. It
seems like SSL was expected for too long a time. We really want to thank all
those who contributed patches, feedback, configs, cores (yes there were) and
even live gdb access, you know who you are and you deserve a big thanks for
this!

Git log says there were 55 bugs fixed since dev12 (a few of them might have
been introduced in between). Still, this means that dev12 should be avoided
as much as possible, which is why I redirected many of you to more recent
snapshots.

These bugs aside, I'm proud to say that the whole team did a really great
job which could be summarized like this :

1) SSL:
  - many more features ; client and server certificates supported on both
    sides with CA and CRL checks. Most of the information available in SSL
    can be used in ACLs for access control. Some information such as protocol
    and ciphers can be reported in the logs. These information are still not
    added to HTTP logs though, a lot of config work is still needed.

  - cache life time and maximum concurrent SSL connections can be set.
    Unfortunately OpenSSL happily dereferences NULL malloc returns and
    causes the process to die if memory becomes scarce. So we can only
    limit its maximum amount of connections if we want to limit the
    memory it uses.

  - TLS NPN was implemented with the help from Simone Bordet from Jetty,
    and can be used to offload SSL/TLS for SPDY and to direct to a
    different server depending on the protocol chosen by the client.

  - Ivan Ristic from ssllabs and Andy Humphreys from Robinson-way provided
    very valuable help in diagnosing and fixing some nasty issues with
    aborts on failed handshakes and improve from an E-grade to an A-grade :
       https://www.ssllabs.com/ssltest/analyze.html?d=demo.1wt.eu

2) HTTP Compression
  - HTTP payload compression was implemented at Exceliance to achieve
    bandwidth usage reduction and reduce page load time on congested or
    small links. Compression is extremely CPU and memory intensive, so we
    spent most of the time developing dynamic adaptations. It is possible
    to limit the maximum RAM dedicated to compression, the CPU usage
    threshold and bandwidth thresholds above which compression is disabled.
    It is even possible to adjust some of these settings from the stats
    socket and to monitor bandwidth savings in real time. Proceeding like
    this ensures a high reliability at low cost and with little added
    latency. I've put it on the haproxy web site with nice bandwidth savings
    (72% avg on compressible objects, 50% on average, considering that most
    downloads are compressed sources). I must say I'm very happy of this new
    feature which will reduce bandwidth costs in hosted infrastructures ! And
    it goes back to the origins of haproxy in zprox 14 years ago :-)

3) Health checks
  - SSL is now usable with health checks. By default it is enabled if the
    server has the "ssl" keyword and no "port" nor "addr" setting. It
    can be forced using "check-ssl" otherwise. So now running an HTTPS
    health check simply consists in using "option httpchk" with "ssl" on
    the server.

  - send-proxy is also usable with health checks, with the same rules as
    above, and the "check-send-proxy" directive to force it. The checks
    also respect the updated spec which suggests sending real addresses
    with health checks instead of sending unknown addresses. This makes
    it compatible with some products such as postfix 2.10 for example.

4) Polling
  - speculative polling was generalized to all pollers, and sepoll
    disappeared as it was superseded by epoll. The main reason for this
    important change is the way OpenSSL works and the fact that it can
    easily get stuck with some data in buffers with no I/O event to
    unblock them. So we needed to engage into this difficult change. I'd
    have preferred to delay it to 1.6 if I was offered the choice ! But
    in the end this is good because it's done and it improves both
    performance and reliability. Even select() and poll() are now fast.

  - the maxaccept setting was too low on some platforms to achieve the
    highest possible performance, so it was doubled to 64 and is now per
    listener so that it automatically adjusts to the number of processes
    the listener is bound to. This ensures both best performance in single
    process mode, and quite good fairness in multi-process mode.

5) Platform improvements
  - Linux 3.6 TCP Fast Open is supported on listeners ("tfo" bind keyword).
    This is used to allow compatible clients to re-establish a TCP connection
    in a single packet and save one round-trip. The kernel code for this is
    still young, I'd be interested in any feedback.

  - use of accept4() on Linux >= 2.6.28 saves one system call.

6) Process management
  - stats socket can now be bound to specific processes. This is useful
    to monitor a specific process only.
  - "bind-process" now supports ranges instead of silently ignoring them.
  - "cpu-map" establishes a mapping between process numbers and CPU cores.
    This is important when running SSL offloaders on dedicated processes
    because you don't want them to pollute the low-latency L7 core.

7) Misc
  - "redirect scheme" makes it easier to redirect between http and https
  - config: error reporting was improved for "bind" and "server" lines by
    enumerating the list of supported options dynamically.

I must say I'm much more confident in dev13 than I was with dev12 and I have
already upgraded the main web site which has been upgraded every few days
with recent snapshots. I've build and run it on Linux i586/x86_64/armv5/v7,
OpenBSD/amd64 and Solaris/sparc without any issue anymore.

To all those running SSL tests on dev12, please drop it for dev13. I don't
think we introduced regressions (but that's still possible), but I know for
sure that we fixed a lot!

I'm not appending the changelog this time again, it's even larger than
dev12's. The usual pointers below will be more useful :

    Site index       : http://haproxy.1wt.eu/
    Sources          : http://haproxy.1wt.eu/download/1.5/src/devel/
    Changelog        : http://haproxy.1wt.eu/download/1.5/src/CHANGELOG
    Cyril's HTML doc : 
http://cbonte.github.com/haproxy-dconv/configuration-1.5.html
    Exceliance       : http://www.exceliance.fr/en/

Willy


Reply via email to