TheC10k problem is the problem of optimizingnetwork sockets to handle a large number of clients at the same time.[1] The name C10k is anumeronym forconcurrently handling ten thousand connections.[2] Handling many concurrent connections is a different problem from handling manyrequests per second: the latter requires high throughput (processing them quickly), while the former does not have to be fast, but requires efficient scheduling of connections.
The problem of socket server optimisation has been studied because a number of factors must be considered to allow a web server to support many clients. This can involve a combination of operating system constraints and web server software limitations. According to the scope of services to be made available and the capabilities of the operating system as well as hardware considerations such as multi-processing capabilities, a multi-threading model or asingle threading model can be preferred. Concurrently with this aspect, which involves considerations regarding memory management (usually operating system related), strategies implied relate to the very diverse aspects of I/O management.[2]
The termC10k was coined in 1999 by software engineer Dan Kegel,[3][4] citing theSimtel FTP host,cdrom.com, serving 10,000 clients at once over 1gigabit per secondEthernet in that year.[1] The term has since been used for the general issue of large number of clients, with similar numeronyms for larger number of connections, most recently "C10M" in the 2010s to refer to 10 million concurrent connections.[5]
By the early 2010s millions of connections on a single commodity 1U rackmount server became possible: over 2 million connections (WhatsApp, 24 cores, usingErlang onFreeBSD)[6][7] and 10–12 million connections (MigratoryData, 12 cores, usingJava onLinux).[5][8]
Common applications of very high numbers of connections include general public servers that have to serve thousands or even millions of users at a time, such asfile servers,FTP servers,proxy servers,web servers, andload balancers.[9][5]
Around ten years ago, Daniel Kegel, a prominent software engineer, … Kegel's C10K manifest … solving the C10K problem of 10,000 simultaneous connections,nginx …
And computers are big, too. You can buy a 500MHz machine with 1 gigabyte of RAM and six 100Mbit/sec Ethernet card for $3000 or so. Let's see - at 10000 clients, that's 50KHz, 100Kbytes, and 60Kbits/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 ten thousand clients. (That works out to $0.30 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.
This time we also wanted to share some more technical details with you about hardware, OS and software: hw.machine: amd64 hw.model: Intel(R) Xeon(R) CPU X5675 @ 3.07GHz hw.ncpu: 24 hw.physmem: 103062118400 hw.usermem: 100556451840