Mi fán terem az ElasticSearch és miért lett ettől sokkal-sokkal jobb a Billingo?

2016-03-10 - Hírek

Mi fán terem az ElasticSearch és miért lett ettől sokkal-sokkal jobb a Billingo?

2016-03-10 - Hírek

Február utolsó hetében szépen lassan elkészül az egyik kedvenc fejlesztésünk, és úgy éreztük, hogy eljött az ideje megosztani veletek, hogy mi is az. TL;DR: A Billingo gyorsabb lesz. Sokkal-sokkal gyorsabb!

De kezdjük az elején, mi is történt pontosan?

Amikor 2013 végén a Billingot elkezdtük tervezni még a legmerészebb álmainkban sem gondoltuk volna, hogy egyszer ott fogunk tartani ahol ma. Sok ezren használjátok a Billingot nap mint nap, közel 200 ezer számla lett kiállítva több mint 100 ezer ügyfél részére, több mint 300 ezer termékről. Mindez nem egészen két év alatt. Ráadásul a forgalmunk szinte exponenciálisan növekedik napról napra. Azonban tavaly már bizonyos felhasználóknál érezhetően elkezdett lassulni a rendszer. Ezt részben a statisztikák folyamatos számolása okozta, amit ugyan különböző cacheléssel tudtunk puhítani, de a megoldás nem volt tökéletes. Sőt! Két lépcsőben fogalmaztuk meg fejlesztést a sebesség növeléséhez. Elsősorban a régi szervereinket le kellett cserélni új és modern szerverekre. Erre sor került még tavaly év végén. A második lépcsőben pedig a teljes számlalistát, a statisztika számolást és keresést is újra kellett gondolni. A keresés mindezektől függetlenül is egy olyan része a Billingónak, amelynek egy sokkal központibb szerepet és jobb működést szánunk. De hogy jön mindehhez az ElasticSearch?

A Billingo és az ElasticSearch

Az ElasticSearch az Apache Lucene nyílt forráskodú projektből kinőtt szintén nyílt forráskódú keresőmotor. Nagyon hasonlít a már mmeglévő Apache Solr projekthez ami szintén a Lucene-re épül. Sőt, elmondható, hogy hajszál vékony különbség van a kettő között. Több ok is volt, ami miatt az ES mellett döntöttünk:

Dokumentum séma liberális és könnyed kezelése

Könnyebben és jobban lehet skálázni az egész rendszert JSON natív ElasticSearch ökoszisztéma: LogStash és Kibana Az egész művelet tulajdonképpen egészen egyszerű. Megfogunk egy JSON dokumentumot, amit felvezetünk ES-be, ami pedig ebből csinál egy invertált indexet. Nagyon egyszerű példával:

{
    "id": 12345,
    "client.name": "Teszt Elek"
}

A felvitt JSON dokument

Az invertált index azt mondja meg, hogy a "Teszt Elek" név mely azonosítókhoz tartozik. Így nagyon gyorsan lehet keresni a dokumentumokban, hiszen csak megkeressük az invertált indexben, mely azonosítók tartoznak a keresett szóhoz és visszaadjuk a legközelebb eső dokumentumokat. Így elkerülhető, hogy minden dokumentumot egyesével végig kelljen vizsgálni. Természetesen ez egy borzasztóan leegyszerűsített példa volt, a háttérben bonyolult algoritmusok futtatnak analíziseket a felvitt adatokon.

És ez miért is jó?

Azon kívül, hogy a keresés sokkal gyorsabb lesz, van egy másik nagyon fontos és jó funkciója az ElasticSearch-nek. A csoportosításokkal (aggregations) tulajdonképpen a dokumentumok mezőin (értékein) különböző számolásokat tudunk végezni valamint a szűrőkkel (filter) tudjunk pontosítani az értékek számolását. Az egész nagyjából úgy működik, hogy először szűrőkkel meghatározunk egy vödröt (bucket). Például legyen az egyik ilyen vödör a nem piszkozat számlák halmaza, amelyeket január 1. és január 31. között állítottak ki. Ezután ezen a vödrön különböző számításokat (metrics) tudunk végezni, például összeadni a számlák végösszegeit, hogy megkapjuk a január hónap teljes bevételét. Természetesen a szőrökön kívül a keresést (query) is használhatjuk, hogy tovább finomítsuk a lekérdezésünket. Azonban összehasonlítva a régi relációs adatbázisban történő lekérdezésekkel, ez elképesztő sebességgel történik.

Jó, jó, de mennyivel lett gyorsabb a Billingo?

Hát nem akarjuk elszólni, és mindenkinél másképp fog jelentkezni a sebesség növekedés, de a mi egyik teszt fiókunkban (ami direkt burn-in tesztre van kihegyezve) a 22-30 másodperces betöltést sikerült leszorítanunk egy tized (!!) másodperc alá.

Csak az ElasticSearch-nek köszönhetően?

Nem. Rengeteget dolgoztunk további cache megoldásokon, de azért ennek a javulásnak az oroszlán részét az ElasticSearch bevezetésének köszönhetjük. :)

Szuper! Hogyan tovább?

Már most sokkal jobb a keresőnk, mint eddig bármikor, és a célunk az, hogy még tovább fejlesszük ezt a részét is a programnak, hogy még kényelmesebb legyen a Billingo használata azok számára is, akik sok-sok ezer számlával használják. Már most lehet keresni partnerre, email címre, termék nevekre, megjegyzésekre és ezeket tovább szeretnénk bővíteni, valamint önmagában a kereső használatát is szeretnénk még egyszerűbbé tenni. Nem hiszed? Kattints ide és próbáld ki milyen gyors lett a Billingo »

Mire vársz?
A Billingóval csak nyerhetsz!
Regisztrálj és próbáld ki teljesen INGYEN!

Billingo

Szólj hozzá Te is

További bejegyzések

Webshopod van? Így nevelj könnyen visszatérő vásárlót

2017-02-23

Tudtad, hogy webáruházas rendelés egyik hátrányát, a kiszállítási idő okozta várakozást, könnyedén előnnyöddé is kovácsolhatod? Most megmutatjuk neked, hogy egy emlékezetes csomagélménnyel hogyan szerezhetsz egyszeri megrendelők helyett hűséges és rendszeres vásárlókat. …

Elolvasom
Tömeges számlagenerálás – így készíts több száz számlát néhány kattintással

2017-02-16

Unod már, hogy minden hó végén rengeteg számlát állítasz ki, de ezeket egyesével kell megírnod? A Billingo tömeges feltöltés funkciója segít, hogy ezt az órákon át tartó monoton robotolást néhány kattintással letudd. Összegyűjtöttünk mindent, amit a tömeges számlagenerálásról tudnod kell.…

Elolvasom
Hatékonyságnövelés 3 lépésben – 3. rész

2017-02-09

Vállalkozásod fejlődéséhez neked is folyamasan tanulnod, fejlődnöd, javulnod kell. Hatékonyságnövelő sorozatunk utolsó részében ehhez is adunk néhány tippet!…

Elolvasom
Összes bejegyzés
Billingo nav

A Billingo megfelel a legfrissebb magyar jogszabályoknak