Scalability issue


#1

Hey

I am new to nginx.

According to the web: http://wiki.nginx.org/Main

It said…

Nginx is one of a handful of servers written to address the C10K
problem. Unlike traditional servers, Nginx doesn’t rely on threads to
handle requests. Instead it uses a much more scalable event-driven
(asynchronous) architecture. This architecture uses small, but most
importantly, predictable amounts of memory under load…

But my questions are…

  1. No matter how fast you are delivering the data, it is bounded by
    only one thread, so it is not scalable as nowsaday if you have 8 core
  • server?
  1. Even you are using event-driven, remote clients must also need to
    establish a remote port to your web server, so you can’t save much
    resources in fact?

Thank you .


#2

Hello!

On Wed, Mar 25, 2009 at 01:12:29AM +0800, howard chen wrote:

handle requests. Instead it uses a much more scalable event-driven
(asynchronous) architecture. This architecture uses small, but most
importantly, predictable amounts of memory under load…

But my questions are…

  1. No matter how fast you are delivering the data, it is bounded by
    only one thread, so it is not scalable as nowsaday if you have 8 core
  • server?

No. You just configure nginx to run 8 worker processes - and this
effectively uses all available CPU resources with minimal
overhead.

  1. Even you are using event-driven, remote clients must also need to
    establish a remote port to your web server, so you can’t save much
    resources in fact?

Yes, you can’t save sockets. No, there is a lot of resources that
saved in fact compared to thread-per-connection or
process-per-connection models, since thread is much more than
socket.

Maxim D.


#3
  1. You can configure nginx to use as many instances as you want. If your
    server is 8 core, you can set nginx to use 8 instances. So this is not
    an
    issue.
  2. I don’t really understand what you mean.

Sergej


#4

On Wed, 2009-03-25 at 01:12 +0800, howard chen wrote:

  1. No matter how fast you are delivering the data, it is bounded by
    only one thread, so it is not scalable as nowsaday if you have 8 core
  • server?

Nginx can use as many cores as you have available (via worker
processes). But this question is overly simplistic anyway. There’s
more to a server than CPU utilization.

  1. Even you are using event-driven, remote clients must also need to
    establish a remote port to your web server, so you can’t save much
    resources in fact?

A thread uses quite a lot of RAM (the exact amount is system-dependent),
so by not using them you do, in fact, save a lot of resources. There’s
also things like kernel context-switches, CPU cache invalidation and
other things that make threads less efficient than event-driven
architectures.

There’s quite a lot of information on the pros-and-cons of event-driven
vs threaded servers available on the internet. Google is your friend.

Regards,
Cliff