【微服务技术一】Eureka、Nacos、Ribbon(配置管理、注册中心、负载均衡)

这篇具有很好参考价值的文章主要介绍了【微服务技术一】Eureka、Nacos、Ribbon(配置管理、注册中心、负载均衡)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

技术栈图

微服务完整的技术栈如图:【微服务技术一】Eureka、Nacos、Ribbon(配置管理、注册中心、负载均衡),微服务,微服务,eureka,ribbon,负载均衡,Nacos
技术栈学习:
【微服务技术一】Eureka、Nacos、Ribbon(配置管理、注册中心、负载均衡),微服务,微服务,eureka,ribbon,负载均衡,Nacos

一、注册中心Eureka

概念:

在Eureka架构中,微服务角色有两类EurekaServer:

  • 服务端,注册中心
    • 记录服务信息
    • 心跳监控
  • EurekaClient:客户端
    • Provider:服务提供者,例如案例中的user-service注册自己的信息到EurekaServer;每隔30秒向EurekaServer发送心跳
    • consumer:服务消费者,例如案例中的 order-service
      根据服务名称从EurekaServer拉取服务列表;基于服务列表做负载均衡,选中一个微服务后发起远程调用

什么是消费者提供者?

  • 消费者:调用其他服务
  • 提供者:被调

A调B,B调C,B是什么角色?

  • B的角色要看相对于谁而言

一个服务既可以是消费者又可以是提供者

【微服务技术一】Eureka、Nacos、Ribbon(配置管理、注册中心、负载均衡),微服务,微服务,eureka,ribbon,负载均衡,Nacos

搭建EurekaServer

  • 1、创建项目,引入 spring-cloud-starter-netflix-eureka-server 的依赖(版本依赖父工程的版本,所以没写)
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
  • 2、在eureka-server项目编写启动类,添加 @EnableEurekaServer 注解

【微服务技术一】Eureka、Nacos、Ribbon(配置管理、注册中心、负载均衡),微服务,微服务,eureka,ribbon,负载均衡,Nacos

  • 3、添加application.yml文件,编写配置
server:
	port: 1111 # 自定义端口号
spring:
	application:
		name: eurekaserver  # eureka的服务名称
eureka:
	client:
		service-url: # eureka的地址信息
			defaultZone: http://localhost:1111/eureka

服务注册

  • 1、在需要注册的项目中引入 spring-cloud-starter-netflix-eureka-client 的依赖
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
  • 2、在application.yml文件,编写配置
spring:
	application:
		name: xxxservice # 服务的名称
eureka: 
	client:
		service-url:
			defaultZone: http://localhost:1111/eureka

下图是注册了两个服务,可以看到两个客户端的服务和eureka的服务都存在。
【微服务技术一】Eureka、Nacos、Ribbon(配置管理、注册中心、负载均衡),微服务,微服务,eureka,ribbon,负载均衡,Nacos
一个服务注册两个实例:
【微服务技术一】Eureka、Nacos、Ribbon(配置管理、注册中心、负载均衡),微服务,微服务,eureka,ribbon,负载均衡,Nacos

服务发现(消费者对提供者的远程调用)

【服务拉取是基于服务名称获取服务列表,然后在对服务列表做负载均衡】

  • 1、修改服务的代码,修改访问的路径,用服务名代替ip、端口。下图是之前的路径写法。
    【微服务技术一】Eureka、Nacos、Ribbon(配置管理、注册中心、负载均衡),微服务,微服务,eureka,ribbon,负载均衡,Nacos
    修改为:
    String url = "http://xxxservice/user/" + …… ;
    
  • 2、在yyy-service项目组的启动类中的RestTemplate添加负载均衡的注解
@Bean
@LoadBalanced  //负载均衡的注解,因为上面我们对xxxservice服务创建了两个实例
public RestTemplate restTemplate() {
	return new RestTemplate();
}

二、Ribbon负载均衡

【微服务技术一】Eureka、Nacos、Ribbon(配置管理、注册中心、负载均衡),微服务,微服务,eureka,ribbon,负载均衡,Nacos

负载均衡的原理:@LoadBalanced

