2. Příklad - uložení rezervace
● uložení do DB
● záznam uživatelských změn (log)
○ stav objektu před uložením a po uložení
● distribuce dat (channel manager)
○ API
3. Problémy
Celý proces v jednom běhu skriptu
- dlouhá transakce, timeouty
- rozsáhlá DB
- komplikované rozšíření funkčnosti
4. Řešení
● oddělení běhu a logiky pomocí RabbitMQ
○ nástroj pro práci s frontami zpráv
○ zpráva, fronta, producer, consumer
● změna úložiště dat na ElasticSearch (ES)
○ JSON dokumentová DB
○ index, dokument
- opensource
- stabilní a podporované
5.
6. Výhody a nevýhody RabbitMQ
+ zrychlení základního procesu ukládání rezervace
+ jedno místo pro odeslání, více míst pro příjem
+ možnost rozdělení procesu na více serverů
+ snadné rozšíření funkcionality
- složitá kontrola zpracování v původním skriptu
- potřeba nástroje na spouštění a kontrolu běhu consumerů
- MySQL transakce vs. zpracování v RabbitMQ
- zpracování v RabbitMQ může předběhnout velkou SQL transakci
7. Nasazení RabbitMQ v Previu
● Zpráva obsahuje obraz modelu
○ před uložením a po uložení
● Zpožděné doručování v případě chyby
○ fronty s rostoucím TTL až do max. počtu pokusů
● Rozšíření
○ přidání consumer skriptu
● Supervisord
○ nekonečně bežící php skripty
8. Výhody a nevýhody ElasticSearch
+ zmenšení velikosti DB při zvýšení výkonu
+ rozšíření možností vyhledávání
+ vhodnější struktura dat (tabulky vs indexy)
- více plánování (nasazení změn struktury 31.12. v 23:59)
- konflikt verzí dokumentu při rychlých operacích
9. Nasazení ElasticSearch v Previu
● Migrace 270GB v MySQL do ES
○ skript na 16 dní
● Time-based indexy
○ indexy s příponou časového období
○ snadné mazání starých dat
● Striktní mapování
○ potřeba hlídat přidání nového pole v kódu