朝阳商城网站建设,中小企业网站开发,电子商务网站服务器,响应式网站建设机构Spring Cloud服务发现与注册的原理与实现 一、简介1 服务发现的定义2 服务发现的意义 二、Spring Cloud服务注册与发现的实现1 Spring Cloud服务注册1.1 服务注册的基本框架1.2 服务注册的实现方式 2 Spring Cloud服务发现2.1 服务发现的基本框架2.2 服务发现的实现方式 三、Sp… Spring Cloud服务发现与注册的原理与实现 一、简介1 服务发现的定义2 服务发现的意义 二、Spring Cloud服务注册与发现的实现1 Spring Cloud服务注册1.1 服务注册的基本框架1.2 服务注册的实现方式 2 Spring Cloud服务发现2.1 服务发现的基本框架2.2 服务发现的实现方式 三、Spring Cloud服务注册与发现的原理3.1 Eureka的原理3.1.1 Eureka的基本概念3.1.2 Eureka的工作原理注册中心服务实例 3.2 Zookeeper的原理3.2.1 Zookeeper的基本概念数据模型会话 3.2.2 Zookeeper的工作原理 3.3 Consul的原理3.3.1 Consul的基本概念服务发现健康检查 3.3.2 Consul的工作原理 四、Spring Cloud服务注册与发现的应用场景4.1 微服务架构中的应用场景4.2 服务治理与负载均衡的应用场景4.3 分布式集群中的应用场景 一、简介
1 服务发现的定义
服务发现是指在一个分布式系统中服务提供者将自己注册到系统中心并且服务消费者可以从系统中心查询所有可用的服务的过程。
2 服务发现的意义
通过服务发现服务消费者可以方便地获取可用的服务实例而无需了解服务实例的具体位置和部署情况。同时服务提供者也可以方便地将自己的服务注册到系统中心让使用方更容易地找到服务。
二、Spring Cloud服务注册与发现的实现
1 Spring Cloud服务注册
1.1 服务注册的基本框架
服务注册的基本框架包括三部分服务提供者、服务注册中心和服务消费者。其中服务提供者将自己注册到服务注册中心服务消费者从服务注册中心获取可用的服务列表。
1.2 服务注册的实现方式
Spring Cloud提供了几种服务注册的实现方式包括
EurekaNetflix公司开源的、最为流行的一种服务注册中心Consul由Hashicorp公司开发的一种服务发现组件支持多数据中心ZooKeeper由Apache项目开发的一种分布式协调框架。
这里以Eureka为例介绍Spring Cloud服务注册的实现方式。
首先需要在pom.xml文件中添加以下依赖
dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-netflix-eureka-server/artifactId
/dependency接着在启动类中加上EnableEurekaServer注解表明该服务作为Eureka Server运行
SpringBootApplication
EnableEurekaServer
public class EurekaServerApplication {public static void main(String[] args) {SpringApplication.run(EurekaServerApplication.class, args);}
}在配置文件application.yml中指定服务端口、Eureka相关配置
server:port: 8761eureka:instance:hostname: localhostclient:register-with-eureka: falsefetch-registry: false至此Eureka Server配置完成。
2 Spring Cloud服务发现
2.1 服务发现的基本框架
服务发现的基本框架也包括三部分服务提供者、服务注册中心和服务消费者。其中服务提供者将自己注册到服务注册中心服务消费者从服务注册中心获取可用的服务列表。
2.2 服务发现的实现方式
同样以Eureka为例介绍Spring Cloud服务发现的实现方式。
服务提供者需要在pom.xml文件中添加以下依赖
dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-netflix-eureka-client/artifactId
/dependency在启动类中加上EnableDiscoveryClient注解表明该服务需要作为Eureka Client运行并向Eureka Server注册
SpringBootApplication
EnableDiscoveryClient
public class DemoServiceApplication {public static void main(String[] args) {SpringApplication.run(DemoServiceApplication.class, args);}
}同时在配置文件application.yml中指定应用名称、Eureka相关配置
spring:application:name: demp-serviceeureka:client:service-url:defaultZone: http://localhost:8761/eureka/至此服务提供者的配置完成。
服务消费者需要在pom.xml文件中添加以下依赖
dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-netflix-eureka-client/artifactId
/dependency在需要调用服务的地方使用LoadBalanced注解让RestTemplate具有负载均衡的能力
Bean
LoadBalanced
public RestTemplate restTemplate() {return new RestTemplate();
}同时在配置文件application.yml中指定应用名称、Eureka相关配置
spring:application:name: demp-service-consumereureka:client:service-url:defaultZone: http://localhost:8761/eureka/至此服务消费者的配置完成。
通过以上配置Spring Cloud可以实现服务注册和发现的功能。
三、Spring Cloud服务注册与发现的原理
3.1 Eureka的原理
3.1.1 Eureka的基本概念
注册中心 Eureka server是Spring Cloud的核心组件之一它提供了服务注册和发现的功能。即服务提供者将自己的服务注册到Eureka Server服务消费者从Eureka Server中查找所需的服务并进行调用。
服务实例 服务实例是指暴露出来的某个服务可以是普通的Java服务、也可以是Web Service服务等。
3.1.2 Eureka的工作原理
注册中心
注册中心是一个基于REST的服务主要实现服务注册、服务续约、服务下线以及查询功能。Eureka Server接收服务实例的注册请求并将服务实例信息存储在内存中HashMap。当Eureka Server收到服务实例的续约请求时会更新服务实例在内存中的信息避免服务实例过期失效。也可以通过URL获取注册中心中所有可用的服务。
服务实例
服务实例启动后会向Eureka Server发送注册请求告知Eureka Server自己的地址ip:port、服务名、健康状态以及一些元数据。同时服务实例会以心跳的方式向Eureka Server发送服务续约请求在规定时间内没有接收到续约请求则视为服务实例失效。
3.2 Zookeeper的原理
3.2.1 Zookeeper的基本概念
Zookeeper是一个分布式协调服务主要应用于高可用场景下的协调任务。Zookeeper提供了数据地址、配置管理、同步等功能。
数据模型
Zookeeper所有的数据都保存在一个树形结构中每个节点称为一个Znode。每个Znode都有名称和数据两个部分组成。数据通常是空字符串但是也可以存储数据。
会话
不同的客户端需要连接到Zookeeper集群进行交互这些客户端与Zookeeper服务器建立会话。Zookeeper会话与传统应用服务器会话的概念类似但具有独特的特征如一些会话变量和超时机制。
3.2.2 Zookeeper的工作原理
Zookeeper集群中的各个节点通过Zab协议来实现数据一致性。集群中的一个Zookeeper节点被选举为leader所有其它follower节点负责数据复制。当leader节点失效时follower中的某一个节点会被选举为新的leader。
3.3 Consul的原理
3.3.1 Consul的基本概念
Consul是一个分布式的高可用服务发现和配置管理系统。它提供了服务发现、健康检查、KV存储、安全服务等功能。
服务发现
Consul基于HTTP提供服务发现。服务消费者可以使用HTTP协议从Consul服务端获取服务提供者的地址和端口号。
健康检查
Consul通过健康检查确定哪些服务实例对外提供服务。Consul同时支持TCP、HTTP和Docker容器的健康检查方式。
3.3.2 Consul的工作原理
Consul集群实际上就是多个有状态的服务器管理和协调数据。这些节点中的一个被选为leader所有其它follower节点负责数据复制。
四、Spring Cloud服务注册与发现的应用场景
4.1 微服务架构中的应用场景
在微服务架构中服务之间可能会随时发生变化例如某个服务重启、一台机器下线等因此服务访问地址的获取需要具备高度灵活性和实时性。服务注册中心的出现就是为了解决这个问题它可以自动进行服务注册和服务发现大大提高了系统的可扩展性和可维护性。
4.2 服务治理与负载均衡的应用场景
服务金丝雀发布、分阶段上线、AB测试等操作都离不开服务治理而服务治理又需要服务注册中心来协同实现。在这些高级应用场景中服务注册中心还可以和负载均衡器等组件配合提供更加全面的服务治理和负载均衡功能。
4.3 分布式集群中的应用场景
在分布式系统中节点数量大、拓扑图复杂因此需要一个中心化的配置管理中心。服务注册中心可以实现系统配置的自动管理和更新同时由于各个服务的名称是由它们自己注册到注册中心上的因此它能够帮助开发人员快速获得系统内部服务之间的依赖关系。