@LoadBalanced源码分析取到的负载地址:

  • LoadBalancerInterceptor.java
    【微服务技术一】Eureka、Nacos、Ribbon(配置管理、注册中心、负载均衡),微服务,微服务,eureka,ribbon,负载均衡,Nacos
  • 继续 loadBalancer.execute ,进入RibbonLoadBalancerClient.java
    【微服务技术一】Eureka、Nacos、Ribbon(配置管理、注册中心、负载均衡),微服务,微服务,eureka,ribbon,负载均衡,Nacos
  • 在其内部方法中,会有IRule 规则接口,有轮询,随机等负载规则
    【微服务技术一】Eureka、Nacos、Ribbon(配置管理、注册中心、负载均衡),微服务,微服务,eureka,ribbon,负载均衡,Nacos

总结如图:
【微服务技术一】Eureka、Nacos、Ribbon(配置管理、注册中心、负载均衡),微服务,微服务,eureka,ribbon,负载均衡,Nacos

负载均衡的策略:IRule

上面提到IRule接口,这里做一个简单介绍,理解一下负载规则的继承关系
【微服务技术一】Eureka、Nacos、Ribbon(配置管理、注册中心、负载均衡),微服务,微服务,eureka,ribbon,负载均衡,Nacos
【微服务技术一】Eureka、Nacos、Ribbon(配置管理、注册中心、负载均衡),微服务,微服务,eureka,ribbon,负载均衡,Nacos
可以通过定义IRule实现修改负载均衡规则,有两种方式:

  • 1、代码方式:在消费者的启动类中,定义一个戏得IRule:

    @Bean
    public IRule randomRule() {
    	return new RandomRule();
    }
    
  • 2、配置文件方式:在消费者的application.yml文件中,添加新的配置也可以修改规则:

    xxxservice:  # 先指定提供者服务名称
    	ribbon:
    		NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡规则
    

注意:
两种方法的作用范围是不一样的,第一种消费者所调的全体服务都是这种规则;第二种指定了提供者的服务名,是有所指的。

懒加载

Ribbon默认是采用懒加载,及第一次访问时才会五去创建LoadBalanceClient ,请求时间过长。
而饥饿加载则会在项目启动时创建,降低第一次访问的耗时。
配置开启饥饿加载:

ribbon:
	eager-load:
		enabled: true # 开启饥饿加载
		clients: xxxservice # 指定对xxxservice 这一个服务饥饿加载
ribbon:
	eager-load:
		enabled: true # 开启饥饿加载
		clients: # 多个服务
			- xxxservice
			- zzzservice

三、Nacos注册中心

Nacos是阿里巴巴的产品,现在是SpringCloud中的一个组件,相比Eureka功能更加丰富。

Nacos的安装

安装包:
GitHub主页:https://github.com/alibaba/nacos
GitHub的Release下载页:https://github.com/alibaba/nacos/releases

windows的安装与启动很简单,可以参考自己搜索资料进行
就说一下启动的两种方式:

  • 1
    文件解压后有bin目录,中的startup.cmd双击就可以启动
  • 2
    bin目录下打开cmd,输入启动命令 startup.cmd -m standalone

启动成功,会有带nacos的banner与网址和completed的显示信息。

【微服务技术一】Eureka、Nacos、Ribbon(配置管理、注册中心、负载均衡),微服务,微服务,eureka,ribbon,负载均衡,Nacos
http://192.168.150.1:8848/nacos/index.html 会有浏览器窗口,默认账号密码都是nacos

服务注册到Nacos

  • 1、在父工程中添加spring-cloud-alibaba的管理依赖:
<dependeny>
	<groupId>com.alibaba.cloud</groupId>
	<artifactId>spring-cloud-alibaba-dependencies</artifactId>
	<version>2.2.5.RELEASE</version>
	<type>pom</type>
	<scope>import</scope>
</dependeny>
  • 2、提醒:eureka的依赖配置要删掉
  • 3、添加nacos的客户端依赖:
<dependeny>
	<groupId>com.alibaba.cloud</groupId>
	<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependeny>
  • 4、修改消费者与提供者服务中application.yml文件,添加nacos地址:
