[alibaba/tengine]tengine如何针对quic做负载均衡

2023-12-27 392 views
1
Question

您好,通过文档获悉Tengine已经支持了xquic,那么它是如何对QUIC进行负载均衡的呢?Tengine是否已经具备了根据QUIC CID进行负载均衡的功能?如果可以的话您是否可以提供相关的配置文件呢?

回答

5

quic lb 草案还没有形成正式标准,等标准确定后会支持。如果现阶段需要使用,可以修改 xquic 模块中的 CID 生成算法自定义,配合前置 LoadBalancer 实现。

CID 生成算法函数:ngx_xquic_cid_generate_cb

1

请问一下前面的upstream中的LoadBalancer 需要修改么?还是只需要保证客户端与tengine中的cid逻辑生成一致即可呀?

7

@zhangjiaxingict 你是想转给后端服务的时候根据 cid 来转?具体的诉求是什么样的呢?

3

多个客户端,通过tengine,tengine通过cid负载均衡到多个worker

9

通过 cid 负载均衡到多个 worker,这个 worker 是指 tengine 多进程么?

8

是的,这是其中的一种使用方法。或者使用第二种方法,仅仅把tengine作为负载均衡器,在upstream中设置多个ip:port实例,通过tengine的负载均衡模块解析数据包中的cid并负载均衡到多个实例上。我比较倾向于第二种方案,请问tengine目前支持这一功能了呢?如果不支持的话我该怎样去自己开发这一模块呢?

2

现在 tengine 默认支持多进程的,启动多个进程后,http3 请求会均衡分散到每个 worker 进程上。

如果要根据 cid 按照一定算法负载均衡到不同 upstream 上,可以通过读取 $xquic_connection_id 变量,这个是 cid 的内容,根据这个值做一定的负载均衡,比如通过 lua 的 ngx.balancer 模块实现具体算法。