Spring Boot 与 Kubernetes 云原生微服务实践
杨波
前携程 / 拍拍贷技术总监,微服务技术专家
28227 人已学习
新⼈⾸单¥98
课程目录
已完结/共 94 讲
第一章:课程介绍和案例需求 (5讲)
第十章:项⽬复盘、应用和扩展环节 (2讲)
第十一章:附录 Staffjoy 项目源代码解析 (8讲)
时长 14:53
时长 10:29
时长 10:52
时长 05:09
时长 15:06
时长 16:17
Spring Boot 与 Kubernetes 云原生微服务实践
登录|注册
留言
11
收藏
沉浸
阅读
分享
手机端
回顶部
当前播放: 21 | 异步处理为何要复制线程上下文信息?
00:00 / 00:00
高清
  • 高清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.75x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看
01 | 课程介绍
02 | 背景说明
03 | 课程目标和主要内容
04 | 课程案例需求
05 | 课程补充说明
06 | 为何采用微服务架构?
07 | 架构设计和技术栈选型
08 | 数据和接口模型设计:账户服务
09 | 数据和接口模型设计:业务服务
10 | Dubbo、Spring Cloud和Kubernetes该如何选型(上)
11 | Dubbo、Spring Cloud和Kubernetes该如何选型(中)
12 | Dubbo、Spring Cloud和Kubernetes该如何选型(下)
13 | 技术中台到底讲什么?
14 | Staffjoy项目结构组织
15 | 谷歌为何采用单体仓库(Mono-Repo)?
16 | 微服务接口参数校验为何重要?
17 | 如何实现统一异常处理?
18 | DTO和DMO为什么要互转?
19 | 如何实现基于Feign的强类型接口?
20 | 为什么框架层就要考虑分环境配置?
21 | 异步处理为何要复制线程上下文信息?
22 | 为你的接口添加Swagger文档
23 | 主流微服务框架概览
24 | 网关和BFF是如何演化出来的(上)
25 | 网关和BFF是如何演化出来的(下)
26 | 网关和反向代理是什么关系?
27 | 网关需要分集群部署吗?
28 | 如何设计一个最简网关?
29 | Faraday网关代码解析(上)
30 | Faraday网关代码解析(下)
31 | 生产级网关需要考虑哪些环节?
32 | 主流开源网关概览
33 | 安全认证架构演进:单块阶段(上)
34 | 安全认证架构演进:单块阶段(下)
35 | 安全认证架构演进:微服务阶段
36 | 基于JWT令牌的安全认证架构
37 | JWT的原理是什么?
38 | JWT有哪两种主要流程?
39 | Staffjoy安全认证架构和SSO
40 | 用户认证代码剖析
41 | 服务调用鉴权代码剖析
42 | 如何设计用户角色鉴权?
43 | Spring Boot微服务测试该如何分类?
44 | 什么是契约驱动测试?
45 | 什么是测试金字塔?
46 | 单元测试案例分析
47 | 集成测试案例分析
48 | 组件测试案例分析
49 | Mock vs Spy
50 | 何谓生产就绪(Production Ready)?
51 | Spring Boot如何实现分环境配置
52 | Apollo vs SpringCloudConfig vs K8s ConfigMap
53 | CAT vs Zipkin vs Skywalking(上)
54 | CAT vs Zipkin vs Skywalking(下)
55 | 结构化日志和业务审计日志
56 | 集中异常监控和Sentry
57 | EFK & Prometheus & Skywalking + Kubernetes 集成架构
58 | 本地开发部署架构和软件需求
59 | 手工服务部署和测试(上)
60 | 手工服务部署和测试(中)
61 | 手工服务部署和测试(下)
62 | SkyWalking调用链监控实验
63 | Docker和Docker Compose简介
64 | 容器镜像构建Dockerfile解析
65 | Docker Compose服务部署文件剖析
66 | 将Staffjoy部署到本地Docker Compose环境(上)
67 | 将Staffjoy部署到本地Docker Compose环境(下)
68 | 到底什么是云原生架构?
69 | Kubernetes背景和架构
70 | Kubernetes有哪些基本概念(上)
71 | Kubernetes有哪些基本概念(下)
72 | 理解Kubernetes节点网络和Pod网络
73 | 深入理解Service和ServiceDiscovery
74 | NodePort vs LoadBalancer vs Ingress
75 | 本地测试Kubernetes部署文件剖析
76 | 本地测试Kubernetes环境搭建
77 | 将Staffjoy部署到本地Kubernetes环境(上)
78 | 将Staffjoy部署到本地Kubernetes环境(下)
79 | 生产环境Kubernetes部署文件剖析
80 | 阿里云Kubernetes环境创建
81 | 将Staffjoy部署到阿里云Kubernetes环境
82 | Kubernetes应用动态配置实验
83 | Kubernetes应用金丝雀发布实验
84 | 阿里云资源释放
85 | 课程复盘
86 | 项目扩展和应用
87 | Account服务
88 | Company服务
89 | Mail、SMS和Bot服务
90 | Faraday服务
91 | WhoAmI服务
92 | WWW服务
93 | 前端应用
94 | 结课测试&结束语
登录 后留言

