2016-03-29 12 views
2

Ich arbeite an einer Java-App unter anderem mit Elasticsearch.Gibt es für eine JVM-App einen guten Grund, Elasticsearch REST API zu verwenden?

Bisher habe ich einen Java-Knoten-Client verwendet. Dann vor einiger Zeit habe ich von einigen Kollegen gehört, dass die REST-API bevorzugt wird, aus den folgenden Gründen:

  1. der Lage zu sein Elasticsearch zu aktualisieren, ohne den Transport Client-Version zu stoßen, dh die Version der Java-Client ist davon abhängig, welche Version ist der ES-Cluster läuft
  2. Knoten/Transport-Clients werden in den kommenden Releases veraltet sein?
  3. Sicherheit

ich versuche jetzt, um herauszufinden, wie viel dies hält.

Wenn es um # 1, the Elasticsearch docs state geht, ist es (normalerweise) genug, dass der Client und der ES-Cluster dieselbe Hauptversion haben. REST-API bietet also hier nicht wirklich etwas Besseres.

Dann wird # 3 von Shield behandelt.

Ich konnte nichts über # 2 finden.

Aus den obigen Informationen ist der einzige Grund, warum ich die REST-API in meiner Java-App verwenden möchte, die Versionsunabhängigkeit, nur um auf der sicheren Seite zu sein. Ansonsten nicht viel; ist das wirklich wahr? Und stimmt es, dass der Knoten/Transport-Client veraltet ist?

Antwort

0

Ich bin kein ES-Experte, aber wir stellen uns nur die gleichen Fragen und hier sind unsere Gedanken zu dem Thema.

  1. ES-Client-Version vs. ES-Server-Version:
    • Nativer Client die Regeln folgen Sie erklärte: Hauptversionskompatibilität. Dies war bis vor kurzem nicht der Fall, und für wirklich spezifische Features (Percolator zum Beispiel) ist dies immer noch nicht der Fall.
    • Es scheint, dass Jest, die beste HTTP-Client-Abstraktion, dieselben Einschränkungen hat: documentation sagt Version 1.x funktioniert nicht mit 2.x,
    • Letzte Lösung wäre die Verwendung eines Low-Level-HTTP-Client, aber mit dem Verlust von schönen fließenden Java-Abstraktionen. Es hält den Vergleich nicht,
    • Sie können gemischte Version von ES nicht mit einer Java-App basierend auf nativen Client (im Falle von heterogenen Umgebungen mit 1.x und 2.x-Instanzen) adressieren. Dies sollte mit dem HTTP-Client möglich sein und somit beispielsweise ein progressives Migrationsszenario erleichtern.
  2. Nativer Client deprecation:
  3. Sicherheit:
    • grundlegende HTTP-Sicherheit mit einiger Middleware einfach zu installieren ist, wenn nötig (Apache-Frontend zum Beispiel) oder https://github.com/Asquera/elasticsearch-http-basic Verwendung
    • Schild offiziell, arbeitet mit nativen und HTTP aber nicht kostenlos ...

In unserer App, verwenden wir Spring Data ES. Sehr einfach zu bedienen, mit sehr wenigen Codezeilen, aber leidet unter Versionsrückstand (Unterstützung für 2.x 6 Monate nach Veröffentlichung von ES 2) und basiert auf nativem Client. Aus unserer Sicht sind die Kompromisse den Gewinn in der Entwicklungseffizienz wert.

Als Letztes bietet SAAS nur die HTTP API an. In diesem Fall haben Sie keine Wahl.

+0

5.0 Alpha ist bereits da, also jetzt, und basierend auf Ihrem Feedback unter anderen, scheint es mir die beste Idee zu bleiben mit dem Knoten-Client, bis ES ihren eigenen HTTP-Client hat. Dann wird es einfacher zu entscheiden .:) Vielen Dank! –

Verwandte Themen