[ 시작하기 | 특징 | 사용 사례 | 샘플 | 변경 로그/새로운 기능/버전 | 사용자 그룹 | 동기부여 | 데모 | 성과 | 비교 | 기여자 | 소개 | 뉴스 | 플러그인 | 중국어 介绍 ]
[ API 개요 | 작업 생성 및 제출 | 상태 추적 및 응답 조사 | 구성]
Akka 제작자가 트윗하고 [ 이번 주 #Scala | OSChina - 2015년 상위 100위 ]
Parallec은 Akka를 기반으로 하는 빠른 병렬 비동기 HTTP(S)/SSH/TCP/UDP/Ping 클라이언트 자바 라이브러리입니다. 어쨌든 API 응답을 확장 가능하게 집계 및 처리하고 20줄의 코드를 작성하여 어디든 보낼 수 있습니다. 매우 편리한 응답 컨텍스트를 사용 하면 응답을 처리할 때 모든 개체를 전달하거나 전달할 수 있습니다. 이제 확장 가능한 API 호출을 수행한 다음 집계된 데이터를 탄력적 검색, kafka, MongoDB, graphite, memcached 등으로 쉽게 전달할 수 있습니다. 1,000개의 스레드 스레드 풀을 만들지 않고도 유연한 작업 수준 동시성 제어가 가능합니다. Parallec은 Paralle l C lient("Para-like"로 발음)를 의미합니다. www.parallec.io를 방문하세요.
데모 보기 : 8,000개의 웹 서버 HTTP 응답을 12 초 만에 메모리에 집계하고 ElasticSearch에 16 초 만에 집계합니다.
집계된 오류 메시지 - 전체 가시성을 갖춘 디버그 친화적인 환경 : 동시 환경에서 디버깅하는 데 문제가 있습니까? 더 이상은 아닙니다! 모든 예외, 시간 초과, 스택 추적, 전송된 요청 및 응답 수신 시간이 응답 맵에 캡처되고 집계 됩니다. 작업을 비동기적으로 실행한 직후에 폴링을 위해 ParallelTask에서 사용할 수 있습니다. 다중 수준(작업자/관리자) 시간 제한은 100,000건의 요청에도 작업 반환을 보장합니다.
프로덕션 사용 사례 : 인프라 소프트웨어에서 폴링 및 집계 엔진으로 널리 사용됩니다.
최신 JAR을 다운로드하거나 Maven에서 가져옵니다.
< dependency >
< groupId >io.parallec</ groupId >
< artifactId >parallec-core</ artifactId >
< version >0.10.6</ version >
</ dependency >
개발 버전의 스냅샷은 Sonatype의 snapshots
저장소에서 확인할 수 있습니다.
또는 Gradle:
compile 'io.parallec:parallec-core:0.10.6'
6라인 예시
아래 예에서는 prepareHttpGet() 을 prepareSsh() , prepareTcp() , prepareUdp() , preparePing() 으로 변경하기만 하면 병렬 SSH/TCP/Ping을 수행할 수 있습니다. 자세한 내용은 Java Doc 및 예제 코드를 참조하세요.
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 () ); }
});
20줄 예시
이제 기본 사항을 배웠으므로 편리한 응답 컨텍스트를 사용하여 탄력적 검색 클라이언트를 전달하여 원하는 곳 어디에서나 데이터를 집계하는 것이 얼마나 쉬운지 확인하세요. 또한 해시 맵을 responseContext
에 전달하고, 처리된 결과를 onCompleted
중에 맵에 저장하고, 추가 작업을 위해 외부 맵을 사용할 수도 있습니다.
...
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 ();
동일한 대상에 대한 다른 요청
이제 요청 템플릿을 사용하여 동일한 대상에 여러 개의 서로 다른 요청을 보내는 것이 얼마나 쉬운지 알아보세요. 게시물 본문, URL, 헤더에는 변수 교체가 허용됩니다. 더 읽어보세요..
pc . prepareHttpGet ( "/userdata/sample_weather_$ZIP.txt" )
. setReplaceVarMapToSingleTargetSingleVar ( "ZIP" ,
Arrays . asList ( "95037" , "48824" ), "www.parallec.io" )
. execute ( new ParallecResponseHandler () {...}...
자세한 내용은 변경 로그를 확인하세요.
0.10.x
이며 프로덕션에서 사용됩니다.async-http-client
(현재 AHC 버전 2.0.15
사용)를 사용하는 Parallec.io 버전은 0.20.0-SNAPSHOT
입니다. 이 버전은 포괄적인 단위 테스트를 통과했지만 아직 프로덕션에서는 사용되지 않았습니다. 이 버전에는 AHC 2.x로 인해 JDK8이 필요하며 동일한 버전 0.20.0-SNAPSHOT
의 parallec-plugins와 함께 사용할 수 있습니다. 자세한 내용은 #37을 확인하세요.Parallec은 Akka 액터와 Async HTTP 클라이언트/Netty/Jsch를 기반으로 구축되었습니다. 라이브러리는 HTTP에 중점을 두는 동시에 SSH/Ping/TCP를 통한 확장 가능한 통신도 지원합니다.
90%+ 테스트 범위를 통해 항상 각 기능의 예를 찾을 수 있습니다.
지난 해 REST Commander 의 내부 사용 및 오픈 소스에 대한 피드백, 교훈 및 개선을 통해 이제 REST Commander의 핵심을 사용하기 쉬운 독립 실행형 라이브러리로 만들었습니다. 우리는 15개 이상의 새로운 기능을 추가하고 코드의 70% 이상을 다시 작성했으며 90% 이상의 테스트 범위를 통해 확실한 사용 및 기여를 보장했습니다. 이번에는 대부분의 내부 개발이 여기에서 직접 이루어질 수 있도록 구조를 개선했습니다.
[ 데모 보기 ](https://www.youtube.com/watch?v=QcavegPMDms"Parallec 데모 - Click to Watch!"): Parallec은 100개의 웹사이트 상태를 탄력적 검색으로 집계하고 20줄의 코드로 시각화합니다.
8000개 서버의 HTTP 호출 데모 보기 : 8,000개의 웹 서버 HTTP 응답을 12 초 만에 메모리로 집계하고 16 초 만에 ElasticSearch로 집계합니다.
[ Ping 데모 시청 ](https://www.youtube.com/watch?v=9m1TFuO1Mys"Parallec Ping 대 FPing 데모 - 시청하려면 클릭하세요!"): Parallec은 동일한 정확한 결과를 제공하는 최선의 노력으로 조정된 FPing의 2배 속도 이며 11.1초 내에 8000개의 서버에 ping을 보냅니다. 자세한 내용은 여기에서 확인하세요.
속도는 네트워크 속도, API 응답 시간, 가장 느린 서버, 시간 초과 및 동시성 설정에 따라 달라집니다.
25줄의 코드를 작성하여 3,000개의 서버에서 원격 작업 실행 API를 수행하고 탄력적 검색으로 응답을 집계하여 15초 이내에 시각화했습니다.
또 다른 더 빠른 API를 사용하면 동일한 데이터 센터에 있는 8,000개의 서버를 호출하여 12초 안에 응답이 메모리에 집계됩니다.
1500개 서버에서 Parallec 2.2초 vs FPing 4.5초. Parallec은 동일한 ping 결과를 얻으면서 1500개 서버를 ping하는 FPing(최선의 조정 후: -i 1 -r 0 v3.12) 속도의 2배입니다. Parallec은 11.1초 내에 8000개의 서버에 ping을 보냅니다.
평소와 같이 이 숫자에 의존하지 말고 자체 벤치마크를 수행하십시오.
Parallec에서는 Worker(집계 전: 병렬) 또는 Manager(집계 후: 단일 스레드)에서 응답을 처리할 수 있습니다. 더 읽어보세요..
더 많은 관련 작업 리뷰를 보려면 여기를 방문하세요.
특징 | 평행 | REST 사령관 | 스레드 풀 + 비동기 클라이언트 |
---|---|---|---|
직관적인 빌더 패턴 인터페이스를 갖춘 임베디드 라이브러리 | |||
GUI 마법사 기반 요청 제출 및 응답 집계를 통해 애플리케이션 사용 준비 완료 | |||
스레드 크기에 제한되지 않는 간단한 동시성 제어 | |||
모든 응답 반환을 기다리지 않고 즉시 응답 처리기 | |||
용량 인식 작업 스케줄러 및 글로벌 용량 제어 | |||
응답 처리 및 API 집계의 완전한 자유: 플러그 가능한 일반 응답 핸들러 및 응답 컨텍스트 | |||
SSL 클라이언트 인증을 활성화하는 1줄 플러그인 | |||
90% 테스트 범위 | |||
URL/로컬의 CMS 쿼리, JSON 경로, 텍스트, 목록, 문자열에서 대상 호스트 로드 | |||
Async API를 위한 작업 수준 동시성 및 오케스트레이션: 자동 폴링 작업 진행 | |||
시간 초과 시 작업 수준 구성 및 비동기 HTTP 클라이언트 교체 | |||
진행률 폴링 및 취소를 통한 비동기 및 동기화 작업 제어 | |||
비밀번호 및 키 기반 로그인을 갖춘 확장 가능한 병렬 SSH | |||
프로덕션 환경의 100,000개 이상의 대상 호스트에서 입증된 확장성과 속도 | |||
동일/다른 대상 호스트에 다른 요청을 보내기 위한 변수 대체가 포함된 일반 요청 템플릿 | |||
재시도를 통한 확장 가능한 Ping | |||
유휴 시간 제한이 있는 확장 가능한 TCP/UDP | |||
작업자(병렬) 또는 관리자 스레드에서 유연한 핸들러 위치 | |||
상태 코드에 대한 기본 2단계 응답 집계 | |||
간격에 따라 구성 가능한 응답 로그 트리밍 | |||
대상 호스트 목록에서 작업 취소 |
우리는 모든 기여자들의 노력에 깊은 감사를 드립니다.
Parallec은 eBay Inc.의 CIPS(클라우드 인프라 및 플랫폼 서비스) Yuanteng(Jeff) Pei와 Teng Song(원저자)이 제공합니다.
Apache License v2.0에 따라 라이센스가 부여된 코드
© 2015-2017 이베이 소프트웨어 재단