前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【原创】SpringCloud

【原创】SpringCloud

作者头像
用户10880475
修改2024-01-26 13:29:29
660
修改2024-01-26 13:29:29
Spring Cloud介绍

Spring Cloud流应用程序启动器是基于Spring Boot的Spring集成应用程序,提供与外部系统的集成。Spring cloud Task,一个生命周期短暂的微服务框架,用于快速构建执行有限数据处理的应用程序

Spring Cloud的Eureka服务注册中心

Eureka采用CS的设计架构,Eureka Server作为服务注册功能的服务器,它是服务注册中心,而系统中的其他微服务,使用Eureka的客户端连接到Eureka Server并维持心跳连接。 在服务注册和发现中,有一个注册中心,当服务器启动时,会把当前自己服务器的信息,比如服务地址通讯地址等以别名方式注册到注册中心,另一方(消费者|服务提供者),以别名的方式去注册中心获取实际的服务通讯地址,然后实现RPC远程调用服务,设计思想在于注册中心,因为使用注册中心管理每个服务与服务之间的一个依赖关系(服务治理),在任何RPC远程框架中,都会有一个注册中心(存放服务地址相关信息(接口地址)) Eureka包含两个组件:

Eureka Server提供服务注册功能: 各个微服务节点通过配置启动后,会在EurekaServer中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观看到。 Eureaka Client通过注册中心进行访问: 用于简化Eureka Server的交互,客户端同时也具备一个内置的,使用轮询(round-robin)负载算法的负载均衡器。在应用启动后,会向EurekaServer发送心跳(默认周期为30秒)。如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳。EurekaServer将会从服务注册表中把这个服务节点移除(默认90秒)

Eureka单机版原理

生产者和消费者将自己注册进Eureka,消费者通过拉取注册中心服务,发送HttpClient请求调用生产者Controller提供的业务方法,消费者获得服务地址会缓存到本地JVM中,默认每间隔30秒更新一次服务调用地址,所以当Eureka宕机时,短时间内服务仍可以调用。Eureka单机版架设

Server端:yml配置

Server端:启动类配置:

Client端 yml配置

Client端 启动类

Client端Consumer端业务调用(使用ip调用)

Eureka集群架设

Eureka集群注册原理

代码语言:javascript
复制
互相注册,多台Eureka互相注册,对外暴露一个整体。

复制

复制

配置hosts文件中的内容(本地配置才需要)

Server端实现集群:yml配置: 配置服务端的注册中心地址为另外一台 server端①

server端②

注意:多台Server端中的hostname不同

client端

Client端实现集群

代码语言:javascript
复制
注意:多台Client端需要添加负载均衡注解@LoadBalanced:

复制

复制

Client端Consumer端业务调用(使用服务名调用)

服务的发现(查询注册中心中的所有实例或所有服务)
代码语言:javascript
复制
注意:需要在启动类上添加@EnableDiscoveryClient注解

复制

复制

Ribbon负载均衡

Ribbon的介绍 Ribbion是基于Netifix Ribbon实现的一套客户端,主要功能是提供客户端的软件负载均衡算法和服务调用。Ribbon客户端组件提供了一系列完善的配置项入连接超时,重试等。Ribbon自动基于某种规则(如简单轮询,随机连接等)去连接这些机器,本质上是完成负载均衡和服务调用的组件,Ribbon配合RestTemplate实现远程服务调用,Ribbon是一个软负载均衡的客户端组件,可以和其他所需请求的客户端集合使用,和Eureka结合只是其中一个实例。

LB负载均衡(Load Balance)的介绍 负载均衡就是将用户的请求按照某种算法分配到多个服务上,从而达系统的高可用(HA)。 常见的负载均衡的软件有Nginx、LVS、硬件F5等。

Ribbon本地负载均衡客户端和Nginx服务端负载均衡区别 Nginx是服务器负载均衡(集中式LB),客户端所有请求都会交给Nginx,然后由Nginx实现转发请求。即负载均衡是由服务端实现的。

Ribbon本地负载均衡(进程内LB),在调用微服务接口时,会在注册中心上获取注册信息服务列表后缓存到JVM本地,从而在本地实现RPC远程调用技术。

