2013-10-01 11 views
5

Wir versuchen, Graphite für ein (fast) Echtzeit-Grafik-Web-System zu verwenden. Allerdings können wir Graphit nicht schneller als 1 Sekunde Aktualisierungsraten beschleunigen. Letztlich würden wir Updates wie 100msGraphite Graph - wie schnell können wir die Grafik aktualisieren?

haben

Aus der Lektüre der FAQ sie es wie Graphit schnell klingen macht, ist - aber das ist entweder sehr irreführend oder ich verstehen mich nicht, wie Graphit

die Zeitinformationen zu beschleunigen für whisper scheint UNIX-Zeitstempel zu verwenden

Wie skalierbar ist Graphit?

Aus einer CPU-Perspektive skaliert Graphite horizontal sowohl auf dem Frontend als auch auf dem Backend, was bedeutet, dass Sie einfach mehr Maschinen zu dem Mix hinzufügen können, um mehr Durchsatz zu erzielen. Es ist auch fehlertolerant in dem Sinne, dass das Verlieren eines Back-End-Computers zu einem minimalen Datenverlust führt (unabhängig davon, welcher Computer im Speicher zwischengespeichert wurde) und das System nicht stört, wenn genügend Kapazität zur Verfügung steht.

Aus einer I/O-Perspektive führt Graphite unter Last viele sehr schnelle I/O-Operationen auf vielen verschiedenen Dateien aus. Dies liegt daran, dass jede unterschiedliche an Graphite gesendete Metrik in ihrer eigenen Datenbankdatei gespeichert wird, ähnlich wie viele Tools (drraw, Cacti, Centreon usw.) auf RRD-Arbeit aufbauen. Tatsächlich verwendete Graphite ursprünglich RRD für die Speicherung, bis grundlegende Einschränkungen auftraten, die eine neue Speicher-Engine erforderten.

Hohes Volumen (ein paar tausend verschiedene Metriken, die minutiös aktualisieren) erfordert ziemlich viel ein gutes RAID-Array. Das Backend von Graphite speichert eingehende Daten im Cache, wenn die Festplatten nicht mit der großen Anzahl kleiner Schreiboperationen mithalten können (jeder Datenpunkt ist nur ein paar Byte groß, aber die meisten Festplatten können nicht mehr als ein paar tausend E/A-Operationen pro Sekunde ausführen) sie sind winzig). Wenn dies der Fall ist, ermöglicht die Datenbank-Engine von Graphite, Flüstern, Kohlenstoff mehrere Datenpunkte gleichzeitig zu schreiben, wodurch der Gesamtdurchsatz nur um den Preis erhöht wird, dass überschüssige Daten im Speicher zwischengespeichert werden, bis sie geschrieben werden können.

Wie sind die Graphen in Echtzeit?

Sehr. Selbst unter hoher Last, wenn die Anzahl der Metriken in jedem Zeitintervall viel höher ist als die Rate, mit der Ihr Speichersystem E/A-Operationen und viele Datenpunkte in der Speicher-Pipeline durchführen kann (siehe vorherige Frage zur Erläuterung)), Graphite zeichnet immer noch Echtzeitgraphen. Der Trick besteht darin, dass, wenn die Graphite-Webanwendung eine Anforderung zum Zeichnen eines Graphen empfängt, sie gleichzeitig Daten von der Platte sowie vom Vorspeichercache (der bei mehreren Backendservern verteilt werden kann) abruft und die beiden Quellen von Daten, um ein Echtzeitdiagramm zu erstellen.

Auch zeigen sie nur wenige Sekunden und keine gebrochenen Punkte hier: http://graphite.readthedocs.org/en/latest/config-carbon.html und from and until must be a time specification conforming to the AT-STYLE time specification described hier: http://oss.oetiker.ch/rrdtool/doc/rrdfetch.en.html. http://graphite.wikidot.com/url-api-reference

Also was ist das? Ist Graphit schnell? oder ist es einfach schnell große Datensätze zu verarbeiten - wir suchen nach einem einfach zu bedienenden Web-Empfänger von Paketdaten zur visuellen Darstellung - Graphit schien eine großartige Lösung zu sein, aber jetzt, da wir alles konfiguriert und ausgeführt haben, schätze ich, dass wir nur ein verschwendet haben Viel Zeit

Danke!

Antwort

6

Graphit speichert höchstens einen Datenpunkt mit der feinsten definierten Genauigkeit (zusätzliche Datenpunkte werden gelöscht) in Ihrer storage-schemas.conf.Die feinste mögliche Präzision ist 1 Sekunde. z.B. Einbehalten = 1s: 6h, 1min: 7d, 10min: 5j

Um Ihre Ziele zu erreichen Sie benötigen einen Aggregator vor Graphite zu setzen. Der Aggregator nimmt alle Metriken auf und aggregiert die Daten und spült diese in den Graphite-Speicher, um dem Speicherschema zu entsprechen. Der Aggregator führt Berechnungen (Mittelwert, Summe, Mittelwert usw.) für die Metriken durch und sendet diese weiter. z.B. in der letzten Sekunde gemittelt 14ms zur Bearbeitung der Anfrage ODER für die letzten 10 Sekunden war die Gesamtzahl der Anfragen 4234.

So, während Sie nicht mit einer feineren Granularität als 1 Sekunde berichten können, können Sie die verwenden Aggregator, um die Summe und den Durchschnitt von dem zu erfassen, was während des 1-Sekunden-Zeitintervalls passiert ist, und dies zu melden.

Zwei gemeinsame Entscheidungen sind StatsD und der Graphite provided in carbon aggregator.

** StatsD, IMO ist der Weg zu gehen. Es ist ein Netzwerk-Daemon, den Sie separat ausführen und über UDP senden. Das heißt, Sie können das gleiche (z. B. UDP) mit carbon-aggregator.py tun.

+1

Gibt es einen Weg für mich, etwas von der Mechanik von Graphit zu ändern, um höhere Präzision zu ermöglichen? (Denken Sie an Oszilloskop-Anwendungen) Was Sie gesagt haben, ist sinnvoll für viele Anwendungen - aber wir versuchen, glatte Grafik Informationen in Echtzeit angezeigt werden - 1s Updates werden sehr klobig sein - die Daten, die wir an Graphit senden wird bereits verarbeitet und ist durchschnittliche Daten – morty346

+2

Nr. Graphit - [Flüstern] (https://github.com/graphite-project/whisper) db- wurde entwickelt, um Speicher-Footprint niedrig und konstant im Laufe der Zeit (wie [RRD] (http: // en.wikipedia.org/wiki/RRDtool)). Die Zeitreihendaten müssen in einen der definierten Zeitschritte (Sekunde, Minute, Stunde) eingegeben werden. Es klingt, als müssten Sie ein anderes Werkzeug in Betracht ziehen. –

Verwandte Themen