spring:
	cloud:
		nacos:
			server-addr: localhost:8848 # nacos的服务地址(默认就是8848)
  • 5、打开nacos的服务管理列表可以看到服务已经注册到nacos中。点开 “详情” 可以看到该服务的一些信息
    【微服务技术一】Eureka、Nacos、Ribbon(配置管理、注册中心、负载均衡),微服务,微服务,eureka,ribbon,负载均衡,Nacos

Nacos服务分级存储模型

一级是服务,例如userservice
二级是集群,例如杭州或上海
三级是实例,例如杭州机房的某台部署了xxxservice的服务器

1、配置服务集群属性
  • 1、修改application.yml,添加配置内容:
spring:
	cloud:
		nacos:
			server-addr: localhost:8848
			discovery:
				cluster-name: HZ # 配置集群名称,即机房位置,例如:HZ,杭州

这是将提供者配置了集群属性(消费者配置同上),当消费者调用时,由于负载均衡的影响,会进行轮询的规则,找到与自己同集群服务优先使用,就要进行负载均衡的修改:

2、根据集群负载均衡(NacosRule)
  • 1、修改yyyservice(消费者)中的application.yml,设置集群位HZ
spring:
	cloud:
		nacos:
			server-addr: localhost:8848
			discovery:
				cluster-name: HZ
  • 2、然后在yyy-service中设置负载均衡的IRule为NacosRule,这个规则优先会寻找与自己同集群的服务:
yyyservice:
	ribbon:
		NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则
  • 3、注意将xxx-service的权重都设置为1 (在Nacos的控制台可以设置实例的权重值)

NacosRule负载均衡策略:
1、优先选择同集群服务实例
2、本地集群找不到提供者,才去其它集群寻找,并且会报警告
3、确定了可用实例列表后,在采用随机负载均衡挑选实例

3、根据权重负载均衡
  • 1、在Nacos控制台可以设置实例的权重值,首先选中实例后面的编辑按钮
  • 2、将权重设置,会发现小于1的权重被访问到的频率大大降低
    【微服务技术一】Eureka、Nacos、Ribbon(配置管理、注册中心、负载均衡),微服务,微服务,eureka,ribbon,负载均衡,Nacos

实例的权重控制:
1、Nacos控制台可以设置实例的权重值,在0~1之间
2、同集群内的多个实例,权重越高被访问的频率越高
3、权重设置为0则完全不会被访问

Nacos环境隔离 - namespace

Nacos中服务存储和数据存储的最外层都是一个名为namespace的东西,用来做最外层隔离。

nacos默认有一个“public (保留空间)”。
新建命名空间的时候,命名空间ID可以不填,会随机生成。
不同namespace下的服务是不可见的

修改一个服务所处的空间

在服务的application.yml,添加namespace:

spring: 
	cloud:
		nacos:
			server-addr: localhost:8848
			discovery:
				cluster-name: SH # 上海
				namespace: xxxxxxxxxxxxxxxx # 命名空间ID

临时实例与非临时实例

服务注册到Nacos时,可以选择注册为临时实例或非临时实例:

spring:
	cloud:
		nacos:
			discovery:
				ephemeral: false # 设置非临时实例,默认是true临时

【微服务技术一】Eureka、Nacos、Ribbon(配置管理、注册中心、负载均衡),微服务,微服务,eureka,ribbon,负载均衡,Nacos
【主动检测对服务的压力比较大,所以一般推荐临时实例】

四、Nacos配置管理

统一配置管理

  • 1、在Nacos中添加配置文件
    【微服务技术一】Eureka、Nacos、Ribbon(配置管理、注册中心、负载均衡),微服务,微服务,eureka,ribbon,负载均衡,Nacos
  • Data-ID:相当于配置文件名,一般不要定义为application.yml,可以使用 “服务名-环境.yaml” 。
  • Group:分组不动就可
  • 描述:就是描述
  • 配置格式:选择 YAML
  • 配置内容:做热更新的配置
    【微服务技术一】Eureka、Nacos、Ribbon(配置管理、注册中心、负载均衡),微服务,微服务,eureka,ribbon,负载均衡,Nacos

