1. 微服务

微服务架构⻛格,就像是把⼀个单独的应⽤程序开发为⼀套⼩服务,每个⼩服务运⾏在⾃⼰的进程 中,并使⽤轻量级机制通信,通常是 HTTP API。这些服务围绕业务能⼒来构建, 并通过完全⾃ 动化部署机制来独⽴部署。这些服务使⽤不同的编程语⾔书写,以及不同数据存储技术,并保持最 低限度的集中式管理。

架构对比:

单体架构: [WEB][业务逻辑][数据库]
微服务架构: [WEB]←→[用户微服务][数据库1]
                   ←→[订单微服务][数据库2]

简⽽⾔之:拒绝⼤型单体应⽤,基于业务边界进⾏服务微化拆分,各个服务独⽴部署运⾏。

1.1集群&分布式&节点

集群是个物理形态,分布式是个⼯作⽅式。 只要是⼀堆机器,就可以叫集群,他们是不是⼀起协作着⼲活,这个谁也不知道;

《分布式系统原理与范型》定义: “分布式系统是若⼲独⽴计算机的集合,这些计算机对于⽤户来说就像单个相关系统” 分布式系统(distributed system)是建⽴在⽹络之上的软件系统。

分布式是指将不同的业务分布在不同的地⽅。 集群指的是将⼏台服务器集中在⼀起,实现同⼀业务。

例如:京东是⼀个分布式系统,众多业务运⾏在不同的机器,所有业务构成⼀个⼤型的业务集群。 每⼀个⼩的业务,⽐如⽤户系统,访问压⼒⼤的时候⼀台服务器是不够的。我们就应该将⽤户系统 部署到多个服务器,也就是每⼀个业务系统也可以做集群化; 分布式中的每⼀个节点,都可以做集群。 ⽽集群并不⼀定就是分布式的。 节点:集群中的⼀个服务器 1.3. 远程调⽤ 在分布式系统中,各个服务可能处于不同主机,但是服务之间不可避免的需要互相调⽤,我们称为 远程调⽤。 SpringCloud 中使⽤ HTTP+JSON 的⽅式完成远程调⽤

节点:集群中的⼀个服务器

分布式系统
├── 用户服务集群(节点A、节点B...)
├── 订单服务集群(节点1、节点2...)
└── 支付服务(独立节点)

1.2远程调用

在分布式系统中,各个服务可能处于不同主机,但是服务之间不可避免的需要互相调⽤,我们称为 远程调⽤。 SpringCloud 中使⽤ HTTP+JSON 的⽅式完成远程调⽤

[2023-08-20 10:00:00] INFO 调用订单服务
├─ 请求URL: http://order-service/api/v1
├─ 耗时: 128ms
└─ 响应状态: 200

1.3 负载均衡

分布式系统中,A 服务需要调⽤ B 服务,B 服务在多台机器中都存在,A 调⽤任意⼀个服务器均 可完成功能。 为了使每⼀个服务器都不要太忙或者太闲,我们可以负载均衡的调⽤每⼀个服务 器,提升⽹站的健壮性。

常⻅的负载均衡算法:

轮询:为第⼀个请求选择健康池中的第⼀个后端服务器,然后按顺序往后依次选择,直到最后 ⼀个,然后循环。

最⼩连接:优先选择连接数最少,也就是压⼒最⼩的后端服务器,在会话较⻓的情况下可以考 虑采取这种⽅式。

散列:根据请求源的 IP 的散列(hash)来选择要转发的服务器。这种⽅式可以⼀定程度上保 证特定⽤户能连接到相同的服务器。如果你的应⽤需要处理状态⽽要求⽤户能连接到和之前相 同的服务器,可以考虑采取这种⽅式。

1.4服务注册/发现&注册中⼼

A 服务调⽤ B 服务,A 服务并不知道 B 服务当前在哪⼏台服务器有,哪些正常的,哪些服务已经 下线.解决这个问题可以引⼊注册中⼼;

如果某些服务下线,我们其他⼈可以实时的感知到其他服务的状态,从⽽避免调⽤不可⽤的服务 。

1.5配置中⼼

每⼀个服务最终都有⼤量的配置,并且每个服务都可能部署在多台机器上。我们经常需要变更配 置,我们可以让每个服务在配置中⼼获取⾃⼰的配置。 配置中⼼⽤来集中管理微服务的配置信息。

Git仓库(存储配置)
  ↓ 推送变更
Config Server(集中管理)
  ↓ 长轮询
微服务(@RefreshScope热更新)

1.6 服务熔断&服务降级

在微服务架构中,微服务之间通过⽹络进⾏通信,存在相互依赖,当其中⼀个服务不可⽤时,有可能会造成雪崩效应。要防⽌这样的情况,必须要有容错机制来保护服务。

降级策略矩阵

场景 降级方案 恢复条件
数据库超时 返回本地缓存 数据库恢复
第三方API故障 返回默认值("暂无数据") 第三方服务正常

1.6.1服务熔断

设置服务的超时,当被调⽤的服务经常失败到达某个阈值,我们可以开启断路保护机制,后来的请 求不再去调⽤这个服务。本地直接返回默认的数据

1.6.2服务降级

在运维期间,当系统处于⾼峰期,系统资源紧张,我们可以让⾮核⼼业务降级运⾏。降级:某些服 务不处理,或者简单处理【抛异常、返回 NULL、调⽤ Mock 数据、调⽤ Fallback 处理逻辑】

1.7. API ⽹关

在微服务架构中,API Gateway 作为整体架构的重要组件,它抽象了微服务中都需要的公共功 能,同时提供了客户端负载均衡,服务⾃动熔断,灰度发布,统⼀认证,限流流控,⽇志统计等丰 富的功能,帮助我们解决很多 API 管理难题。

网关过滤器链

请求 → 限流过滤器 → 认证过滤器 → 路由过滤器 → 响应装饰过滤器

Logo

更多推荐