[ Erste Schritte | Funktionen | Anwendungsfälle | Proben | Änderungsprotokoll / Was ist neu / Versionen | Benutzergruppe | Motivation | Demos | Leistung | Vergleichen | Mitwirkende | Über | Nachrichten | Plugin | 中文介绍 ]
[ API-Übersicht | Aufgabe generieren und senden | Verfolgen Sie den Status und prüfen Sie die Antworten | Konfigurationen]
Getwittert vom Schöpfer von Akka und vorgestellt in [ Diese Woche in #Scala | OSChina – Top 100 2015]
Parallec ist eine schnelle parallele asynchrone HTTP(S)/SSH/TCP/UDP/Ping-Client-Java-Bibliothek basierend auf Akka. Aggregieren und verarbeiten Sie API-Antworten trotzdem skalierbar und senden Sie sie überall hin, indem Sie 20 Codezeilen schreiben. Ein äußerst praktischer Antwortkontext ermöglicht es Ihnen, bei der Bearbeitung der Antworten jedes Objekt ein-/auszugeben. Jetzt können Sie skalierbare API-Aufrufe durchführen und dann aggregierte Daten mühelos überall an Elastic Search, Kafka, MongoDB, Graphite, Memcached usw. übergeben. Flexible Parallelitätskontrolle auf Aufgabenebene, ohne einen Thread-Pool mit 1.000 Threads zu erstellen. Parallec bedeutet Parallel - Client (ausgesprochen als „Para-like“). Besuchen Sie www.parallec.io
Demo ansehen : 8.000 Webserver-HTTP-Antwortaggregation in den Speicher in 12 Sekunden / zu ElasticSearch in 16 Sekunden.
Aggregierte Fehlermeldungen – Debug-freundlich mit vollständiger Sichtbarkeit : Haben Sie Probleme beim Debuggen in einer gleichzeitigen Umgebung? Nicht mehr! Alle Ausnahmen, Zeitüberschreitungen, Stack-Traces, gesendete Anforderungen und empfangene Antworten werden erfasst und in der Antwortzuordnung zusammengefasst . Es steht in ParallelTask zum Abfragen direkt nach der asynchronen Ausführung einer Aufgabe zur Verfügung. Die Zeitüberschreitung auf mehreren Ebenen (Arbeiter/Manager) garantiert, dass Aufgaben auch nach Hunderten von Anfragen zurückgegeben werden.
Produktionsanwendungsfälle : Wird häufig in Infrastruktursoftware als Abfrage- und Aggregations-Engine verwendet
Laden Sie das neueste JAR herunter oder holen Sie es sich von Maven:
< dependency >
< groupId >io.parallec</ groupId >
< artifactId >parallec-core</ artifactId >
< version >0.10.6</ version >
</ dependency >
Snapshots der Entwicklungsversion sind im snapshots
Repository von Sonatype verfügbar.
oder Gradle:
compile 'io.parallec:parallec-core:0.10.6'
Beispiel mit 6 Zeilen
Im folgenden Beispiel können Sie durch einfaches Ändern von PrepareHttpGet() in PrepareSsh() , PrepareTcp() , PrepareUdp() , PreparePing() paralleles SSH/TCP/Ping durchführen. Einzelheiten entnehmen Sie bitte dem Java-Dokument und dem Beispielcode.
import io . parallec . core .*;
import java . util . Map ;
ParallelClient pc = new ParallelClient ();
pc . prepareHttpGet ( "" ). setTargetHostsFromString ( "www.google.com www.ebay.com www.yahoo.com" )
. execute ( new ParallecResponseHandler () {
public void onCompleted ( ResponseOnSingleTask res ,
Map < String , Object > responseContext ) {
System . out . println ( res . toString () ); }
});
Beispiel mit 20 Zeilen
Nachdem Sie nun die Grundlagen erlernt haben, sehen Sie sich an, wie einfach es ist, einen elastischen Suchclient mithilfe des praktischen Antwortkontexts zu übergeben, um Daten an einer beliebigen Stelle zu aggregieren. Sie können auch eine Hash-Map an den responseContext
übergeben, die verarbeiteten Ergebnisse während onCompleted
in der Map speichern und die Map außerhalb für weitere Arbeiten verwenden.
...
import org . elasticsearch . client . Client ;
import static org . elasticsearch . node . NodeBuilder .*;
ParallelClient pc = new ParallelClient ();
org . elasticsearch . node . Node node = nodeBuilder (). node (); //elastic client initialize
HashMap < String , Object > responseContext = new HashMap < String , Object >();
responseContext . put ( "Client" , node . client ());
pc . prepareHttpGet ( "" )
. setConcurrency ( 1000 ). setResponseContext ( responseContext )
. setTargetHostsFromLineByLineText ( "http://www.parallec.io/userdata/sample_target_hosts_top100_old.txt" , HostsSourceType . URL )
. execute ( new ParallecResponseHandler () {
public void onCompleted ( ResponseOnSingleTask res ,
Map < String , Object > responseContext ) {
Map < String , Object > metricMap = new HashMap < String , Object >();
metricMap . put ( "StatusCode" , res . getStatusCode (). replaceAll ( " " , "_" ));
metricMap . put ( "LastUpdated" , PcDateUtils . getNowDateTimeStrStandard ());
metricMap . put ( "NodeGroupType" , "Web100" );
Client client = ( Client ) responseContext . get ( "Client" );
client . prepareIndex ( "local" , "parallec" , res . getHost ()). setSource ( metricMap ). execute ();
}
});
node . close (); pc . releaseExternalResources ();
Unterschiedliche Anfragen an dasselbe Ziel
Sehen Sie sich nun an , wie einfach es ist, mit der Anfragevorlage mehrere unterschiedliche Anfragen an dasselbe Ziel zu senden. Das Ersetzen von Variablen ist im Post-Text, in der URL und in den Headern zulässig. Mehr lesen..
pc . prepareHttpGet ( "/userdata/sample_weather_$ZIP.txt" )
. setReplaceVarMapToSingleTargetSingleVar ( "ZIP" ,
Arrays . asList ( "95037" , "48824" ), "www.parallec.io" )
. execute ( new ParallecResponseHandler () {...}...
Weitere Einzelheiten finden Sie im Änderungsprotokoll.
0.10.x
, die wir in der Produktion verwenden.async-http-client
verwendet (derzeit AHC-Version 2.0.15
verwendet), 0.20.0-SNAPSHOT
. Diese Version hat umfassende Unit-Tests bestanden, wurde jedoch noch nicht in der Produktion verwendet. Diese Version erfordert JDK8 aufgrund von AHC 2.x und kann mit den Parallec-Plugins mit der gleichen Version 0.20.0-SNAPSHOT
verwendet werden, Details siehe #37.Parallec basiert auf Akka-Aktoren und Async HTTP Client/Netty/Jsch. Die Bibliothek konzentriert sich auf HTTP und ermöglicht gleichzeitig eine skalierbare Kommunikation über SSH/Ping/TCP.
Eine Testabdeckung von über 90 % stellt sicher, dass Sie immer ein Beispiel für jede Funktion finden.
Mit den Rückmeldungen, Erkenntnissen und Verbesserungen aus dem vergangenen Jahr der internen Nutzung und Open Source von REST Commander haben wir nun den Kern von REST Commander in eine benutzerfreundliche eigenständige Bibliothek umgewandelt. Wir haben mehr als 15 neue Funktionen hinzugefügt, mehr als 70 % des Codes neu geschrieben und eine Testabdeckung von mehr als 90 % für sichere Nutzung und Beiträge bereitgestellt. Dieses Mal strukturieren wir es auch besser, sodass die meisten internen Entwicklungen direkt hier vorgenommen werden können.
[ Demo ansehen ](https://www.youtube.com/watch?v=QcavegPMDms „Parallec-Demo – Klicken Sie zum Ansehen!“): Parallec fasst den Status von 100 Websites für die elastische Suche zusammen und visualisiert sie mit 20 Codezeilen.
Sehen Sie sich die Demo zu HTTP-Aufrufen auf 8000 Servern an : HTTP-Antwortaggregation von 8.000 Webservern in den Speicher in 12 Sekunden / zu ElasticSearch in 16 Sekunden.
[ Ping-Demo ansehen ](https://www.youtube.com/watch?v=9m1TFuO1Mys"Parallec Ping vs. FPing-Demo – Klicken Sie zum Ansehen!"): Parallec ist doppelt so schnell wie das am besten optimierte FPing mit den gleichen genauen Ergebnissen und Pingt 8000 Server innerhalb von 11,1 Sekunden an, Details finden Sie hier.
Beachten Sie, dass die Geschwindigkeit je nach Netzwerkgeschwindigkeit, API-Antwortzeit, den langsamsten Servern, Zeitüberschreitung und Parallelitätseinstellungen variiert.
Wir führten eine Remote-Task-Execution-API auf 3.000 Servern durch, wobei die Antworten für die elastische Suche aggregiert und innerhalb von 15 Sekunden visualisiert wurden, indem wir 25 Codezeilen schrieben.
Mit einer weiteren schnelleren API werden Aufrufe an 8.000 Server im selben Rechenzentrum mit im Speicher aggregierten Antworten in 12 Sekunden durchgeführt.
Parallel 2,2 Sekunden vs. FPing 4,5 Sekunden auf 1500 Servern. Parallec ist doppelt so schnell wie FPing (nach Best-Effort-Optimierung: -i 1 -r 0 v3.12) beim Pingen von 1500 Servern und erhält dabei die gleichen Ping-Ergebnisse. Parallec pingt 8000 Server innerhalb von 11,1 Sekunden mit Leichtigkeit an.
Verlassen Sie sich wie üblich nicht auf diese Zahlen und führen Sie Ihre eigenen Benchmarks durch.
In Parallec können Sie die Antwort entweder im Worker (vor der Aggregation: parallel) oder im Manager (nach der Aggregation: einzelner Thread) verarbeiten. Mehr lesen..
Weitere verwandte Arbeitsrezensionen finden Sie hier.
Merkmale | Parallel | REST-Kommandant | Thread-Pools + Async-Client |
---|---|---|---|
Eingebettete Bibliothek mit intuitiver Builder-Pattern-Schnittstelle | |||
Einsatzbereite Anwendung mit GUI-Assistent-basierter Anfrageübermittlung und Antwortaggregation | |||
Einfache Parallelitätskontrolle, die nicht durch die Thread-Größe begrenzt ist | |||
Sofortiger Antworthandler, ohne auf die Rückgabe aller Antworten zu warten | |||
Kapazitätsbewusster Aufgabenplaner und globale Kapazitätskontrolle | |||
Völlige Freiheit bei der Antwortverarbeitung und API-Aggregation: Plugbarer und generischer Antworthandler und Antwortkontext | |||
1-Zeilen-Plugin zur Aktivierung der SSL-Client-Authentifizierung | |||
90 % Testabdeckung | |||
Laden Sie Zielhosts aus CMS-Abfrage, JSON-Pfad, Text, Liste, Zeichenfolge von URL/lokal | |||
Parallelität und Orchestrierung auf Aufgabenebene für Async-APIs: Aufgabenfortschritt automatisch abfragen | |||
Konfiguration auf Aufgabenebene bei Zeitüberschreitung und Ersetzen des Async-HTTP-Clients | |||
Asynchrone und synchronisierte Aufgabensteuerung mit Fortschrittsabfrage und Abbruch | |||
Skalierbares paralleles SSH mit passwort- und schlüsselbasierter Anmeldung | |||
Bewährte Skalierbarkeit und Geschwindigkeit auf über 100.000 Zielhosts in der Produktionsumgebung | |||
Generische Anfragevorlage mit Variablenersetzung zum Senden unterschiedlicher Anfragen an gleiche/unterschiedliche Zielhosts | |||
Skalierbarer Ping mit Wiederholungsversuchen | |||
Skalierbares TCP/UDP mit Leerlauf-Timeout | |||
Flexible Handler-Position entweder im Worker-Thread (parallel) oder im Manager-Thread | |||
Standardmäßige zweistufige Antwortaggregation für den Statuscode | |||
Konfigurierbares Trimmen des Antwortprotokolls in Intervallen | |||
Aufgabe auf einer Liste von Zielhosts abbrechen |
Wir danken allen Mitwirkenden herzlich für ihren Einsatz.
Parallec wird Ihnen von Yuanteng (Jeff) Pei und Teng Song, Cloud Infrastructure & Platform Services (CIPS) bei eBay Inc. (Originalautoren) bereitgestellt.
Code lizenziert unter der Apache-Lizenz v2.0
© 2015-2017 eBay Software Foundation