Starke Optimierung der Arbeit mit Marktdaten für Krypto-Vögel



Während des Refactorings unserer Cryptobirds wurde beschlossen, das Konzept der Arbeit mit dem Marktdatum zu überarbeiten. Im klassischen Fall wird das Marktdatum auf zwei Arten verteilt:

1. REST-Schnittstelle;
2. Abonnement für das WEBSocket-Broadcast.

Die REST-Methode wird häufig zum Abrufen historischer Daten verwendet, während aktuelle Informationen über WEBSocket online gesendet werden. In einigen Fällen wird WEBSocket überhaupt nicht verwendet, und die Aktualisierung erfolgt bei regelmäßigen Anfragen über REST.

Und alle scheinen glücklich zu sein. Bei näherer Betrachtung wird jedoch der enorme Aufwand eines solchen Konzepts deutlich. Ihr Hauptteil liegt auf dem REST. Um das Funktionieren der REST-Schnittstelle zu gewährleisten, müssen wir ein Backend erstellen, das den Anforderungen von Hochlastsystemen entspricht. Natürlich können Sie hier verschiedene Lösungen von PHP bis hin zum modischen Golang wählen.

Sie müssen auch eine hochverfügbare Infrastruktur erstellen, Kleinigkeiten wie CI / CD für Dienste implementieren, all dies mit den erforderlichen Spezialisten für Entwicklung, Wartung usw. bereitstellen.

Gleichzeitig nimmt das historische Marktdatum den Großteil des Speicherplatzes ein. Sie wird normalerweise in der Datenbank gespeichert. Dies ermöglicht uns einerseits, das Clusterproblem zu lösen, wird jedoch bei kritischen Größen zu einer unerträglichen Belastung und stellt das DevOps-Team und die Entwickler vor nicht unbedeutende Aufgaben.

Im Allgemeinen ... wird die scheinbare Einfachheit und Konsequenz dieses Konzepts durch das raue Leben in Stücke gerissen.

Sie müssen die Funktion des Marktdatums separat notieren. Es sammelt sich immer an (wächst). Ie In der Sprache des DB-Programmierers fügen wir immer ein und wählen dann aus. Aber nicht teilen. Ie hervorragende Datenbankfunktionalität zum Organisieren, Optimieren usw. Die gespeicherten Daten werden nicht mehr beansprucht.

Eine weitere wichtige Eigenschaft des Markttermins ist die klar definierte Struktur. Zum Beispiel hat eine Kerze in einem Diagramm nur acht Parameter:

1. einen Zeitpunkt;
2. Belichtung;
3. Maximalpreis;
4. Der Mindestpreis;
5. Eröffnungspreis;
6. Schlusskurs;
7. Volumen;
8. Durchschnittspreis

Das gleiche gilt für Transaktionen.

Aufgrund dieser Voraussetzungen und meiner Erfahrung kam ich schnell zu dem Schluss, dass es richtiger ist, das Marktdatum als strukturierten Strom zu behandeln.

Ein Stream mit Kerzen kann beispielsweise als ein Array binärer Strukturen betrachtet werden: Total: 56 Bytes. Zum Beispiel wird eine solche Kerze in JSON wie folgt beschrieben:

moment: int32
exposition: int32
min: float64
max: float64
open: float64
close: float64
volume: float64
average: float64






{
"date":1501004700, 
"high":0.08053391,
"low":0.08020004,
"open":0.08030001,
"close":0.0803542,
"volume":48.62169347,
"weightedAverage":0.08038445
}

Insgesamt: 167 Bytes.

Gewinn in der Größe ist offensichtlich. Und das ist weniger Verkehr, höhere Liefergeschwindigkeit an den Kunden.

Und dann fällt mir natürlich BSON ein. Es löst jedoch nicht das Problem eines Backends und löst das Problem im Allgemeinen nicht grundlegend. Außerdem wird es von Browsern nicht nativ unterstützt.

Ich schaute in die andere Richtung. Das Netzwerk verfügt über viele Ressourcen, die mit Threads arbeiten. Dies sind Audio- und Videoressourcen. Sie zeigen alle Zeichen, die benötigt werden:

  1. mit großen Datenmengen arbeiten;
  2. bewältigt hohe Lasten;
  3. Sie können Inhalte online bereitstellen, bieten jedoch gleichzeitig die Möglichkeit, auf historische Daten zuzugreifen.

Ich habe mich ein wenig mit Streaming-Videos beschäftigt, so dass wir alle oben genannten Probleme bis zum Marktdatum grundsätzlich lösen konnten. Wie sich herausgestellt hat, ist die gesamte Magie in der Content-Range- Technologie verborgen, die standardmäßig  unterstützt wird, beispielsweise Nginx. Sie können damit auf jeden Bereich einer statischen Ressource (Datei auf dem Server) zugreifen, ohne das Backend zu verwenden. Im Allgemeinen geschieht dies folgendermaßen: Sie beziehen sich auf die URL, indem Sie im Titel die Belichtung angeben, die Sie zurückgeben möchten. Zum Beispiel: Bereich: 100-200. Ich werde nicht auf die Feinheiten eingehen, alle Nuancen der Technologie, die Sie in den entsprechenden Artikeln finden. Ich denke, der Punkt ist klar.

