V Collabimu potřebujeme denně zpracovávat miliony záznamů na pozadí. Dříve jsme to dělali cronem, ale bylo to pomalé a nespolehlivé. Na přednášce vám ukážu, jak to s RabbitMQ dělat mnohem lépe.
2. Co děláme v Collabimu
150 000 klíčových slov denně
Postahujeme 900 000 stránek z vyhledávačů
Vyparsujeme jednotlivé URL stránek
Hledáme v nich weby klientů
3. E-shop má 10 000 obrázků produktů a potřebuje je
převést do různých velikostí.
Jak na to?
Praktický příklad:
4. 1. Jak si uložím, co už jsem udělal a co ne?
2. Způsob spouštění převodního skriptu. Cron? Linux service?
3. Spolehlivé spuštění více než jedné instance převodního skriptu
4. Ošetření, když některé konverze selže (dočasně/trvale)
5. Odložení znovuspuštění položek, které selhaly.
6. Jedna zaseknutá položka nesmí zaseknout celou frontu
Co potřebujeme vyřešit (motivace)
5. Tak šel čas...
MySQL fronty, cron
MySQL fronty, init skripty
RabbitMQ (+ MySQL),
init skripty
6. “RabbitMQ is a complex
beast”
“It’s flexible, powerful but also hard to entirely grasp and master.”
https://antoniogarrote.wordpress.com/2014/10/14/building-a-job-processing-system-for-jvm-apps-with-rabbitmq/
18. 1. prefetch_count = 1 !!!!!!!
2. x-max-priority (0 - 255)
3. bin/console setup-fabric
4. batch publish
5. Jak zabránit umírání MySQL spojení?
6. Jde consumovat více zpráv najednou?
Co se může hodit
19. 1. AMQPLazyConnection extends AMQPStreamConnection extends
AbstractConnection extends AbstractChannel
2. Jedna fronta se konfiguruje na 2 místech!
3. Chcete využívat Dependency Injection? Bude to bolet.
4. Budete to tak dlouho hackovat, až skoro napíšete vlastní bundle
oldsound/rabbitmq-bundle sucks!
Díky! Jiří Koutný