1.适用场景有局限:如果服务提供者的网络地址(ip和端口)发生变化,将会影响服务消费者。
2.无法动态伸缩:每个微服务一般都会部署多个实例,从而实现实现容灾和负载均衡,微服务系统需要具备自动伸缩的能力。
如何解决上述方案:
1)需要一个强大的服务发现机制,服务消费者使用这种机制获取服务提供者的网络信息,及时服务提供者发生变化,服务消费者也无需修改配置文件。
2)服务提供者、消费者、发现组件等三者关系:
A.微服务启动件自己的网络地址等信息注册到服务发现组件中,服务发现组件会存储微服务的ip地址、端口等信息。
B.服务消费者可以从服务发现组件查询服务提供者的网络地址,并使用该地址调用服务提供者的接口。
C.各位服务与服务组件使用统一的心跳机制,如果服务发现组件长时间无法与某微服务实例通信,就会被注销。
D.微服务网络地址发生变更时,会重新注册到服务发现组件,避免人工修改提供者的网络地址。
3.服务发现组件核心功能:
1)服务注册表:记录微服务信息的服务的名称、ip、端口等,服务注册表查询API和管理API。
2)服务注册与服务发现:服务注册是微服务启动时,件自己的信息注册到服务发现组件上的过程。服务发现是指查询可用微服务列表及其网络地址的机制。
3)服务检查:服务发现组件使用过一定机制定时检测已注册的服务。
4.Eureka框架结构:
Eureka的框架分为2 个组件:Eureka Server和Eureka Client,具体作用如下:
1)Eureka Server提供服务发现的能力,微服务启动的时候,先Eureka Server注册自己的信息(ip、端口、服务名称),Eureka Server存储这些信息。
2)Eureka Client是一个客户端,用户简化与Server的交互。
3)Eureka Server在90m未收到微服务实例的心跳,Server会销毁该实例。
4)Eureka Client会缓存服务注册表中的信息,有一定的优势:减少查询Server的次数,Server节点都宕机,服务消费依赖缓存信息也可以完成服务的正常调用。
5.Eureka 配置:
6.Eureka Client注册配置:
eureka.instance.prefer-ip-address = true 表示将自己的IP注册到Eureka Server。如果不配置会将操作系统的hostname到Eureka Server.
7.Eureka服务注册中心包含:服务注册、服务发现,服务在集群中允许分片故障期间继续提供服务的发现和注册,当故障非农i安恢复运行时,集群中的其他分片会把他们的状态再次同步回来。不同区域的服务注册中心通过异步模式相互复制各自的状态,每个服务在不同的时间点,服务的状态有细微的差别。
8.Eureka客户端想注册中心注册自身,提供心跳来并周期性更新服务租约,查询服务端状态,并缓存在本地,周期性刷新服务状态。
9.Eureka Server在90s未收到服务实例的心跳,就会销毁该实例。
如果是短时的分区故障,直接销毁实例就有问题,因此Eureka Server采用自我保护模式。
10.Eureka服务治理基础框架3个核心要素:
1)服务注册中心:提供服务注册与发现的功能
2)服务提供者:将自己服务注册到服务注册中心
3)服务消费者:消费者应用从服务注册中心获取服务列表,为消费者提供服务。
架构图如下:
服务注册:Rest方式将数据发送给注册中心,配置:eureka.client.register-with-eureka=true;默认 false
服务续约,服务提供者通过http向注册中心发送心跳,让服务注册中心知道自己还活着。通过配置如下参数设置续约信息:
eureka.instance.lease-renewal-interval-in-seconds=30 续约任务的调用间隔时间,默认30s
eureka.instance.lease-expiration-duration-in--seconds=90 服务失效的时间,默认90s
服务消费:
获取服务:eureka.client.fetch-register=true;注册中心的职责就是维护服务实例,并检索服务。
eureka.client.register-fetch-interval-seconds = 30;服务缓存清单的更新时间为30s
服务调用:服务消费在获取服务列表后,通过服务名可以获取具体的服务实例名和该实例的元数据信 息。通过这些信息,可以通过Ribbon采用轮询的方式进行调用,实现客户端的负载均衡。Eureka包含Region和Zone,一个Region包含多个Zone,每个服务客户端需要被注册到一个Zone中,每个客户端对应一个Region和一个Zone。
服务注册中心:
1)失效剔除:Eureka Server在启动时,创建一个定时任务,会60s将清单中超过90s没有续约的服务剔除。
2)自我保护:心跳失败比例在15分钟内,低于85%.