> ## Documentation Index
> Fetch the complete documentation index at: https://docs.appsignal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Warum ein NIF?

Die AppSignal-für-Elixir-Integration verlässt sich auf [ein NIF](http://erlang.org/doc/man/erl_nif.html), das eine Bibliothek aufruft, um die Hauptarbeit zu erledigen, geschrieben in [Rust](https://www.rust-lang.org). Seine Aufgabe ist es, Daten von der Elixir-App zu empfangen, sie zu normalisieren und sie über einen Unix-Socket an einen separaten Agentenprozess zu schreiben. Der Agent sendet die Daten dann regelmäßig zur weiteren Verarbeitung an AppSignal.com. Weitere Informationen zur Funktionsweise unseres Agents finden Sie auf der Seite [Wie AppSignal funktioniert](/appsignal/how-appsignal-operates).

Während die Verwendung eines NIF inhärente Risiken birgt, bietet die Verwendung eines solchen in diesem Fall mehrere Vorteile:

1. Der Overhead ist sehr gering. Die Funktionen im NIF tun nichts weiter, als Daten zu empfangen und sie an einen Worker-Thread zu senden, sodass die C-Funktion sofort zurückkehren kann. Es ist so konzipiert, dass es so schnell wie möglich ist und gleichzeitig sehr wenig Auswirkungen auf den aufrufenden Thread hat und eine minimale Garbage-Collection-Last erzeugt.
2. Es ermöglicht die Verwendung derselben Bibliothek und desselben Agents, die von AppSignal für [Ruby](/ruby) verwendet werden, das auf Tausenden von Produktionsservern auf der ganzen Welt läuft. Es ist eine kampferprobte Technologie, die täglich kombiniert 1 Milliarde Anfragen verarbeitet *(November 2016)*.
3. Die Bibliothek und der Agent sind in Rust geschrieben, und ihre primären Designüberlegungen waren (und bleiben) Robustheit und Performance.

Intern funktioniert das AppSignal-NIF wie folgt: Es fork/execed einen separaten Agentenprozess, an den ein Worker-Thread im NIF seine Daten über einen Unix-Socket sendet. Alle I/O und Verarbeitungen im NIF sind asynchron, sodass Aufrufe seiner Funktionen den Scheduler niemals aufhalten. Im sehr unwahrscheinlichen Fall, dass etwas in der Erweiterung in Panik gerät, deaktiviert sich die Erweiterung selbst, ohne den Host-Prozess herunterzufahren.

Während native Elixir-Protobufs zur direkten Kommunikation mit dem Agenten aus BEAM-Sicht mehr Sinn ergeben, ermöglicht die Verwendung eines NIF die Nutzung einer einzigen Bibliothek. Dies verringert potenzielle Probleme aufgrund der Menge an Tests und Feinabstimmungen, die bereits stattgefunden haben. Durch die Konzentration auf eine einzige Codebasis kann AppSignal die höchste Qualität für alle seine Kunden in allen unterstützten Sprachen garantieren.
