基础知识
名词 | 解释 |
---|---|
register | 动词,注册 |
registry | 名词,注册中心,注册表 |
spring.application.name | Service ID 或 virtual host (VIP) |
eureka server | 它包含一个服务注册表和一个REST API,可以用来注册一个服务,注销一个服务,并发现其他服务的位置 |
eureka client | service ID 标识的一个client,可包含多个实例 |
eureka instance | 一个微服务application的单个启动实例,随着负载增长可启动多个水平缩放 |
eureka service | 当你注册一个微服务application成一个client,你能通过注册的service ID获取一个eureka service |
Eureka架构
Eureka架构中的三个核心角色:
服务注册中心
Eureka的服务端应用,提供服务注册和发现功能
服务提供者
提供服务的应用,可以是SpringBoot应用,也可以是其它任意技术实现,只要对外提供的是Rest风格服务即可。
服务消费者
消费应用从注册中心获取服务列表,从而得知每个服务方的信息,知道去哪里调用服务方。
高可用的Eureka Server
常用配置
- Eureka Server常用配置
1 | server: |
- Eureka Client常用配置
1 | server: |
Eureka Client要指定register-with-eureka和fetch-registry为true,即注册自己到Eureka Server,因为默认是true,所以不用配置
Eureka Server Standalone
- spring-cloud-starter-eureka-server
- @EnableEurekaServer
1 | eureka server的application.yml配置 |
- 默认服务注册中心也会将自己作为客户端来尝试注册它自己,并且需要(至少一个)服务URL来定位对等方,单机我们需要禁用它的客户端注册行为,不禁用日志中会出现异常提醒。
- eureka server和client会通过心跳机制保持通讯,client每30秒发送一次心跳去续约,如果90秒内server不能收到client的心跳,则会将该client踢出注册表,自我保护模式下不会踢出失效的client
- eureka server没有后端存储,但registry中eureka instance都必须发送检测信号去使其注册保持最新状态(这些在内存中完成),eureka client还拥有一个rigistry的内存缓存,所以不必每次都去请求rigistry。
Eureka Server HA
1 | eureka server的application.yml配置 |
- 你能多个peer到系统中,只要它们互相至少通过一条边连接,它们之间能同步注册表。如果这些peers中物理上隔离的,系统原则上会存在脑裂类型失败。
Eureka Client
- spring-cloud-starter-eureka
- @EnableEurekaClient/@EnableDiscoveryClient
1 | discovery client的application.properties |
- defaultZone,为任何不表示偏好的客户提供服务URL(即,这是一个有用的默认值)。
- client通过RestTemplate来真正发起REST请求
授权访问
- spring-boot-starter-security
1 | eureka server 新增 |
为什么注册一个服务很慢?
- 成为一个instance涉及一个到注册中心的周期性心跳,通过client的serverUrl, 默认间隔30秒,
一个服务不可用于被其他clients发现,直到instance,server,client所有的在本地缓存中有相同的metadata,因此会花费3个心跳,你能改变这个周期,通过设置eureka.instance.leaseRenewalIntervalInSeconds=30,这将会加速client连接到其他服务的进度,
在生产上,使用默认的可能更好,因为在server上有一些计算间隔使关于续约周期的猜想。