- Radar bietet eine Geoinformations-Infrastruktur, die täglich mehr als eine Milliarde API-Anfragen verarbeitet, und wechselte von Elasticsearch und MongoDB zu der selbstentwickelten HorizonDB, um Probleme bei Performance und Skalierbarkeit zu lösen
- HorizonDB wurde in Rust entwickelt und ist eine leistungsstarke Geodatenbank, die verschiedene Open-Source-Tools wie RocksDB, S2, Tantivy, FST, LightGBM und FastText kombiniert
- In der bisherigen Struktur waren die Skalierungskosten und die Komplexität von Elasticsearch und MongoDB hoch, was den Betrieb erschwerte
- HorizonDB basiert auf einem einzelnen Multi-Thread-Prozess und erreicht dadurch Kostenersparnis, Leistungsverbesserung und hohe Zuverlässigkeit
- Insgesamt verbesserten sich Entwicklungsproduktivität und Betriebseffizienz deutlich, sodass neue Daten oder Funktionen schnell übernommen werden konnten
- Die Daten werden nach der Verarbeitung mit Apache Spark versioniert in AWS S3 gespeichert; Entwickler können sie auch lokal einfach ausführen und testen
- Dadurch wurden große MongoDB- und Elasticsearch-Cluster abgeschaltet, die Kosten deutlich reduziert und sowohl die Feature-Entwicklungsgeschwindigkeit als auch die Datenträgerverarbeitungseffizienz verbessert
Einführung und Hintergrund
- Radar ist eine Geo-Lokations-Infrastrukturplattform, die täglich mehr als eine Milliarde API-Calls für hunderte Millionen Geräte weltweit verarbeitet
- Wichtige APIs sind unter anderem Geocoding, Search, Routing, Geolocation compliance
- Mit dem Wachstum von Datenvolumen und Produktumfang wurde die Lösung von Performance-, Skalierbarkeits- und Kostenthemen dringend erforderlich
- Aus diesem Grund wurde die in Rust geschriebene HorizonDB eingeführt, die verschiedene Standortdienstleistungen aus einem hochperformanten Binärpaket bereitstellt
- 1.000 QPS pro Kern
- mittlere Latenz bei Forward Geocoding: 50 ms, Reverse Geocoding < 1 ms
- lineare Skalierung auf Standardhardware
Grenzen der bisherigen Architektur
- Vorherige Struktur: Forward Geocoding lief über Elasticsearch, Reverse Geocoding über MongoDB
- Probleme:
- Elasticsearch verteilt Abfragen auf alle Shards und erfordert regelmäßige Batch-Updates
- Bei MongoDB ist das Einspeisen großer Batches schwierig, außerdem sind übermäßige Ressourcenzuweisung und ein zuverlässiger Rollback-Mechanismus nicht vorhanden
Ziele der HorizonDB-Architektur
- Effizienz – Laufzeit auf Standardhardware, voraussagbares Autoscaling, dient als einzige Datenquelle für alle Geo-Entitäten
- Betriebstauglichkeit – tägliches mehrmaliges Bauen und Verarbeiten der Datenbestände, einfache Änderungen und Rollbacks, vereinfachter Betrieb
- Entwicklererlebnis – lokale Ausführung möglich, Änderungen und Tests sind einfach
Verwendeter Technologie-Stack
RocksDB, S2, Tantivy, FSTs, LightGBM und FastText werden kombiniert, während die Daten nach der Vorverarbeitung mit Apache Spark von einer Rust-Komponente als versionierte Dateien in S3 gespeichert werden
-
Rust
- Eine von Mozilla entwickelte Systemprogrammiersprache
- Garantiert Kompilier- und Speicher-Sicherheit, ermöglicht vorhersagbare Verwaltung großer Indexspeicher ohne Garbage Collection
- Nullbehandlung, Pattern Matching und weitere hochniveaus Abstraktionen erleichtern die Abbildung komplexer Ranking-Logiken in der Suche
- Ein einziger Multi-Thread-Prozess optimiert die Verarbeitung von Hunderten von GB an Daten auf SSDs
-
RocksDB
- Leistungsstarker, auf LSM-Tree basierender In-Process-Speicher
- Reaktionszeiten im Mikrosekundenbereich, stabile Performance auch bei großen Datenmengen
-
S2
- Räumliche Indexbibliothek von Google, die die Erde in Quadranten aufteilt, um Punkt-zu-Polygon-Abfragen zu beschleunigen
- Radar entwickelte eigene Rust-Bindings für die C++-S2-Bibliothek, die bald Open Source verfügbar gemacht werden
-
FSTs (Finite State Transducers)
- Effiziente Datenstruktur für String-Kompression und Prefix-Suche
- Berücksichtigt, dass 80 % der Abfragen dem regulären „happy path“ folgen, sodass mit wenigen MB RAM hunderte Millionen Pfade gecacht werden können
-
Tantivy
- In-Process-Inverted-Index-Bibliothek ähnlich wie Lucene
- Gründe für die Einführung statt eines externen Dienstes wie Elasticsearch:
- Suchqualität – Reaktion auf fortgeschrittene Suchvorgänge wie dynamische Keyword-Erweiterung ohne zusätzliche Kommunikationslatenz
- Betriebsvereinfachung – Verarbeitung innerhalb eines einzelnen Prozesses, Skalierung auch für große Indizes durch einfache Memory-Mapping-Nutzung
-
FastText
- Ein mit eigenem Korpus und Logs trainiertes FastText-Modell erzeugt Wortvektorrepräsentationen für den Einsatz in ML-Anwendungen
- Robust gegenüber Tippfehlern und nicht registrierten Wörtern, semantische Ähnlichkeit benachbarter Vektoren ermöglicht semantisches Suchverständnis
-
LightGBM
- Einsatz zahlreicher LightGBM-Modelle für Query-Intent-Klassifikation, Attribut-Tagging innerhalb von Abfragen
- Beispiel: Bei Regionalanfragen wie „New York“ wird die Adresssuche übersprungen, bei „841 Broadway“ wird die POI-/Regionsuche übersprungen
-
Apache Spark
- Schnelle Verarbeitung von mehreren hundert Millionen Datenpunkten innerhalb einer Stunde, kontinuierliche Pipeline-Optimierung zur Verbesserung von Join- und Aggregations-Performance
- Die Enddaten werden in S3 gespeichert und können mit SQL-basierten Abfragen über Amazon Athena oder DuckDB analysiert werden
Ergebnisse der Einführung von HorizonDB
- Der Dienst wurde deutlich schneller, der Betrieb vereinfacht und die Zuverlässigkeit verbessert
- Das Entwicklungsteam kann neue Funktionen und Datenquellen innerhalb eines Tages ausrollen und validieren
- Die Abschaltung großer Mongo- und Elasticsearch-Cluster sowie mehrerer Microservices spart pro Monat mehrere zehntausend Dollar
- Radar ist nun auf künftige großangelegte Skalierung vorbereitet. Der Ablauf der Entwicklung einzelner Funktionen wird in einem zukünftigen Blogbeitrag vorgestellt
1 Kommentare
Hacker News Kommentar
Ich finde es schade, dass es nicht genug Details gibt und auch kein echter Open-Source-Plan erkennbar ist. Falls ich diesen Beitrag beim Suchen nach einer ES(ElasticSearch)-Alternative angeklickt hätte, würde ich typesense.org und duckdb.org (vor allem mit dem spatial-Plugin) empfehlen: Beide Dienste liefern starke Performance bei räumlichen Daten, und DuckDB wirkt für produktive Einsätze mit relativ stabilen Daten sehr passend. Selbst im Cluster-/Sharding-Setup ist alles vollständig Open Source. Das ist eine reine, rein erfahrungsbasierte Empfehlung.
Es wirkt irgendwie lustig, dass auf der Jobseite als erster Benefit „Office-Kultur“ genannt wird; ich bin wirklich neugierig, wie Pendeln dabei ein Vorteil sein soll.
Ich frage mich, ob dieses System für Photon, die Open-Source-ElasticSearch/OpenSearch-Engine für OSM(OpenStreetMap)-Daten, hilfreich wäre. Die Suche in den meisten OSM-Apps ist eher schwach und fehleranfällig bei Tippfehlern, Photon bringt hier eine kleine Verbesserung. Photon GitHub-Link
Meta: Es ist schön zu sehen, dass wieder wiederholt über eigene Datenspeicher und Query-Engine-Design in Blogposts geschrieben wird. In den 2010ern gab es genau so einen Run, zuletzt war der Fokus auf KI gerichtet.
Dass das Wort „Rust“ im Titel steht, wirkt seltsam. Als Leser kann es unklar sein, was Rust hier eigentlich ersetzt – ElasticSearch oder MongoDB.
Dieser Artikel hat zu wenig Details, etwa fehlen wichtige Punkte wie Daten-Sharding-Methodik, Latenz zwischen Indexierung und Service-Update, Fehlerbehandlung bei ausgefallenen Nodes und die Latenz in verteilten Systemen.
Aus der Suche-Sicht ist es interessant zu beobachten, wie viele Firmen derzeit „ElasticSearch als Ersatz“ als Ziel haben.
Es ist interessant zu sehen, wie viele Unternehmen maßgeschneiderte Lösungen kombinieren; gerade positiv finde ich, dass sie lieber mit fertigen Open-Source-Tools starten als bei Null eine Eigenlösung zu entwickeln. Apropos: Quickwit, das ich durch Tantivy entdeckt habe, ist mir ins Auge gefallen; es fühlt sich an wie ES auf Lucene-Basis. Quickwit GitHub-Link
Rocks ist ein Fork von LevelDB, und Level ist bekannt für Bugs wie Datenkorruption. Beide Systeme wurden stark in der Produktion eingesetzt; als ich Level genutzt habe, hat das Ops-Team enorme Mühe gehabt, Fehlerbehandlung zu betreiben, um den Service am Laufen zu halten. Solche Firmen-Blogposts sagen selten ehrlich die Nachteile oder gravierende Probleme neuer Stacks; Tech-Talks von „Big Name“-Unternehmen sind am Ende meist selbstvermarktete Firmengeschichten.
Ich habe wegen des Keywords „Elasticsearch“ geklickt und fand es erstaunlich, dass ich radar.com nicht kannte; ich habe Interesse entwickelt, weil ich eine Autocomplete-Funktion zu einem für mich passenden Preis gefunden habe