分布式常见面试题:聊聊分布式下的线程隔离机制

面试题 潘老师 10个月前 (06-14) 41 ℃ (0) 扫码查看

在分布式环境中,经常会碰到一个棘手的问题。有些业务访问量极大,而有些业务访问量较少,但访问量大的业务可能会拖垮其他业务。

比如说商品购买的下单接口被频繁调用,这就可能导致列表接口和详情接口都无法访问。如果这种场景不加以处理,用户的使用体验会非常差。但商品的内容得能看,列表也得能正常浏览。

常见的解决方案就是采用线程隔离机制,将查询接口分开隔离。比如下单接口允许 20 个线程,这样调用时就互不影响,不会出现下单接口占用全部商城中心线程的情况,从而避免其他接口无法使用。

可能有人会问,如果线程占满了该怎么处理?对于常见的线程池,比如数据库连接池,一般的处理方式是请求一直等待,直到有空余的查询线程,然后完成查询操作。但如果等待超过了设置的时间,通常就会返回响应超时。

在大部分场景中,不是请求发现线程池饱和就直接拒绝服务,这样做的好处是减少了排队时间,不会出现很多线程阻塞。虽然一部分用户下单会失败,但几秒钟的时间影响不大。一旦熔断,请求就会走降级的方法,比如显示“业务繁忙请稍后再试”,或者走本地查询等其他方式来应对,提醒用户快速重试。

要是占用线程池的线程一直不释放,这就需要设置过期时间,比如 100 毫秒,然后强制释放,防止一直占用资源。


版权声明:本站文章,如无说明,均为本站原创,转载请注明文章来源。如有侵权,请联系博主删除。
本文链接:https://www.panziye.com/ms/13029.html
喜欢 (1)
请潘老师喝杯Coffee吧!】
分享 (0)
用户头像
发表我的评论
取消评论
表情 贴图 签到 代码

Hi,您需要填写昵称和邮箱!

  • 昵称【必填】
  • 邮箱【必填】
  • 网址【可选】