Content deleted Content added
m →History: C10M wikilink is broken, so just wrap it in quotes |
make it clear that this is now an ex-problem |
||
(50 intermediate revisions by 24 users not shown) | |||
Line 1:
{{Short description|Problem of optimising network sockets to handle a large number of clients at the same time}}
The '''C10k problem''' is the problem of optimising [[network socket]]s to handle a large number of clients at the same time.<ref name=C10K>{{cite web|url=http://www.kegel.com/c10k.html |title=The C10K problem |work= |archivedate=2013-07-18 |archiveurl=https://www.webcitation.org/6ICibHuyd?url=http://www.kegel.com/c10k.html |deadurl=yes |df= }}</ref> The name C10k is a [[numeronym]] for [[Concurrent computing|concurrently]] handling ten thousand connections.<ref name=Liu-Deters>{{Cite book | last1 = Liu | first1 = D. | last2 = Deters | first2 = R. | chapter = The Reverse C10K Problem for Server-Side Mashups | doi = 10.1007/978-3-642-01247-1_16 | title = Service-Oriented Computing – ICSOC 2008 Workshops | series = Lecture Notes in Computer Science | volume = 5472 | pages = 166 | year = 2009 | isbn = 978-3-642-01246-4 | pmid = | pmc = }}</ref> Note that concurrent connections are not the same as [[requests per second]], though they are similar: handling many requests per second requires high throughput (processing them quickly), while high number of concurrent connections requires efficient scheduling of connections. In other words, handling many requests per second is concerned with the speed of handling requests, whereas a system capable of handling a high number of concurrent connections does not necessarily have to be a fast system, only one where each request will deterministically return a response within a (not necessarily fixed) finite amount of time.▼
▲The '''C10k problem'''
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 a [[single 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 the I/O management.<ref name=Liu-Deters />▼
▲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 a [[single 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
== History ==
The term ''C10k'' was coined in 1999 by software engineer Dan Kegel,{{r|aosa2:nginx}}<ref name = "Dan Kegel, kegel.com, 1999" /> citing the [[Simtel]] FTP host, [[cdrom.com]], serving 10,000 clients at once over 1 [[gigabit per second]] [[Ethernet]] in that year.<ref name="C10K" /> 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.<ref name="
By the early 2010s millions of connections on a single commodity 1U rackmount server became possible: over 2 million connections ([[WhatsApp]], 24 cores, using [[Erlang (programming language)|Erlang]] on [[FreeBSD]])
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 as [[file server]]s, [[FTP server]]s, [[proxy server]]s, [[web server]]s, and [[Load balancing (computing)|load balancers]].<ref name="conn-very-high-file">{{Cite book|url=https://books.google.com/books?id=cNwZ1snBYQYC&dq=file+server+very+high+number+of+connections&pg=PA470|title=High Performance Computing - HiPC 2008|language=en|year=2008|access-date=2021-10-15|author1=Ponnuswamy Sadayappan|author2=Manish Parashar|author3=Ramamurthy Badrinath|author4=Viktor K. Prasanna|publisher=Springer |isbn=978-3-540-89893-1}}</ref><ref name="C10M" />
== See also ==
*[[Asynchronous I/O]]
*[[Event-driven architecture]]
*[[Event-driven programming]]
Line 19:
== References ==
{{Reflist
<ref name=aosa2:nginx>{{cite book
|author= Andrew Alexeev
|section-url= http://www.aosabook.org/en/nginx.html
|section= §14. nginx; §14.1. Why Is High Concurrency Important?
|editor1= Amy Brown |editor2= Greg Wilson
|url= http://aosabook.org/en/index.html#aosa2
|title= The Architecture of Open Source Applications, Volume II: Structure, Scale and a Few More Fearless Hacks
|publisher= [[Lulu.com]] |publication-date= 2012 |isbn= 9781105571817
|quote= Around ten years ago, Daniel Kegel, a prominent software engineer, … Kegel's C10K manifest … solving the C10K problem of 10,000 simultaneous connections, [[nginx]] …
}}</ref>
<ref name = "Dan Kegel, kegel.com, 1999" > {{ Cite web | url = http://www.kegel.com/c10k.html | title = The C10K problem | access-date = 18 June 2019 | first = Dan | last = Kegel | date = 8 May 1999 | website = Kegel com | quote = <nowiki>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.</nowiki> | archive-url = https://web.archive.org/web/19990508164301/http://www.kegel.com/c10k.html | archive-date = 8 May 1999 | df = dmy-all }} </ref>
}}
[[Category:Web server software]]
[[Category:Computer performance]]
|