REST Commander:快速并行异步的HTTP/REST/SOAP客户端即服务

REST和SOAP API(HTTP GET/POST/PUT/DELETE)已经成为当今云平台和服务领域的主流。但是并行地对大量服务器发送不同的REST/SOAP请求,并且将结果汇集起来进行分析依然是个挑战。因此eBay开发并且开源(基于Apache许可V2.0)了一个名为REST Commander的项目。该项目的前身是REST Superman,它是用Java语言编写的,使用了Akka和Play框架。更多关于它与类似技术的比较,以及Akka实现并发和节流阀的设计模型,请参考eBay科技博客上关于这个项目的一篇文章。

什么是REST Commander,为什么需要它?

Commander像一个大规模的邮递员(Postman, 一个界面友好的REST 客户端):一个快速并行异步的HTTP客户端即服务系统,支持响应结果聚合和基于正则表达式的字符串提取。Commander REST API能够处理复杂的请求模式,例如向不同的服务器发送同一个或者不同的请求,或者发送不同的请求到单独的某台服务器。此外,它还能够根据客户定制的规则聚合服务器响应。

Commander能够处理的用例场景有很多,下面是一些基础示例:自动管理并监控成千上万的Web服务器(查看示例代码)。

  • 监控HTTP Web服务器:如果你的公司拥有505,000Web服务器(例如tomcatnginx等),同时想要每分钟检查一次哪台服务器运行慢了或者配置错误了,那么Commander可以帮你在一小时之内完成这项工作。
  • 将配置推送到HTTP Web服务器:如果你的Web服务器使用REST/SOAP API更新配置,同时你想根据需要或者通过自我修复强制使用服务器特定的配置或者统一的配置,那么Commander是你完美的选择。
  • 结合以上两种情况的HTTP Web服务器管理工作流:例如发现不健康的Web服务器并对它们执行一些操作(重启,推送配置)。

无论什么时候,如果你需要并行发送多个HTTP请求,需要聚合HTTP响应数据,或者需要扩展HTTP任务执行,那么首先应该考虑使用Commander。

基本工作流程

下面这幅图简要概括了REST Commander的工作流程。首先它会获取目标服务器作为一个“节点组(node group)”,同时还会获取与URL对应的命令,然后会并行地发送请求。每台服务器的请求和响应会结成一对保存到内存中的一个HashMap中。该HashMap还会被保存到磁盘上的一个带有时间戳的JSON 文件中。对于每一个节点的请求/响应对,我们使用正则表达式从响应内容中提取任意子串。Commander有一种默认的聚合模式,该模式只会聚合HTTP响应状态码。

注意节点和命令这两个概念:Commander使用“节点”或者“节点组”表示单台或者多台目标服务器。使用“命令”表示一个HTTP请求。

REST Commander:快速并行异步的HTTP/REST/SOAP客户端即服务_第1张图片

重要特性

  • 可扩展并且快速:使用Akka和异步HTTP客户端最大化并发;在1分钟内发送并聚合来自于10,000+台服务器的响应。
  • 功能强大以近乎实时的响应分析或配置推送发送统一的或者节点特定的请求。实现了请求级别的并发控制(内置了可以随意定制的节流阀(throttling))。
  • 通用性:通用的HTTP请求。使用用户定义的正则表达式匹配通用的响应聚合。对节点特定的请求在请求模版中使用通用变量替换。
  • 开箱即用:敏捷。零安装需要。可随意改变请求和目标服务器。不需要设置数据库。本地一键运行。
  • 用户友好:使用Java语言、Play框架、Bootstrap和它的应用程序向导构建,Commander允许通过易用的Web UI向导和强大的REST API发送请求。可以在一个单独的REST调用中定义ad hoc请求、目标服务器和正则聚合规则。
  • 无代理监控:可以对来自于ad hoc服务器列表中的所有HTTP结果进行快速地检查,通过正则表达式匹配聚合通用响应。没有依赖,不需要安装。
  • 配置推送:如果有HTTP(REST/SOAP)API要执行,将统一的或者节点特定的配置推送到HTTP端点。
  • N个请求发送到1个目标:可以同时将大量不同的请求发送到某台单独的目标服务器。例如,查找某台服务器上的大量工作状态。调节服务器容量的并发控制。
  • IT编排:将多步骤HTTP工作流程扩展到数以千计的HTTP端点。
  • 发现异常值:借助于HTTP API即时从数千台服务器中发现配置错误的服务器。
  • 自动修复:如果你的配置变更请求是幂等的,那么Commander能够很容易地通过定期的配置推送保证配置的正确性。

性能 (SLA)

下面是Commander在一台非专门设计的服务器上运行的结果:

  • 1000个服务器请求,所有的响应在7秒内完成聚合
  • 10,000个服务器请求,所有的响应在48秒内完成聚合
  • 20,000个服务器请求,所有的响应在70秒内完成聚合

20,000远低于我们测试的最大规模,并且从来没有宕机过。到目前为止我们还没有发现扩展限制。

Commander的功能非常强大,它能够将同一个请求发送到不同的服务器;将不同的请求发送的不同的服务器;将不同的请求发送到同一台服务器。如果你对Commander感兴趣,想要知道如何安装、配置和使用Commander,那么可以访问Commander的官方网站。

感谢裴元腾对本文的审校。

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至[email protected]。也欢迎大家通过新浪微博(@InfoQ)或者腾讯微博(@InfoQ)关注我们,并与我们的编辑和其他读者朋友交流。

你可能感兴趣的:(REST Commander:快速并行异步的HTTP/REST/SOAP客户端即服务)