SpringCloud

SpringCloud 版本选择

通用版 H 版

SpringCloud 与 Springboot 版本依赖

H - > 2.2.0.M4 ~ 2.2.5
G - > 2.1.X

常用版本

cloud: H.SR1
boot: 2.2.2
cloudAlibaba: 2.1.0
java: 8
Maven: 3.5
Mysql: 5.7

SpringCloud 停更说明

  • 服务注册中心:
    Eureka: 停更
    zookeeper
    Nacos(SpringCloud alibaba)
  • 服务调用
    Ribbon 维护状态
    LoadBlance (孵化中)
  • 服务调用
    Feign : 停更
    OpenFeign (SpringCloud 社区出品)
  • 服务降级
    Hystrix : 维护状态
    resilience4j 官网推荐
    Sentinel (alibaba) 服务熔断和降级

SpringCloud 是什么?

基于 SpringBoot 提供了一套微服务解决方案。
包括服务注册与发现,配置中心,全链路监控,
服务网关,负载均衡,熔断器组件。

SpringCloud 的优势

  • 整体解决方案和成熟度高
  • 社区热度高
  • 学习曲线 - 注解

SpringBoot 与 SpringCloud 的关系

  • SpringBoot 专注于快速方便的开发单个个体微服务
  • SpringCloud 是关注全局的微服务协调治理框架,它将SpringBoot 开发的单个微服务整合并管理
    并管理起来,为各个微服务之间提供:配置管理、服务发现、断路器、路由、微代理、事件总线、
    全局锁、决策竞选、分布式会话等集成服务!
  • SpringBoot 可以离开SpringCloud 独立使用,SpringCloud 离不开SpringBoot。

Dubbo 和 SpringCloud 对比

最大区别:SpringCloud 抛弃了 Dubbo 的RPC 通信,采用的是基于 HTTP 的 RESTFUL 方式
社区活跃度:Dubbo 停更5年左右
解决的问题域不一样:Dubbo 的定位是一款RPC框架,SpringCloud 的目标是微服务架构下的一站式解决方案。

SpringCloud 社区

  • 中国社区
    http://www.springcloud.cn/
  • 中文API文档
    https://www.springcloud.cc/

Eureka

什么是 Eureka

Eureka 是Netflix 的子模块。是一个 CS架构。
Eureka 基于 Rest, 主管服务的注册与发现。
类似于Dubbo 的 Zookeeper。
Eureka Server 是服务的注册中心。
系统的其他微服务,通过 Eureka 客户端连接到 Eureka Server 并维持其心跳,这样就可以通过
Eureka Server 来监控各个系统的微服务是否正常,Spring Cloud 中的其他一些模块,

Eureka 两大组件

Eureka Server 和 Eureka Client ,
Server 提供注册服务,各个节点启动后会在 Server 注册服务
Client 是Java 客户端,内置负载均衡器。
各个应用启动后会向Server 发送心跳(默认周期为 30 秒),如果 Server 在多个心跳周期内没有
接收到某个节点的心跳,Server 会将该节点移除,默认周期为 90 秒。

服务端配置

server:
  port: 7001
eureka:
  instance: 
  	hostname: localhost // Eureka 服务端的实例名称
  client: 
   register-with-eureka: false // 表示是否向 Eureka 注册中心注册自己的服务
   fetch-registry: false // 表示是否自己是注册中心
   server-url: // 监控页面
   	defaultZone: http://${enreka.instance.hostname}:${server.port}

@EnableEurekaServer // Eureka 注册中心标识

客户端配置

eureka:
 clent:
  server-url: 
   defaultZone: http://localhost:7001/eureka/
 instance:
 	instance-id: provider // 微服务在eureka 中的别名
    prefer-ip-address: true // 微服务在 Eureka 中的 IP

@EnableEurekaClent

Eureka 的自我保护机制

默认情况下,如果 Eureka 在一定时间内没有收到某个微服务实例的心跳,Server 将会注销该实例(默认 90 秒),但是当出现网络分区故障时,微服务与Server 端无法正常通信,可能微服务时健康的,此时不应该注销该微服务实例,Eureka 通过自我保护机制来解决这个问题,即当Server 节点在短时间内丢失过多的客户端时,这个节点就会进入自我保护模式,Server 会保护注册表中的信息,不在删除注册表中数据,网络回复后,Server 节点会自动退出自我保护模式。
就是:某个时刻某一微服务不可用了,eureka 不会立马清理掉,依旧会对该微服务的信息进行保存。

eureka-server服务端 
enreka.server.enable-self-preservation = false // 关闭自我保护机制

总结:宁可同时保留所有微服务(健康的和不健康的微服务都会保留),也不盲目注销任何健康的微服务。
使用自我保护机制可以让Eureka集群更加健壮和稳定。

Discovery

服务发现,对于注册进Eureka 中的服务,可以通过服务发现获取这些微服务信息。

提供者添加服务发现接口

@Autowired
private DiscoveryClient client;

Eureka 集群

什么叫集群

不同服务端部署相同代码,实现相同的功能,如果有一台服务器不可用,另一台服务器可以起到正常工作的目的。具有高可用性。

Eureka 集群配置

TODO
1: 各个Eureka 之间进行同步
2: 客户端注册多台Eureka 服务端

CAP 原理

C:强一致性
A: 可用性
P: 分区容错性
CAP 原理: 一个分布式系统,不可能同时满足一致性、可用性、容错性。最多满足两点。

Eureka 和 Zookeeper 区别

