Spring Cloud(一)《服务集群注册与发现 Eureka》

简介: 对于能提供完整领域服务接口功能的RPC而言在分布式领域中有个著名的CAP理论;一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance),这三个要素在分布式系统中,最多满足两个,不可能三者兼顾。通常我们在使用dubbo时zookeeper作为注册中心以选主配置为核心,保证CP特性,即任何时刻对 Zookeeper 的访问请求能得到一致的数据结果,同时系统对网络分割具备容错性,但是它不能保证每次服务请求的可用性。

前言介绍

1、对于能提供完整领域服务接口功能的RPC而言,例如;gRPC、Thrift、Dubbo等,服务的注册与发现都是核心功能中非常重要的一环,使得微服务得到统一管理。

2、在分布式领域中有个著名的CAP理论;一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance),这三个要素在分布式系统中,最多满足两个,不可能三者兼顾。

3、通常我们在使用dubbo时zookeeper作为注册中心以选主配置为核心,保证CP特性,即任何时刻对 Zookeeper 的访问请求能得到一致的数据结果,同时系统对网络分割具备容错性,但是它不能保证每次服务请求的可用性。

4、而 Spring Cloud Netflix 在设计 Eureka 时遵守的就是 AP 原则,因为对于服务发现而言,可用性比数据一致性显得尤为重要。

5、Spring Cloud Eureka 是 Spring Cloud Netflix 微服务套件的一部分,主要负责完成微服务架构中的服务治理功能,服务治理可以说是微服务架构中最为核心和基础的模块,他主要用来实现各个微服务实例的自动化注册与发现。

6、另外Eureka服务集群有自我保护模式,在每分钟收到心跳低于阀值时,就会触发自我保护;

阈值 = instance的数量 × (60 / instance的心跳间隔秒数) × 自我保护系数 {实际计算为;this.expectedNumberOfRenewsPerMin + 2}

案例说明

采用 Eureka Server 运行3个实例{node01、node02、node03}构建服务发现集群,解决单点问题(zookeeper也是至少部署三组以上构建一个集群)。但Eureka Server 采用的是去中心化的架构的 Peer to Peer 对等通信,没有 master/slave 区分,每一个 Peer 都是对等的。在这种架构中,节点通过彼此互相注册来提高可用性,每个节点需要添加一个或多个有效的 serviceUrl 指向其他节点。每个节点都可被视为其他节点的副本。

15.jpg

环境准备

1、jdk 1.8

2、Spring Boot 2.0.6.RELEASE

3、Spring Cloud Finchley.SR2

代码示例

1itstack-demo-springcloud-01
 2├── itstack-demo-node01
 3│   └── src
 4│       └── main
 5│           ├── java
 6│           │   └── org.itstack.demo
 7│           │        └── EurekaServerApplication.java
 8│           └── resources   
 9│               └── application.yml
10├── itstack-demo-node02
11│   └── src
12│       └── main
13│           ├── java
14│           │   └── org.itstack.demo
15│           │        └── EurekaServerApplication.java
16│           └── resources   
17│               └── application.yml
18└── itstack-demo-node03
19    └── src
20        └── main
21            ├── java
22            │   └── org.itstack.demo
23            │        └── EurekaServerApplication.java
24            └── resources   
25                └── application.yml

完整代码欢迎关注公众号:bugstack虫洞栈 | 回复“SpringCloud专题”进行下载

EurekaServerApplication.java | 三组node代码一致,只需要一个普通的springboot添加@EnableEurekaServer即可启动

1/**
 2 * 微信公众号:bugstack虫洞栈 | 沉淀、分享、成长,专注于原创专题案例
 3 * 论坛:http://bugstack.cn
 4 * Create by 付政委 on @2019
 5 */
 6@SpringBootApplication
 7@EnableEurekaServer
 8public class EurekaServerApplication {
 9
10    public static void main(String[] args) {
11        SpringApplication.run( EurekaServerApplication.class, args );
12    }
13
14}

itstack-demo-node01/application.yml | node1 指向另外两台服务,registerWithEureka、fetchRegistry和单实例不同需要配置为true

1spring:
 2  application:
 3    name: itstack-demo-eureka-server
 4
 5server:
 6  port: 8081
 7
 8eureka:
 9  instance:
10    hostname: node01
11  client:
12    registerWithEureka: true
13    fetchRegistry: true
14    serviceUrl:
15      defaultZone: http://node02:8082/eureka/,http://node03:8083/eureka/

