在德国柏林举办的 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