Tatsächlich können Sie jetzt auf der Vorderseite einen Aufruf an den erforderlichen Teil der Datei organisieren, z. B. mit Kerzen. Und da genau bekannt ist, wie viele Bytes eine Kerze beansprucht (56 Bytes), können wir leicht den Offset bestimmen, den wir benötigen. Natürlich müssen wir noch wissen, zu welchem ​​Zeitpunkt der Zeitplan beginnt. Das lässt sich leicht lösen, indem der Datei ein Header hinzugefügt wird, dessen Größe ebenfalls konstant ist.

Ie Zunächst greift die Front auf die Datei von der Nullposition zu und erhält den
Header. Gleichzeitig gibt nginx die Dateigröße an. Auf diese Weise können Sie die Gesamtanzahl der Kerzen in der Datei und den Startpunkt bestimmen.

Nun, da wir den Anfangszeitpunkt kennen und eine klare Vorstellung von der Anzahl der Kerzen haben, können wir eine beliebige Anzahl von Kerzen für einen beliebigen Zeitraum von vorne erhalten, ohne das Backend zu verwenden.

Oh ja, ein weiterer Moment ... wir haben einen solchen Parameter wie die Kerzexposition. Auch hier ist die Lösung einfach: Wir halten mehrere Dateien gleichzeitig für verschiedene Belichtungen. Als zusätzlicher kleiner Bonus wird die Größe der Kerzenständer-Struktur um weitere 4 Byte reduziert.

Im Allgemeinen war die Entscheidung bereits recht interessant für die Umsetzung, aber es stellte sich immer noch heraus, ich schäme mich nicht zu sagen - sehr hohe Gewinne. Tatsache ist, dass Browser Daten, die mit der Range-Methode abgerufen werden, zwischenspeichern können. Ie Wenn dieser Teil der Datei bei der nächsten Anfrage von vorne an den Server vom Browser früher empfangen wurde, wird er nicht an Ihren Server gesendet, sondern aus dem Cache.

Aber auch das ist noch nicht alles. Mit CDN kann die Zwischenspeicherung auch über dessen Mittel konfiguriert werden. Ie Den Ergebnissen zufolge ist es möglich, ein System zu erhalten, das in der Lage ist, große Mengen von Marktdaten an die Infrastruktur und die Server mit minimaler Last zu liefern.

Unnötig zu sagen, gab es keinen Zweifel mehr an der Loyalität der Idee? Jetzt gibt es bloße Kleinigkeiten ... Sie müssen diese Dateien generieren.

Wie oben erwähnt, nutzt die Börse normalerweise zwei marktgängige Liefersysteme: REST und WEBSocket. Letzterer überträgt online das aktuelle Marktdatum. Normalerweise ist dies ein separater Dienst. Wie die Praxis gezeigt hat, ist die Verfeinerung dieses Dienstes, so dass er Daten an die erforderlichen Dateien anfügt, nicht schwierig und wird durch einige Entwicklerstunden buchstäblich gelöst. Wir können sagen, dass es gleichzeitig mit der Verteilerliste ein Protokoll führt.

Das Problem der Bereitstellung von Dateien an Knoten ist ein klassisches Dateisystemsynchronisierungsproblem. Das DevOps-Team löst es einfach und natürlich. Zum Beispiel mit rsync.

Jetzt können wir mit Sicherheit sagen - BINGO!

Vielleicht stellt sich die Frage - warum machen sonst alle Krypto-Austausche? Ich habe keine verlässliche Antwort auf diese Frage. Aber es gibt Gedanken:

  1. Der Austausch wurde von Entwicklern geschaffen, die mit der Gruft sympathisieren. Vielleicht hatten sie keine Ahnung von der Arbeit der klassischen Börsen, berücksichtigten ihre Erfahrung nicht und verwendeten leicht zugängliche Lösungen, um schnelle Ergebnisse zu erzielen. Und dies sind Musterlösungen: das gleiche REST und das dazugehörige JSON;
  2. wie sie in Menschen sagen - funktioniert das? Nicht anfassen. - seit Technologiebörsen wurden bereits von Schlüsselbörsen geschaffen, und die aufstrebenden Märkte haben sie aufgenommen.

Wenn sich herausstellt, dass das Thema für die Community interessant ist, werde ich mit Artikeln über andere nicht standardisierte Lösungen fortfahren, die in unserem Projekt implementiert wurden. Wie es in der Praxis funktioniert, sehen Sie auf der Website der Börse (siehe mein Profil). Insbesondere schlage ich vor, auf die Arbeit des Zeitplans zu achten, die alle Gewinne dieser Technologie deutlich zeigt.

Jetzt auch beliebt: