C10k problem: Difference between revisions

Content deleted Content added
AnomieBOT (talk | contribs)
m Dating maintenance tags: {{Excessive quotation}}
Hgual (talk | contribs)
fixed: instructional tone ("note that..."); "in other words" attempts to re-explain something when only one clear explanation is required; undefined acronyms; section copy-pasted verbatim from source; see-also item already linked in text
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 optimizing [[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 |archive-date=2013-07-18 |archive-url=https://www.webcitation.org/6ICibHuyd?url=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> NoteHandling thatmany concurrent connections areis nota thedifferent sameproblem asto handling many [[requests per second]], though they are similar: handlingthe many requests per secondlatter requires high throughput (processing them quickly), while a 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 connectionsformer does not necessarily have to be a fast system, onlybut onerequires whereefficient each request will deterministically return a response within a (not necessarily fixed) finite amountscheduling of timeconnections.
 
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 />
 
== History ==
The term '''C10k''' was coined in 1999 by '''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 problem|C10M]]" in the 2010s to refer to 10 million concurrent connection.<ref name="C10M" />
 
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 | format = pdf | 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> 10–12 million connections (MigratoryData, 12 cores, using [[Java (Programming language)|Java]] on [[Linux]]).<ref name="C10M" /> <ref name="C10M-howto" />
 
Common applications of very high number of connections include general public servers, (or even private servers of very big companies whose sparse offices are connected to those servers via their [[Virtualvirtual private network|VPNs]])s, that have to serve thousands or even millions of users at a time, such as [[Filefile server|file servers]]s, [[FtpFTP server|ftp servers]]s, [[Proxy server|proxy servers]], web servers, [[Load balancing (computing)|load balancers]], etcand so on.
<ref name="conn-very-high-file">{{Cite book|url=https://www.google.it/books/edition/High_Performance_Computing_HiPC_2008/cNwZ1snBYQYC?hl=it&gbpv=1&dq=file+server+very+high+number+of+connections&pg=PA470&printsec=frontcover|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|isbn=978-3-540-89893-1}}</ref>
<ref name="C10M" />
 
== C10M problem ==
{{excessive quotation|date=January 2022}}
"The '''C10M''' problem relates to the classic '''C10k''' problem. Defined as supporting 10 million concurrent connections on a single machine, it remains a challenging problem not only for web servers, but for any [[Server (computing)|Internet server]] in general."
<ref name="C10M">{{Cite web|url=https://migratorydata.com/blog/migratorydata-solved-the-c10m-problem/|title=How MigratoryData solved the C10M problem: 10 Million Concurrent Connections on a Single Commodity Server|website=migratorydata.com|language=en|date=2015-05-20|access-date=2021-10-15|author=Mihai Rotaru}}</ref>
<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>
<ref name="C10M-middleware-2017">{{cite journal |last1=Rotaru |first1=Mihai |last2=Olariu |first2=Florentin |last3=Onica |first3=Emanuel |last4=Rivière |first4=Etienne |display-authors= |date=December 2017 |title=Reliable messaging to millions of users with MigratoryData |url=https://arxiv.org/pdf/1712.09876.pdf |journal=Proceedings of the 18th ACM/IFIP/USENIX Middleware Conference: Industrial Track |pages=1–7 |doi=10.1145/3154448.3154449}}</ref>
 
== See also ==
*[[Load balancing (computing)]]
*[[Event-driven architecture]]
*[[Event-driven programming]]