【微服务技术一】Eureka、Nacos、Ribbon(配置管理、注册中心、负载均衡),微服务,微服务,eureka,ribbon,负载均衡,Nacos

  • 2、在某个服务的pom中引入Nacos的配置管理客户依赖:
<dependency>
	<groupId>com.alibaba.cloud</groupId>
	<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
  • 3、在服务中的resource目录添加一个 bootstrap.yml 文件,这个文件是引导文件优先级高于application.yml:
    配置nacos地址、当前环境、服务名称、文件后缀名,决定了程序启动时去nacos读取哪个文件。
spring:
	application:
		name: xxxservice # 服务名称
	profiles:
		active: dev # 开发环境,此处是dev
	cloud:
		nacos:
			server-addr: localhost:8848 # nacos地址
			config: 
				file-extension: yaml # 文件名后缀
  • 注意:在原本的application.yml中关于服务名称和nacos服务的配置删掉

配置热更新

热更新:服务的配置修改,且修改后不需要重启服务,配置就能生效。

  • 方式一:在@Value注入的变量所在类上(Controller) 添加注解@RefreshScope

【微服务技术一】Eureka、Nacos、Ribbon(配置管理、注册中心、负载均衡),微服务,微服务,eureka,ribbon,负载均衡,Nacos

  • 方式二:使用@ConfigurationProperties注解,自动刷新

【微服务技术一】Eureka、Nacos、Ribbon(配置管理、注册中心、负载均衡),微服务,微服务,eureka,ribbon,负载均衡,Nacos

【前缀名与变量名两者拼接与配置文件一致,就能完成属性的自动配置】

配置共享

微服务启动时会从nacos读取多个配置文件:

  • [spring.application.name]-[spring-profiles.active].yaml,例如:xxxservice-dev.yml
  • [spring-application.name].yaml,例如userservice.yml

无论profile如何变化,[spring-application.name].yaml文件一定会加载,因此多环境贡献配置可以写入这个文件。
【详细建议主攻一下这个环境共享】
【微服务技术一】Eureka、Nacos、Ribbon(配置管理、注册中心、负载均衡),微服务,微服务,eureka,ribbon,负载均衡,Nacos

搭建Nacos集群

【微服务技术一】Eureka、Nacos、Ribbon(配置管理、注册中心、负载均衡),微服务,微服务,eureka,ribbon,负载均衡,Nacos

搭建集群的基本步骤:

  • 搭建数据库,初始化数据表结构
  • 下载nacos安装包
  • 配置nacos
  • 启动nacos集群
  • nginx反向代理

配置集群nacos:

  • 进入nacos的conf目录,修改配置文件cluster.conf.example,重命名为cluster.conf
  • 配IP
    【微服务技术一】Eureka、Nacos、Ribbon(配置管理、注册中心、负载均衡),微服务,微服务,eureka,ribbon,负载均衡,Nacos
  • 修改application.properties文件,添加数据库配置
    【微服务技术一】Eureka、Nacos、Ribbon(配置管理、注册中心、负载均衡),微服务,微服务,eureka,ribbon,负载均衡,Nacos
  • 配置完成后复制三份模拟,将三个nacos的端口改为不一样的
  • 启动nacos,在bin目录下的命令是startup

nginx的反向代理:文章来源地址https://www.toymoban.com/news/detail-650706.html

  • 修改conf/nginx.conf文件,配置 【微服务技术一】Eureka、Nacos、Ribbon(配置管理、注册中心、负载均衡),微服务,微服务,eureka,ribbon,负载均衡,Nacos
  • 此时访问nacos的路径为:localhost/nacos 即可进入nacos的网址,虽然只有一个网址,由于nginx的存在nacos做了负载均衡

