This link has been bookmarked by 617 people . It was first bookmarked on 02 Mar 2006, by Wade Ren.
-
15 Jul 21
-
19 Jun 18
-
23 Aug 17
-
02 Aug 17
-
18 Jun 17
kevinoempty
-
06 Jun 17
-
04 Jun 17
-
13 Mar 17
-
24 Feb 17
-
09 Feb 17
Jimmy Royer"It's time for web servers to handle ten thousand clients simultaneously, don't you think? After all, the web is a big place now.
And computers are big, too. You can buy a 1000MHz machine with 2 gigabytes of RAM and an 1000Mbit/sec Ethernet card for $1200 or so. Let's see - at 20000 clients, that's 50KHz, 100Kbytes, and 50Kbits/sec per client. It shouldn't take any more horsepower than that to take four kilobytes from the disk and send them to the network once a second for each of twenty thousand clients. (That works out to $0.08 per client, by the way. Those $100/client licensing fees some operating systems charge are starting to look a little heavy!) So hardware is no longer the bottleneck.
In 1999 one of the busiest ftp sites, cdrom.com, actually handled 10000 clients simultaneously through a Gigabit Ethernet pipe. As of 2001, that same speed is now being offered by several ISPs, who expect it to become increasingly popular with large business customers.
And the thin client model of computing appears to be coming back in style -- this time with the server out on the Internet, serving thousands of clients.
With that in mind, here are a few notes on how to configure operating systems and write code to support thousands of clients. The discussion centers around Unix-like operating systems, as that's my personal area of interest, but Windows is also covered a bit.
" -
23 Jan 17
-
09 Dec 16
-
The C10K problem
-
-
06 Oct 16
-
14 Aug 16
-
Use nonblocking calls (e.g. write() on a socket set to O_NONBLOCK) to start I/O, and readiness notification (e.g. poll() or /dev/poll) to know when it's OK to start the next I/O on that channel
-
with network I/O, not disk I/O
-
AIO doesn't provide a way to open files without blocking for disk I/O
-
Has the disadvantage of using a whole stack frame for each client, which costs memory
-
Rusty Russell et al subsequently implemented fast userspace mutexes (futexes))
-
One big difference between the two is that NPTL is a 1:1 threading model, whereas NGPT is an M:N threading model
-
At one point, M:N was thought to be higher performance, but it's so complex that it's hard to get right, and most people are moving away from it.
-
-
28 Jul 16
-
18 May 16
-
It's time for web servers to handle ten thousand clients simultaneously,
-
-
30 Apr 16
-
13 Apr 16
-
01 Apr 16
-
The C10K problem
-
- Designers of networking software have many options. Here are a few:
- Whether and how to issue multiple I/O calls from a single thread
- Don't; use blocking/synchronous calls throughout, and possibly use multiple threads or processes to achieve concurrency
- Use nonblocking calls (e.g. write() on a socket set to O_NONBLOCK) to start I/O, and readiness notification (e.g. poll() or /dev/poll) to know when it's OK to start the next I/O on that channel. Generally only usable with network I/O, not disk I/O.
- Use asynchronous calls (e.g. aio_write()) to start I/O, and completion notification (e.g. signals or completion ports) to know when the I/O finishes. Good for both network and disk I/O.
- How to control the code servicing each client
- one process for each client (classic Unix approach, used since 1980 or so)
- one OS-level thread handles many clients; each client is controlled by:
- a user-level thread (e.g. GNU state threads, classic Java with green threads)
- a state machine (a bit esoteric, but popular in some circles; my favorite)
- a continuation (a bit esoteric, but popular in some circles)
- one OS-level thread for each client (e.g. classic Java with native threads)
- one OS-level thread for each active client (e.g. Tomcat with apache front end; NT completion ports; thread pools)
- Whether to use standard O/S services, or put some code into the kernel (e.g. in a custom driver, kernel module, or VxD)
- Serve many clients with each thread, and use nonblocking I/O and level-triggered readiness notification
- Serve many clients with each thread, and use nonblocking I/O and readiness change notification
- Serve many clients with each server thread, and use asynchronous I/O
- serve one client with each server thread, and use blocking I/O
- Build the server code into the kernel
The following five combinations seem to be popular:
- Whether and how to issue multiple I/O calls from a single thread
-
-
12 Jan 16
-
06 Jan 16
-
which associates a signal and value with each I/O operation.
-
Has the disadvantage of using a whole stack frame for each client, which costs memory.
-
-
30 Sep 15
-
23 Sep 15
-
31 Aug 15
-
14 Jul 15
Rogerio AngeliskiThe article about the 10k connections - Essential for node!
performance scalability linux programming networking server network web node Programação
-
10 Apr 15
-
02 Apr 15
-
06 Mar 15
-
17 Feb 15
-
And computers are big, too. You can buy a 1000MHz machine with 2 gigabytes of RAM and an 1000Mbit/sec Ethernet card for $1200 or so. Let's see - at 20000 clients, that's 50KHz, 100Kbytes, and 50Kbits/sec per client. It shouldn't take any more horsepower than that to take four kilobytes from the disk and send them to the network once a second for each of twenty thousand clients. (That works out to $0.08 per client, by the way. Those $100/client licensing fees some operating systems charge are starting to look a little heavy!) So hardware is no longer the bottleneck.
-
-
19 Jan 15
-
29 Dec 14
-
07 Dec 14
-
27 Nov 14
-
18 Aug 14
-
08 Jul 14
-
29 Apr 14
-
21 Apr 14
-
24 Mar 14
-
03 Mar 14
J GilbertAn eloquent description of problems faced by servers dealing with high client loads in the ever expanding WWW.
-
23 Jan 14
-
17 Jan 14
TooManySecretsExcelente paper sobre la problemática de servir vía web grandes cantidades de conexiones, con una excelente descripción de las partes que intervienen, etc, etc.
-
27 Nov 13
-
25 Nov 13
-
13 Nov 13
-
libevent is a lightweight C I/O framework
-
-
11 Oct 13
-
25 Sep 13
-
It's time for web servers to handle ten thousand clients simultaneously, don't you think? After all, the web is a big place now.
-
-
28 Aug 13
-
24 Aug 13
-
29 Jul 13
-
26 Jul 13
-
08 Jul 13
-
03 Jul 13
-
26 Jun 13
-
15 Jun 13
-
23 May 13
Pierre PenninckxIt's time for web servers to handle ten thousand clients simultaneously, don't you think? After all, the web is a big place now.
-
21 May 13
-
19 May 13
-
15 May 13
-
14 May 13
-
27 Feb 13
-
02 Jan 13
natewareClassic post on using event-driven programming to reach 10k+ clients
-
05 Dec 12
-
29 Oct 12
-
26 Oct 12
-
19 Oct 12
-
30 Sep 12
-
22 Aug 12
-
22 Jun 12
carlos puentesIt's time for web servers to handle ten thousand clients simultaneously, don't you think? After all, the web is a big place now.
And computers are big, too. You can buy a 1000MHz machine with 2 gigabytes of RAM and an 1000Mbit/sec Ethernet card for $1200 or so. Let's see - at 20000 clients, that's 50KHz, 100Kbytes, and 50Kbits/sec per client. It shouldn't take any more horsepower than that to take four kilobytes from the disk and send them to the network once a second for each of twenty thousand clients. (That works out to $0.08 per client, by the way. Those $100/client licensing fees some operating systems charge are starting to look a little heavy!) So hardware is no longer the bottleneck.
In 1999 one of the busiest ftp sites, cdrom.com, actually handled 10000 clients simultaneously through a Gigabit Ethernet pipe. As of 2001, that same speed is now being offered by several ISPs, who expect it to become increasingly popular with large business customers.
And the thin client model of computing appears to be coming back in style -- this time with the server out on the Internet, serving thousands of clients.
With that in mind, here are a few notes on how to configure operating systems and write code to support thousands of clients. The discussion centers around Unix-like operating systems, as that's my personal area of interest, but Windows is also covered a bit.performance scalability linux programming server web network networking nginx webserver http proxy opensource
-
19 Jun 12
-
12 Jun 12
-
15 May 12
-
09 Mar 12
-
23 Feb 12
-
30 Jan 12
-
26 Jan 12
-
23 Jan 12
-
30 Dec 11
quan caoars to be coming back in style -- this time with the server out on the Internet, serving thousands of clients.
With that in mind, here are a few notes on how to configure operating systems anperformance scalability programming server web networking network
-
25 Dec 11
-
22 Nov 11
-
08 Nov 11
-
07 Oct 11
-
22 Sep 11
-
19 Sep 11
Mike SeidleDiscusses the the 10,000 connection problem that most web servers fall victim to
-
12 Sep 11
-
18 Aug 11
-
11 Aug 11
-
04 Aug 11
-
03 Aug 11
-
29 Jul 11
-
25 Jul 11
-
06 Jul 11
-
30 Jun 11
-
22 Jun 11
-
29 May 11
-
17 May 11
Page Comments
Would you like to comment?
Join Diigo for a free account, or sign in if you are already a member.