GOPHERSPACE.DE - P H O X Y
gophering on hngopher.com
HN Gopher Feed (2017-09-06) - page 1 of 10
 
___________________________________________________________________
Optimizing web servers for high throughput and low latency
402 points by nuriaion
https://blogs.dropbox.com/tech/2017/09/optimizing-web-servers-fo...
ervers-for-high-throughput-and-low-latency/
___________________________________________________________________
 
abc_lisper - 4 hours ago
Just goes to show how much one should know in our field to make the
machine work well for you. For somebody that can understand the
article, the stuff is mostly known, but if you don't know it, the
article is pretty dense.It would be nice if someone make a docker
image with all the tuning set (except the hardware)It would have be
nicer, if the author has shown what the end result of this
optimization looks like, with numbers, comparing against a standard
run-of-the-mill nginx setup.
 
  tokenizerrr - 1 hours ago
  The entire idea of tuning is that you tune it to your particular
  workload.
 
  mayank - 3 hours ago
  > It would be nice if someone make a docker image with all the
  tuning set (except the hardware)This degree of optimization is
  something that really depends on a specific use case and the
  precise configuration of the entire hardware+software stack, and
  not a general-purpose best practices list that can be put into a
  container.The author says as much at the top in the disclaimer:>
  Please do not cargo-cult them. For the sake of the scientific
  method, apply them one-by-one, measure their effect, and decide
  wether they are indeed useful in your environment.Better to take
  away the profiling and optimization methodologies from the
  article rather than specific settings.
 
  eugeneionesco - 3 hours ago
  >It would be nice if someone make a docker image with all the
  tuning set (except the hardware)Have you not read the article?>In
  this post we?ll be discussing lots of ways to tune web servers
  and proxies. Please do not cargo-cult them. For the sake of the
  scientific method, apply them one-by-one, measure their effect,
  and decide whether they are indeed useful in your environment.
 
Upvoter33 - 4 hours ago
This is a wonderful article. It also is indicative of why people
who really understand systems will always be so employable - it's
just so hard to make things run well.
 
tiffanyh - 2 hours ago
My mind kind of explodes reading that article.So many bells &
whistles and I don't even know where to begin.
 