到了这里,关于【微服务技术一】Eureka、Nacos、Ribbon(配置管理、注册中心、负载均衡)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 38.SpringCloud—注册中心(eureka/nacos)、负载均衡Ribbon

    目录 一、SpringCloud。 (1)认识微服务。 (1.1)单体架构与分布式架构(微服务)。 (1.2)微服务技术对比。 (1.3)SpringCloud。 (2)服务拆分及远程调用。 (2.1)服务拆分。 (2.2)远程调用。 (3)提供者与消费者。 (4)Eureka注册中心。 (4.1)Eureka的作用。  (4.2)搭建

    2024年02月09日
    浏览(43)
  • Nacos服务注册和配置中心(Config,Eureka,Bus)1

            Spring Cloud是若干个框架的集合,包括spring-cloud-config、spring-cloud-bus等近20个子项目,提供了服务治理、服务网关、智能路由、负载均衡、断路器、监控跟踪、分布式消息队列、配置管理等领域的解决方案, Spring Cloud Alibaba可以集成Zuul、Gateway等网关组件,也可集成R

    2024年02月16日
    浏览(27)
  • Nacos服务注册和配置中心(Config,Eureka,Bus)2

            Nacos领域模型,Namespace命名空间、Group分组、集群这些都是为了进行归类管理,把服务和配置文件进行归类,归类之后就可以实现一定的效果,比如隔离。对于服务来说,不同命名空间中的服务不能够互相访问调用         Namespace:命名空间,对不同的环境进行

    2024年02月16日
    浏览(44)
  • 注册中心技术Eureka、Nacos

    说明:在微服务框架中,各个服务之间都是独立的。理论上来说,各个服务之间是可以直接通信的,但实际上因为服务之间通信需要管理和规划,如请求怎么负载均衡、请求怎么降级处理等等,所以就需要使用一个技术,对这些服务做到统一管理,称为注册中心,Eureka、Nac

    2024年02月16日
    浏览(36)
  • Ribbon和 Nacos服务注册中心

    ✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: 微服务探索之旅 ✨特色专栏: MySQL学习 🥭本文内容:Ribbon和 Nacos服务注册中心 🖥️个人小站 :个人博客,欢迎大家访问 📚个人知识库: 知

    2024年02月09日
    浏览(27)
  • SpringCloud微服务 【实用篇】| Eureka注册中心、Ribbon负载均衡

    目录 一:Eureka注册中心 1. Eureka原理 2. 动手实践 ①搭建EurekaServer ②服务注册 ③服务发现  二:Ribbon负载均衡 1. 负载均衡原理 2. 负载均衡策略 3. 懒加载 tips:前些天突然发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家,感兴趣的同学可以

    2024年02月05日
    浏览(31)
  • 【微服务开篇-RestTemplate服务调用、Eureka注册中心、Nacos注册中心】

     本篇用到的资料: https://gitee.com/Allengan/cloud-demo.git https://gitee.com/Allengan/cloud-demo.git 目录 1.认识微服务 1.1.单体架构 1.2.分布式架构 1.3.微服务 1.4.SpringCloud 1.5.总结 2.服务拆分和远程调用 2.1.服务拆分原则 2.2.服务拆分示例 2.2.1.导入Sql语句 2.2.2.导入demo工程 2.3.实现远程调用案例

    2024年02月08日
    浏览(29)
  • 【微服务】Nacos注册中心(3):配置管理

    给微服务配置namespace 给微服务配置namespace只能通过修改配置来实现。 重启order-service后,访问控制台,可以看到下面的结果 此时访问order-service,因为namespace不同,会导致找不到userservice,控制台会报错 Nacos的服务实例分为两种l类型: 临时实例:如果实例宕机超过一定时间,

    2024年02月05日
    浏览(37)
  • 微服务(二)——注册中心(Eureka、Nacos)

    注册中心: 需求:当一个服务提供者 Service 部署了多个实例交给 User 远程调用时: 服务消费者 User 应该调用哪个实例,如何获取其对应地址和端口? User 如何获知实例是否健康? 注册中心作用: 帮助管理服务,并帮助服务调用者选择并调用服务 实时监测服务实例是否健康

    2024年02月12日
    浏览(28)
  • 基于SpringCloud的微服务架构学习笔记(2)注册中心Eureka和负载均衡Ribbon

    1.7.1 远程调用的问题 地址信息获取 : 服务消费者 如何获取 服务提供者 的 地址信息 (不能每次都写死): URL:http://localhost:8081/user/\\\"+order.getUserId() 多选一 :如果有多个服务提供者,消费者如何进行选择 监测健康状态 :消费者如何获知提供者的健康状态 1.7.2 eureka原理 地址

    2024年02月13日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包