[ Начало работы | Особенности | Варианты использования | Образцы | Журнал изменений / Что нового / Версии | Группа пользователей | Мотивация | Демо | Производительность | Сравнить | Авторы | О компании | Новости | Плагин | 中文介绍]
[Обзор API | Создать и отправить задачу | Отслеживать статус и проверять ответы | Конфигурации]
Написано в Твиттере создателем Akka и опубликовано в [На этой неделе в #Scala | OSChina – Топ-100 2015 г.]
Parallec — это быстрая параллельная асинхронная клиентская Java-библиотека HTTP(S)/SSH/TCP/UDP/Ping, основанная на Akka. Масштабируйте и обрабатывайте ответы API в любом случае и отправляйте их куда угодно , написав 20 строк кода. Очень удобный контекст ответа позволяет вам передавать или выводить любой объект при обработке ответов. Теперь вы можете выполнять масштабируемые вызовы API, а затем легко передавать агрегированные данные куда угодно в эластичный поиск, Kafka, MongoDB, Graphite, Memcached и т. д. Гибкое управление параллелизмом на уровне задач без создания пула потоков на 1000 потоков. Parallec означает Paralle l Client (произносится как «Para-like»). Посетите www.parallec.io.
Посмотрите демонстрацию : агрегирование 8000 HTTP-ответов веб-сервера в память за 12 секунд и в ElasticSearch за 16 секунд.
Совокупные сообщения об ошибках. Удобство отладки с полной видимостью . Возникли проблемы с отладкой в параллельной среде? Уже нет! Все исключения, время ожидания, трассировка стека, время отправки запроса и времени получения ответа фиксируются и объединяются в карте ответов. Он доступен в ParallelTask для опроса сразу после асинхронного выполнения задачи. Многоуровневый таймаут (работник/менеджер) гарантирует возврат задач даже для 100 000 запросов.
Варианты производственного использования : широко используется в инфраструктурном программном обеспечении в качестве механизма опроса и агрегирования.
Загрузите последнюю версию JAR или возьмите ее с Maven:
< dependency >
< groupId >io.parallec</ groupId >
< artifactId >parallec-core</ artifactId >
< version >0.10.6</ version >
</ dependency >
Снимки разрабатываемой версии доступны в репозитории snapshots
Sonatype.
или Градл:
compile 'io.parallec:parallec-core:0.10.6'
Пример из 6 строк
В приведенном ниже примере простое изменение «prereHttpGet()» на «prepreSsh()» , «prepreTcp()» , «prereUdp()» , «preprePing()» позволяет вам выполнять параллельный SSH/TCP/Ping. Подробности см. в документации Java и примере кода.
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
), — 0.20.0-SNAPSHOT
. Эта версия прошла комплексные модульные тесты, но еще не использовалась в производстве. Эта версия требует JDK8 из-за AHC 2.x и может использоваться с плагинами parallec той же версии 0.20.0-SNAPSHOT
, подробности см. в пункте 37.Parallec построен на актерах Akka и Async HTTP Client/Netty/Jsch. Библиотека ориентирована на HTTP, а также обеспечивает масштабируемую связь через SSH/Ping/TCP.
Более 90% тестового покрытия гарантирует, что вы всегда найдете пример каждой функции.
Благодаря отзывам, урокам и улучшениям, полученным за последний год внутреннего использования, а также открытому исходному коду REST Commander , мы превратили ядро REST Commander в простую в использовании автономную библиотеку. Мы добавили более 15 новых функций, переписали более 70 % кода и обеспечили более 90 % тестового покрытия для уверенного использования и вклада. На этот раз мы также структурируем его лучше, чтобы большую часть внутренней разработки можно было осуществлять непосредственно здесь.
[ Посмотреть демонстрацию ](https://www.youtube.com/watch?v=QcavegPMDms «Демо-версия Parallec — нажмите, чтобы посмотреть!»): Parallec объединяет статусы 100 веб-сайтов для эластичного поиска и визуализируется с помощью 20 строк кода.
Посмотрите демонстрацию HTTP-вызовов на 8000 серверах : агрегация HTTP-ответов 8000 веб-серверов в память за 12 секунд или в ElasticSearch за 16 секунд.
[ Посмотреть демонстрацию Ping ] (https://www.youtube.com/watch?v=9m1TFuO1Mys «Демонстрация Parallec Ping и FPing — нажмите, чтобы посмотреть!»): Parallec — это 2-кратная скорость максимально настроенного FPing с такими же точными результатами и пингует 8000 серверов за 11,1 секунды, подробности смотрите здесь.
Обратите внимание, что скорость зависит от скорости сети, времени ответа API, самых медленных серверов, времени ожидания и настроек параллелизма.
Мы провели API удаленного выполнения задач на 3000 серверах с ответом, агрегированным в эластичный поиск, визуализируемым за 15 секунд, написав 25 строк кода.
Благодаря еще одному более быстрому API можно выполнять вызовы к 8000 серверам в одном центре обработки данных, а ответ агрегируется в памяти за 12 секунд.
Parallec 2,2 секунды против FPing 4,5 секунды на 1500 серверах. Скорость Parallec в 2 раза превышает скорость FPing (после максимальной настройки: -i 1 -r 0 v3.12) при проверке связи с 1500 серверами при получении тех же результатов проверки связи. Parallec с легкостью пингует 8000 серверов за 11,1 секунды.
Как обычно, не полагайтесь на эти цифры и проводите собственные тесты.
В Parallec вы можете обрабатывать ответ либо в Worker (до агрегации: параллельно), либо в Manager (после агрегации: в одном потоке). Читать далее..
Более подробную информацию о работе можно найти здесь.
Функции | Параллек | ОТДЫХ Командир | Пулы потоков + асинхронный клиент |
---|---|---|---|
Встроенная библиотека с интуитивно понятным интерфейсом конструктора шаблонов. | |||
Готовое к использованию приложение с отправкой запросов и агрегированием ответов на основе мастера графического интерфейса. | |||
Простое управление параллелизмом, не ограниченное размером потока | |||
Обработчик немедленного ответа без ожидания возврата всего ответа | |||
Планировщик задач с учетом емкости и глобальный контроль мощности | |||
Полная свобода обработки ответов и агрегирования API: подключаемый и универсальный обработчик ответов и контекст ответа. | |||
1-строчный плагин для включения аутентификации SSL-клиента | |||
90% тестовое покрытие | |||
Загрузка целевых хостов из запроса CMS, пути JSON, текста, списка, строки из URL-адреса или локального адреса. | |||
Параллелизм и оркестровка на уровне задач для API-интерфейсов Async: ход выполнения задачи автоматического опроса | |||
Конфигурация уровня задачи по тайм-ауту и замене асинхронного HTTP-клиента | |||
Асинхронное и синхронное управление задачами с опросом хода выполнения и отменой | |||
Масштабируемый параллельный SSH с входом на основе пароля и ключа. | |||
Проверенная масштабируемость и скорость на более чем 100 000 целевых хостах в производственной среде. | |||
Общий шаблон запроса с заменой переменных для отправки разных запросов на одни и те же/разные целевые хосты. | |||
Масштабируемый пинг с повторами | |||
Масштабируемый TCP/UDP с тайм-аутом простоя | |||
Гибкое расположение обработчика либо в рабочем (параллельно), либо в управляющем потоке. | |||
Готовая двухуровневая агрегация ответов по коду состояния | |||
Настраиваемая обрезка журнала ответов по интервалам | |||
Отменить задачу в списке целевых хостов |
Мы глубоко благодарим всех участников за их усилия.
Parallec предоставляется вам Юантэном (Джеффом) Пей и Тенг Сонгом, Cloud Infrastructure & Platform Services (CIPS) в eBay Inc. (оригинальные авторы)
Код лицензируется по лицензии Apache v2.0.
© Фонд eBay Software Foundation, 2015–2017.