Does Nginx have separate queuing mechanism for requests?

Hello.

Consider the following situation: you are deploying application that can
serve 1 req./sec. What would happen if I send 10 request in 1 second? I
wrote simple app to test that:
https://github.com/amezhenin/nginx_slow_upstream .
This test shows that your requests will be served in_exact_same_order
they were sent.

For now, this looks like Nginx have some kind of queue for requests, but
my
colleague(administrator) sayd that there is no any queues in Nginx. So I
wrote another question about epoll here:
http://stackoverflow.com/questions/19114001/does-epoll-preserve-the-order-in-which-fds-was-registered
. From that discussion I figured that epoll does preserves the order of
requests.

I have two questions:

  1. Is there any mistakes in reasoning/code above?
  2. Does Nginx have some sort of queue for requests on top of epoll? Or
    Nginx
    uses pure epoll functionality?

Thank you, and sorry for my English :slight_smile:

Posted at Nginx Forum:
http://forum.nginx.org/read.php?2,243372,243372#msg-243372

Hello!

On Wed, Oct 02, 2013 at 10:04:23AM -0400, amehzenin wrote:

colleague(administrator) sayd that there is no any queues in Nginx. So I
wrote another question about epoll here:

http://stackoverflow.com/questions/19114001/does-epoll-preserve-the-order-in-which-fds-was-registered

. From that discussion I figured that epoll does preserves the order of
requests.

I have two questions:

  1. Is there any mistakes in reasoning/code above?
  2. Does Nginx have some sort of queue for requests on top of epoll? Or Nginx
    uses pure epoll functionality?

There is no queue in nginx, but there is queue in a listen socket
of your backend app. It’s called “listen queue” or “backlog” and
likely it’s what preserves a request order for you.


Maxim D.
http://nginx.org/en/donation.html

Maxim D. Wrote:

nginx mailing list
[email protected]
http://mailman.nginx.org/mailman/listinfo/nginx

You meen application server has listen socket:

#include <sys/types.h>
#include <sys/socket.h>

int listen(int sockfd, int backlog);

(http://linux.die.net/man/2/listen)

And backlog defines the length of this queue. Nginx pushes requests to
app-server as they come and app-server take this requests from his own
queue
when he is ready to serve next request. Am I right?

Posted at Nginx Forum:
http://forum.nginx.org/read.php?2,243372,243406#msg-243406

Hello!

On Thu, Oct 03, 2013 at 10:26:33AM -0400, amehzenin wrote:

Maxim D. Wrote:

There is no queue in nginx, but there is queue in a listen socket
of your backend app. It’s called “listen queue” or “backlog” and
likely it’s what preserves a request order for you.

[…]

app-server as they come and app-server take this requests from his own queue
when he is ready to serve next request. Am I right?

Yes.


Maxim D.
http://nginx.org/en/donation.html

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs