第三章 Spring Cloud Eureka 下篇

AP 优于 CP

ZooKeeper 是CP
Eureka 是AP

Consistency 数据一致性

consist
英 [kən’sɪst] 美 [kən’sɪst]
vi. 组成;在于;符合

consistent
英 [kən’sɪst(ə)nt] 美 [kən’sɪstənt]
adj. 始终如一的,一致的;坚持的

consistency
英 [kən’sɪst(ə)nsɪ] 美 [kən’sɪstənsi]
n. [计] 一致性;稠度;相容性

数据写入部分副本成功,部分副本失败

Availability

availability
英 [ə,veɪlə’bɪlətɪ] 美 [ə,velə’bɪləti]
n. 可用性;有效性;实用性

avail
英 [ə’veɪl] 美 [ə’vel]
n. 效用,利益
vt. 有益于,有益于;使对某人有利。
vi. 有益于,有益于;使对某人有利。

available
英 [ə’veɪləb(ə)l] 美 [ə’veləbl]
adj. 可获得的;可购得的;可找到的;有空的

在任何时候客户端对集群进行读写操作时,请求能够正常的响应。

Partition Tolerance 分区容忍性,发生通信故障的时候,集群仍然可用。

tolerant
英 ['tɒl(ə)r(ə)nt] 美 ['tɑlərənt]
adj. 宽容的;容忍的;有耐药力的

tolerance
英 ['tɒl(ə)r(ə)ns] 美 ['tɑlərəns]
n. 公差;宽容;容忍

eureka, 在生产和实践中,服务注册及发现中心,保留可用及过期的数据,总比丢掉可用的数据好。
客户端能够支持负载均衡及失败重试,ribbon

Peer to peer 架构

分布式系统的数据在多个副本之间的复制方式,
分为主从复制 和 对等复制

peer
英 [pɪə] 美 [pɪr]
n. 贵族;同等的人;同龄人
vi. 凝视,盯着看;窥视
vt. 封为贵族;与…同等

主从复制

Mster-Slave模式

slave
英 [sleɪv] 美 [sleɪv]
n. 奴隶;从动装置
vi. 苦干;拼命工作

一个主副本,其他是从副本。
写操作提交到主副本,读操作从副本。
再有祝福本更新到其他副本。
更新包括:同步更新,异步更新,同步即异步混合

对等复制

即是 Peer to Peer
不分主从,任何副本都可以接受写操作,
然后每个副本之间,相互进行数据更新。

每个副本都可以进行写操作,各个副本之间的数据同步及冲突处理是一个比较棘手的问题。
eureka Sever 采用的就是 对等复制

客户端

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/,http://localhost:8762/eureka/

服务端

server 本身依赖了 client

sync
英 [sɪŋk] 美 [sɪŋk]
n. 同步,同时
vi. 同时发生
vt. 使同步

asyc
【网络】渐近准则 同步并车控制 高级安全概念

启动的时候,先获取注册的应用实例信息。

数据复制冲突问题:两个解决
1,lastDirtyTimestamp表示。(类似版本号)
2, heartbeat 最终修复

heartbeat
英 ['hɑːtbiːt] 美 ['hɑrtbit]
n. 心跳;情感

参数调优

为什么服务下线了,Eureka Server 上的信息还在?
为什么服务上线了,Eureka Client 不能及时获取到。(不能正常使用)

server 会保留过时的实例信息因为:

1,实例没有告知eureka Server 要下线。这时需要 EvictionTask 去剔除
2,告知了,但Server有缓存,要等缓存过期
3,server 开户了,SELF PRESERVATION self preservation自我保护模式,导致registry的信息不会因为过期而被剔除

evict
英 [ɪ’vɪkt] 美 [ɪ’vɪkt]
vt. 驱逐;逐出

eviction
英 [ɪ’vɪkʃ(ə)n] 美 [ɪ’vɪkʃən]
n. 逐出;赶出;收回

