Naar hoofdinhoud gaan
De AppSignal voor Elixir-integratie vertrouwt op een NIF die een bibliotheek aanroept om het zware werk te doen, geschreven in Rust. De taak is om data van de Elixir-app te ontvangen, te normaliseren en naar een afzonderlijk agent-proces te schrijven via een Unix-socket. De agent stuurt de data vervolgens periodiek naar AppSignal.com voor verdere verwerking. Zie onze pagina hoe AppSignal werkt voor meer informatie over hoe onze agent werkt. Hoewel het gebruik van een NIF inherente risico’s met zich meebrengt, heeft het in dit geval verschillende voordelen:
  1. De overhead is zeer laag. De functies in de NIF doen niets meer dan data ontvangen en doorsturen naar een worker thread, zodat de C-functie direct kan retourneren. Het is ontworpen om zo snel mogelijk te zijn met zeer weinig impact op de aanroepende thread, en om minimale garbage collection-belasting te genereren.
  2. Het maakt het gebruik mogelijk van dezelfde bibliotheek en agent die door AppSignal voor Ruby worden gebruikt, die op duizenden productieservers over de hele wereld draait. Het is battle-tested technologie, die in totaal 1 miljard requests per dag verwerkt (november 2016).
  3. De bibliotheek en agent zijn geschreven in Rust, en de primaire ontwerpoverwegingen waren (en blijven) robuustheid en performance.
Intern werkt de AppSignal NIF als volgt: het fork/exect een afzonderlijk agent-proces, waarnaar een worker thread in de NIF zijn data verstuurt via een Unix-socket. Alle I/O en verwerking in de NIF is asynchroon, dus aanroepen van zijn functies zullen de scheduler nooit ophouden. In het zeer onwaarschijnlijke geval dat er iets in de extensie panieken, schakelt de extensie zichzelf uit zonder het hostproces neer te halen. Hoewel het gebruik van native Elixir protobufs om direct met de agent te communiceren vanuit een BEAM-standpunt logischer is, maakt het gebruik van een NIF het gebruik van één enkele bibliotheek mogelijk. Dit vermindert potentiële problemen vanwege de hoeveelheid testen en finetunen die al heeft plaatsgevonden. Door zich te concentreren op één codebase kan AppSignal de hoogste kwaliteit garanderen voor al zijn klanten in alle ondersteunde talen.