cloudwego / kitex

Go RPC framework with high-performance and strong-extensibility for building micro-services.
https://www.cloudwego.io
Apache License 2.0
6.95k stars 807 forks source link

kitex使用TTHeader,service mesh 负载均衡参考案例 #962

Closed someview closed 1 year ago

someview commented 1 year ago

kitex在使用TTHeader时,针对service mesh时,有没有具体的参考案例。 比如使用envoy作为代理,如何提取TTheader这样的类型

jayantxie commented 1 year ago

envoy提供了插件式的filter开发,这个filter开发基于ttheader协议文档做下encode/decode即可实现. Kitex也通过了proxyless的方式,可以通过xDS协议服务istio做服务治理。

someview commented 1 year ago

envoy提供了插件式的filter开发,这个filter开发基于ttheader协议文档做下encode/decode即可实现. Kitex也通过了proxyless的方式,可以通过xDS协议服务istio做服务治理。 有现成的例子吗,envoy有点小复杂 同时,当前kitex没有各种协议下的传输格式,比如protobuf编码时的传输格式

someview commented 1 year ago

envoy提供了插件式的filter开发,这个filter开发基于ttheader协议文档做下encode/decode即可实现. Kitex也通过了proxyless的方式,可以通过xDS协议服务istio做服务治理。 相当于让kitex的协议对接的云原生网关

jayantxie commented 1 year ago

pb只是payload的编解码格式,传输格式还是可以走ttheader的

jayantxie commented 1 year ago

@GuangmingLuo 你来看下?

相当于让kitex的协议对接的云原生网关

someview commented 1 year ago

pb只是payload的编解码格式,传输格式还是可以走ttheader的 kitex的文档上还是看不出来是个什么样的传输结构,从tcp包开始的整体结构,一个tcp包中是否可以存在多个request这样的消息。 这个问题相当于有没有类似于kitex对接metaprotocol这样的案例

someview commented 1 year ago

类似于MetaProtocol Proxy这样的结构,相当于rpc通信 和服务网格结合的视角接入传输协议

jayantxie commented 1 year ago

一个tcp包中是否可以存在多个request这样的消息

这句话的意思是是否支持多路复用?

TTHeader目前没有对接开源的数据面产品,如果对接envoy需要自行开发接入。另外proxyless的方案可以关注下

someview commented 1 year ago

一个tcp包中是否可以存在多个request这样的消息

这句话的意思是是否支持多路复用?

TTHeader目前没有对接开源的数据面产品,如果对接envoy需要自行开发接入。另外proxyless的方案可以关注下

好像问得有点多余了。一个tcp包中是否携带多次rpc请求,还是只能携带一个rpc请求,也算是“传输链路”的多路复用吧。

GuangmingLuo commented 1 year ago

@fengyeall111 请问你们是不是在公司内部有相关需求,可以通过飞书群联系我们聊聊需求细节。

zackzhangkai commented 1 year ago

服务 A (hertz http) -> 服务 B (kitex grpc) :正常。 使用 istio 给这两个服务注入 sidecar,再调用,就会报类似的错:

 {"Code":3,"Msg":"remote or network error: invalid payload (first4Bytes=0x48545450, second4Bytes=0x2f312e31)"}

解决办法:

在调用 grpc 服务里,需要显示声明协议:

hertz-api 的client code

return []client.Option{
        client.WithHostPorts([]string{"kitex-rpc:8001"}...),
        client.WithTransportProtocol(transport.GRPC),
    }