全部留言(11)

  • 最新
  • 精选
刘大明
老师请问一下,这种异步调用,我们为啥不用中间件呢。比如说kafka mq之类的。

作者回复: 异步调用可以分为进程内进程外两类,主要看异步调用的规模和量,量小进程内处理也没问题,量大考虑进程外的甚至分布式的异步处理。进程内的异步调用可以直接采用Spring Async机制,进程外的异步处理,可以考虑引入kafka等mq。

2019-07-25
2
11
旭东(Frank)
异步操作不能和调用者放到同一个bean的原因没有解释,老师能解释下就更好了

作者回复: 前面回复有说明,请参考stackoverflow上的这个帖子的第一个解释,很详细: https://stackoverflow.com/questions/24898547/spring-async-method-called-from-another-async-method。 根源是spring AOP机制的局限性造成。

2020-02-01
4
🐛
老师,您好,为什么异步的方法不能和调用异步方法的方法在一个类呢?

作者回复: 你好,这个跟spring async/aop的内部实现机制有关,具体可以参考stackoverflow上的一个回答,解释的比较清楚:https://stackoverflow.com/questions/24898547/spring-async-method-called-from-another-async-method

2019-08-15
2
💢 星星💢
波波老师,问个基础的问题,我看到yaml文件中有好多占位符的值 比如 sentry-dsn: ${SENTRY_DSN} aliyun-access-key: ${ALIYUN_ACCESS_KEY} aliyun-access-secret: ${ALIYUN_ACCESS_SECRET} ${}占位符的值,是怎么找到的。只看到springboot把它外部化配置自动装配成bean,没看到值具体在哪里,用idea也没发现具体的值在哪。对yaml和springboot集成 不太熟悉。

作者回复: 这些占位符,具体运行时的取值要看你的运行方式: 1. 如果是本地直接运行,那么取值在项目根目录的config/application.yml文件中。 2. 如果docker compose运行,那么取值在项目根目录的.env文件中。 3. 如果k8s运行,那么取值在k8s的secret中,相关配置在项目根目录的k8s/{env}/config目录中。

2020-08-30
1
韶年
老师,我怎么知道在我的系统中,线程池该设置多大?

作者回复: 你好,每个应用/系统的场景和流量模式各不相同,所以没有所谓的标准设置,一般都是预设一个估计值(例如可以设置成CPU的核数),然后做好测试和生产监控,根据实际测试和监控数据再进行调整。实际可以对接Apollo等配置中心,这样可以按需动态调整设置。

2019-08-07
1
WL
老师请问一下在ServiceHelper的syncUserAsync(String userId)方法里面有很多抛出异常的处理, 我想请问一下在异步方法里抛出异常有啥作用, 调用他的类能接catch到异步方法中抛出的异常吗?

作者回复: 对,异步操作抛出的异常,一般在主线程里头是捕获不到的。大部分场景下,如果异步操作抛异常,捕获的话能做的就是记录错误日志,事后可以备查,或者尝试后备操作,还有就是关闭一起启用的资源,防止资源泄漏。

2019-07-24
1
春哥
异步操作不能放到同一个bean中,是不是因为AOP代理的问题。

作者回复: 对,爬楼梯看上面有参考链接解释这个问题。

2020-03-28
Bing
定时任务类中使用这个复制好像会出错,有什么好的处理办法吗

作者回复: 这种复制线程上下文信息,一般在用户驱动的调用的场景下才有意义,比如跟踪用户调用产生的调用链(trace),或者传递一些用户身份标识信息等。 对于定时任务,通常是机器时钟定期触发的,一般没有必要传递线程上下文,记录日志或者产生metrics对这种场景倒是适用的。这种场景如果确实需要传递参数,建议用DB。

2020-03-17
Geek_9695b4
老师,我在看到这个视频时正好遇到类似的问题。问题是我们系统是使用多数据源动态切换的,也就是不同用户使用不同的数据源,主要思想是extends AbstractRoutingDataSource,这个数据源信息是放在请求头里面的。但是遇到一个问题,就是业务代码中使用多线程时,这个设置的动态数据源无效了,请问一下是什么原因,怎么解决比较好?

作者回复: 你好,多数据源动态切换这类场景我还没有实际接触过,没有足够上下文所以还不清楚你的具体问题出在哪里。但是,线程级上下文信息传递的一般技术思路:1)在同一个线程里头,可以使用线程局部变量在不同类/方法间传递数据;2)如果线程有切换,那么在切换的边界需要将线程上下文数据进行复制,比如从A线程复制到B线程,这样采用在两个线程间传递数据,保证不断。具体问题建议你看源码+调试跟踪进一步分析。

2019-08-05
4
sayid
老师好,为何不用Spring 事件监听模式,结合spring的异步去使用,而是自己去维护调用上下文?

作者回复: 课程的目标是让大家不仅是知其然,而且知其所以然,所以采用代码实现自己维护调用Context,这个不复杂,工作量也不大,而且也很灵活。

2019-08-03
收起评论