为了账号安全,请及时绑定邮箱和手机立即绑定

在非阻塞协调循环中重新排队 kubernetes 事件

在非阻塞协调循环中重新排队 kubernetes 事件

Go
拉丁的传说 2023-03-15 14:52:00
我们有一个 kubernetes 集群,其中会触发协调以响应自定义事件。使用以下格式在 Golang 中实现:type reconciler struct {}func (reconciler) Reconcile(ctx context.Context, o reconcile.Request) (reconcile.Result, error) {    // Implement business logic of reading and writing objects here    return reconcile.Result{}, nil}当自定义事件过多时,我们已经确定了协调逻辑中可能存在的瓶颈。因此,代码已更新为具有非阻塞协调逻辑。例子:type reconciler struct {}func (reconciler) Reconcile(ctx context.Context, o reconcile.Request) (reconcile.Result, error) {    go func() {        // Implement business logic of reading and writing objects here    }()    return reconcile.Result{}, nil}但是,在某些地方非阻塞 go routine 可能会返回 return ctrl.Result{Requeue: true}, nil 或 return ctrl.Result{RequeueAfter: someTime}, nil在这种情况下,我们如何将此类事件重新排队到协调循环,因为返回不会返回给调用者 Reconcile()
查看完整描述

1 回答

?
子衿沉夜

TA贡献1828条经验 获得超3个赞

我认为更好的方法是使用并发协调,允许处理其他请求,而单个协调请求处理起来很慢。这样协调请求队列就不会被阻塞,空闲的 go 例程相当便宜,所以它不应该对你的性能产生太大影响。


查看完整回答
反对 回复 2023-03-15
  • 1 回答
  • 0 关注
  • 64 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信