exikyut - 6 minutes ago
I have a related question that most would probably consider
relevant but which this article (quite rightly) doesn't answer (as
it's not relevant for Netflix).Let's say I want to prepare a server
to respond quickly to HTTP requests, from all over the world.How do
I optimize where I put it?Generally there are three ways I can
tackle this:1. I configure/install my own server somewhere2. Or
rent a preconfigured dedicated server I can only do so much with3.
I rent Xen/KVM on a hopefully not-overcrowded/oversold
hostObviously the 1st is the most expensive (I must own my own
hardware; failures mean a trip to the DC or smart hands), the 2nd
will remove some flexibility, and the 3rd will impose the most
restrictions but be the cheapest.For reference, knowing how to pick
a good network (#1) would be interesting to learn about. I've
always been curious about that, although I don't exactly have
anything to rack right now. Are there any physical locations in the
world that will offer the lowest latency to the highest number of
users? Do some providers have connections to better backbones?
Etc.#2 is not impossible - https://cc.delimiter.com/cart/dedicated-
servers/&step=0 currently lists a HP SL170s with dual L5360s, 24GB,
2TB and 20TB bandwidth @ 1Gbit for $50/mo. It's cool to know this
kind of thing exists. But I don't know how good Delimiter's
network(s) is/are (this is in Atlanta FWIW).#3 is what I'm the most
interested in at this point, although this option does present the
biggest challenge. Overselling is a tricky proposition.Hosting
seems to be typically sold on the basis of how fast `dd` finishes
(which is an atrocious and utterly wrong benchmark - most tests dd
/dev/zero to a disk file, which will go through the disk cache).
Not many people seem to setup a tuned Web server and then run ab or
httperf on it from a remote with known-excellent networking. That's
incredibly sad!Handling gaming or voice traffic is probably a good
idea for the target I'd like to be able to hit - I don't want to do
precisely that, but if my server's latency is good enough to handle
that I'd be very happy.
 
doubleorseven - 3 hours ago
wow. This is the kind of article i'm expecting to see when I google
for "Nginx best practices 2018". I am so far behind, maybe 20% of
my usual setup include those recommendations. Thank you Dropbox.If
someone can point me to a thorough article like this on the lua
module, I will thank her/him forever.
 
Thaxll - 4 hours ago
"people are still copy-pasting their old sysctls.conf that they?ve
used to tune 2.6.18/2.6.32 kernels."This.
 
  korzun - 55 minutes ago
  .. or 32 bit systems.
 
leetrout - 3 hours ago
I'm surprised there was no mention of tcp_max_syn_backlog and
netdev_max_backlog.When I've previously tuned a server I have used
both of those to my advantage... Another comment on here talked
about this ignoring an existing load balancer so maybe those
sysctls are more appropriate on an LB?
 
  korzun - 55 minutes ago
  Those settings are irrelevant in this scenario. The point is to
  maximize the throughput from a single server without backing up
  the queue.
 
cat199 - 2 hours ago
great article overall - but starts off by saying 'do not cargo cult
this' and then proceeds to proscribe many 'mandates' without giving
any rationale behind them..
 
z3t4 - 37 minutes ago
Would be cool with a story like, we did these adjustment so each
server could handle 10% more requests. etc. This blog post seems to
only cover software, you can also gain a lot of performance from
hardware modding. Someone said optimizing is the root of all evil
... So first identify bottlenecks in real work-loads, no micro-
benchmarking!
 
  raarts - 14 minutes ago
  That was: ''_premature_ optimization is the root of all evil".
 
mozumder - 3 hours ago
So how does Linux compare now with FreeBSD in terms of throughput
and latency?  I remember like 10 years ago Linux had issues with
throughput, which is why Netflix went with FreeBSD. Are they
similar now?
 
  2trill2spill - 3 hours ago
  > So how does Linux compare now with FreeBSD in terms of
  throughput and latency? I remember like 10 years ago Linux had
  issues with throughput, which is why Netflix went with FreeBSD.
  Are they similar now?I believe the open connect team at Netflix
  choose FreeBSD because a lot of them used to work at Yahoo and
  had lot's of FreeBSD experience. Not so much because of a
  performance difference between the two. As for now, the two
  network stacks are pretty equal when it comes to performance,
  some work loads are better on FreeBSD some are better on Linux.
 
    ovao - 3 hours ago
    Can you go into more detail about what workloads are better
    suited for Linux and FreeBSD?
 
      2trill2spill - 2 hours ago
      Yea no problem, I'm having a hard time finding all the
      articles/ benchmarks I remember reading about this subject.
      But this paper has some useful info[1]. Basically FreeBSD is
      good for throughput. In the paper I linked to you can see
      FreeBSD has a higher throughput than Linux, but you can also
      see that FreeBSD is using more CPU than Linux is. Also Linux
      generally has lower latency than FreeBSD, which makes sense
      because Linux is used extensively by high frequency trading
      firms. However there are still HFT firms using FreeBSD.I'll
      edit this post as I find the other articles, videos and
      benchmarks about this subject.Edit: I don't really care for
      Phoronix benchmarks but here's some benchmarks showing Linux
      winning some and FreeBSD winning some benchmarks[2].[1]: http
      ://conferences.sigcomm.org/hotnets/2013/papers/hotnets-f...[2
      ]: http://www.phoronix.com/scan.php?page=article&item=netperf
      -b...
 
        ovao - 1 hours ago
        Lots to dig into here, thanks!
 
          2trill2spill - 44 minutes ago
          I also like this talk by a George Neville-Neil a FreeBSD
          networking engineer. Start at 57:45 [1]. That part of the
          talk is about differences in how the two different
          Network stacks are implemented.[1]:
          https://www.youtube.com/watch?v=5mv_oKFzACM
 
  drewg123 - 1 hours ago
  So, this is an honest question.  What kind of performance do
  Linux based CDNs get out of a single box?At Netflix, we can serve
  over 90Gb/s of 100% TLS encrypted traffic using a single-socket
  E5-2697A and Mellanox (or Chelsio) 100GbE NICs using software
  crypto (Intel ISA-L).  This is distributed across tens of
  thousands of connections, and all is done in-kernel, using our
  "ssl sendfile".  Eg, no dpdk, no crypo accelerators.I'm working
  on a tech blog about the changes we've needed to make to the
  FreeBSD kernel to get this kind of performance (and working on
  getting some of them in shape to upstream).
 
    peterwwillis - 45 minutes ago
    It doesn't hurt to get a performance boost from your
    processor's crypto instructions, assuming you optimized your
    cipher lists to prefer crypto with a modern hw implementation
    (AES128-NI is 179% faster than RC4).But is this traffic ongoing
    connections, new connections, a mix? They have different
    penalties, and result in different numbers: 90Gbps of ongoing
    connections might be, like, 100,000hps, but 90Gbps of new
    connections during primetime might only net you 50,000hps. And
    are you using Google's UDP TLS stuff?Google also hacked on the
    kernel a lot to improve their performance, I don't know if any
    of that's upstream currently though. Maybe Cloudflare can
    answer you, as they seem to support the most HTTPS wizardry of
    the big CDNs.
 
  Thaxll - 3 hours ago
  Linux is probably faster and has always been for years now.
  Benchmark a recent kernel and prove me wrong.
 
    2trill2spill - 3 hours ago
    > Linux is probably faster and has always been for years now.
    Benchmark a recent kernel and prove me wrong.How about you post
    the benchmarks you used to form your answer, otherwise your
    post is nothing but speculation and probably just favoritism.
 
    rhizome - 3 hours ago
    What good is benchmarking a kernel going to do when performance
    in this context has many more moving parts?
 
