Hi Andrew,

On Thu, Apr 26, 2018 at 10:06:00PM +0100, Andrew Smalley wrote:
> Hello Haproxy mailing list
> 
> I have been looking at caching technology and have found this
> 
> https://github.com/jiangwenyuan/nuster/
> 
> It claims to be a v1.7  / v1.8 branch fully compatible with haproxy
> and indeed based on haproxy with the added capibility of having a
> really fast cache as described here
> https://github.com/jiangwenyuan/nuster/wiki/Web-cache-server-performance-benchmark:-nuster-vs-nginx-vs-varnish-vs-squid
> 
> It looks interesting but I would love some feedback please

It's indeed interesting. By the way it's only for 1.7 as the 1.8 branch also
contains 1.7. First, he found that nginx's primary job is not to be a cache
(just like haproxy is not), and that in the end, only squid and varnish are
real caches.

Second, he focuses on performance. It's not new for many of us that haproxy
rocks here, being 3 times faster than nginx in single core and 3 times faster
than varnish using 12 cores is easily expected since haproxy never makes any
single I/O access. He could even have compared with the small object cache
in 1.8.

But there's an important point which is missed there : manageability.
Varnish is a real cache and made for being manageable and flexible. It
probably has its own shortcomings, but it does the job perfectly for those
who need a fully manageable cache. Putting a full-blown cache into haproxy
is not a good idea in my opinion. A load balancer must be mostly stateless
so that it can be killed, rebooted or tweaked. Implementing a full-blown
cache into it seriously affects this capacity. It may even require some
reloads just to flush the cache, while a load balancer should never have
to be touched for no reason, especially when it's shared between multiple
customers.

The reason I was OK with the "favicon cache" in haproxy is that I noticed
that when placing haproxy in front of varnish, we wasted more CPU and time
processing the connection between haproxy and varnish than delivering a
very small object from memory. And others had noticed that before, seeing
certain configs use dummy backends with "errorfile 503" to deliver very
small objects. So I thought that a short-lived, tiny objects cache saving
us from having to connect to varnish would benefit both components without
adding any requirement for cache maintenance. It's really where I draw the
line between what is acceptable in haproxy and what is not. The day someone
asks here if we can implement a cache flush on the CLI will indicate we've
gone too far already, and we purposely refrained from implementing it.

With this said, I can understand why some people would like to have more,
especially when seeing the performance numbers on the site above. Possibly
that we should think how to make it easier for these people to maintain
their code without having to rebase too much (eg they may need some extra
register functions or hooks to avoid patching the core).

Regards,
Willy

Reply via email to