微服务学习1 —— 微服务组件

微服务学习1 —— 微服务组件

撸帝介绍的学习思路:

  1. 是什么
  2. 为什么
  3. 怎么用

1. 微服务是什么呢?

微服务是一种架构思想,将每一个模块独立出来形成一个单独的应用程序。

2. 为什么会出现微服务?

原始的项目就类似于小诊所。规模小但是里面的大夫什么病都能看。 要成立一个诊所也很简单,一个门面房就可以。
要创建一个简单的项目通过 https://start.spring.io/直接生成Springboot项目。
随着项目逐渐完善,功能一直增加,项目变的非常庞大,暂且不说出现系统级雪崩,就算修改一个简单的bug都要停止整个项目,而且启动时间也会逐渐变长,更不利于维护。假如某个服务出现问题,调用这个服务就会出现线程阻塞,此时若有大量的请求涌入,容器的线程资源会被消耗完毕,导致服务瘫痪,对整个系统造成灾难性的严重后果。

3. 微服务包含哪些组件?

4. 理解各个组件的含义: 讲故事

倒霉的小明又上线了。

1. 网关路由 — 微服务的入口

小明骨折了去医院看病,首先去分诊台/导诊台, 分诊台挂号骨科。
 
Z u u l \color{#4285f4}{Z}\color{#ea4335}{u}\color{#fbbc05}{u}\color{#4285f4}{l} Zuul

基于spring-boot-starter-web
可以实现负载均衡、反向代理、动态路由、请求转发等功能。
Zuul大部分功能是通过过滤器实现的,除了标准的四种过滤器类型(pre,routing,post,error),
还支持自定义过滤器extends ZuulFilter 。

S p r i n g C l o u d G a t e w a y \color{#4285f4}{Spring}\color{#ea4335}{Cloud}\color{#fbbc05}{}\color{#34a853}{Gateway} SpringCloudGateway

基于spring-boot-starter-webflux
可以实现负载均衡、反向代理、动态路由、请求转发,熔断功能,限流功能等功能。
创建路由的方式有多种:1. 写进代码。2.写到yml 。 3.存储到redis

2. 注册与发现

分诊台就是注册与发现,分诊台知道医院有哪些科室,哪些科室今天有大夫坐诊,哪些科室人多人少。
 
Z o o k e e p e r \color{#4285f4}{Z}\color{#ea4335}{oo}\color{#fbbc05}{ke}\color{#4285f4}{ep}\color{#34a853}{e}\color{#ea4335}{r} Zookeeper

在目录上挂节点,一般部署奇数台,从中选举一台当作leader主节点,其他是从节点。
当主节点挂了,其他活着的自动选举leader 。

E u r e k a \color{#4285f4}{E}\color{#ea4335}{u}\color{#fbbc05}{r}\color{#4285f4}{e}\color{#34a853}{k}\color{#ea4335}{a} Eureka

Eureka 是一个高可用的组件,它没有后端缓存,每一个实例注册之后需要向注册中心发送心跳

A l i b a b a − N a c o s \color{#4285f4}{Ali}\color{#ea4335}{ba}\color{#fbbc05}{ba}\color{#4285f4}{}\color{#34a853}{-Na}\color{#ea4335}{cos} AlibabaNacos

后期之秀,功能比eureka多,阿里巴巴发行维护。

3. 负载均衡

分诊台会首先安排人少的科室,不忙的科室。
R i b b o n \color{#4285f4}{R}\color{#ea4335}{i}\color{#fbbc05}{b}\color{#4285f4}{b}\color{#34a853}{o}\color{#ea4335}{n} Ribbon

4. 服务与服务之间的调用

倒霉催的小明,不仅骨折了,还头疼。骨折看完了 又不方便去分诊台从新开始,骨科大夫就告诉他去3楼看内科。
o p e n F e i g n \color{#4285f4}{open}\color{#ea4335}{Feign}\color{#fbbc05}{}\color{#4285f4}{}\color{#34a853}{}\color{#ea4335}{} openFeign

声明式的伪 Http 客户端,使用只需要创建一个接口加注解就行了。
Feign 整合了 Ribbon

r e s t T e m p l a t e \color{#4285f4}{re}\color{#ea4335}{st}\color{#fbbc05}{Tem}\color{#4285f4}{pla}\color{#34a853}{te}\color{#ea4335}{} restTemplate

URL参数是以编程方式构造的,

5. 服务降级/服务限流

降级:骨科大夫临时安排了一场手术,没办法及时给治疗,就让护士先挂点滴。
限流:新冠肺炎爆发,医院达到了最大的承受力,于是就限流,走一个来一个。
服 务 降 级 h y s t r i x \color{#4285f4}{服}\color{#ea4335}{务}\color{#fbbc05}{降}\color{#4285f4}{级}\color{#34a853}{hys}\color{#ea4335}{trix} hystrix

假如服务出现问题,调用这个服务就会出现线程阻塞,此时若有大量的请求涌入,
容器的线程资源会被消耗完毕,导致服务瘫痪,对整个微服务系统造成灾难性的严重后果
使用熔断器防止服务雪崩
已停更。 程序触发了降级并不会抛异常,会返回同类型的空数据

服 务 限 流 A l i b a b a − s e n t i n e l \color{#4285f4}{服}\color{#ea4335}{务}\color{#fbbc05}{限}\color{#4285f4}{流}\color{#34a853}{Alibaba}\color{#ea4335}{-sentinel} Alibabasentinel

可以用来替代hystrix,也支持降级。

6. 配置中心

S p r i n g C l o u d C o n f i g \color{#4285f4}{Spring}\color{#ea4335}{Cloud}\color{#fbbc05}{Config}\color{#4285f4}{}\color{#34a853}{}\color{#ea4335}{} SpringCloudConfig

在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件。
配置文件统一存放管理,可以放进git、svn、数据库、本地文件。
在 Spring Cloud Config 组件中,分两个角色,一是 Config Server,二是 Config Client。

7. 链路追踪

护士全程陪护检查
Z i p K i n \color{#4285f4}{Z}\color{#ea4335}{i}\color{#fbbc05}{p}\color{#4285f4}{K}\color{#34a853}{i}\color{#ea4335}{n} ZipKin

分布式跟踪系统,根据调用关系通过 ZipKin UI 生成依赖关系图,显示了多少跟踪请求通过每个服务,该系统让开发者可通过一个 Web 前端轻松的收集和分析数据,例如用户每次请求服务的处理时间等,

8. 服务监控管理

医院的监控室
S p r i n g C l o u d A d m i n \color{#4285f4}{Spring}\color{#ea4335}{Cloud}\color{#fbbc05}{Admin}\color{#4285f4}{}\color{#34a853}{}\color{#ea4335}{} SpringCloudAdmin

项目会不断变大,切分出的服务也会越来越多,这时一个个的微服务构成了错综复杂的系统。
SpringCloudAdmin可以管理微服务系统的健康状态、会话数量、并发数、服务资源、延迟等度量信息的收集

9. 其他

登陆认证和鉴权 OAuth2+JWT
统一的日志管理 ELK
等等

你可能感兴趣的:(微服务学习)