我不怕千万人阻挡 只怕自己投降

写在前面:

SpringCloud 本来今年10月份就开始学的 然后搁置了好久 现在 书店项目基本上告一段落了 有时间来学新东西了 事实上根本没精力做到一心二用 😫

Eureka服务注册与发现

服务治理

什么是服务治理  

Spring Cloud 封装了 Netflix 公司开发的 Eureka 模块来实现服务治理
在传统的rpc远程调用框架中,管理每个服务与服务之间依赖关系比较复杂,管理比较复杂,所以需要使用服务治理,管理服务于服务之间依赖关系,可以实现服务调用、负载均衡、容错等,实现服务发现与注册。

服务注册与发现

Eureka采用了CS的设计架构,Eureka Server 作为服务注册功能的服务器,它是服务注册中心。而系统中的其他微服务,使用 Eureka的客户端连接到 Eureka Server并维持心跳连接。这样系统的维护人员就可以通过 Eureka Server 来监控系统中各个微服务是否正常运行。

image-20211222230445963

在服务注册与发现中,有一个注册中心。当服务器启动的时候,会把当前自己服务器的信息 比如 服务地址通讯地址等以别名方式注册到注册中心上。另一方(消费者|服务提供者),以该别名的方式去注册中心上获取到实际的服务通讯地址,然后再实现本地RPC调用RPC远程调用框架核心设计思想:在于注册中心,因为使用注册中心管理每个服务与服务之间的一个依赖关系(服务治理概念)。在任何rpc远程框架中,都会有一个注册中心(存放服务地址相关信息(接口地址))

Eureka组件

Eureka包含两个组件:Eureka Server(即注册中心)和Eureka Client(即连接到Erueka的服务提供方和发起方)

Eureka Server提供服务注册服务

各个微服务节点通过配置启动后,会在EurekaServer中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观看到。

EurekaClient通过注册中心进行访问

是一个Java客户端,用于简化Eureka Server的交互,客户端同时也具备一个内置的、使用轮询(round-robin)负载算法的负载均衡器。在应用启动后,将会向Eureka Server发送心跳(默认周期为30秒)。如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,EurekaServer将会从服务注册表中把这个服务节点移除(默认90秒

Eureka集群

image-20211222231022653

问题:微服务RPC远程服务调用最核心的是什么

​ 高可用,试想你的注册中心只有一个only one, 它出故障了那就呵呵( ̄▽ ̄)”了,会导致整个为服务环境不可用,所以

  解决办法:搭建Eureka注册中心集群 ,实现负载均衡+故障容错

负载均衡

@Configuration
public class ApplicationContextConfig
{
@Bean
@LoadBalanced // 开启负载均衡 这个注解是为了让RestTemplate自动使用负载均衡的策略
public RestTemplate getRestTemplate()
{

return new RestTemplate();
}
}

服务发现

对于注册进eureka的微服务 可以通过服务发现来获取该服务的信息

   
@Resource
private DiscoveryClient discoveryClient;


@GetMapping(value = "/payment/discovery")
public Object discovery()
{
List<String> services = discoveryClient.getServices();
for (String element : services) {
log.info("*****element: "+element);
}

List<ServiceInstance> instances = discoveryClient.getInstances("CLOUD-PAYMENT-SERVICE");
for (ServiceInstance instance : instances) {
log.info(instance.getServiceId()+"\t"+instance.getHost()+"\t"+instance.getPort()+"\t"+instance.getUri());
}
return this.discoveryClient;
}

并在主启动类添加: @EnableDiscoveryClient //服务发现 关于自身的信息

@EnableDiscoveryClient@EnableEurekaClient共同点就是:都是能够让注册中心能够发现,扫描到改服务。

不同点:@EnableEurekaClient只适用于Eureka作为注册中心,@EnableDiscoveryClient 可以是其他注册中心。

版权声明:本文为CSDN博主「笑是神的伪装」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zheng199172/article/details/82466139

Eureka自我保护机制关闭

server:
port: 7001

eureka:
instance:
hostname: eureka7001.com #eureka服务端的实例名称
client:
register-with-eureka: false #false表示不向注册中心注册自己。
fetch-registry: false #false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
service-url:
#集群指向其它eureka
# defaultZone: http://eureka7002.com:7002/eureka/
defaultZone: http://localhost:7002/eureka/
#单机就是7001自己
# defaultZone: http://eureka7001.com:7001/eureka/
server:
#关闭自我保护机制,保证不可用服务被及时踢除
enable-self-preservation: false # 自我保护机制关闭
eviction-interval-timer-in-ms: 2000 # 超过两秒自动关闭

image-20211222232340639

Consul服务注册与发现

Consul简介

Consul 是一套开源的分布式服务发现和配置管理系统,由 HashiCorp 公司用 Go 语言开发。

提供了微服务系统中的服务治理、配置中心、控制总线等功能。这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建全方位的服务网格,总之Consul提供了一种完整的服务网格解决方案。

它具有很多优点。包括: 基于 raft 协议,比较简洁; 支持健康检查, 同时支持 HTTP 和 DNS 协议 支持跨数据中心的 WAN 集群 提供图形界面 跨平台,支持 Linux、Mac、Windows

Docker 安装配置Consul

  • 拉取Consul镜像

    docker pull consul # 默认拉取latest
    docker pull consul:1.6.1 # 拉取指定版本

  • 安装并运行 并开启防火墙端口

    docker run -d -p 8500:8500 --restart=always --name=consul consul:latest agent -server -bootstrap -ui -node=1 -client='0.0.0.0'

Consul作为注册中心配置

image-20211222232758062

###consul服务端口号
server:
port: 82

spring:
application:
name: cloud-consumer-order
####consul注册中心地址
cloud:
consul:
host: 1.116.182.96
port: 8500
discovery:
#hostname: 127.0.0.1
service-name: ${spring.application.name}
heartbeat:
enabled: true # 开启心跳检测

CAP理论与 Eureka Consul对比

CAP理论在互联网界有着广泛的知名度,知识稍微宽泛一点的工程师都会把其作为衡量系统设计的准则。大家都非常清楚地理解了CAP:任何分布式系统在可用性A一致性C分区容错性P方面,不能兼得,最多只能得其二,因此,任何分布式系统的设计只是在三者中的不同取舍而已

image-20211222233322954

AP架构—Eurka

AP架构

当网络分区出现后,为了保证可用性,系统B可以返回旧值,保证系统的可用性。

结论:违背了一致性C的要求,只满足可用性和分区容错,即AP

image-20211222233421123

CP架构–Consul/Zookeeper

CP架构

当网络分区出现后,为了保证一致性,就必须拒接请求,否则无法保证一致性

结论:违背了可用性A的要求,只满足一致性和分区容错,即CP

image-20211222233511383