[Comenzar | Características | Casos de uso | Muestras | Registro de cambios / Novedades / Versiones | Grupo de usuarios | Motivación | Demostraciones | Rendimiento | Comparar | Colaboradores | Acerca de | Noticias | Complemento | 中文介绍]
[ Descripción general de API | Generar y enviar tarea | Seguimiento del estado y examen de las respuestas | Configuraciones ]
Tuiteado por el creador de Akka y destacado en [Esta semana en #Scala | OSChina - Top 100 de 2015 ]
Parallec es una biblioteca java de cliente HTTP(S)/SSH/TCP/UDP/Ping asíncrono paralelo rápido basado en Akka. Agregue y maneje de manera escalable respuestas API de todos modos y envíelas a cualquier lugar escribiendo 20 líneas de código. Un contexto de respuesta súper conveniente le permite pasar entrada/salida de cualquier objeto al manejar las respuestas. Ahora puede realizar llamadas API escalables y luego pasar sin esfuerzo datos agregados a cualquier lugar a búsqueda elástica, kafka, MongoDB, grafito, memcached, etc. Control flexible de simultaneidad a nivel de tareas sin crear un grupo de subprocesos de 1000 subprocesos. Parallec significa Cliente Paralelo (pronunciado "Para-like"). Visita www.parallec.io
Vea la demostración : agregación de respuestas HTTP de 8000 servidores web a la memoria en 12 segundos/a ElasticSearch en 16 segundos.
Mensajes de error agregados: fácil de depurar con visibilidad total : ¿Tiene problemas para depurar en un entorno concurrente? ¡Ya no! Todas las excepciones, el tiempo de espera, los seguimientos de la pila, el tiempo de solicitud enviada y de respuesta recibida se capturan y agregan en el mapa de respuesta. Está disponible en ParallelTask para sondear inmediatamente después de ejecutar una tarea de forma asincrónica. El tiempo de espera de varios niveles (trabajador/gerente) garantiza que las tareas se devuelvan incluso para cientos de miles de solicitudes.
Casos de uso de producción : ampliamente utilizado en software de infraestructura como motor de sondeo y agregación.
Descargue el último JAR o consígalo de Maven:
< dependency >
< groupId >io.parallec</ groupId >
< artifactId >parallec-core</ artifactId >
< version >0.10.6</ version >
</ dependency >
Las instantáneas de la versión de desarrollo están disponibles en el repositorio snapshots
de Sonatype.
o Gradle:
compile 'io.parallec:parallec-core:0.10.6'
Ejemplo de 6 líneas
En el siguiente ejemplo, simplemente cambiando prepareHttpGet() a prepareSsh() , prepareTcp() , prepareUdp() , preparePing() le permite realizar SSH/TCP/Ping en paralelo. Para obtener más información, consulte el documento Java y el código de ejemplo.
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 () ); }
});
Ejemplo de 20 líneas
Ahora que ha aprendido los conceptos básicos, compruebe lo fácil que es pasar un cliente de búsqueda elástica utilizando el conveniente contexto de respuesta para agregar datos en cualquier lugar que desee. También puede pasar un mapa hash a responseContext
, guardar los resultados procesados en el mapa durante onCompleted
y usar el mapa externo para seguir trabajando.
...
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 ();
Diferentes solicitudes al mismo objetivo
Ahora vea lo fácil que es usar la plantilla de solicitud para enviar múltiples solicitudes diferentes al mismo destino. Se permite el reemplazo de variables en el cuerpo de la publicación, la URL y los encabezados. Leer más..
pc . prepareHttpGet ( "/userdata/sample_weather_$ZIP.txt" )
. setReplaceVarMapToSingleTargetSingleVar ( "ZIP" ,
Arrays . asList ( "95037" , "48824" ), "www.parallec.io" )
. execute ( new ParallecResponseHandler () {...}...
Más detalles, consulte el Registro de cambios.
0.10.x
, que utilizamos en producción.async-http-client
más actualizado (actualmente usa AHC versión 2.0.15
) es 0.20.0-SNAPSHOT
. Esta versión ha pasado pruebas unitarias exhaustivas pero aún no se ha utilizado en producción. Esta versión requiere JDK8 debido a AHC 2.x y se puede usar con los complementos parallec con la misma versión 0.20.0-SNAPSHOT
; consulte los detalles en el n.° 37.Parallec se basa en actores Akka y Async HTTP Client/Netty/Jsch. La biblioteca se centra en HTTP y al mismo tiempo permite la comunicación escalable a través de SSH/Ping/TCP.
Una cobertura de prueba superior al 90% garantiza que siempre encontrará un ejemplo de cada característica.
Con los comentarios, lecciones y mejoras del año pasado de uso interno y código abierto de REST Commander , ahora convertimos el núcleo de REST Commander en una biblioteca independiente fácil de usar. Agregamos más de 15 funciones nuevas , reescribimos más del 70 % del código, con una cobertura de prueba de más del 90 % para un uso y una contribución seguros. Esta vez también lo estructuramos mejor para que la mayor parte del desarrollo interno se pueda realizar directamente aquí.
[ Ver demostración ](https://www.youtube.com/watch?v=QcavegPMDms"Demostración de Parallec - ¡Haga clic para ver!"): Parallec agrega el estado de 100 sitios web a la búsqueda elástica y se visualiza con 20 líneas de código.
Vea la demostración sobre llamadas HTTP en servidores 8000 : agregación de respuestas HTTP de 8000 servidores web a la memoria en 12 segundos/a ElasticSearch en 16 segundos.
[ Ver demostración de Ping ](https://www.youtube.com/watch?v=9m1TFuO1Mys"Demostración de Parallec Ping vs FPing - ¡Haga clic para ver!"): Parallec tiene el doble de velocidad que el FPing optimizado con el mejor esfuerzo con los mismos resultados precisos y hace ping a 8000 servidores en 11,1 segundos, consulte los detalles aquí.
Tenga en cuenta que la velocidad varía según la velocidad de la red, el tiempo de respuesta de la API, los servidores más lentos, el tiempo de espera y la configuración de simultaneidad.
Realizamos una API de ejecución remota de tareas en 3000 servidores con respuesta agregada a una búsqueda elástica, visualizada en 15 segundos, escribiendo 25 líneas de código.
Con otra API más rápida, llamadas a 8000 servidores en el mismo centro de datos con respuesta agregada en la memoria en 12 segundos.
Parallec 2,2 segundos frente a FPing 4,5 segundos en 1500 servidores. Parallec es 2 veces la velocidad de FPing (después del ajuste de mejor esfuerzo: -i 1 -r 0 v3.12) de hacer ping a 1500 servidores y obtener los mismos resultados de ping. Parallec hace ping a 8000 servidores en 11,1 segundos con facilidad.
Como de costumbre, no confíe en estos números y realice sus propios puntos de referencia.
En Parallec, puede manejar la respuesta en Worker (antes de la agregación: en paralelo) o en Manager (después de la agregación: un solo subproceso). Leer más..
Para obtener más reseñas de trabajos relacionados, visite aquí.
Características | Paralelo | Comandante de descanso | Grupos de subprocesos + Cliente asíncrono |
---|---|---|---|
Biblioteca integrada con interfaz intuitiva de patrones de construcción | |||
Aplicación lista para usar con envío de solicitudes y agregación de respuestas basadas en asistente GUI | |||
Control de concurrencia simple no limitado por el tamaño del hilo | |||
Manejador de respuesta inmediata sin esperar todas las respuestas | |||
Programador de tareas consciente de la capacidad y control de capacidad global | |||
Libertad total de procesamiento de respuestas y agregación de API: contexto de respuesta y controlador de respuestas genéricos y conectables | |||
Complemento de 1 línea para habilitar la autenticación de cliente SSL | |||
Cobertura de prueba del 90% | |||
Cargue los hosts de destino desde la consulta CMS, ruta JSON, texto, lista, cadena desde URL/local | |||
Simultaneidad y orquestación a nivel de tareas para API asíncronas: progreso de la tarea de sondeo automático | |||
Configuración a nivel de tarea en tiempo de espera y reemplazo del cliente HTTP asíncrono | |||
Control de tareas asíncronas y sincronizadas con sondeo y cancelación de progreso | |||
SSH paralelo escalable con contraseña e inicio de sesión basado en clave | |||
Escalabilidad y velocidad comprobadas en más de 100 000 hosts de destino en un entorno de producción | |||
Plantilla de solicitud genérica con reemplazo de variables para enviar diferentes solicitudes a hosts de destino iguales o diferentes | |||
Ping escalable con reintentos | |||
TCP/UDP escalable con tiempo de espera de inactividad | |||
Ubicación flexible del controlador en el subproceso del trabajador (en paralelo) o del administrador | |||
Agregación de respuestas de dos niveles lista para usar en el código de estado | |||
Recorte del registro de respuesta configurable en intervalos | |||
Cancelar tarea en una lista de hosts de destino |
Agradecemos profundamente a todos los contribuyentes por su esfuerzo.
Parallec es proporcionado por Yuanteng (Jeff) Pei y Teng Song, Cloud Infrastructure & Platform Services (CIPS) en eBay Inc. (autores originales).
Código licenciado bajo Licencia Apache v2.0
© 2015-2017 Fundación de software de eBay