请教象友们一个swe design面试题 

面试官非常infra,问我们有个message queue based service,如果consumer有某个bug没有consume message,应该怎样让producer知道采取什么方法减轻影响?
我的回答就是message queue肯定会有backlog触发monitoring alert然后人工找bug重启consumer。面试官不满意说不能manual,整个系统应该有automatic的方法让producer知道整个service不healthy。
那应该咋回答?让producer constantly check message queue topic有没有backlog?message queue本来就是decouple producer 和consumer的,不懂如果让producer一起unhealthy有什么意义,最终不还是要人工查bug重启service吗?
有没有象友有相关经验请指教,感谢。

Follow

请教象友们一个swe design面试题 

@Luciferre 我感觉就还是得丢到某种temp storage里然后monitor这个storage的backlog size来trigger alert最后进行人工干预。你原来的答案在我看来也没啥问题,我感觉这个面试官有点full of shit。我们组天天在消息队列里处理几十个TB的telemetry,也就是这样操作的。让producer知道consumer healthy不healthy根本没有意义,因为telemetry不能丢失,手机发送到server (producer)的数据如果discard掉那就是永远lost了,就算用手机上的temp storage,那用户下次开app也不知道是什么时候给你flush这个telemetry了。那producer就是得往queue里塞。如果不是telemetry类型的message,像async task这种producer block在consumer ack类型的message,那也是一样的。如果task没法被async处理了,难道指望producer自己local处理吗,那就该producer炸了。这种workload也一样得monitor backlog然后trigger alert,最后人工干预。你之前接触过的message queue怕不是pubsub哈哈,那pubsub是自带这种backlog queue/temp storage的,kakfa也是自带的,有一些message queue的impl是没有这种东西或者说不默认setup这种东西,比如rabbitmq。如果说你的答案有什么可以改进的话,那就是explicitly提到需要有这种临时的储存来处理大量无法被处理的消息。

· · Web · 1 · 0 · 1

请教象友们一个swe design面试题 

@chiu 感谢chiuchiu好详细!对我们组之前就靠monitor pubsub自己的backlog。感觉面试官非得扯到他做的相关的东西上,whatever了希望别的地方收留我

Sign in to participate in the conversation
alive.bar

你好,欢迎使用 alive.bar 社交媒体实例。 alive.bar 仅仅是一个服务器位于美国的网站,它使用了「长毛象(Mastodon)」服务。