Adrian Cockcroft 谈分析微服务的响应时间分布

  • Daniel Bryant
  • 邵思华

2016 年 2 月 15 日

话题:DevOps语言 & 开发架构

在德国柏林举办的microXchg大会上,Adrian Cockcroft 进行了一场名为“分析微服务的响应时间分布”的演讲,他为听众展现了如何结合使用由他设计的 Spigo 微服务架构模拟工具以及在线的 Guesstimate Monte Carlo 方法工具,实验性地模拟复杂的微服务系统的请求响应时间,并以可视化的方式进行展现。

Cockcroft是来自 Battery Ventures 的一位 technology fellow,他在这次演讲的开场部分讲述了微服务平台当前所面对的挑战,包括对大规模服务的管理,以及分析(并理解)跨服务的请求与数据流。随后,他为听众展示了“使用 Go 语言编写的模拟协议交互”工具(即Spigo),这一工具可实现基于微服务的数据流的建模工作以及可视化展现。

Spigo 可用于对复杂的架构进行模拟,可在构建该架构之前或之后使用。通过一个表现系统特性的 JSON 文件(Spigo 以一种较松散的方式遵循Netflix 所创建的 OSS框架与工具),可以将被模拟的架构加载到工具中。模拟过程是通过一个基于 Go 语言的应用实现的,而最终的架构将通过D3.js这个 JavaScript 库展现在一个 web 页面中,以达到可视化的目的。服务之间的通信是通过 Go管道(channel)模拟的,最终的流量跟踪信息将被记录保存下来以用于分析。Cockcroft 表示,Spigo 的目标是最终实现对真实的监控工具与日志记录工具进行压力测试。

系统中产生的流量追踪信息将以一种可兼容Zipkin的格式进行记录。Zipkin 是一种数据流可视化与调式工具,它最初由 Twitter 工程团队所开发,如今已被Adrian Cole迁移为“Open Zipkin”项目,成为一种追踪信息注解的通用格式。Zipkin 不仅能够以图形方式展现架构中的服务与通信的依赖关系,还能够展现每个访问的数据流。

Cockcroft 为参加 microXchg 的听众现场展示了一系列架构示例在 Spigo 中的可视化展现,这其中包括了一个受到 Netflix 启发的“单一区域的 Riak IoT 实现”,以及“多区域的 Riak IoT”的模拟,通过它建模得到的架构能够从物联网(IoT)设备中获取数据、以流的方式提供处理后的数据、并提供一个用于分析的终结点。

Cockcroft 提到,许多微服务架构的开发者会经常对于请求的响应时间进行预测,这些请求将通过多个服务以及网络连接,才能够生成响应,并最终将数据返回给用户。通常来说,独立服务的响应时间是可以确定的,但由于每个服务的时间会存在一些随机的变数,因此很难有效地计算多个服务的总体响应时间,并将结果限定在一个可接受的公差之内。在具有极高复杂度的系统中,这一点显得尤其困难,即使以最小及最大响应时间表示结果,也会因为变数太大,而使得结果没有实际意义。

在某些其他领域中,例如机械工程及金融领域已经通过Monte Carlo方法解决了这种“公差叠加”问题。Cockcroft 为听众讲解了他通过在线的Guesstimate工具,为一个简单的存储功能的后端 web 服务生成一种 Monte Carlo 模拟的过程,该 web 服务使用了 memcached、Apache Web 服务器以及 MySQL。系统中每个服务的响应时间范围(以及常用的分布参数)都可以进行更改,让建模过程能够应对例外情况的发生。比方说,该模型能够模拟出 memcached 缓存是否命中,也能够模拟让 MySQL 必须访问磁盘以响应某个查询的情形。

演讲的下半部分对于 Spigo 工具近期发布的 beta 版本的功能进行了分析,新功能允许导出服务的响应时间分布结果,并将结果用于一个经过修改的 Guesstimate 的 alpha 版本中。goguestimate工具之前已经开发了某些功能,能够生成可上传至 Guesstimate 的分布结果,Spigo 的新功能就是基于这一点所创建的。Spigo 还引入了监控点功能(它使用了由Peter Bourgon开发的go-kit指标框架),它能够获取必要的数据,从而对于真实系统中的服务的响应时间分布进行建模。Cockcroft 最后提醒听众,Spigo 近期所做的工作是基于听众在大会上的反馈而计划的,它还需要进一步的改进才能够进行广泛的应用与扩展。

Cockcroft 在演讲的结尾部分进行了几个现场展示。他表示:对于微服务架构、以及服务间的访问流的模拟对于复杂系统的设计、调试以及优化能够起到很大作用。

Spigo 工具很快就将被重命名为“simianviz”,如果读者有兴趣学习基于这一项目的开发,可以关注Spigo的 Github 库,以及simianviz的 Twitter 帐号。可以在 microXchg 的 Youtube 频道上找到 Adrian 的演讲“分析微服务的响应时间分布”的视频,也可以在 SlideShare 上找到该演讲的幻灯片

查看英文原文:Adrian Cockcroft on Analyzing Response Time Distributions for Microservices

DevOps语言 & 开发架构