在美国拉斯维加斯举行的 AWS re:Invent 2016 大会上,亚马逊发布了一款名为 AWS X-Ray 的分布式跟踪服务,它目前处于预览版本,能够在 AWS 的 12 个公开 Region 中使用。AWS X-Ray 类似于 Google 的 Dapper 、 Twitter 的 Zipkin 以及 OpenTracing API ,它能够帮助开发人员分析和调试分布式应用,比如使用微服务架构风格所构建的应用。它提供了一个基于 Web 的 UI,能够展现拓扑化的“服务地图”、图形化格式的分布式跟踪以及所有跟踪记录的可查询列表。
正如 Jeff Barr 在 AWS 博客上所讨论的那样,在过去的几年间,软件应用的设计和部署发生了一些变化,转向了创建复杂的分布式“基于服务”的系统。因此,软件应用的调试行为也随之发生了变化,当我们要查看应用扩展的行为模式时更是如此。
通过组合使用云计算、微服务以及基于通知的异步架构,系统会被拆分为成百上千的组成部分,而且这些组成部分还会处于不断的变化之中。在这样复杂的系统中,识别和解决性能问题会变得更加具有挑战性,同时面临的挑战的还要将单个服务级别的监测结果合成为有意义的高层级结果。
这些分布式系统都是基于云的,系统的执行过程会遍历应用服务、容器、计算实例、数据库即服务(database-as-a-service)和消息即服务(messaging-as-a-service),因此对于构建人员和运维人员来说最主要的挑战在于“跟踪线程(following-the-thread)”。
当请求在部署于 AWS 环境中的整个系统中遍历时,AWS X-Ray 会对请求进行跟踪。应用会由多个服务和资源组成,AWS X-Ray 会将单个服务和资源生成的数据集合起来,从而提供“系统如何运行的端到端视图”。AWS X-Ray 的跟踪特性能够跟踪任意的请求路径,从而定位系统中的哪一部分出现了性能问题。AWS X-Ray 还提供了注解,能够在跟踪上附加元数据,从而能够为跟踪数据添加标签并对其进行过滤。
根据发布 AWS X-Ray 的 AWS 博客文章描述,AWS X-Ray 能够与 Amazon EC2、Amazon EC2 Container Service (Amazon ECS)、AWS Elastic Beanstalk 和 Amazon API Gateway 协同工作。 AWS X-Ray SDK 可以用于 Java、Node.js 和.NET 所编写的应用中,应用需要基于上述的服务进行部署,这样的话,就能跟踪针对应用所发起的请求,应用可能会跨多个 AWS 账号、AWS Regions 和 Availability Zones。针对 AWS Lambda 的支持很快也会发布。
AWS X-Ray 在实现“跟踪线程”时,如果请求上没有特定的 HTTP 头信息(包含一个唯一 ID)的话,就会增加一个这样的头信息,然后将这个头信息传递到请求处理的其他层中。在每个点收集到的数据称为 segment(类似于 OpenTracing API 规范中的 Span ),会存储为一段 JSON 数据。segment 代表了一个工作单元,其中包含了请求和响应的计时,另外还会有子 segment 来代表更小的工作单元。 OpenTracing 倡议是由 CNCF 支持的, Adrian Cole 是该项目的核心提交者,他在 Twitter 上称 AWS X-Ray segment 数据格式具有“很小巧的结构”。
据 AWS X-Ray 的文档所述,具有“统计意义”的 segment 样本会传送到 X-Ray 上。AWS X-Ray SDK 不会将跟踪数据直接发送到服务上,而是将跟踪数据发送到一个 AWS X-Ray daemon 上,daemon 必须运行在相关的 EC2 实例或者位于每个 ECS 容器中。daemon 会收集多个请求的 segment 并采用批处理的方式进行上传。所收集到的跟踪数据可以在 AWS X-Ray 基于 Web 的 UI 中进行查看,也可以通过 AWS X-Ray API 和 AWS CLI 进行访问。
关于 AWS X-Ray 的更多信息,可以参考 AWS 博客上名为“AWS X-Ray——洞悉分布式应用”的文章、 AWS X-Ray 产品页面以及 AWS X-Ray 的文档。关于 AWS re:Invent 宣布的其他信息和产品发布消息可以参考 InfoQ 上名为“AWS re:Invent Recap”的文章。
查看英文原文: Microsoft Open-Sources P Language for Safe Async Event-Driven Programming
评论