preserve
英 [prɪ’zɜːv] 美 [prɪ’zɝv]
vt. 保存;保护;维持;腌;禁猎

1,client下线没有通知server,可以调整 EvictionTask的调度频率。

eureka:
	server:
	      eviction-interval-timer-in-ms: 5000

就是剔除任务,从默认的60秒执行一次,改成5秒执行一次。

2,针对server端有缓存的问题,可以关闭缓存。或者把缓存的保留时间调小

eureka:
	server:
      use-read-only-response-cache: false 或者 response-cache-auto-expiration-in-seconds: 60 #默认180

3,针对 server端的自我保护,也可以关闭

eureka:
	server:
      enable-self-preservation: false #关闭自我保护模式

服务上线,eureka server端没有及时获取到,client端不能及时使用
提高client端拉取Server注册信息的频率

eureka:
   client:
          registry-fetch-interval-seconds: 5   //默认30秒,拉取一次。这里应该配置到客户端,如果是多 eureka ,server端也要配置

SELF PRESERVATION

self preservation 自我保护模式
处理 网络偶尔抖动 或 短暂不可用 时造成的误判

client 和 server 有个租约,client 定时发送心跳 来维持这个心跳
server 通过当前注册的实例数,去计算每分钟 应该受到的心跳数。
如果最近一分钟接收到的续约的次数,小于等于 指定阀值的话,
则关闭租约失效剔除。禁止定时任务剔除,保护注册信息。

eureka 在线扩容

建立config-server

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>
        </dependency>
@EnableConfigServer

bootstrap.yml 配置:

spring:
  application:
    name: config-server
  profiles:
    active: native
server:
  port: 8888


native 
英 ['neɪtɪv]  美 ['netɪv]
adj. 本国的;土著的;天然的;与生俱来的;天赋的
n. 本地人;土产;当地居民

默认放在 resource/config目录下

eureka server 和 eureka client

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>
@RestController
@RequestMapping("/query")
public class QueryController {

    @Autowired
    EurekaClientConfigBean eurekaClientConfigBean;

    @GetMapping("/eureka-server")
    public Object getEurekaServerUrl(){
        return eurekaClientConfigBean.getServiceUrl();
    }
}
spring:
  application:
    name: eureka-server
  cloud:
    config:
      uri: http://localhost:8888
management:
  endpoints:
    web:
      exposure:
        include: '*'

eureka:
  server:
    peer-eureka-nodes-update-interval-ms: 10000 #默认是10分钟即600000,这里为了验证改为10秒


配置中心配置client:

在这里插入图片描述

server:
  port: 8081

spring:
  application:
    name: eureka-client1

eureka:
  client:
    serviceUrl:
#      defaultZone: http://localhost:8761/eureka/ # one eureka server
#      defaultZone: http://localhost:8761/eureka/,http://localhost:8762/eureka/ # two eureka server
      defaultZone: http://localhost:8761/eureka/,http://localhost:8762/eureka/,http://localhost:8763/eureka/ # three eureka server

配置中心配置eureka-pee1.yml

server:
  port: 8761

spring:
  application:
    name: eureka-server
eureka:
  instance:
    hostname: localhost
    preferIpAddress: true
  client:
    registerWithEureka: true
    fetchRegistry: true
    serviceUrl:
#      defaultZone: http://localhost:8761/eureka/ # one eureka server
#      defaultZone: http://localhost:8762/eureka/ # two eureka server
      defaultZone: http://localhost:8762/eureka/,http://localhost:8763/eureka/ # three eureka server
  server:
      waitTimeInMsWhenSyncEmpty: 0
      enableSelfPreservation: false

E:\master\spring-cloud-code-master\ch3-1\ch3-1-eureka-server\target>mvn spring-b
oot:run -Dspring.profiles=active=peer2
正确的写法:
java -jar eureka-server-1.0.0.jar --spring.profiles.active=peer1

刷新指定项目的配置:
curl -i -X POST http://localhost:8761/actuator/refresh

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值