写点什么

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

2014 年 3 月 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请求。

重要特性

  • 可扩展并且快速:使用 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 )关注我们,并与我们的编辑和其他读者朋友交流。

2014 年 3 月 19 日 06:197616
用户头像

发布了 321 篇内容, 共 102.2 次阅读, 收获喜欢 6 次。

关注

评论

发布
暂无评论
发现更多内容

架构师0期05周作业

喵呜的小哥哥

week5作业

架构师训练营-第三周-总结

A Matt

极客大学架构师训练营

架构师训练营-week5-学习总结

晓-Michelle

极客大学架构师训练营

架构师训练营第五周作业

张锐

架构师训练营-作业3

A Matt

本周总结

Geek_zhangjian

架构师训练营 - 第五周 - 作业

Anrika

极客大学架构师训练营

第05周 技术选型-01 命题作业

Jaye

一致性hash算法的实现

互金从业者X

第五周总结

qqq

架构师训练营第五周感悟

张锐

【架构师训练营 - week5 -2】总结

早睡早起

【架构师训练营】第 5周作业

花生无翼

极客大学架构师训练营

第五周-学习总结

molly

极客大学架构师训练营

架构师训练营 -W5-20200708-学习总结

丁亚宁

架构师0期05周总结

喵呜的小哥哥

《架构师训练营》第五周总结

架构师训练营-第五周-课程总结

狂奔嘀兔纸

极客大学架构师训练营

架构师训练营 第五周 作业

一雄

极客大学架构师训练营 作业 第五周

一致性哈希算法与实现

俊俊哥

缓存 算法 一致性哈希

「架构师训练营」作业:第 5 周 一致性 hash 算法

Amy

极客大学架构师训练营 作业 一致性hash 一致性Hash算法 第五周

架构师训练营 - 作业 - 第五周

心在飞

极客大学架构师训练营

Week05总结

张磊

第五周总结--一致性hash

互金从业者X

事件驱动架构(W5总结)

麻辣

架构师训练营-第五周-作业

狂奔嘀兔纸

极客大学架构师训练营

Week5

第五周作业

qqq

极客大学架构师训练营

Golang实现一致性哈希(consistent hash)

张磊

一致性哈希算法JAVA版简单验证

L001

InfoQ 极客传媒开发者生态共创计划线上发布会

InfoQ 极客传媒开发者生态共创计划线上发布会

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