项目主体采用 php ,正在逐步向服务化过度。
服务采用 java 实现,部分基于 http ,还有一部分采用 apache thrift 。
后被 finagle 的特性吸引,想把整个服务体系迁移到 finagle 框架之下。
当 php 和 finagle thrift 结合的时候,遇到了如下问题:
用 Twitter 的官方工具 scrooge 可以方便的生成 finagle thrift 代码,然而并不能生成 php 版本的 finagle thrift client 。
虽然 apache thrift php client 仍然可以正常与 finagle thrift sever 通信,但是不能提供 finagle header 信息,其中包括 traceid 。 finagle sever 在接收到 php client 传递过来的请求之后,找不到 traceid ,就会默认生成一个,并且会把这个 traceid 保存到 sever 的上下文环境当中。所有的请求,都会共享相同的 traceid ,这就导致发送给 zipkin 的所有 trace 请求都在同一个 trace 当中。
server 端默认的 traceid 是通过 TraceInitializerFilter 生成的, trace 的操作是请求到达时最先触发的,没办法通过附加其他的 filter 来改变 traceid ,似乎 finagle 也没有提供扩展,让我们能自定义 server 端 traceid 的生成方式。
不知道是否有人尝试过 php + finagle thrift 这种搭配,有没有遇到过类似问题, 除了改写 finagle 的代码之外,是否还有什么更好的解决方案呢?