Skip to content

eka-foundation/proxy-cache

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CDN booster

This is a dumb HTTP proxy, which caches files obtained from upstreamHost.

Thanks to YBC it has the following features:

  • It is extremely fast. According to my artificial tests go-cdn-booster easily handles 2x-4x more requests per second comparing to nginx with enabled proxy cache (100K vs 25K).
  • Cached items survive go-cdn-booster restart if backed by cacheFilesPath.
  • Cache size isn't limited by RAM size.
  • Optimized for SSDs and HDDs.
  • Performance shouldn't depend on the number of cached items.
  • It has protection agains dogpile effect (aka "thundering herd").
  • It is deadly simple in configuration and maintenance. There is no need in running 'cleaners', 'watchdogs' or other similar tools. There is no need in setting up third-party libraries and/or tools. There is no need in writing complex configuration files. Just pass a couple of command line arguments to it and enjoy!

Thanks to Go it has the following features:

  • Scales automatically to multiple CPUs.
  • Handles large number of concurrent connections with minimum performance loss and minimum memory usage.
  • Supports keep-alive connections to upstream servers out-of-the-box.
  • Has easy-to-read-and-hack code.

Additional features:

  • Absolutely protected from slowloris DoS. See http://en.wikipedia.org/wiki/Slowloris for details.
  • Easily handles more than 100K requests per second.
  • Enforce a certain protocol (eg. HTTP/HTTPS) when talking to the upstream. Useful, for example, to serve content over HTTP but fetch it from the upstream over HTTPS.

Currently go-cdn-booster has the following limitations:

  • Supports only GET requests.
  • Doesn't respect HTTP headers received from both the client and the upstream host.
  • Optimized for small static files aka images, js and css with sizes not exceeding few Mb each.
  • It caches all files without expiration time. Actually this is a feature :)
  • It caches only responses with 200 status codes.
  • It caches only responses with excplicitly set Content-Length.

Use cases:

  • Substitution for Nginx, Varnish, etc. in front of large and/or slow static file servers.
  • Poor-man's DIY geographically distributed CDN.

How to build and run it?

$ sudo apt-get install golang $ go get -u github.com/valyala/ybc/apps/go/cdn-booster $ go build -tags release github.com/valyala/ybc/apps/go/cdn-booster $ ./cdn-booster -help

About

simple http reverse proxy based caching service

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages