首页 > 其他分享 >SpringCloud随笔

SpringCloud随笔

时间:2022-10-09 16:36:52浏览次数:55  
标签:服务 SpringCloud Server eureka Eureka 随笔 服务端 客户端

SpringCloud随笔

1.初识SpringCloud与微服务

背景:由于单体应用讲各种模块整合在一起,并且部署在一个进程内,所以我们通常对其中一个业务模块的修改也必须将整个应用重新打包上线。

为了解决单体应用变得庞大臃肿之后产生的难以维护的问题,微服务架构孕育而生

1.1 什么是微服务

微服务 (Microservices) 是一种软件架构风格,主旨是将一个原本独立的系统拆分成多个在独立的进程中运行的小型服务,服务之间通过基于HTTP和RESTful API进行通信协作。

这种去中心化的模式,使得后期维护和开发变得更加灵活和方便。

1.2 什么是SpringCloud

SpringCloud是一个基于SpringBoot实现的微服务架构开发工具。SpringCloud的诞生并不是为了解决微服务中的某一个问题,而是提供了一套解决微服务架构实施的综合性解决方案。

它为微服务架构中涉及的配置管理、服务治理、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话集群状态管理等操作提供了一种简单的开发方式。

关于SpringCloud版本号:Spring Cloud是一个由各个独立项目组成的综合项目,每个独立项目有着不同的发布节奏,为了管理每个版本的子项目清单,避免Spring Cloud的版本号与其子项目的版本号相混淆,没有采用版本号的方式,而是通过命名的方式。这些版本的名字采用了伦敦地铁站的名字,根据字母表的顺序来对应版本时间顺序。比如”Angel”是Spring Cloud的第一个发行版名称, “Brixton”是Spring Cloud的第二个发行版名称。当一个版本的Spring Cloud项目的发布内容积累到临界点或者一个严重bug解决可用后,就会发布一个”service releases”版本,简称SRX版本,其中X是一个递增的数字,所以Brixton.SR5就是Brixton的第5个Release版本。


2. SpringCloud Eureka服务治理

2.1 服务治理

假如不存在服务治理的组件,对于微服务的实例A和B,当A需要调用B中的某个REST接口时,需要对B发起请求,此时,B服务的IP和端口信息作为静态资源配置在A服务中。当某天B服务进行了服务器的迁移,需要对A中的静态配置进行更改。

现实中服务间的关系往往是复杂的。

所谓服务治理,就是用来实现各个微服务之间的自动化注册与发现。在这种模式下服务间的调用不再是指定具体的实例地址来实现,而是通过向服务注册中心获取服务名,并发起请求调用实现。

2.2 Eureka

Eureka是Netfix开发的一款服务治理的开源框架。springCloud对它做了集成。它包含服务端和客户端。

服务端是一个微服务注册中心(Eureka Server),提供服务的注册和发现

客户端是一个服务提供者(Server Provider),它将自己提供的服务注册到Eureka服务端,并周期性的发送心跳来刷新自己的服务租约,同时也能从服务端查询当前注册的服务信息并将它们缓存到本地并周期性的刷新服务状态。这样,服务的消费者(Server Consumer)便可以从服务注册中心获取服务名称,并消费服务。

Eureka的保护模式

微服务部署后,可能因为网络问题无法及时发送心跳给Eureka服务端,这时候Eureka服务端认定Eureka客户端挂掉了,实际上Eureka客户端还在正常运行着。保护模式实际上就是为了解决这个问题,当Eureka服务端短时间内丢失了过多的Eureka客户端的时候,就会进入保护模式。不去剔除掉这些客户端。

2.3 Eureka集群

所有Eureka客户端都将自己提供的服务注册到Eureka服务端,然后供所有服务消费者使用。

当单节点的Eureka服务端宕机后,会导致所有的服务都无法正常访问,为了提高可用性,我们会讲Eureka进行集群部署,并且相互之间同步服务

eureka:
  client:
    register-with-eureka: false
    fetch-registry: false

开启如上两个参数配置为true(默认为true),可以让当前的Eureka服务端将自己也作为服务注册到其他的Eureka服务端中去,并从别处的Eureka服务端获取服务进行同步

2.4 Eureka-Server 添加认证

出于安全考虑,我们可能会对Eureka服务端添加用户认证的功能。

需要引入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

然后在application.yaml中配置用户名密码

security:
  basic:
    enabled: true
  user:
    name: mrbird
    password: 123456

服务端配置了密码后,所有的所有eureka.client.serviceUrl.defaultZone的配置也必须配置上用户名和密码,格式为:eureka.client.serviceUrl.defaultZone=http://${userName}:${password}@${hosetname}:${port}/eureka/,如:

eureka:
  client:
    serviceUrl:
      defaultZone: http://mrbird:123456@peer2:8081/eureka/

2.5 Eureka配置总结

Eureka存在很多配置,可以参考EurekaClientconfigBeanEurekaServerConfigBeanEurekaInstanceConfigBean配置类的源码

配置 含义 默认值
eureka.client.enabled 是否启用Eureka Client true
eureka.client.register-with-eureka 表示是否将自己注册到Eureka Server true
eureka.client.fetch-registry 表示是否从Eureka Server获取注册的服务信息 true
eureka.client.serviceUrl.defaultZone 配置Eureka Server地址,用于注册服务和获取服务 http://localhost:8761/eureka
eureka.client.registry-fetch-interval-seconds 默认值为30秒,即每30秒去Eureka Server上获取服务并缓存 30
eureka.instance.lease-renewal-interval-in-seconds 向Eureka Server发送心跳的间隔时间,单位为秒,用于服务续约 30
eureka.instance.lease-expiration-duration-in-seconds 定义服务失效时间,即Eureka Server检测到Eureka Client木有心跳后(客户端意外下线)多少秒将其剔除 90
eureka.server.enable-self-preservation 用于开启Eureka Server自我保护功能 true
eureka.client.instance-info-replication-interval-seconds 更新实例信息的变化到Eureka服务端的间隔时间,单位为秒 30
eureka.client.eureka-service-url-poll-interval-seconds 轮询Eureka服务端地址更改的间隔时间,单位为秒。 300
eureka.instance.prefer-ip-address 表示使用IP进行配置为不是域名 false
eureka.client.healthcheck.enabled 默认Erueka Server是通过心跳来检测Eureka Client的健康状况的,通过置为true改变Eeureka Server对客户端健康检测的方式,改用Actuator的/health端点来检测。 false

