[ Commencer | Caractéristiques | Cas d'utilisation | Échantillons | Journal des modifications / Quoi de neuf / Versions | Groupe d'utilisateurs | Motivation | Démos | Performances | Comparer | Contributeurs | À propos | Actualités | Plugin | 中文介绍 ]
[ Présentation de l'API | Générer et soumettre une tâche | Suivre l'état et examiner les réponses | Configurations ]
Tweeté par le créateur d'Akka et présenté dans [Cette semaine dans #Scala | OSChine - Top 100 2015 ]
Parallec est une bibliothèque client Java asynchrone parallèle rapide HTTP(S)/SSH/TCP/UDP/Ping basée sur Akka. Regroupez et gérez de toute façon les réponses de l'API de manière évolutive et envoyez-les n'importe où en écrivant 20 lignes de code. Un contexte de réponse très pratique vous permet de transmettre n'importe quel objet lors de la gestion des réponses. Vous pouvez désormais effectuer des appels d'API évolutifs, puis transmettre sans effort des données agrégées n'importe où vers Elastic Search, Kafka, MongoDB, graphite, Memcached, etc. Contrôle flexible de la concurrence au niveau des tâches sans créer un pool de 1 000 threads. Parallec signifie Paralle l Client (prononcé comme "Para-like"). Visitez www.parallec.io
Regarder la démo : agrégation de réponses HTTP de 8 000 serveurs Web vers la mémoire en 12 secondes / vers ElasticSearch en 16 secondes.
Messages d'erreur agrégés - Débogage convivial avec visibilité totale : Vous rencontrez des difficultés de débogage dans un environnement simultané ? Pas plus! Toutes les exceptions, délais d'attente, traces de pile, temps de demande envoyée et de réponse reçue sont capturés et regroupés dans la carte de réponse. Il est disponible dans ParallelTask pour une interrogation juste après l'exécution d'une tâche de manière asynchrone. Le délai d'expiration à plusieurs niveaux (travailleur/responsable) garantit le retour des tâches même pour des centaines de milliers de requêtes.
Cas d'utilisation en production : largement utilisé dans les logiciels d'infrastructure en tant que moteur d'interrogation et d'agrégation
Téléchargez le dernier JAR ou récupérez-le depuis Maven :
< dependency >
< groupId >io.parallec</ groupId >
< artifactId >parallec-core</ artifactId >
< version >0.10.6</ version >
</ dependency >
Des instantanés de la version de développement sont disponibles dans le référentiel snapshots
de Sonatype.
ou Gradle :
compile 'io.parallec:parallec-core:0.10.6'
Exemple de 6 lignes
Dans l'exemple ci-dessous, le simple fait de changer PrepareHttpGet() en PrepareSsh() , PrepareTcp() , PrepareUdp() , PreparePing() vous permet d'effectuer des opérations SSH/TCP/Ping parallèles. Pour plus de détails, veuillez vous référer à la documentation Java et à l'exemple de code.
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 () ); }
});
Exemple de 20 lignes
Maintenant que vous avez appris les bases, découvrez à quel point il est facile de transmettre un client de recherche élastique en utilisant le contexte de réponse pratique pour agréger les données où vous le souhaitez. Vous pouvez également transmettre une carte de hachage au responseContext
, enregistrer les résultats traités sur la carte pendant onCompleted
et utiliser la carte à l'extérieur pour des travaux ultérieurs.
...
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 ();
Différentes requêtes vers la même cible
Voyez maintenant à quel point il est facile d'utiliser le modèle de requête pour envoyer plusieurs requêtes différentes à la même cible. Le remplacement de variables est autorisé dans le corps du message, l'URL et les en-têtes. En savoir plus..
pc . prepareHttpGet ( "/userdata/sample_weather_$ZIP.txt" )
. setReplaceVarMapToSingleTargetSingleVar ( "ZIP" ,
Arrays . asList ( "95037" , "48824" ), "www.parallec.io" )
. execute ( new ParallecResponseHandler () {...}...
Pour plus de détails, veuillez consulter le journal des modifications.
0.10.x
, que nous utilisons en production.async-http-client
plus à jour (utilisant actuellement la version 2.0.15
d'AHC) est 0.20.0-SNAPSHOT
. Cette version a passé avec succès des tests unitaires complets mais n'a pas encore été utilisée en production. Cette version nécessite JDK8 en raison d'AHC 2.x et peut être utilisée avec les plugins parallec avec la même version 0.20.0-SNAPSHOT
, pour plus de détails, veuillez vérifier #37.Parallec est construit sur les acteurs Akka et Async HTTP Client/Netty/Jsch. La bibliothèque se concentre sur HTTP tout en permettant également une communication évolutive via SSH/Ping/TCP.
Une couverture de test de plus de 90 % vous garantit de toujours trouver un exemple de chacune des fonctionnalités.
Grâce aux retours, aux leçons et aux améliorations de l'année dernière d'utilisation interne et open source de REST Commander , nous avons désormais fait du cœur de REST Commander une bibliothèque autonome facile à utiliser. Nous avons ajouté plus de 15 nouvelles fonctionnalités, réécrit plus de 70 % du code, avec une couverture de test de plus de 90 % pour une utilisation et une contribution en toute confiance. Cette fois, nous le structurons également mieux afin que la plupart des développements internes puissent être effectués directement ici.
[ Regarder la démo ](https://www.youtube.com/watch?v=QcavegPMDms"Démo Parallec - Cliquez pour regarder !") : Parallec regroupe l'état de 100 sites Web dans une recherche élastique et est visualisé avec 20 lignes de code.
Regardez la démo sur les appels HTTP sur 8 000 serveurs : agrégation des réponses HTTP de 8 000 serveurs Web vers la mémoire en 12 secondes / vers ElasticSearch en 16 secondes.
[ Regardez la démo Ping ](https://www.youtube.com/watch?v=9m1TFuO1Mys"Démo Parallec Ping vs FPing - Cliquez pour regarder!") : Parallec est 2x la vitesse du FPing optimisé avec les mêmes résultats précis et envoie un ping à 8 000 serveurs en 11,1 secondes, les détails sont vérifiés ici.
Notez que la vitesse varie en fonction de la vitesse du réseau, du temps de réponse de l'API, des serveurs les plus lents, du délai d'attente et des paramètres de concurrence.
Nous avons réalisé une API d'exécution de tâches à distance sur 3 000 serveurs avec une réponse agrégée en recherche élastique, visualisée en 15 secondes, en écrivant 25 lignes de code.
Avec une autre API plus rapide, appels vers 8 000 serveurs dans le même datacenter avec réponse agrégée en mémoire en 12 secondes.
Parallec 2,2 secondes contre FPing 4,5 secondes sur 1 500 serveurs. Parallec est 2 fois la vitesse de FPing (après réglage au mieux : -i 1 -r 0 v3.12) de ping sur 1 500 serveurs tout en obtenant les mêmes résultats de ping. Parallec envoie une requête ping à 8 000 serveurs en 11,1 secondes en toute simplicité.
Comme d'habitude, ne vous fiez pas à ces chiffres et effectuez vos propres benchmarks.
Dans Parallec, vous pouvez gérer la réponse soit dans Worker (avant agrégation : en parallèle) soit dans Manager (après agrégation : thread unique). En savoir plus..
Pour plus d’informations sur les travaux connexes, veuillez visiter ici.
Caractéristiques | Parallèle | Commandant REST | Pools de threads + client asynchrone |
---|---|---|---|
Bibliothèque intégrée avec interface de modèle de constructeur intuitive | |||
Application prête à l'emploi avec soumission de requêtes basée sur un assistant graphique et agrégation de réponses | |||
Contrôle de concurrence simple non limité par la taille du thread | |||
Gestionnaire de réponse immédiate sans attendre le retour de toutes les réponses | |||
Planificateur de tâches prenant en compte la capacité et contrôle global de la capacité | |||
Liberté totale de traitement des réponses et d'agrégation d'API : gestionnaire de réponse et contexte de réponse enfichables et génériques | |||
Plugin 1 ligne pour activer l'authentification du client SSL | |||
Couverture des tests à 90 % | |||
Charger les hôtes cibles à partir d'une requête CMS, d'un chemin JSON, d'un texte, d'une liste, d'une chaîne à partir d'une URL/locale | |||
Concurrence et orchestration au niveau des tâches pour les API asynchrones : progression des tâches d'interrogation automatique | |||
Configuration au niveau des tâches en cas d'expiration et remplacement du client HTTP asynchrone | |||
Contrôle des tâches asynchrones et synchronisées avec interrogation de progression et annulation | |||
SSH parallèle évolutif avec connexion par mot de passe et clé | |||
Évolutivité et vitesse éprouvées sur plus de 100 000 hôtes cibles dans un environnement de production | |||
Modèle de requête générique avec remplacement de variable pour envoyer différentes requêtes à des hôtes cibles identiques/différents | |||
Ping évolutif avec tentatives | |||
TCP/UDP évolutif avec délai d'inactivité | |||
Emplacement du gestionnaire flexible sur le thread de travail (en parallèle) ou de gestionnaire | |||
Agrégation de réponses prête à l'emploi à deux niveaux sur le code d'état | |||
Coupe du journal de réponses configurable à intervalles | |||
Annuler la tâche sur une liste d'hôtes cibles |
Nous remercions profondément tous les contributeurs pour leurs efforts.
Parallec vous est proposé par Yuanteng (Jeff) Pei et Teng Song, Cloud Infrastructure & Platform Services (CIPS) chez eBay Inc. (auteurs originaux)
Code sous licence Apache v2.0
© 2015-2017 Fondation logicielle eBay