Unicorn 4.0.0 - Rack HTTP server for fast clients and Unix

Unicorn is an HTTP server for Rack applications designed to only serve
fast clients on low-latency, high-bandwidth connections and take
advantage of features in Unix/Unix-like kernels. Slow clients should
only be served by placing a reverse proxy capable of fully buffering
both the the request and response in between Unicorn and slow clients.

Changes:

A single Unicorn instance may manage more than 1024 workers
without needing privileges to modify resource limits. As a
result of this, the “raindrops”[1] gem/library is now a required
dependency.

TCP socket defaults now favor low latency to mimic UNIX domain
socket behavior (tcp_nodelay: true, tcp_nopush: false). This
hurts throughput, users who want to favor throughput should
specify “tcp_nodelay: false, tcp_nopush: true” in the listen
directive.

Error logging is more consistent and all lines should be
formatted correctly in backtraces. This may break the
behavior of some log parsers.

The call stack is smaller and thus easier to examine backtraces
when debugging Rack applications.

There are some internal API changes and cleanups, but none that
affect applications designed for Rack. See “git log v3.7.0…”
for details.

For users who cannot install kgio[2] or raindrops, Unicorn 1.1.x
remains supported indefinitely. Unicorn 3.x will remain
supported if there is demand. We expect raindrops to introduce
fewer portability problems than kgio did, however.

[1] http://raindrops.bogomips.org/
[2] Index of /kgio/

another Rainbows! resync

Zbatery is an HTTP server for Rack applications on systems that either
do not support fork(), or have no memory (nor need) to run the
master/worker model. It is based on Rainbows! (which is based on
Unicorn (which is based on Mongrel)) and inherits parts of each.
Zbatery supports your choice of all the thread/fiber/event/actor-based
concurrency models and Rack middleware that Rainbows! supports (or will
ever support) in a single process.

Changes:

This gets most of the improvements Rainbows! 4.0.0 got:

  • client_max_header_size directive is added to limit per-client
    memory usage in headers.

  • An experimental StreamResponseEpoll concurrency option

  • minor bugfixes, minor stack depth reduction

Since Zbatery doesn’t fork workers, the ability of Unicorn 4.x
to scale to a large amount of worker processes doesn’t matter
to us.

Unicorn is an HTTP server for Rack applications designed to only serve
fast clients on low-latency, high-bandwidth connections and take
advantage of features in Unix/Unix-like kernels. Slow clients should
only be served by placing a reverse proxy capable of fully buffering
both the the request and response in between Unicorn and slow clients.

Changes:

This release fixes things for users of per-worker “listen”
directives in the after_fork hook. Thanks to [email protected]
for reporting the bug.

The “timeout” configurator directive is now truncated to
0x7ffffffe seconds to prevent overflow when calling
IO.select.

MOAR concurrency for MOAR COARS!

Rainbows! is an HTTP server for sleepy Rack applications. It is based
on
Unicorn, but designed to handle applications that expect long
request/response times and/or slow clients.

Changes:

Rainbows! now scales to more than 1024 worker processes without
special privileges. To enable this, Rainbows! now depends on
Unicorn 4.x and thus raindrops[1].

client_max_header_size directive is added to limit per-client
memory usage in headers.

An experimental StreamResponseEpoll concurrency option now
exists to buffer outgoing responses without any thread-safe
dependencies. Unlike the rest of Rainbows! which works fine
without nginx, this concurrency option is /only/ supported
behind nginx, even more strongly so than Unicorn itself.
non-nginx LAN clients are NOT supported for this. This relies
on the sleepy_penguin[2] RubyGem (and Linux).

There are some minor bug fixes and cleanups all around. See
“git log v3.4.0…” for details.

[1] http://raindrops.bogomips.org/
[2] sleepy_penguin - Linux I/O events for Ruby