[ 开始使用 |特点|使用案例 |样品|更改日志/新增内容/版本 |用户组|动机|演示 |性能|比较 |贡献者 |关于 |新闻 |插件 | 中文介绍]
[ API 概述 |生成并提交任务 |跟踪状态并检查回复 |配置]
由 Akka 的创建者发推文并在 [本周 #Scala | 中精选] OSChina - 2015年百强]
Parallec 是一个基于 Akka 的快速并行异步 HTTP(S)/SSH/TCP/UDP/Ping 客户端 Java 库。无论如何,可扩展地聚合和处理 API 响应,并通过编写 20 行代码将其发送到任何地方。超级方便的响应上下文允许您在处理响应时传入/传出任何对象。现在您可以进行可扩展的 API 调用,然后轻松地将聚合数据传递到任意位置到 Elasticsearch、kafka、MongoDB、Graphite、memcached 等。灵活的任务级并发控制,无需创建 1000 个线程的线程池。 Parallec 的意思是Paralle l Client (发音为“Para-like”)。访问 www.parallec.io
观看演示: 8,000 个Web 服务器 HTTP 响应在12秒内聚合到内存/在16秒内聚合到 ElasticSearch。
聚合错误消息 - 调试友好且具有完全可见性:在并发环境中调试时遇到问题?不再!所有异常、超时、堆栈跟踪、发送的请求和接收响应的时间都被捕获并聚合在响应映射中。它可以在 ParallelTask 中用于在异步执行任务后立即进行轮询。多级(工作人员/管理人员)超时可以保证即使有 100,000 个请求也能返回任务。
生产用例:广泛应用于基础设施软件中作为轮询和聚合引擎
下载最新的 JAR 或从 Maven 获取:
< dependency >
< groupId >io.parallec</ groupId >
< artifactId >parallec-core</ artifactId >
< version >0.10.6</ version >
</ dependency >
Sonatype 的snapshots
存储库中提供了开发版本的快照。
或摇篮:
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 ();
对同一目标的不同请求
现在看看如何轻松地使用请求模板向同一目标发送多个不同的请求。帖子正文、网址和标题中允许变量替换。阅读更多..
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 Actor 和异步 HTTP 客户端/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 行代码进行可视化。
观看 8000 个服务器上的 HTTP 调用演示: 8,000 个Web 服务器 HTTP 响应在12秒内聚合到内存/在16秒内聚合到 ElasticSearch。
[观看 Ping 演示](https://www.youtube.com/watch?v=9m1TFuO1Mys“Parallec Ping 与 FPing 演示 - 点击观看!”):Parallec 的速度是尽力调整的 FPing 的 2 倍,并且具有相同的准确结果和在 11.1 秒内 ping 8000 个服务器,详细信息请查看此处。
请注意,速度因网络速度、API 响应时间、最慢的服务器、超时和并发设置而异。
我们在 3,000 台服务器上执行远程任务执行 API,通过编写 25 行代码,将响应聚合到弹性搜索,并在 15 秒内可视化。
借助另一个更快的 API,可以调用同一数据中心内的 8,000 台服务器,并在 12 秒内将响应聚合到内存中。
在 1500 台服务器上,Parallec 2.2 秒 vs FPing 4.5 秒。 Parallec 是 ping 1500 个服务器的 FPing 速度的 2 倍(在尽力调整后:-i 1 -r 0 v3.12),同时获得相同的 ping 结果。 Parallec 在 11.1 秒内轻而易举地 ping 8000 台服务器。
像往常一样,不要依赖这些数字并执行您自己的基准测试。
在Parallec中,您可以在Worker(聚合之前:并行)或Manager(聚合之后:单线程)中处理响应。阅读更多..
更多相关工作回顾,请访问此处。
特征 | 帕拉莱克 | 休息指挥官 | 线程池+异步客户端 |
---|---|---|---|
具有直观构建器模式界面的嵌入式库 | |||
即用型应用程序,具有基于 GUI 向导的请求提交和响应聚合 | |||
简单的并发控制,不受线程大小限制 | |||
立即响应处理程序,无需等待所有响应返回 | |||
容量感知任务调度程序和全局容量控制 | |||
响应处理和 API 聚合的完全自由:可插入的通用响应处理程序和响应上下文 | |||
1 行插件启用 SSL 客户端身份验证 | |||
90% 测试覆盖率 | |||
从 CMS 查询、JSON 路径、文本、列表、URL/本地字符串加载目标主机 | |||
异步 API 的任务级并发和编排:自动轮询任务进度 | |||
关于超时和替换异步 HTTP 客户端的任务级别配置 | |||
具有进度轮询和取消功能的异步和同步任务控制 | |||
可扩展的并行 SSH,具有基于密码和密钥的登录 | |||
在生产环境中超过 100,000 台目标主机上经过验证的可扩展性和速度 | |||
具有变量替换的通用请求模板,用于向相同/不同的目标主机发送不同的请求 | |||
具有重试功能的可扩展 Ping | |||
具有空闲超时功能的可扩展 TCP/UDP | |||
在工作线程(并行)或管理线程中灵活的处理程序位置 | |||
开箱即用的状态代码两级响应聚合 | |||
可配置的响应日志间隔修剪 | |||
取消目标主机列表上的任务 |
我们深深感谢所有贡献者的努力。
Parallec 由 eBay Inc. 的云基础设施和平台服务 (CIPS) 的 Yuanteng (Jeff) Pei 和 Teng Song(原作者)提供服务
代码根据 Apache License v2.0 获得许可
© 2015-2017 eBay 软件基金会