% Měření odezvy {#mereni}
Pro měření jsem použil nástroj ab, určený pro měření odezvy HTTP serverů [@ab]. K běhu testovaných služeb jsem použil Gunicorn, HTTP server napsaný v Pythonu [@gunicorn].
U měření zaměřených na autentizaci a autorizaci jsem vynechal implementaci v sandmanu2,
jelikož ta příslušné části neobsahuje. Autentizaci jsem prováděl proti falešnému OAAS
z vlastního modulu utvsapitoken
, který běžel na stejném počítači jako testované služby.
U ostatních měření jsem autentizaci i autorizaci vypnul, aby neovlivňovala měření.
Data byla při měření dostupná v MariaDB databázi běžící na stejném počítači jako testované služby.
HTTP server byl spuštěn s dvěma vlákny. Měřící nástroj ab službu testoval pěti tisíci požadavky, v dávkách po jednom stu, kde jedna dávka vždy probíhala současně.
Zde prezentované měření rychlosti odezvy bylo prováděno na konkrétních implementacích popsaných v kapitole \nameref{implementace}. Vzhledem k tomu, že jednotlivé měřené implementace jsou netriviální, nelze zde prezentované výsledky v žádném případě generalizovat na celý použitý framework.
U jednotlivých měření uvádím příklad požadavku. Pro jednotlivé implementace se tyto požadavky mohou mírně lišit, ale pro přehlednost uvádím pouze jeden.
Záznamy z měření s kompletními požadavky, výstupy a naměřenými rychlostmi jsou dostupné na přiloženém médiu. Testovací skripty jsou také dostupné na přiloženém médiu a na adrese:
\url{https://github.com/hroncok/utvsapi-benchamrk}
Při tomto měření byl testován požadavek na jednu položku:
GET /enrollments/25563/
Jak můžete vidět z grafu, nejrychlejší je zde implementace v ripozu a nejpomalejší v Django REST frameworku.
Při tomto měření byl testován požadavek na jednu stránku seznamu položek o délce dvacet:
GET /enrollments/?page_size=20
Je třeba poznamenat, že ripozo v seznamu uvádí jen odkazy na jednotlivé položky a ostatní frameworky serializují všech dvacet objektů. Bohužel ripozo jinou možnost nenabízí, tento test má tedy méně vypovídající hodnotu. Proto je v grafu u ripoza hvězdička.
Jak můžete vidět z grafu, nejrychlejší je zde nepřekvapivě právě implementace v ripozu, nejpomalejší pak v sandmanu2.
Při tomto měření byl testován požadavek na seznam kurzů, které probíhají v pátek, a velikost byla opět omezena na dvacet:
GET /courses/?page_size=20&day=5
Platí stejná poznámka jako u minulého měření -- ripozo je zde ve značné výhodě. V grafu je proto označeno hvězdičkou.
Jak můžete vidět z grafu, nejrychlejší je opět implementace v ripozu, ale již nemá takový náskok, nejpomalejší je opět implementace v sandmanu2.
Při tomto měření byl testován požadavek na jednu položku z jiného zdroje než /enrollments/
,
tedy u zdroje, kde je autorizační logika jednodušší:
GET /courses/1/ Authorization: Bearer ...
Jak můžete vidět z grafu, nejrychlejší je opět implementace v ripozu (zde už není zvýhodněný), nejpomalejší implementace v Django REST frameworku.
Při tomto měření byl testován požadavek na jednu položku ze zdroje, kde je autorizační logika komplexní:
GET /enrollments/25563/ Authorization: Bearer ...
Byly provedeny tři měření, pokaždé s jiným druhem tokenu (studentský, zaměstnanecký a „všemocný“). Vzhledem k tomu, že se jednotlivé výsledky lišily jen o malou aditivní konstantu, prezentuji zde průměr z těchto tří měření.
Jak můžete vidět z grafu, nejrychlejší je opět implementace v ripozu, nejpomalejší pak implementace v Django REST frameworku.
Provedl jsem i měření pro seznam položek s komplexní autorizací:
GET /enrollments/?page_size=20 Authorization: Bearer ...
Zde se výsledky lišily podle toho, jestli se jednalo o studentský token či nikoliv. V grafu je zobrazen průměr pro zaměstnanecký a všemocný token; nejrychlejší je implementace v ripozu, která je zde opět ve velké výhodě, protože se jedná o seznam položek. Implementace v Django REST frameworku je mírně pomalejší než implementace v Eve.
V grafu jsou vidět výsledky pro studentský token. Zde je ripozo pořád ve výhodě, ale přesto zaostává za nejrychlejším Django REST frameworkem i druhým Eve.
Vzhledem k rozdílným výsledkům pro různé druhy požadavků se zdráhám z měření vyvozovat nějaké závěry.