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 云原生微服务实践
登录|注册
留言
8
收藏
沉浸
阅读
分享
手机端
回顶部
当前播放: 32 | 主流开源网关概览
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 | 结课测试&结束语
登录 后留言

全部留言(8)

  • 最新
  • 精选
Bean.Long
https://github.com/Dromara/soul,开源时间不长,有一些特点。老师可以帮对比一下。

作者回复: 简单看了一下,soul的功能很丰富,治理很全面,有时间要细细研究下,谢谢推荐! 不过关键还是要落地案例,网关产品其实很多,真正接地气在企业大规模落地的并不多,zuul算是一个(在Netflix大规模落地,也被Spring Cloud集成)。

2019-11-16
2
6
正是那朵玫瑰
老师,可编程网关这个可编程指的的是什么啊?faraday网关哪里体现了可编程啊?

作者回复: 可编程网关,通常指网关提供可编程的API,比如kong/traefik这些都是可编程网关,可以通过API调用直接操作网关的功能,比如添加路由规则,调整限流阀值,或者高级的流量调度A/B测试等。 Faraday本身就是一个SpringBoot应用,代码不多也很简单,它的可编程主要指,普通开发人员主可以通过代码任意调整网关的功能,这是另外一种意义上的可编程,实际使用也更加灵活,当然如果需要,可以给Faraday添加一层API,支持通过API可编程,这个时候可以考虑像Kong一样引入集中存储(kong使用postgresql),存储网关的配置,有一定复杂性和开发量。

2019-07-30
2
6
东方奇骥
老师,这几个开源网关,实际生产环境,你更倾向于使用哪一个呢。现在我们还是用的zul,是不是springcloud gateway和contaknous会更有优势一些?

作者回复: 我个人的意见,没有哪个特别有优势,各有利弊,zuul简单稳定,但是同步模式,而且spring cloud zuul里头引入hystrix/ribbon之后也会变得比较复杂;spring cloud gateway异步模式,兼备网关和反向代理功能,配置灵活,但是比较新,坑还没有踩平,大规模落地案例不多;traefik兼备网关和反向代理功能,golang语言写性能也不错,而且是属于云原生网关,带UI不错的dashboard,但是golang语言对一般程序员来说是门槛,国内大规模落地案例也不多。如果你已经用了zuul,没有问题可以继续使用,同时可以关注和试点spring cloud gateway。

2019-07-30
5
JRT324
波波老师你好,在你的这个StaffJoy项目中,能否用spring cloud gateway 替代Faraday网关?

作者回复: 在理解了微服务原理和Staffjoy项目的代码以后,其中的Faraday网关完全可以用Spring Cloud Gateway来替代,在生产环境中,也建议用Spring Cloud Gateway。作为一个实践拓展环节,建议你尝试将Staffjoy扩展为支持Spring Cloud Gateway,代码应该并不复杂。

2021-02-25
2
云淡风清
追问一下,波波老师,我看b站的老大提到他们的架构的时候说他们的网关要做聚合,把内部多个微服务的业务在网关聚合成一个api,这似乎跟zuul这样透明转发的网关运行方式不一样,而且他的网关还是按业务分类,比如会员网关,app网关,,,这种网关架构真的好吗,能否简单介绍和评价一下

作者回复: 一些公司职责分离比较清楚,网关只做反向路由,安全监控等跨横切面的功能,API聚合逻辑交由后台BFF层做。 也有一些公司的聚合是直接做在网关上的,技术上也可以做到,不过从单一职责/关注分离这些架构原则角度讲,这种做法把网关和业务聚合功能耦合了。当然原则也不是绝对,实际还要看其它因素,比如企业的硬件资源是否富裕,一般企业早期业务简单,资源吃紧,这时候把聚合逻辑直接做在网关上也未尝不可,后续业务变大,需要职责分离的时候,可再拆分解耦。

2019-12-27
2
龙彦极客
波波老师,您好! 问题1: 我在zuul+k8s整合的时候,弃用了Eureka,使用的k8s的负载均衡; 遇到一个问题,zuul经常会出现懒加载问题,(即一段时间不访问,第一次查询就会出现慢查询5s,但是第二次以后就是正常几十ms了),尝试想改成饥饿查询,发现饥饿模式只是针对eureka的ribbon zuul的配置 zuul: ribbon: eager-load: enabled: true 微服务也有同样的问题,与k8s整合,如果使用feign的方式调用,如下配置也会有超时直接熔断的情况出现, 提示com.netflix.hystrix.exception.HystrixTimeoutException: null,进入了feign的错误回退机制。 ribbon: eager-load: enabled: true clients: user-service zuul调用微服务、微服务之间的调用,在使用feign的时候, 用的k8s的service-name,service-name又没有被注册到zuul的ribbon上下文(微服务之间的调用也是) 该如何解决这个懒加载问题? 问题2: 如果zuul该问题解决不了,是不是我该考虑使用Spring cloud gateway来做网关,Spring cloud gateway是不是没有该问题? 问题3: 用上k8s来做负载均衡了,是不是微服务之间的调用直接使用oAuth2RestTemplate来远程调用接口,从而弃用基于ribbon的feign调用方式?

作者回复: 关于第1/2个问题,k8s支持liveness和readiness probe,其中readiness probe是就绪探针,如果配置了就绪探针,那么pod启动时候,只要就绪探针测试不通过,k8s就不会给这个pod发送流量,所以你可以给k8s中的服务(包括zuul)都配置http就绪探针,以保证服务完全启动后才接收流量。 问题3,k8s内置支持服务发现和负载均衡,客户端可以不用ribbon/feign组合,可以直接用裸http进行调用,k8s底层会自动做负载均衡。 关于就绪探针配置可以参考k8s官方文档: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/ 另外我的B站空间有k8s微服务实践视频课程: https://space.bilibili.com/518029478/channel/index

2020-11-23
1
下一道彩虹
杨波老师,你好,看到老师列的几种网关产品中,spring cloud gateway是2016年后期推出来,时间挺靠后的,但老师为什么将其定义为早期产品?根据老师解释是说这里的坑还没有填完。是否可以理解为目前spring cloud gateway 成熟度和稳定性上不够,处于产品初期?

作者回复: 对,我的意思是spring cloud gateway属于初期产品,出来没有几年,目前文档案例都不多,我认为其功能代码都还不够稳定,还在不断迭代改进中。

2019-08-01
1
龙彦极客
我出现了隔一段时间访问zuul就会出现延迟懒加载后面微服务的问题,再继续访问就正常; 过一段时间又延迟加载。它是一段时间不访问,就出现间隙性的延迟加载。 k8s的就绪探针是不是只能解决初次流量接入的时候的就绪?

作者回复: 1. 首先定位到底是什么原因造成的延迟加载问题,建议把zuul的各种filter都先去掉,就留一些最简单的能支持zuul正常工作的最简单的filter(包括最简单的http client),然后用排除法依次排查,定位到具体问题点后再想办法优化解决。 2. k8s中的就绪探针(readiness proble)解决点火问题,保证pod起来后已经正常工作,k8s可以将流量打到pod上,这个是初次接入流量有效。另外k8s还有liveness proble,用来确保pod是活的,如果死了k8s就会重启新的pod,liveness probe在应用服务期间是一直工作的。如果上面1无法解决你的问题,可以临时考虑用liveness probe定期激活你的zuul(注意合理配置检测间隔和超时时间),实现类似保活keep alive的功能,但这个只能算是一个临时的workaround,最好还是要通过上面的1定位问题才能彻底解决。

2020-11-25
收起评论