Jak API zrychluje vývoj — náš a brzy i externích uživatelů

API to v Livesportu dříve nemělo — nikoliv vlastní vinou — jednoduché. Víme ale, že se jeho vylepšování vyplatí, protože nám může zjednodušit život a zároveň hodně urychlovat vývoj aplikací.

Livesport
Livesport
Sep 17, 2019 · 5 min read

V Livesportu jsme před pár měsíci vydali aplikaci FlashScore pro mobilní operační systém KaiOS. Jde o systém vycházející ze zaniklého Firefox OS určený pro „hloupé telefony“. Aplikaci se nám podařilo na trh dostat zhruba za čtyři měsíce, tedy za výrazně kratší dobu než několik let předtím aplikace pro iOS a Android.

Něco takového bylo možné díky postupnému vylepšování aplikačního rozhraní (API). V našem případě je to v podstatě taková brána ke sportovním datům, se kterými v rámci našich aplikací a služeb pracujeme a díky kterým můžeme poskytovat výsledky, statistiky a další rychlý servis.

API nám pomáhá mimo jiné v rychlém prototypování aplikací. Je to i díky tomu, že se vývojáři nemusí učit složitou strukturu databáze, řešit její změny a zbytečně ji zatěžovat dotazy. Stačí jim „konzumovat“ samotné API.

API pro všechny

Chceme dosáhnout toho, abychom měli jedno univerzální a stabilní API, ke kterému kromě interních vývojářů dáme přístup také našim externím partnerům. K tomu připojíme kvalitní dokumentaci. Prozatím nechceme dělat vyloženě veřejné API, ale Livesport spolupracuje s několika partnery, kteří přístup k našim datům potřebují. Při neexistenci kvalitního API a dokumentace ale bohužel ztrácíme spoustu času a energie vysvětlováním a koordinací. Vydáváme se tedy cestou standardů a je to pro nás do budoucna důležitý krok.

Rádi bychom například zrušili tým, který pro externí partnery dělá přípravu a exportování dat. Prostřednictvím API získají partneři k datům přímý přístup a nám se uvolní kapacity, které jsou na práci s daty alokovány. Ve své podstatě tak zavádíme mnohem větší automatizaci.

API jsme dlouho dělali jako interní záležitost, která nebyla určená pro naše externí partnery a vývojáře. Vytvořili jsme si nástroj nazvaný Explorer (front-end běží v Reactu), v němž se dají „naklikat“ veškeré akce, které jdou z API vytáhnout. Explorer zároveň vývojářům zvládne přímo vygenerovat kód určený pro vložení do aplikace.

Podobný proprietární software ale postupem času vytváří překážky. Je to velká vstupní bariéra pro nové vývojáře, kteří nejsou schopní na specifický interní nástroj rychle naskočit. Nově se tedy snažíme jít cestou standardů a API prochází reinkarnací.

Jedna “úschovna”

Jedním z výsledků je to, že jsme cache sjednotili a udělali jeden single point of truth, kde se data pro API skladují. Tato část nám běží na technologii Redis. Vrstva postavená na Redisu využívá dva fyzické servery, přičemž na každém běží osm instancí, dohromady jich je tedy šestnáct. Každá instance udržuje 1 GB dat. Tyto dva servery nejsou replikované, ale jde o cluster využívající možnost rozložení zátěže.

Tato sestava odbavuje asi 11 tisíc klientských operací za sekundu. Samotný Redis jich ale zvládá ještě více, během sekundy kolem 600 tisíc. Když se uživatel zeptá na data, jsou definovány různé parametry, takže se na každý dotaz v Redisu udělá třeba 50 operací. Operace na Redisu dokáží vrátit odpověď do 50 milisekund. Celková odpověď API je v současné době do 250 milisekund, ale na zlepšení samozřejmě dále pracujeme.

Během posledního roku jsme hodně zapracovali na zjednodušení celé architektury API. Velký důraz jsme kladli na zlepšení kvality dat, která z API vycházejí. Kvalita je obecně věc, na níž nám hodně záleží, což je i důvod toho, proč jsme se pustili do obrovských výzev, jako je právě změna architektury.

Nadšený junior? Bereme!

Naše API cache v současné době dokáže odbavit 85 procent uživatelských dotazů. Cache plníme ještě předtím, než dotaz na data přijde. Automaticky do ní nahráváme zápasy, které se zrovna hrají, nedávno se hrály nebo se brzy hrát budou. Časové okno je v tomto případě 24 hodin.

API si dále může sahat do databáze a generovat do ní dotazy. Primárně jde o dotazy do MySQL, ale využíváme také Elasticsearch a v menší míře rovněž Sphinx. Pro externí firmy je k dispozici GraphQL endpoint, kterým se dotazují přímo na data. Celé API pak monitorujeme pomocí nástroje Prometheus, grafy a další vizuální výstupy zvládá Grafana.

Přemýšlíme i nad tím, jak do budoucna API provozovat v Kubernetes, což nám dá široké možnosti škálování. Teď API běží na bare metalu, ale obecně už náš dev stack Kubernetes a Docker využívá. Každý vývojář si může založit vlastní branch a otestovat funkčnost. CI/CD řešíme přes GitLab.

Tohle všechno znamená hodně práce, na kterou v současném týmu tří lidí nestačíme. Během roku bychom se chtěli dostat na hranici kolem deseti vývojářů. Nehledáme nutně plně připravené seniory a budeme rádi i za nadšené juniory, kteří o tuto oblast mají zájem a chtějí se jí učit. Hodí se každopádně zkušenosti s technologiemi Node.js a TypeScript a případně i s architekturou a výkonem API.

Spolu s tím se snažíme spolupracovat s externími firmami, jež jsou na API zaměřené. Už jsme například v kontaktu s Good API. Ta nám pomáhá redukovat množství cest, které bychom jinak museli slepě prošlapat.

Zaujalo tě, co v Livesportu děláme? Přidej se k nám!

Livesport Dev

Od vývojářů pro vývojáře.

Medium is an open platform where 170 million readers come to find insightful and dynamic thinking. Here, expert and undiscovered voices alike dive into the heart of any topic and bring new ideas to the surface. Learn more

Follow the writers, publications, and topics that matter to you, and you’ll see them on your homepage and in your inbox. Explore

If you have a story to tell, knowledge to share, or a perspective to offer — welcome home. It’s easy and free to post your thinking on any topic. Write on Medium

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store