Proposal: new caching backend for nginx
Maxim Dounin
mdounin at mdounin.ru
Tue Jan 22 18:17:34 UTC 2013
Hello!
On Tue, Jan 22, 2013 at 06:15:08PM +0200, Aliaksandr Valialkin wrote:
> Hi all,
>
> I'm the author of ybc - fast in-process key-value caching library -
> https://github.com/valyala/ybc . This library has the following features,
> which may be essential to nginx:
> - compact source code written in C;
> - optimized for speed. Avoids using syscalls, dynamic memory allocations
> and memory copying in hot paths;
> - has no external dependencies;
> - cross-platform design - all platform-specific code is located in one
> place - https://github.com/valyala/ybc/tree/master/platform . Currently
> only linux is supported, but other platforms can be easily added by
> implementing the corresponding platform-specific functions;
Cross-platform with only linux supported sounds cool. :)
> - designed for efficient caching of millions big objects on both SSDs and
> HDDs. Easily deals with huge caches exceeding available RAM by multiple
> orders of magnitude.
> - persists cached objects across application restarts.
> - provides functionality similar to proxy_cache_lock and
> proxy_cache_use_stale from
> http://nginx.org/en/docs/http/ngx_http_proxy_module.html out of the box.
> - unlike nginx's file-based cache, is free of additional "cache manager"
> tasks.
> - unlike nginx's file-based cache, never exceeds maximum cache size set at
> startup.
> - unlike nginx's file-based cache, stores all cached data in two files -
> one file is used for index, while the other file is used for cached data.
> These files aren't vulnerable to fragmentation, since their sizes never
> change after the application start.
> Other ybc features can be found at
> https://github.com/valyala/ybc/blob/master/README .
>
> ybc API is located at https://github.com/valyala/ybc/blob/master/ybc.h .
>
> It would be great if somebody familiar with nginx internals, who is
> interested in faster and cleaner caching backend for nginx could help me
> substituting file-based backend with ybc.
I don't think that it will fit as a cache store for nginx. In
particular, with quick look through sources I don't see any
interface to store data with size not known in advance, which
happens often in HTTP world. Additionally, it looks like it
doesn't provide async disk IO support.
--
Maxim Dounin
http://nginx.com/support.html
More information about the nginx-devel
mailing list