3. SpringCloud Ribbon客户端负载均衡

负载均衡一般分为服务端负载均衡客户端负载均衡,服务端负载均衡主要通过硬件(F5)或者软件(Nginx)来实现,而Ribbon实现的是客户端负载均衡。

负载均衡的原理是在硬件设备或者软件模块上缓存一份可用的服务清单,然后客户端发送服务请求到这些负载均衡的设备上,这些设备按照一定的负载均衡算法将这些请求转发出去。而客户端负载均衡是客户端自己从服务注册中心(如之前提到的Eureka Server)中获取服务清单缓存到本地,然后通过Ribbon内部算法均衡的去访问这些服务。

通过心跳检测,剔除故障的服务端结点。在客户端负载均衡中,也需要心跳去维护服务端清单的健康性。

3.1 Ribbon是什么

Ribbon是一款由Netflix开发的负载均衡的开源软件。我们可以选择提前配置好服务列表清单,也可以选择让它自己去获取服务清单。

通过Spring Cloud Ribbon的封装,我们在微服务架构中使用客户端负载均衡调用非常简单,只需要如下两步:

  • 服务提供者只需要启动多个服务实例并注册到一个注册中心或是多个相关联的服务注册中心。
  • 服务消费者直接通过调用被@LoadBalanced注解修饰过的RestTemplate来实现面向服务的接口调用。

4. Spring Cloud Hystrix 服务容错

在微服务中,会出现服务间的相互依赖,假设现在存在三个微服务节点:A\B\C,其中A作为B的消费者,B作为C的消费者,加入因为网络波动或服务自身故障,C服务无法正常提供服务,导致B调用C的线程被长时间的挂起等待。在高并发的情况下,可能导致B的资源被耗竭,导致B也崩溃了,从而导致服务A也不可用。出现这种连环式的雪崩效应。

为了解决这个问题,服务熔断技术应运而生。

熔断一词来自电路学,指的是电路中出现短路状况时,断路器能及时切断故障电路,避免因为电路过载发热引发火灾。

微服务架构中,断路器能够及时的发现故障服务,并向服务调用方返回错误响应信息,而不是长时间的等待。

Spring Cloud Hystrix在Hystrix的基础上进行了封装,提供了服务熔断,服务降级,线程隔离等功能,这些功能可以提供服务的容错率。

标签:服务,SpringCloud,Server,eureka,Eureka,随笔,服务端,客户端
From: https://www.cnblogs.com/radish40/p/16772587.html

相关文章

  • springCloud 中 当需要有生产者集群的时候几个关键点
     前提条件是:使用Eureka 作为注册中心,并且搭建好了 Euraka 集群。当我们需要使用 多个生产者来形成集群来达到高可用。 生产者就是服务提供者,消费者就是服务调用者。 ......
  • springcloud- Eureka 单机版注册中心
    eureka 使用过程 简单的梳理:服务客户三步走,pom,yml,主启动。 首先搭建 eureka 注册中心服务 创建一个 maven 项目 ##引入相关的pom<?xmlversion="1.0"encoding......
  • springCloud - 选择最合适版本问题
     尚硅谷的第一季 springcloud 学完,也忘完了。于是今天阳哥出了第二季,我就跟着再学一遍,这次要做好笔记。 ## 问题概要这篇主要解决的是 springcloud 选择版本的问题,......
  • springCloud- 搭建项目全部详细过程(创建一个父工程)
     这篇文章里边会有 IDEA 相关本地环境的配置,比如编码格式,等等。 另外这篇文章会详细的记录整个创建的过程,我都会有截图 前提条件需要:maven环境(配置过国内的镜像), idea......
  • springCloud- 升级惨案
     基本上 之前的那套 springcloud 官网都停止更新了。然后有新技术的来替代,这篇文章来记录一下技术选型的问题。我觉得 springcloud 体系还是直接选用 springcloud a......
  • springCloud Eureka 注册中心,注册的服务自定义名字,和显示ip地址
     在微服务中,在注册中心中,有这样的需求,就是我们要给我们的服务名字,起个其他的名字,不带主机名的那种。 还有就是,我们需要看下注册中心的服务的 ip地址 和 端口号,方便来查......
  • Spring、springboot、springMVC、JPA、SpringData、springCloud的概述
    https://blog.csdn.net/qq_51308214/article/details/125165747Spring框架是Java平台上的一种开源应用框架, Spring解决了开发者在J2EE开发中遇到的许多常见的问题,提供了......
  • 个人随笔1
    个人博客的一些想法第一次尝试维护自己的一个博客,近期学习内容多,同时又需要有一个能够记录自己学习内容的一个平台,于是就想到的博客园,一个能够发表自己的文章、随笔的一个......
  • EEPROM随笔
       对比两款EEPROM芯片的写时序图发现,C32D的写地址需要16位,而C02的写地址只需8位,且C32D中程序写地址时要先写高8位注:写完数据都需要等待响应 ......
  • 随笔
    1.以下代码无法通过编译:public class Test1{    public static void main(String[]args){                 Fooobj=new Foo(); ......