Ribbon的实现原理 Ribbon工作时分为两步

代码语言:javascript
复制
  第一步先选择EurekaServer,优先选择在同一个区域内负载较少的server。
  第二步在根据用户指定的策略(负载均衡策略),在从server取到的服务注册列表中选择一个地址。
  **Eureka Client已经集成了Ribbon,无需添加另外的依赖。**

复制

复制

Ribbon的实现负载均衡的IRule接口

RoundRobinRule:轮询算法(默认) RandomRule:随机算法 RetryRule:重试算法,先按照RoundRobinRule的策略获取服务,如果获取服务失败则在指定时间内会进行重试。 WeightedResponseTimeRule:对RoundRibonRule的扩展,响应速度越快的实例被选择的权重越大。 BestAvailableRule:会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务 AvailabilityFilteringRule:先过滤故障实例,再选择并发较小的实例。 ZoneAvoidanceRule:默认规则,复合判断server所在区域的性能和server的可用性选择服务器。

更换默认负载均衡算法

代码语言:javascript
复制
注意:更换负载均衡算法需要自定义类,该类不能放在项目的能被@CompomentScan注解能扫描到的包中即不能放在和启动类同一个包下,或者子包下。

复制

复制

(1)第一步新建类更换负载均衡规则

(2)第二步在启动类上添加注解@RibbonClient(name = "CLOUD-PAYMENT-SERVICE",configuration = MySelfRule.class)

Ribbon默认负载均衡算法原理

自定义负载均衡算法 (1)第一步删除RestTemplate对象上的@LoadBalanced注解

(2)第二步新建接口(如LoadBalancer)和实现类

(3)Controller中添加方法测试是否为自定义轮询算法

OpenFeign

OpenFeign的介绍 OpenFeign是SpringCloud在Feign的基础上进行了增强。Feign是一个声明式WebService客户端,使用Feign能让编写Web Service客户端更加简单。它的使用方法式定义一个服务接口然后在上面添加注解。Feign也支持可插拔式编码器和解码器。Spring Cloud对Feign进行了封装,使其支持Spring MVC标准注解(如@RequestMapping)和HttpMessageConverters。Feign可以与Eureka和Ribbon组合使用以支持负载均衡。

Feign/OpenFeign的作用 Feign旨在使编写Java Http客户端变得更加容易。 在使用Ribbon+RestTemplate时,利用RestTemplate对http请求的封装处理,形成了一套模板化调用方法,但是在实际开发中,由于对服务依赖的调用可能不止一处,往往一个接口会被多出调用,所以通常都会针对每个微服务自行封装一些客户端类来包装这些依赖服务的调用。所以,Feign在此基础上做了进一步封装,由它来帮助我们定义和实现依赖服务接口的定义,在Feign的实现下,我们只需创建一个接口并使用注解的方式来配置它,即可完成对服务提供方接口绑定,简化了使用Spring Cloud Ribbon时,自动封装服务调用客户端的开发量。

Feign集成了Ribbon 利用Ribbon维护了服务列表信息,并通过轮询实现客户端的负载均衡。而与Ribbon不同的是,通过Feign只需要定义服务绑定接口且以声明式的方法,优雅而简单的实现服务调用。

Feign和OpenFeign的区别

Feign/OpenFeign的本质是替代Ribbon+RestTemplate对远程服务的调用,消费端新建和提供者相同的接口并在接口上添加@FeignClien()注解,在该接口中复制接口对应的Controller的@Request注解和方法即可。

OpenFeign的使用步骤 OpenFeign是简化消费端的调用,所以服务端代码无需改动。 (1)第一步:添加依赖

(2)第二步:yml文件的配置:

(3)第三步:主启动类上添加@EnableFeignClients注解。

(4)第四步:新建和提供者的业务方法一样的接口添加@FeignClient()注解并添加业务方法(业务方法和提供者的Controller的方法上的注解和方法一致)。

本文系转载,前往查看

如有侵权,请联系?cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系?cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Spring Cloud介绍
  • Spring Cloud的Eureka服务注册中心
  • Eureka单机版原理
  • Eureka集群架设
  • 服务的发现(查询注册中心中的所有实例或所有服务)
  • Ribbon负载均衡
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com