NetFlix 在设计Eureka 时遵守的是 AP 原则 - 自我保护机制
Zookeeper 遵守 CP 原则 - Zookeeper 的选举过程集群不可用
Eureka 有多个节点,节点之间是平等的,当其他节点挂掉不会影响正常节点的使用,只不过查询的信息不是最新的,也就是说Eureka 不能保证一致性,但可以保证高可用。而且Eureka 的自我保护机制也就是心跳机制,Zookeeper 的一台机器挂掉了,会重新选举Learder,这个过程不会对外提供服务,选举后会保证各个主从节点数据同步做到了一致性。

Ribbon

Ribbon 是什么

相当于 Nginx !
SpringCloud Ribbon 是基于 Netflix 实现的一套客户端负载均衡的工具。
Ribbon 是NetFlix 发布的开源项目,主要功能是蹄冻客户端的软件负载均衡算法,将NetFlix
的中间层服务连接在一起,Ribbon 的客户端组件提供一系列的配置:连接超时,重试等,简单的就是说:
再配置文件中列出负载均衡后面的所有机器,Ribbon 会自动的基于某种算法(简单轮询、随机连接等),
去连接这些机器,也可以实现自定义负载均衡算法!

Ribbon 能干什么?

  • LB (Load Balance) 负载均衡,在微服务或者集群中常用的一种应用;
  • 负载均衡简单的说就是将用户的请求平摊分配到多台服务器上,从而达到系统的高可用(HA);
  • 常见的负载均衡软件有 Nginx、Lvs 硬件 F5 等;
  • dubbo、SpringCloud 中均提供了负载均衡功能;

负载均衡简单分类:

  • 集中式LB
    偏硬件。
    在服务的消费方和提供方之间使用独立的LB设施,如Nginx,由该设施负责把访问请求通过某种策略
    转发至服务的提供发!
  • 进程式LB
    偏软件 ,将LB 的逻辑集成到消费方。
    将LB逻辑继承到消费方,消费方从注册中心获取有哪些地址可用,然后自己在从这些地址中选出
    一个合适的服务器;Ribbon 属于进程式LB,它只是一个类库,集成于消费方进程,消费放通过它来
    获取到服务方的地址!

Ribbon 配置

1:消费方引入依赖
2:消费方修改配置文件
3:为 RestTemp 添加 @LoadBalanced


Rubbon IRule 切换算法

  • 轮询
  • 随机
  • 重试

随机轮询算法

重试算法

Feign

接口+注解,一个声明式的web 服务客户端,使得 Web 服务客户端编写简单化。
面向接口编程达到访问微服务的目的。
Feign 继承了 Ribbon ,利用 Ribbon 维护微服务提供者的列表信息,并且通过轮询实现客户端的负载均衡,与Ribbon 不同的是:通过feign 只需要定义服务绑定接口且以声明式的方式,简单的实现了服务的调用。

使用 Feign

1: 客户端添加依赖

2: 修改 Api 工程


3: API 增加接口

Hystrix

熔断器
处理分布式系统的延迟和容错的组件,Hystrix 可以保证在一个依赖出问题时,不会导致整个服务失败,
避免级联故障。
Hystrix 会监控服务之间的调用情况, 缺省时5秒内20次调用失败会触发熔断机制。
比如:在调用接口时,出现长时间等待和阻塞,会返回异常处理。类似于异常通知。
一旦调用服务抛出异常,会自动调用@HystrixCommond 标注好的fallbackMethod 调用类中指定的方法

发生在提供者的熔断器

1: 引入依赖
2: 开启熔断机制注解
@EnableCircuitBreaker

服务降级

当某个服务熔断后,返回错误信息。
提供者无法提供服务时,消费者会调用降级操作,返回服务不可用等信息,或者返回静态页面。
整体资源快不够了,忍痛将某些服务先关掉,待恢复正常时,再开启回来。
服务的降级处理是在客户端完整的,与服务端没有关系。

使用 AOP 思想修改 Feign 形式

@Component
public class FeignClientFallbackFactory implements FallbackFactory<SchedualServiceHi> {
    //    打印日志
    private static final Logger print = LoggerFactory.getLogger(FeignClientFallbackFactory.class);
    //降级处理方式
    @Override
    public SchedualServiceHi create(Throwable throwable) {
        return new SchedualServiceHi() {
            @Override
            public String mm(@RequestParam("uname") String uname, @RequestParam("upwd") String upwd) {
                print.info("fallback; reason was:", throwable);
                return "服务报错了";
            }
        };
    }
}

api 方添加配置

feign:
	hystrix: 
    	enable: true 

Hystrix Dashboard

调用监控的可视化界面
@EnableHystrixDashboard

Zuul

路由网关,包含路由和过滤两个功能。
路由功能将外部请求转发到具体的微服务实例上,是访问的的统一入口,
过滤器功能对请求过程进行干预,实现请求的校验、服务聚合,
Zuul 和 Eureka 整合, 将zuul 注册为 Eureka 组件, 同时从Eureka 获取其他为服务的信息,
之后访问微服务都是通过Zuul 跳转获得。
@EnableZuulProxy

SpringCloud Config

分布式配置中心,SpringCloud 提供了ConfigServer 解决集中管理配置信息的功能
Config 分为服务端和客户端
服务端是一个独立的微服务应用, 用来连接配置服务器为客户端提供配置信息,加密、解密信息的接口
客户端通过指定的配置中心来管理相关的配置内容,在启动的时候从配置中心加载配置信息,默认采用git
来存储。

原理

Eureka 是如何实现高可用的?

Springcloud 的断路器?

服务降级
熔断
隔离

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值