为什么要使用request id

1. request id 是为了解决下面问题

问题一: 客户端访问的Web服务时,如何将客户端请求与服务端日志关联 
问题二: 微服务架构下,访问日志如何查询
问题三: 不同项目交互出现异常,如何做日志关联

2. request id vs 没有request id

没有request id 请求

只能根据调用函数日志关键,在根据用户的输入的参数,时间来确定相关的日志。 如果项目是以分布式,微服务架构来实现, 上面查日志方式帮助很小。

原因如下

  1. 代码层层封装后,无法通过日志关键与用户请求关联
  2. 微服务架构下,用户请求逻辑层分解多个子任务给下层服务处理,下层服务无法与用户请求关联
  3. 不同项目交互,如何在并发,错误重试,参数相同的情况下,无法通过关键字,时间来确定日志
request id
  1. 当前项目,根据request id 可以找到所有与请求相关的日志
  2. 不同项目,可以根据request id 确定唯一的请求

3. request id 好处

  1. 用户请求日志关联
  2. 项目间请求日志关联
  3. 多服务间日志聚合
  4. 调用关系分析
  5. 日志分析

4. request id 依赖

  1. 使用request id,要有配套日志记录系统
  2. 周边系统支持,保持统一
  3. request id 每次用户请求,必须保证唯一。

5. 高级用法

Google Dapper

Google Dapper 实现 zipkin

articles from reage blog -- http://www.ireage.com