python

Spracovať milión pripojení za sekundu?

Je možné spracovať milión požiadaviek za sekundu s jazykmi ako Python? Do nedávnej doby to bolo nemysliteľné….Jazyky ktoré nebežia natívne na operačnom systéme sú považované za pomalé a mnoho firiem ich ani neskúša používať.Ale Python môže byť správny nástroj pre takúto prácu.
Python komunita sa v poslednej dobe sústredila na výkon. V CPythone vo veryii 3,6 bol zvýšený výkon interpret pomocou novej implementácie slovníka. CPython 3.7 bude ešte rýchlejší, a to vďaka zavedeniu rýchlejš  konvencie volania (call convention) a  cache pre slovníky (cache lookup dictionary).

Python je dosť používaný v oblasti mikroservisov, hostovaných na webe, a práve tu sa objavil nový framework pre mikroservisy a web aplikácie – Japronto.

Medzi jeho hlavné prednosti patrí to, že je rýchly, škálovateľný a pomerne malý, čo sa týka veľkosti kódu. Tiež podporuje  synchrónne a asynchrónne programovanie vďaka asyncio. Dokonca je rýchlejší ako NodeJS and Go.

Tieto výsledky boli získané na AWS c4.2xlarge , ktorý mal 8 VCPUs, bežalo to v São Paule. Na mašine bežal Ubuntu 16.04.1 LTS (Xenial Xerus) s Linux 4.4.0-53-generic x86_64. Použili Python 3.6.
Aby boli podmienky spravodlivé, pre všetkých(vrátane Go) bol spustený single proces single-worker. Servery boli zaťaženie pomocou WRK s 1 vláknom, 100 pripojení a 24 simultánnych (pipeline) requestov na pripojenie (kumulatívne 2400 requestov).

Ako sa podarilo Japronto frameworku dosiahnuť 1 000 000 requestov za sekundu?

Ak je mnoho malých GET requestov zreťazených spolu u klienta, existuje vysoká pravdepodobnosť, že dorazía v jednom pakete TCP , a potom možu byť  načítané jedným systémovým volaním.
Systémové volanie, a prenášanie dát z jadra do užívateľského priestoru je veľmi nákladná operácia v porovnaní s prenosom pamäti v priestore procesu. Takže je dóležíté robiť čo najmenej systémových volaní, jen tie ktoré naozaj potrebujeme vykonať.

Keď Japronto prijíma dáta a úspešne rozparsuje niekoľko requestov, pokúsi sa vykonať všetky požiadavky tak rýchlo, ako je to možné, pospája odpovede späť v správnom poradí, potom sa snaži odpovedať len pomocou jedného systémového volania.

Japronto je písaný takmer výhradne v jazyku C. Vačšina objektov sú písané ako rozšírenia pre pythov v jazyku C.

Zopár zaujímavých funkcií ktoré Japronto ponúka:

  • Implementácia HTTP 1.x s podporou blokového nahrávania (upload rozdelený na menšie časti)
  • Plná podpora pre HTTP pipeline
  • Keep-alive podporar
  • Podpora synchrónnych a asynchrónnych zobrazení
  • Rozdelovanie práce pomocou subrocesov (forking)

Plánuje sa podpora websockets a streamovanie cez HTTP. Vyzerá to na nádejný framework, ktorý by mohol dovoliť programovať veľmi rýchle web serverové aplikácie a tiež mikroservisy, ktoré sa dnes začínajú používať v cloud riešeniach.

Viac detailov nájdete na freecodecamp.

Pridaj komentár

Vaša e-mailová adresa nebude zverejnená. Vyžadované polia sú označené *

3 × two =