itstack-demo-node02/application.yml | node2 指向另外两台服务

1spring:
 2  application:
 3    name: itstack-demo-eureka-server
 4
 5server:
 6  port: 8082
 7
 8eureka:
 9  instance:
10    hostname: node02
11  client:
12    registerWithEureka: true
13    fetchRegistry: true
14    serviceUrl:
15      defaultZone: http://node03:8083/eureka/,http://node01:8081/eureka/

itstack-demo-node03/application.yml | node3 指向另外两台服务

1spring:
 2  application:
 3    name: itstack-demo-eureka-server
 4
 5server:
 6  port: 8083
 7
 8eureka:
 9  instance:
10    hostname: node03
11  client:
12    registerWithEureka: true
13    fetchRegistry: true
14    serviceUrl:
15      defaultZone: http://node01:8081/eureka/,http://node02:8082/eureka/

测试验证

1、配置host;127.0.0.1 node1 node2 node3

2、分别启动node1、node2、node3

3、访问;http://localhost:8081/

目录
相关文章
|
2天前
|
监控 安全 Java
Spring cloud原理详解
Spring cloud原理详解
13 0
|
6天前
|
消息中间件 负载均衡 Java
【Spring Cloud 初探幽】
【Spring Cloud 初探幽】
14 1
|
8天前
|
Java 开发者 微服务
Spring Cloud原理详解
【5月更文挑战第4天】Spring Cloud是Spring生态系统中的微服务框架,包含配置管理、服务发现、断路器、API网关等工具,简化分布式系统开发。核心组件如Eureka(服务发现)、Config Server(配置中心)、Ribbon(负载均衡)、Hystrix(断路器)、Zuul(API网关)等。本文讨论了Spring Cloud的基本概念、核心组件、常见问题及解决策略,并提供代码示例,帮助开发者更好地理解和实践微服务架构。此外,还涵盖了服务通信方式、安全性、性能优化、自动化部署、服务网格和无服务器架构的融合等话题,揭示了微服务架构的未来趋势。
32 6
|
12天前
|
JSON Java Apache
Spring Cloud Feign 使用Apache的HTTP Client替换Feign原生httpclient
Spring Cloud Feign 使用Apache的HTTP Client替换Feign原生httpclient
|
13天前
|
负载均衡 Java 开发者
Spring Cloud:一文读懂其原理与架构
Spring Cloud 是一套微服务解决方案,它整合了Netflix公司的多个开源框架,简化了分布式系统开发。Spring Cloud 提供了服务注册与发现、配置中心、消息总线、负载均衡、熔断机制等工具,让开发者可以快速地构建一些常见的微服务架构。
|
14天前
|
消息中间件 Java RocketMQ
Spring Cloud RocketMQ:构建可靠消息驱动的微服务架构
【4月更文挑战第28天】消息队列在微服务架构中扮演着至关重要的角色,能够实现服务之间的解耦、异步通信以及数据分发。Spring Cloud RocketMQ作为Apache RocketMQ的Spring Cloud集成,为微服务架构提供了可靠的消息传输机制。
28 1
|
14天前
|
Dubbo Java 应用服务中间件
Spring Cloud Dubbo: 微服务通信的高效解决方案
【4月更文挑战第28天】在微服务架构的发展中,服务间的高效通信至关重要。Spring Cloud Dubbo 提供了一种基于 RPC 的通信方式,使得服务间的调用就像本地方法调用一样简单。本篇博客将探讨 Spring Cloud Dubbo 的核心概念,并通过具体实例展示其在项目中的实战应用。
15 2
|
14天前
|
监控 Java Sentinel
Spring Cloud Sentinel:概念与实战应用
【4月更文挑战第28天】在分布式微服务架构中,确保系统的稳定性和可靠性至关重要。Spring Cloud Sentinel 为微服务提供流量控制、熔断降级和系统负载保护,有效预防服务雪崩。本篇博客深入探讨 Spring Cloud Sentinel 的核心概念,并通过实际案例展示其在项目中的应用。
24 0
|
14天前
|
Cloud Native Java Nacos
Spring Cloud Nacos:概念与实战应用
【4月更文挑战第28天】Spring Cloud Nacos 是一个基于 Spring Cloud 构建的服务发现和配置管理工具,适用于微服务架构。Nacos 提供了动态服务发现、服务配置、服务元数据及流量管理等功能,帮助开发者构建云原生应用。
21 0