下载APP
登录
关闭
讲堂
算法训练营
Python 进阶训练营
企业服务
极客商城
客户端下载
兑换中心
渠道合作
推荐作者
当前播放: 91 | 信号量 vs 线程池隔离
00:00 / 00:00
标清
  • 标清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看

微服务架构实战160讲

共171讲 · 171课时·约2000分钟
9944
免费
01 | 第一模块课程介绍
免费
02 | 微服务安全要解决什么问题
免费
03 | 白话 OAuth2
免费
04 | OAuth2 的正式定义
免费
05 | OAuth2 有哪些典型模式
06 | OAuth2 模式该如何选型
07 | Spring Security OAuth...
08 |【实验】授权码模式授权服务...
09 |【实验】简化模式授权服务器
10 |【实验】密码模式授权服务器
11 |【实验】客户端模式授权服务...
12 | 实验一扩展环节
13 |【实验】Web 应用接入授权...
14 | 实验二扩展环节
15 | 什么是 JWT 令牌
16 |【实验】授权服务器支持 JW...
17 | 实验三扩展环节
18 |【实验】Android 无线应用...
19 |【实验】AngularJS 单页应...
20 |【实验】GitHub社交登录实验...
21 | 【实验】OAuth2安全风险CS...
22 | OpenId Connect简介
23 | 下一代微服务安全架构
24 | 参考资源和后续课程预览
免费
25 | Apollo作者的产品介绍
免费
26 | 第二模块课程介绍
免费
27 | 课程概述
免费
28 | 业务需求
免费
29 | 配置定义和场景
30 | 开关驱动开发原理
31 | 携程 Apollo 配置中心介...
32 | Apollo核心概念
33 | Apollo快速起步(Lab01)
34 | Apollo快速起步扩展实验
35 | Apollo架构设计之服务器端
36 | Apollo架构设计之客户端
37 | Apollo架构设计之高可用和...
38 | Apollo分布式部署指南
39 | Apollo Java客户端和多语...
40 | Apollo Client API实操...
41 | Apollo Client和Spring集...
42 | Apollo Client和Spring集...
43 | Apollo Client和Spring ...
44 | Apollo开放平台接入实操...
45 | Spring Cloud Config简...
46 | Apollo vs Spring Clou...
47 | Apollo FAQ和开发常见问...
48 | 参考资源和后续课程预览
免费
49 | 第三模块课程介绍
免费
50 | Zuul网关和基本应用场景
免费
51 | Zuul网关高级应用场景
52 | Zuul网关架构剖析
53 | Zuul网关代码剖析(Code ...
54 | Zuul网关过滤器管理工具(...
55 | 前置过滤器实验(Lab01)
56 | 路由过滤器实验(Lab02)
57 | 后置过滤器实验(Lab03)
58 | Zuul网关对接Apollo(Lab0...
59 | Zuul网关生产部署实践
60 | Zuul网关路由管理实践
61 | 基于网关的两层路由体系
62 | Spring Cloud Zuul(Lab...
63 | Zuul2.0简介
64 | Zuul网关生产最佳实践
65 | 参考资源和后续课程预览
免费
66 | 第四模块课程介绍
免费
67 | 调用链监控业务需求
免费
68 | 调用链监控原理
69 | 调用链监控产品和比较
70 | 点评 CAT 背景介绍
71 | CAT 典型报表
72 | CAT 告警简介
73 | CAT 架构设计
74 |【实验】CAT 本地部署
75 | CAT 埋点案例和代码剖析...
76 |【实验】CAT 埋点案例
77 | Zuul 网关集成 CAT 代...
78 |【实验】Zuul 网关集成 CA...
79 | CAT 生产埋点实践
80 | CAT 生产部署实践
81 | CAT 生产治理实践
82 | Spring Cloud Sleuth ...
83 |【实验】Spring Cloud Sle...
84 | 参考资源和后续课程预览
免费
85 | 第五模块课程介绍
免费
86 | 容错限流需求
免费
87 | 容错限流原理
88 | Netflix Hystrix 背景...
89 | Hystrix 设计原理
90 | Hystrix 主要概念
91 | 信号量 vs 线程池隔离
92 | Hystrix 主要配置项
93 |【实验】Hystrix 基础实验
94 | Hystrix 模拟案例分析 ...
95 |【实验】Hystrix + Dash...
96 |【实验】Hystrix + Dash...
97 | 网关集成 Hystrix (Co...
98 |【实验】Spring Cloud Hy...
99 | Netflix Turbine 简介
100 | Hystrix 生产最佳实践
101 | 参考资源和后续课程预览
102 | 第六模块课程介绍
103 | 服务发现需求和模式(上...
104 | 服务发现需求和模式(下...
105 | Netflix Eureka 和 Ri...
106 | Eureka 和 Ribbon 架...
107 |【实验】Spring Cloud Eu...
108 |【实验】Spring Cloud Eu...
109 | Spring Cloud Eureka ...
110 | Eureka进阶:自保护模式
111 | Eureka进阶:健康检查和...
112 |【实验】Spring Cloud Zu...
113 |【实验】Spring Cloud Zu...
114 | 常用服务发现组件比较
115 | ServiceMesh 和 Istio...
116 | 基于 Eureka、Zuul 和...
117 | 参考资源和后续课程预览
118 | 第七模块课程介绍
119 | 监控模式分类
120 | BusDevOps 和测量驱动开...
121 | Prometheus 简介
122 | Prometheus 架构设计
123 | Prometheus 基本概念
124 |【实验】Prometheus 起步...
125 |【实验】Prometheus起步查...
126 |【实验】Prometheus起步查...
127 |【实验】Prometheus + G...
128 |【实验】Prometheus + G...
129 |【实验】Prometheus + A...
130 |【实验】Prometheus + A...
131 |【实验】Java 应用埋点和...
132 |【实验】NodeExporter 系...
133 |【实验】Spring Boot Act...
134 | Prometheus 监控最佳实...
135 | 主流开源时序数据库比较
136 | 开源分布式监控平台 ZMo...
137 | 微服务监控体系总结
138 | 参考资源和后续课程预览
139 | 课程概述和背景
140 | 架构和设计
141 | 开发环境搭建
142 | 基础代码(code review...
143 | 数据访问模块(code rev...
144 | OAuth2服务模块(code r...
145 | Web服务模块(code revi...
146 | 启动流程(code review...
147 | 起步准备实验(lab02)
148 | OAuth2授权码模式实验(l...
149 | OAuth2简化模式实验(lab...
150 | OAuth2用户名密码模式实...
151 | OAuth2客户端模式实验(l...
152 | OAuth2令牌校验实验(lab...
153 | OAuth2令牌刷新实验(lab...
154 | 项目复盘和扩展环节
155 | 参考资源和后续课程预览
156 | 课程概述和背景
157 | 需求和架构设计
158 | 开发环境搭建(lab01)(...
159 | 开发环境搭建(lab01)(...
160 | 项目业务代码(Code Rev...
161 | Apollo配置中心集成(lab...
162 | Zuul-Eureka-Ribbon-H...
163 | Gravitee OAuth2集成(l...
164 | Zuul网关集中令牌校验(C...
165 | CAT调用链集成(lab04)...
166 | CAT调用链集成(lab04)...
167 | Demo展示(lab05)(上)
168 | Demo展示(lab05)(下)
169 | Prometheus监控集成(Cod...
170 | 生产扩展环节
171 | 课程复盘总结
本节摘要

精选留言(6)

  • 2018-12-02
    信号量不支持主动超时的解释,看了三遍还是没看懂,麻烦波波老师再详细解释一下,感谢!

    作者回复: 你可以使用信号量然后设超时(比如2秒),但调用的服务要花5秒,这个调用线程(容器线程)不能在2秒时主动超时,必然等5秒调用返回,hystrix会标记一次超时,因为你设了2秒超时(虽然实际服务调花5且是成功的)。线程池设2秒超时的话,下面的调用线程(hystrix线程池内线程)会在2秒时主动超时。

    2
  • 2019-02-18
    老师,为什么受信任服务的就用信号量?

    作者回复: 受信任服务一般是企业内部开发,性能不至太差,所以用信号量也OK。但是如果服务确实很慢,即使受信任,也要考虑线程池隔离,同时因为在企业内部,我们一般可以要求服务提供方改善性能。第三方的服务我们一般称为不受信,因为性能一般无法把控,可能很慢,我们一般也无法要求第三方改善性能。

  • 2018-12-20
    为什么不以多个服务作为一个线程池?
    10个接口,开10个线程池, 核心活跃线程数开销会不会很大?
    还是每个接口的单个线程池设置核心线程数不大,然后通过线程等待队列的方式优化?

    作者回复: 一个线程管多个服务,就无法有效隔离,就会有干扰问题。一个服务一般不会同时调很多其它服务,调超>=10服务场景是很少的,即使有,10个线程池开销也不大。只有网关(或某些聚合服务)会大量调其它服务,这时不用线程池,而用信号量。

  • 2018-12-11
    你好,我现在遇到一个问题想请教下:
        每个服务单元设置一个线程池进行隔离限流,但是线程都没有回收一直hang住了,如:
    "hystrix-xxxservice-5" #1029 daemon prio=5 os_prio=0 tid=0x00007f5a9c235800 nid=0x402b waiting on condition [0x00007f5a87ce5000]
       java.lang.Thread.State: WAITING (parking)
            at sun.misc.Unsafe.park(Native Method)
            - parking to wait for <0x00000006c58491a0> (a java.util.concurrent.SynchronousQueue$TransferStack)
            at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
            at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:458)
            at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:362)
            at java.util.concurrent.SynchronousQueue.take(SynchronousQueue.java:924)
            at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
            at java.lang.Thread.run(Thread.java:748)

     当是聚合服务(服务单元过多)的时候,这样的线程hang住很浪费资源,请问有办法解决吗?
     
    展开

    作者回复: 如果是聚合服务过多(一般在网关上),请使用信号量隔离,不要用线程池,否则会搞出很多线程池开销太大不可控。

  • 2018-10-28
    老师,信号量隔离不支持异步调用是什么意思?麻烦您有空解释下,😄

    作者回复: 建议看hystrix文档对semaphore信号量的解释,内部本质是同步阻塞机制,

    https://github.com/Netflix/Hystrix/wiki/How-it-Works

    Note: if a dependency is isolated with a semaphore and then becomes latent, the parent threads will remain blocked until the underlying network calls timeout.

  • 老师,想问下我看到线程池隔离的话是每个服务一个线程池,信号量隔离也是每个服务设置一个信号量吗?

    作者回复: 一般是以服务为单位进行隔离限流