DamonHD - 5 hours ago
Fab tour de force!  Great!(Though I've been optimising my tiny low-
traffic site on a solar-powered RPi 2 to apparently outperform a
major CDN, at least on POHTTP...)
 
  gardnr - 3 hours ago
  This sounds unbelievable
 
  baybal2 - 4 hours ago
  DPDK?One fabless SoC maker called Baikal claim that they can
  saturate 10gbs link with an 8 core arm chip running under 5W (phy
  power not counted in) for as long as users are using userspace
  driven network and hardware offloading
 
  turdnagel - 4 hours ago
  Very interesting! What steps have you taken to optimize?
 
    DamonHD - 3 hours ago
    Well, here's a whole slew:http://www.earth.org.uk/note-on-site-
    technicals-2.html
 
  cortesoft - 39 minutes ago
  I am curious how you are measuring that you 'outperform' a major
  CDN? Average response time from your local connection? From an
  arbitrary IP somewhere in the world? An aggregated average
  response time from many places around the world?
 
  cat199 - 2 hours ago
  not surprising imho - you probably have more 'dedicated hardware'
  (in an abstract sense) per request than a busy CDN.. if the site
  software is all cached in ram and cores are free, you're pretty
  much running 'wide open' on each request..
 
    DamonHD - 2 hours ago
    Absolutely.Though still, the CDN folks have faster machines not
    running in power-saving mode, and lower latency into the core
    UK Internet peering points / LINX, and my RPi is doing other
    things too, such as running a substantial Java-based server.
 
jbergstroem - 3 hours ago
I thoroughly appreciate how the majority of the article doesn't
even go into the nginx config whereas most of the internet would
discuss a result of the search query "optimized nginx config". Much
[for me] to learn and much appreciated, Alexey.
 
  Twirrim - 7 minutes ago
  I spent some time looking at this recently.  I'm focussed on
  throughput, not high TPS.  The quality of blog posts is
  absolutely atrocious.  There's a lot of blog posts that amount to
  "Set this setting to this value" but no real explanation why, or
  what the setting actually does.  Some of what I've seen are
  actually downright dangerous.
 
  mfjordvald - 2 hours ago
  One of my more popular blog posts is exactly about how to
  "optimise" nginx for high traffic loads and the gist of it is
  pretty much "you can't really do much, but here's some minor
  stuff". I consider that a good thing though, a web server
  shouldn't really require config tweaking to perform well.
 
    jbergstroem - 1 hours ago
    Definitely! Sane defaults and config readability is pretty much
    the main reason I recommend nginx.
 
    bogomipz - 1 hours ago
    >"One of my more popular blog posts is exactly about how to
    "optimise" nginx for high traffic loads and the gist of it is
    pretty much "you can't really do much, but here's some minor
    stuff"."Could you provide a link for that blog post? I am not
    seeing it.
 
      62747478182 - 1 hours ago
      Maybe https://blog.martinfjordvald.com/2011/04/optimizing-
      nginx-fo...
 
excitom - 4 hours ago
This is a great article and I've bookmarked it for future
reference.I observe, though, that if you are tuning a system to
this level of detail you likely have a number of web servers behind
a load balancer. To be complete, the discussion should include
optimization of interactions with the load balancer, e.g. where to
terminate https, etc.
 
  daenney - 3 hours ago
  > To be complete, the discussion should include optimization of
  interactions with the load balancer, e.g. where to terminate
  https, etc.Not necessarily. There are other ways of spreading
  traffic, like DNS round robin for example, using the DNS
  delegation trick or even have client-side load balancing (which
  is perfectly feasible if you control the client, like your own
  app for example).The article itself mentions that what they're
  talking about is the Dropbox Edge network, an nginx proxy tier,
  which sounds like load balancers to me.
 
rcchen - 1 hours ago
> If you are going with AMD, EPYC has quite impressive
performance.Does this imply that Dropbox has started testing out
EPYC metal?
 
hartator - 4 hours ago
I wish they could make a MacOSX app that doesn't use almost 100% of
one core all the time.
 
  cabaalis - 3 hours ago
  Sorry you're downvoted, but what you mention is a real concern.
 
    ovao - 2 hours ago
    Not to this topic.
 
korzun - 1 hours ago
You can skip all of that nonsense and run FreeBSD.
 
  jimktrains2 - 41 minutes ago
  While I love freebsd, you can definitely take the time to tune it
  if your application requires it.
 
pavs - 2 hours ago
No mention of VPP - does it not apply to applications? or Routing/
switching?https://wiki.fd.io/view/VPP/What_is_VPP%3F