[Introdução | Recursos | Casos de uso | Amostras | Log de alterações / Novidades / Versões | Grupo de usuários | Motivação | Demonstrações | Desempenho | Comparar | Colaboradores | Sobre | Notícias | Plug-in | 中文介绍 ]
[Visão geral da API | Gerar e enviar tarefa | Acompanhe o status e examine as respostas | Configurações]
Tweetado pelo criador do Akka e apresentado em [Esta semana em #Scala | OSChina - 100 melhores de 2015]
Parallec é uma biblioteca java cliente HTTP(S)/SSH/TCP/UDP/Ping assíncrona paralela e rápida baseada em Akka. Agregue e manipule de forma escalonável as respostas da API de qualquer maneira e envie-as para qualquer lugar escrevendo 20 linhas de código. Um contexto de resposta super conveniente permite que você passe qualquer objeto ao lidar com as respostas. Agora você pode realizar chamadas de API escalonáveis e, em seguida, passar dados agregados sem esforço para qualquer lugar para pesquisa elástica, kafka, MongoDB, grafite, memcached, etc. Controle flexível de simultaneidade em nível de tarefa sem criar um pool de threads de 1.000 threads. Parallec significa Cliente Paralelo (pronunciado como "Para-like"). Visite www.parallec.io
Assista à demonstração : agregação de respostas HTTP de 8.000 servidores web para a memória em 12 segundos / para ElasticSearch em 16 segundos.
Mensagens de erro agregadas - Depuração amigável com visibilidade total : Está tendo problemas para depurar em ambiente simultâneo? Não mais! Todas as exceções, tempo limite, rastreamentos de pilha, solicitação enviada e tempo de resposta recebida são capturados e agregados no mapa de resposta. Ele está disponível no ParallelTask para pesquisa logo após a execução de uma tarefa de forma assíncrona. O tempo limite de vários níveis (trabalhador/gerente) garante o retorno das tarefas mesmo para 100.000 solicitações.
Casos de uso de produção : amplamente utilizados em software de infraestrutura como mecanismo de pesquisa e agregação
Baixe o JAR mais recente ou pegue no Maven:
< dependency >
< groupId >io.parallec</ groupId >
< artifactId >parallec-core</ artifactId >
< version >0.10.6</ version >
</ dependency >
Snapshots da versão de desenvolvimento estão disponíveis no repositório snapshots
do Sonatype.
ou Gradle:
compile 'io.parallec:parallec-core:0.10.6'
Exemplo de 6 linhas
No exemplo abaixo, simplesmente alterar prepareHttpGet() para prepareSsh() , prepareTcp() , prepareUdp() , preparePing() permite conduzir SSH/TCP/Ping paralelo. Detalhes consulte o documento Java e o código de exemplo.
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 () ); }
});
Exemplo de 20 linhas
Agora que você aprendeu o básico, veja como é fácil transmitir um cliente de pesquisa elástica usando o contexto de resposta conveniente para agregar dados em qualquer lugar que desejar. Você também pode passar um mapa hash para responseContext
, salvar os resultados processados no mapa durante onCompleted
e usar o mapa externamente para trabalhos futuros.
...
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 ();
Solicitações diferentes para o mesmo alvo
Agora veja como é fácil usar o modelo de solicitação para enviar várias solicitações diferentes para o mesmo destino. A substituição de variáveis é permitida no corpo, URL e cabeçalhos da postagem. Leia mais..
pc . prepareHttpGet ( "/userdata/sample_weather_$ZIP.txt" )
. setReplaceVarMapToSingleTargetSingleVar ( "ZIP" ,
Arrays . asList ( "95037" , "48824" ), "www.parallec.io" )
. execute ( new ParallecResponseHandler () {...}...
Mais detalhes, verifique o Log de alterações.
0.10.x
, onde usamos na produção.async-http-client
mais atualizado (atualmente usando AHC versão 2.0.15
) é 0.20.0-SNAPSHOT
. Esta versão passou em testes unitários abrangentes, mas ainda não foi usada em produção. Esta versão requer JDK8 devido ao AHC 2.xe pode ser usada com os plugins paralelos com a mesma versão 0.20.0-SNAPSHOT
, detalhes verifique #37.Parallec é construído em atores Akka e cliente HTTP assíncrono/Netty/Jsch. A biblioteca se concentra em HTTP e também permite comunicação escalonável por SSH/Ping/TCP.
Mais de 90% de cobertura de teste garante que você sempre encontre um exemplo de cada recurso.
Com os feedbacks, lições e melhorias do ano passado de uso interno e código aberto do REST Commander , agora transformamos o núcleo do REST Commander em uma biblioteca independente fácil de usar. Adicionamos mais de 15 novos recursos, reescrevemos mais de 70% do código, com cobertura de teste de mais de 90% para uso e contribuição confiáveis. Desta vez também estruturamos melhor para que a maior parte do desenvolvimento interno possa ser feito diretamente aqui.
[ Assista à demonstração ](https://www.youtube.com/watch?v=QcavegPMDms"Demonstração do Parallec - Clique para assistir!"): O Parallec agrega o status de 100 sites à pesquisa elástica e é visualizado com 20 linhas de código.
Assista à demonstração sobre chamadas HTTP em 8.000 servidores : agregação de respostas HTTP de 8.000 servidores web para a memória em 12 segundos / para ElasticSearch em 16 segundos.
[ Assista à demonstração do Ping ] (https://www.youtube.com/watch?v=9m1TFuO1Mys"Demonstração do Parallec Ping vs FPing - Clique para assistir!"): Parallec tem velocidade 2x de FPing ajustado com melhor esforço com os mesmos resultados precisos e executa ping em 8.000 servidores em 11,1 segundos, verifique os detalhes aqui.
Observe que a velocidade varia de acordo com a velocidade da rede, o tempo de resposta da API, os servidores mais lentos, o tempo limite e as configurações de simultaneidade.
Realizamos API de execução remota de tarefas em 3.000 servidores com resposta agregada à busca elástica, visualizada em 15 segundos, escrevendo 25 linhas de código.
Com outra API mais rápida, faz chamadas para 8.000 servidores no mesmo datacenter com resposta agregada na memória em 12 segundos.
Parallec 2,2 segundos vs FPing 4,5 segundos em 1.500 servidores. Parallec é 2x a velocidade do FPing (após o ajuste de melhor esforço: -i 1 -r 0 v3.12) de executar ping em 1.500 servidores enquanto obtém os mesmos resultados de ping. A Parallec faz ping em 8.000 servidores em 11,1 segundos com o Breeze.
Como sempre, não confie nesses números e realize seus próprios benchmarks.
No Parallec, você pode lidar com a resposta no Worker (antes da agregação: em paralelo) ou no Manager (após a agregação: thread único). Leia mais..
Para mais análises de trabalhos relacionados, visite aqui.
Características | Paralelo | Comandante REST | Pools de threads + cliente assíncrono |
---|---|---|---|
Biblioteca incorporada com interface intuitiva de padrões de construtor | |||
Aplicativo pronto para usar com envio de solicitação baseado em assistente GUI e agregação de resposta | |||
Controle de simultaneidade simples não limitado pelo tamanho do thread | |||
Manipulador de resposta imediata sem esperar todo o retorno de resposta | |||
Agendador de tarefas com reconhecimento de capacidade e controle de capacidade global | |||
Total liberdade de processamento de respostas e agregação de API: manipulador de respostas conectável e genérico e contexto de resposta | |||
Plugin de 1 linha para habilitar autenticação de cliente SSL | |||
90% de cobertura de teste | |||
Carregar hosts de destino da consulta CMS, caminho JSON, texto, lista, string de URL/local | |||
Simultaneidade e orquestração em nível de tarefa para APIs assíncronas: pesquisa automática do progresso da tarefa | |||
Configuração em nível de tarefa no tempo limite e substituição do cliente HTTP assíncrono | |||
Controle de tarefas assíncronas e sincronizadas com pesquisa e cancelamento de progresso | |||
SSH paralelo escalável com senha e login baseado em chave | |||
Escalabilidade e velocidade comprovadas em mais de 100.000 hosts de destino em ambiente de produção | |||
Modelo de solicitação genérico com substituição de variável para enviar solicitações diferentes para hosts de destino iguais/diferentes | |||
Ping escalável com novas tentativas | |||
TCP/UDP escalável com tempo limite de inatividade | |||
Localização flexível do manipulador no thread de trabalho (em paralelo) ou no thread do gerenciador | |||
Agregação de resposta de dois níveis pronta para uso no código de status | |||
Corte de log de resposta configurável em intervalos | |||
Cancelar tarefa em uma lista de hosts de destino |
Agradecemos profundamente a todos os colaboradores pelo seu esforço.
O Parallec é fornecido a você por Yuanteng (Jeff) Pei e Teng Song, Cloud Infrastructure & Platform Services (CIPS) da eBay Inc.
Código licenciado sob licença Apache v2.0
© 2015-2017 eBay Software Foundation