微服务之Spring cloud

Spring cloud

Eureka注册中心,AP

版本:D版本

如果打开Eureka的注册中心面板,可看到以下:

可知,Eureka作为注册中心,其服务信息的存放数据结构是:

ConcurrentHashMap<String, Map<String, Lease>> registry.

相比于scf和dubbo,Eureka使用了一种不同的订阅者方式来实现了服务端与客户端信息的同步,其使用的是基于HTTP协议的restful 请求+定时任务,来实现集群中数据的同步,服务之间的调用.

client端

  1. client端是包含了一系列的功能,包括:服务注册,心跳续约,服务下线功能的组件.

  2. client的功能的实现是基于restful请求的,比如心跳的续约是每隔30s,发起一个restful请求,去更新server端注册表map中对应的实例的信息.

  3. client存在于spring cloud组件的各个需要和server通信的地方,包括server端,它表示的是一种和注册中心保持连接的能力.

server端

  1. server节点维护着一份服务的注册表.

  2. server节点暴露出restful请求,包括:注册,心跳续约,下线.

  3. 每个server节点都会暴露出一系列restful请求,比如:服务注册,心跳续约等.

  4. 每个server节点集成了client端, 每隔30s去将自己的保存的服务信息注册到其他的server节点.

自我保护模式

当Eureka Server节点在短时间内丢失过多客户端时(可能发生了网络分区故障),那么这个节点就会进入自我保护模式.一旦进入该模式,Eureka Server就会保护服务注册表中的信息,不再删除服务注册表中的数据(也就是不会注销任何微服务).当网络故障恢复后,该Eureka Server节点会自动退出自我保护模式。具体计算为:

在每一次新注册实例的时候,都会计算一次阙值:阈值=(expectedNumberOfRenewsPerMin+2)*0.85.

根据心跳来统计,由于默认每隔30s发送一次心跳.因此:

总的阙值=(实例个数*2)*阙值百分比(默认为0.85)

例子:6个实例,阙值为

6*2*0.85 = 10

即一分钟server应该收到10个心跳,但是如果收到的小于10,则会进入保护模式.

调用方式

负载均衡

RoundRobinRule

轮询.

默认的策略.拿到所有server的集合,根据ip+端口进行遍历.

RandomRule

随机.

使用jdk的随机数生成工具,随机生成当前服务的server集合下标,如果当前节点不可用,可再次随机.

AvailabilityFilteringRule

可用过滤策略.

过滤出不可用的节点和处在高并发的节点,然后使用轮询的方法.

WeightedResponseTimeRule

响应时间权重策略.

先使用轮询,然后根据每个节点的响应时间算出一个权重.

BestAvailableRule

并发量最小可用策略.

spring cloud 组件

Spring Cloud工具框架

  • Spring Cloud Config 配置中心,利用 Git 集中管理程序的配置。

  • Spring Cloud Netflix 集成众多Netflix的开源软件。

  • Spring Cloud Netflix Eureka 服务中心(类似于管家的概念,需要什么直接从这里取,就可以了),一个基于 REST 的服务,用于定位服务,以实现云端中间层服务发现和故障转移。

  • Spring Cloud Netflix Hystrix 熔断器,容错管理工具,旨在通过熔断机制控制服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。

  • Spring Cloud Netflix Zuul 网关,是在云平台上提供动态路由,监控,弹性,安全等边缘服务的框架。Web 网站后端所有请求的前门。

  • Spring Cloud Netflix Archaius 配置管理 API,包含一系列配置管理API,提供动态类型化属性、线程安全配置操作、轮询框架、回调机制等功能。

  • Spring Cloud Netflix Ribbon 负载均衡

  • Spring Cloud Netflix Fegin REST客户端

  • Spring Cloud Bus 消息总线,利用分布式消息将服务和服务实例连接在一起,用于在一个集群中传播状态的变化。

  • Spring Cloud for Cloud Foundry 利用 Pivotal Cloudfoundry 集成你的应用程序。

  • Spring Cloud Cloud Foundry Service Broker 为建立管理云托管服务的服务代理提供了一个起点。

  • Spring Cloud Cluster 集群工具,基于 Zookeeper, Redis, Hazelcast, Consul 实现的领导选举和平民状态模式的抽象和实现。

  • Spring Cloud Consul 基于 Hashicorp Consul 实现的服务发现和配置管理。

  • Spring Cloud Security 安全控制,在 Zuul 代理中为 OAuth2 REST 客户端和认证头转发提供负载均衡。

  • Spring Cloud Sleuth 分布式链路监控,SpringCloud 应用的分布式追踪系统,和 Zipkin,HTrace,ELK 兼容。

  • Spring Cloud Data Flow 一个云本地程序和操作模型,组成数据微服务在一个结构化的平台上。

  • Spring Cloud Stream 消息组件,基于 Redis,Rabbit,Kafka 实现的消息微服务,简单声明模型用以在 Spring Cloud 应用中收发消息。

  • Spring Cloud Stream App Starters 基于 Spring Boot 为外部系统提供 Spring 的集成。

  • Spring Cloud Task 短生命周期的微服务,为 Spring Booot 应用简单声明添加功能和非功能特性。

  • Spring Cloud Task App Starters。

  • Spring Cloud Zookeeper 服务发现和配置管理基于 Apache Zookeeper。

  • Spring Cloud for Amazon Web Services 快速和亚马逊网络服务集成。

  • Spring Cloud Connectors 便于PaaS应用在各种平台上连接到后端像数据库和消息经纪服务。

  • Spring Cloud Starters (项目已经终止并且在 Angel.SR2 后的版本和其他项目合并)

  • Spring Cloud CLI 命令行工具,插件用 Groovy 快速的创建 Spring Cloud 组件应用。

Last updated

Was this helpful?