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

阅读数:5172 2014 年 3 月 19 日 06:19

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客户端即服务

重要特性

  • 可扩展并且快速:使用 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 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

收藏

评论

微博

用户头像
发表评论

注册/登录 InfoQ 发表评论