是 Spring Cloud Netflix 微服务套件中的一部分, 它基于 Netflix Eureka 作了二次封装, 主要负责完成微服务架构中的服务治理功能。 Spring Cloud 经过为Eureka 增长了 Spring Boot 风格的自动化配置,咱们只需经过简单引入依赖和注解配置就能让 Spring Boot 构建的微服务应用轻松地与 Eureka 服务治理体系进行整合。spring
Eureka能够说是微服务架构中最为核心和基础的模块,它主要用来实现各个微服务实例的自动化注册与发现。数据库
咱们以前在实现分布式系统架构时,可能拆分的服务系统并很少,而当服务须要互相调用时,咱们采用的都是静态配置(编写配置文件,文件中存放其余服务的IP:端口号;或者将其余系统的IP:端口号放在数据库的表中;甚至还提供服务的配置页面,方便人工手动更改)。缓存
可是随着业务的发展, 系统功能愈来愈复杂, 相应的微服务应用也不断增长, 咱们的静态配置就会变得愈来愈难以维护。 而且面对不断发展的业务,咱们的集群规模、 服务的位置 、 服务的命名等都有可能发生变化, 若是仍是经过人工维护的方式, 那么极易发生错误或是命名冲突等问题。 同时, 对于这类静态内容的维护也必将消耗大量的人力。架构
为了解决微服务架构中的服务实例维护问题, 产生了大量的服务治理框架和产品。 这些框架和产品的实现都围绕着服务注册与服务发现机制来完成对微服务应用实例的自动化管理。负载均衡
在服务治理框架中, 一般都会构建一个注册中心, 每一个服务单元向注册中心登记本身提供的服务, 将主机与端口号、 版本号、 通讯协议等一些附加信息告知注册中心, 注册中心按服务名分类组织服务清单。 好比, 咱们有两个提供服务A的进程分别运行于 192.168.0.100:8000和192.168.0.101:8000位置上,另外还有三个 提供服务B的进程分别运行千192.168.0.100:9000 、192.168.0.101:9000、 192.168.0.102:9000位置上。 当这些进程均启动,并向注册中心注册本身的服务以后, 注册中心就会维护相似下面的一个服务清单。另外, 服务注册中心还须要以心跳的方式去监测清单中的服务是否可用, 若不可用须要从服务清单中剔除, 达到排除故障服务的效果。框架
因为在服务治理框架下运做, 服务间的调用再也不经过指定具体的实例地址来实现, 而是经过向服务名发起请求调用实现。 因此, 服务调用方在调用服务提供方接口的时候, 并不知道具体的服务实例位置。 所以, 调用方须要向服务注册中心咨询服务, 并获取全部服务的实例清单, 以实现对具体服务实例的访问。 好比,现有服务C但愿调用服务A, 服务C就须要向注册中心发起咨询服务请求, 服务注册中心就会将服务A的位置清单返回给服务C, 如按上例服务A的状况,C便得到了服务A的两个可用位置 192.168.0.100:8000和192.168.0.101:8000。当服务C要发起调用的时候, 便从该清单中以某种轮询策略取出一 个位置来进行服务调用, 这就是后续咱们将会介绍的客户端负载均衡。 这里咱们只是列举了一种简单的服务治理逻辑, 以方便理解服务治理框架的基本运行思路。 实际的框架为了性能等因素, 不会采用每次都向服务注册中心获取服务的方式, 而且不一样的应用场景在缓存和服务剔除等机制上也会有一些不一样的实现策略。分布式
即启动多个注册中心实例,注册中心在配置文件中,开启本身的注册服务,和新条请求,拉取服务列表。并在在配置注册中心地址时,配置多个地址,达到互相调用。微服务
因为服务注册中心之间因互相注册为服务, 当服务提供者发送注册请求到一个服务注册中心时, 它会将该请求转发给集群中相连的其余注册中心, 从而实现注册中心之间的服务同步 。 经过服务同步,两个服务提供者的服务信息就能够经过这两台服务注册中心中的任意一台获取到。性能
三要素:spa
1.服务注册
经过引入spring-cloud-starter-netflix-eureka-server包,并在启动类中添加@EnableEurekaServer注解, 提供服务注册与发现的功能。高可用性注册中心,就是多个注册中心,相互提供注册服务,服务提供者也能够配置多个注册中心地址。
2.服务提供
经过引入spring-cloud-starter-netflix-eureka-client包,并在启动类中添加@EnableDiscoveryClient注解,服务会将本身注册到 Eureka, 以供其余应用发现。并经过心跳请求,获取注册中心的其余服务列表。
3.服务消费
经过引入spring-cloud-starter-netflix-eureka-client包和spring-cloud-starter-netflix-ribbon包,并在启动类中添加@EnableDiscoveryClient注解并开启客户端负载均衡。消费者应用会想注册中心注册本身,也会经过心跳请求从服务注册中心获取服务列表, 从而使消费者能够知道去何处调用其所须要的服务,咱们使用了 Ribbon 来实现服务消费,另外后续还会介绍使用 Feign 的消费方式。不少时候, 客户端既是服务提供者也是服务消。
参考:《spring cloud微服务实战》