APM 数据传输之远程调用(RPC)
2017-01-19 09:53
183 查看
远程调用(RPC)客户端(发送端)
在远程调用的客户端,需要把跟踪信息附着在远程调用的数据中。
举例来说,在一次http请求中,A进程使用http协议请求B进程,则A进程是RPC客户端。
例1:在A进程中,如果拦截a1和a2方法,a1的拦截器是a1‘,a2的拦截器是a2’,并且a1调用了a2,那么在跟踪的过程中,需要顺序记录的数据如下:
a1’:
- 创建new trace
- 在span recorder中记录:
- api
- service type
- end point
- remote address
- acceptor host
- rpc name
- 结果/异常
- 关闭trace
- 从trace context中移除当前trace
a2’:
- 记录span event开始
- 在span event recorder中记录:
- api
- service type
- end point
- destination id
- rpc name
- next span id
- 结果/异常
- 在http message header中设置:
- next transaction id
- next span id
- parent span id
- parent application name
- parent application type
- 记录span event结束
例2:在A进程中,如果只拦截a方法,其拦截器是a’,那么在创建trace的过程中,需要顺序记录的内容如下:
a’:
- 创建new trace
- 在span recorder中记录:
- api
- service type
- end point
- remote address
- acceptor host
- rpc name
- 结果/异常
- 记录1个span event开始
- 在span event recorder中记录:
- api
- service type
- end point
- destination id
- rpc name
- next span id
- 结果/异常
- 在http message header中设置:
- next transaction id
- next span id
- parent span id
- parent application name
- parent application type
- 记录span event结束
- 关闭trace
- 从trace context中移除当前trace
在RPC客户端侧必须记录至少1个span event,因为只有span event recorder才会记录transaction id和next span id,这样RPC服务端的拦截器产生的记录就才能和RPC客户端的记录根据transaction id和next span id对应构成一个完整的调用链。
远程调用(RPC)服务端(接收端)
在远程调用的服务端,需要把附着在远程调用的数据中的跟踪信息获取出来并构造一个新的跟踪信息。
举例来说,在一次http响应中,B进程使用http协议响应请求,则B进程是RPC服务端。
例:在B进程中,如果拦截b方法,其拦截器是b’,那么在跟踪的过程中,需要顺序记录的数据如下:
b’:
- 从http message header中取出:
- next transaction id
- next span id
- parent span id
- parent application name
- parent application type
- 根据上述信息创建continue trace
- 在span recorder中记录:
- service type
- rpc name
- end point
- acceptor host
- remote address
- parent application(name & type)
- 关闭trace
- 从trace context中移除当前trace
如果需要拦截其它b中调用的方法,则对应的拦截器中只需要获取span event recorder,并记录相关信息。
在远程调用的客户端,需要把跟踪信息附着在远程调用的数据中。
举例来说,在一次http请求中,A进程使用http协议请求B进程,则A进程是RPC客户端。
例1:在A进程中,如果拦截a1和a2方法,a1的拦截器是a1‘,a2的拦截器是a2’,并且a1调用了a2,那么在跟踪的过程中,需要顺序记录的数据如下:
a1’:
- 创建new trace
- 在span recorder中记录:
- api
- service type
- end point
- remote address
- acceptor host
- rpc name
- 结果/异常
- 关闭trace
- 从trace context中移除当前trace
a2’:
- 记录span event开始
- 在span event recorder中记录:
- api
- service type
- end point
- destination id
- rpc name
- next span id
- 结果/异常
- 在http message header中设置:
- next transaction id
- next span id
- parent span id
- parent application name
- parent application type
- 记录span event结束
例2:在A进程中,如果只拦截a方法,其拦截器是a’,那么在创建trace的过程中,需要顺序记录的内容如下:
a’:
- 创建new trace
- 在span recorder中记录:
- api
- service type
- end point
- remote address
- acceptor host
- rpc name
- 结果/异常
- 记录1个span event开始
- 在span event recorder中记录:
- api
- service type
- end point
- destination id
- rpc name
- next span id
- 结果/异常
- 在http message header中设置:
- next transaction id
- next span id
- parent span id
- parent application name
- parent application type
- 记录span event结束
- 关闭trace
- 从trace context中移除当前trace
在RPC客户端侧必须记录至少1个span event,因为只有span event recorder才会记录transaction id和next span id,这样RPC服务端的拦截器产生的记录就才能和RPC客户端的记录根据transaction id和next span id对应构成一个完整的调用链。
远程调用(RPC)服务端(接收端)
在远程调用的服务端,需要把附着在远程调用的数据中的跟踪信息获取出来并构造一个新的跟踪信息。
举例来说,在一次http响应中,B进程使用http协议响应请求,则B进程是RPC服务端。
例:在B进程中,如果拦截b方法,其拦截器是b’,那么在跟踪的过程中,需要顺序记录的数据如下:
b’:
- 从http message header中取出:
- next transaction id
- next span id
- parent span id
- parent application name
- parent application type
- 根据上述信息创建continue trace
- 在span recorder中记录:
- service type
- rpc name
- end point
- acceptor host
- remote address
- parent application(name & type)
- 关闭trace
- 从trace context中移除当前trace
如果需要拦截其它b中调用的方法,则对应的拦截器中只需要获取span event recorder,并记录相关信息。
相关文章推荐
- JSON 数据传输 与调用远程接口
- Hadoop数据传输工具sqoop(四)Java远程调用Sqoop进行数据传输
- JSON 数据传输 与调用远程接口
- 基于 SSH 的远程操作以及安全,快捷的数据传输
- PHP xml-rpc远程调用
- 客户/服务器远程数据传输处理技巧
- JavaScript:全面解析Ajax跨站数据传输和iframe跨域名js调用
- 菜鸟也谈谈之跨域数据调用,如何获得远程数据.
- Flex调用远程XML数据
- 使用 xml-rpc 远程调用
- WCF分布式开发常见错误(2)无法从传输连接中读取数据: 远程主机强迫关闭了一个现有的连接
- JavaScript:全面解析Ajax跨站数据传输和iframe跨域名js调用
- 尝试Python的XML-RPC远程调用
- RakNet的远程功能调用(RPC)服务端
- RakNet的远程功能调用(RPC)客户端
- 用RPC机制把本地调用转换成远程调用
- JavaScript:全面解析Ajax跨站数据传输和iframe跨域名js调用
- asp.net远程调用数据
- xml-rpc远程调用
- 远程数据传输之NetRemoting