C10k-ongelma

Wikipediasta
Siirry navigaatioon Siirry hakuun

C10k-ongelma tarkoittaa tietotekniikassa suurien verkkoyhteysmäärien käsittelyyn liittyvään ongelmaa. Termin on esittänyt Daniel Kegel, joka viittasi kymmenen tuhannen yhteyden käsittelyyn cdrom.com-sivustolla. Palvelinohjelma voidaan toteuttaa useilla eri tavoilla, joita on kehitetty tehokkaampaan käsittelyyn.[1][2][3] Alkuperäinen C10K viittaa kymmenen tuhannen yhtäaikaisen pyynnön käsittelyyn, josta on johdettu "käänteinen C10K" eli RC10K, jolla viitataan kymmenen tuhannen ulospäin suuntautuvan yhteyden käsittelyyn.[4]

2010-luvun alussa palvelinohjelmistot pystyivät käsittelemään sadoista tuhansista miljoonaan yhtäaikaisista yhteyttä.[5][6] C10k-ongelman sijaan on esitetty C10M-ongelma, joka viittaa kymmeneen miljoonaan yhtäaikaiseen yhteyteen.[7][8] Eräänä ratkaisuna on ehdotettu TCP-pinon siirtämistä käyttäjäavaruuteen käyttöjärjestelmän ytimestä.[9] Myös käyttöjärjestelmän ytimeen on ehdotettu parannuksia.[10]

Syitä[muokkaa | muokkaa wikitekstiä]

Syitä ongelmaan on useita, mutta esimerkiksi HTTP-palvelimessa ne liittyvät kahteen suunnittelupäätökseen rinnakkaisuuden ja IO:n käsittelyssä. Esimerkiksi mikäli jokaista yhteyttä kohden luodaan säie hukataan resursseja kun yhteys ei tee mitään tai se joutuu odottamaan.[4]

Tekniikka[muokkaa | muokkaa wikitekstiä]

Unixissa on perinteisesti käytetty select() ja poll() järjestelmäkutsuja, jotka vaikkakin nopeita ovat liian hitaita kun yhteysmääriä on paljon. Esitettyjä vaihtoehtoja ovat muun muassa POSIXin AIO-rajapinta (asynchronous IO) ja I/O completion ports.[3]Linux-ydin on lisännyt AIO-rajapinnan versiossa 2.5, mutta io_uring on uudempaa kehitystä joka on tarkoitettu korvaamaan AIO-rajapinta.[11]

Lähteet[muokkaa | muokkaa wikitekstiä]

  1. Dan Kegel: The C10K problem 1999. Arkistoitu . Viitattu 17.2.2024. (englanniksi)
  2. Andrew Alexeev: The Architecture of Open Source Applications (Volume 2) nginx aosabook.org. Viitattu 17.2.2024. (englanniksi)
  3. a b Richard Gooch: I/O Event Handling Under Linux 28.6.1998. Arkistoitu . Viitattu 17.2.2024. (englanniksi)
  4. a b Dong Liu & Ralph Deters: The Reverse C10K Problem for Server-Side Mashups link.springer.com. Viitattu 17.2.2024. (englanniksi)
  5. Rick Reed: Scaling to Millions of Simultaneous Connections (PDF) 30.3.2012. Arkistoitu . Viitattu 17.2.2024. (englanniksi)
  6. Scaling to 12 Million Concurrent Connections: How MigratoryData Did It migratorydata.com. 10.10.2013. Viitattu 17.2.2024. (englanniksi)
  7. How MigratoryData solved the C10M problem: 10 Million Concurrent Connections on a Single Commodity Server migratorydata.com. 20.5.2015. Viitattu 17.2.2024. (englanniksi)
  8. The C10M problem c10m.robertgraham.com. Viitattu 19.2.2024. (englanniksi)
  9. Janus: A User-Level TCP Stack for Processing 40 Million Concurrent TCP Connections ieeexplore.ieee.org. 30.7.2018. Viitattu 19.2.2024. (englanniksi)
  10. The Secret To 10 Million Concurrent Connections -The Kernel Is The Problem, Not The Solution highscalability.com. 13.5.2013. Viitattu 19.2.2024. (englanniksi)
  11. Jonathan Corbet: Ringing in a new asynchronous I/O API lwn.net. 15.1.2019. Viitattu 17.2.2024. (englanniksi)