Prskavčí blog

Sep 16, 2015 - Comments

Porovnání implementace service v NodeJS a Go lang

Datadog a log parsing service

Pro používání Datadog na Heroku je potřeba několik věcí. Za prvé, pro datadog agenta potřebujete custom buildpack, který v kombinaci s vaším buildpackem vám umožní mít vše pohromadě. Pokud to nechcete můžete udělat samostatnou service přes kterou se dají parsovat logy pomocí této knihovny v NodeJS. Pokud chcete do Datadogu zapisovat deploy na Heroku použijte emailový post deploy hook. Aplikaci a její metriky můžete posílat přes Datadog API.

Začátek

Jako první jsem použil výchozí aplikaci od tvůrců a pustil tam jednu malou aplikaci, kde počet req/min dosahoval několika desítek a vše bylo bez problémů.

Tak jsem zapojil produkční aplikace. Počet requestů stoupl na 3000 req/min a aplikace začala mít značné problémy i když běžela na Performace-M dynu.

Heroku monitoring - NodeJS before optimalization

Řešení

Po diagnostikování těchto problémů jsme se dali do hledání memory leaks v NodeJS aplikaci a současně jsme zkusili tuto malou service přepsat do Go.

Obě řešení zafungovala a za pár hodin práce jsme měli už přijatelné výsledky v NodeJS. Mohli jsme snížit používaná dyna na běžné 1X a tam provádět další srovnání.

Heroku monitoring - NodeJS

Verze v go langu je na tom ještě trochu lépe hlavně s ohledem na stabilitu a pamět. Tuto verzi jsme nechali potom trvale v běhu na nejmenším dynu k dispozici s monitoringem.

Heroku monitoring - Go lang

Závěr

Pokud vás toto zaujalo pojďte si popovídat o Go langu na první Go lang meetup v Praze. Budeme mít lighting talk o tomto příkladu s dalšími detaily a zúčastní se i další firmy, které řeknou o svých zkušenostech. Pokud vás zajímají nějaké detaily o používaní Datadogu na Heroku tak se ozvěte v komentářích.