摘要:微服务因其敏捷的开发方式、快速的部署方式, 逐渐成为以云为基础的软件系统的主流架构方式之一. 但是, 微服务系统结构复杂, 动辄上百个服务实例, 而且服务之间的调用关系异常复杂, 当微服务系统中出现异常时, 难以定位故障根因. 为了解决这个问题, 端到端请求追踪(trace)成为微服务系统监控的标配. 然而现有的分布式请求追踪实现方式对应用程序具有侵入性, 严重依赖于开发者对请求追踪的经验, 无法在运行时控制追踪功能的开启和关闭. 这些不足不仅会增加开发者的负担, 而且限制了分布式请求追踪技术的实际应用. 设计并实现了对程序开发者透明的请求追踪系统Trace++, 能够自动生成追踪代码, 利用动态代码插桩技术将追踪代码注入到运行中的应用程序. Trace++对程序低侵入, 对开发者透明, 能够灵活控制追踪功能的开启和关闭. 此外, Trace++的自适应采样方法有效减少了请求追踪产生的开销. 在微服务系统TrainTicket上的实验结果证明, Trace++能够准确发现服务依赖关系. 在开启请求追踪时, 性能开销接近于源代码插桩, 在关闭请求追踪时无性能开销. 此外, Trace++的自适应采样方法在采样到具有代表性样本的同时减少了89.4%的追踪数据.