C10k problem: Difference between revisions

Content deleted Content added
TaliAu (talk | contribs)
m fix plural "connections"
make it clear that this is now an ex-problem
 
(6 intermediate revisions by 3 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''' iswas the problem of optimizing computer [[networknetworking socketstack]]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 |archive-date=2013-07-22 |archive-url=https://web.archive.org/web/20130722134723/http://www.kegel.com/c10k.html |url-status=live }}</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 }}</ref> Handling many concurrent connections is a different problem from handling many [[requests 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 to [[network socket]]s or other [[stateful]] endpoints. As of 2025, the problem has long since been solved, with the numbers of possible connections to a single computer capable of being in the millions.
 
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 I/O management.<ref name=Liu-Deters />
 
== History ==
Line 10:
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]])<ref name = "WhatsApp blog, 2012" > {{ Cite web | url = https://blog.whatsapp.com/196/1-million-is-so-2011 | title = 1 million is so 2011 | access-date = 25 July 2019 | date = 6 January 2012 | website = [[WhatsApp]] blog | quote = 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 | archive-url = https://web.archive.org/web/20140501234954/https://blog.whatsapp.com/196/1-million-is-so-2011 | archive-date = 1 May 2014 | df = dmy-all }} </ref><ref name = "Reed, Erlang Factory, 2012" > {{ Cite web | url = http://www.erlang-factory.com/upload/presentations/558/efsf2012-whatsapp-scaling.pdf | title = Scaling to Millions of Simultaneous Connections | access-date = 25 July 2019 | first = Rick | last = Reed | date = 30 March 2012 | website = Erlang Factory | page = 7 | archive-url = https://web.archive.org/web/20120709235656/http://www.erlang-factory.com/upload/presentations/558/efsf2012-whatsapp-scaling.pdf | archive-date = 9 July 2012 | df = dmy-all }} </ref> and 10–12 million connections (MigratoryData, 12 cores, using [[Java (Programming language)|Java]] on [[Linux]]).<ref name="C10M" /><ref name="C10M-howto">{{Cite web|url=https://migratorydata.com/blog/migratorydata-with-12-million-concurrent-websockets/|title=Scaling to 12 Million Concurrent Connections: How MigratoryData Did It|website=migratorydata.com|language=en|date=2013-10-10|access-date=2021-10-15|author=Mihai Rotaru}}</ref>
 
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 serversserver]]s, [[web serversserver]]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]]