Eureka整理

来源:互联网 发布:金山软件安全卫士 编辑:程序博客网 时间:2024/06/08 01:03

概述

原理 : https://github.com/Netflix/eureka/wiki      http://cloud.spring.io/spring-cloud-static/Camden.SR4/#_spring_cloud_netflix

源码:https://github.com/Netflix/eureka/

应用实例:

配置项:https://segmentfault.com/a/1190000008378268


重点细节

总体:  Eureka是基于REST的服务,用来为分布式应用体系提供服务定位(负载均衡),服务宕机策略,同时Eureka Client还提供了复杂的负载均衡算法。

一个region中有一个eureka服务器群组,这个群组只知道这个region中的所有service。一个region分为多个zone,每个zone有一个server来处理服务请求。client向服务器注册自己,然后没30秒发一次心跳保持活跃装填。超过90秒没收到心跳,server将client踢出。service的信息会在所有的server中复制同步。每一个zone的client都能收到信息,而且可以根据信息进行跨zone的远程调用。(图见git wiki第一章)


关于配置 :  需要配置eureka server 和 eureka client。 server同时也是一个client,因为他需要寻找定位其他server。 eureka有自己的配置,但是我们使用spring cloud的配置方式代替原有的配置文件。具体方式就是在application.yml中添加配置项。


REST Operation: eureka的各个节点之间通过REST请求的方式进行操作。具体的api见 https://github.com/Netflix/eureka/wiki/Eureka-REST-operations。


client与server间的通信:client首先跟同zone的server对话,如果失败则跟其他zone的server通信。 application在访问client的时候会自动负载均衡。

         所有的操作的信息都会在一定延迟后才能同步到所有的节点,这是因为无论是server缓存还是client从server上fetch数据都是周期性刷新的,当然,server会先于其他client同步。

        client会从server周期性的fetch数据并缓存在本地,这样client在访问其他service的时候就不需要先访问server了。每次更新的数据会在server储存3分钟左右,client会自动处理获取的重复性数据。

注册:


server间得通信:server间会不停的同步数据。当一个server获取了所有节点的信息后,他会根据信息来设置阈值,一旦受到的ping数量低于阈值,系统会进入安全模式。安全模式下,任何instance都不会被判定为失效。安全模式下可能有一些实际失效的instance依然在登记列表中存活。server之间的通信与server与client的通信机制一样。

server间的通信障碍可能会导致各个server的信息不一致,这会在网络通信恢复之后自动恢复。

概念:instance,想server注册自己

          client,可以发出请求定位其他service


client发现定位其他client的java代码:

@Autowiredprivate DiscoveryClient discoveryClient;public String serviceUrl() {    List<ServiceInstance> list = discoveryClient.getInstances("STORES");    if (list != null && list.size() > 0 ) {        return list.get(0).getUri();    }    return null;}

spring官方文档提供了一些平时可能会用到的配置项。


待解决问题:1.跨region,不同region不能互相访问

                      2.AWS的应用

                      4.github代码整理

                     

                       




原创粉丝点击