微服务注册中⼼1

1. 微服务的注册中⼼

注册中⼼可以说是微服务架构中的”通讯录“ ,它记录了服务和服务地址的映射关系。在分布式架构中, 服务会注册到这⾥,当服务需要调⽤其它服务时,就这⾥找到服务的地址,进⾏调⽤。

1.1 注册中⼼的主要作⽤

服务注册中⼼(下称注册中⼼)是微服务架构⾮常重要的⼀个组件,在微服务架构⾥主要起到了协调者 的⼀个作⽤。注册中⼼⼀般包含如下⼏个功能:

1. 服务发现:
  • 服务注册/反注册:保存服务提供者和服务调⽤者的信息
  • 服务订阅/取消订阅:服务调⽤者订阅服务提供者的信息,最好有实时推送的功能
  • 服务路由(可选):具有筛选整合服务提供者的能⼒。
2. 服务配置:
  • 配置订阅:服务提供者和服务调⽤者订阅微服务相关的配置
  • 配置下发:主动将配置推送给服务提供者和服务调⽤者
3. 服务健康检测
  • 检测服务提供者的健康情况
1.2 常⻅的注册中⼼

Zookeeper

zookeeper它是⼀个分布式服务框架,是Apache Hadoop 的⼀个⼦项⽬,它主要是⽤来解决分布式应 ⽤中经常遇到的⼀些数据管理问题,如:统⼀命名服务、状态同步服务、集群管理、分布式应⽤配置项 的管理等。简单来说zookeeper=⽂件系统+监听通知机制。

Eureka

Eureka是在Java语⾔上,基于Restful Api开发的服务注册与发现组件,Springcloud Netflix中的重要组 件

Consul

Consul是由HashiCorp基于Go语⾔开发的⽀持多数据中⼼分布式⾼可⽤的服务发布和注册服务软件, 采⽤Raft算法保证服务的⼀致性,且⽀持健康检查。

Nacos

Nacos是⼀个更易于构建云原⽣应⽤的动态服务发现、配置管理和服务管理平台。简单来说 Nacos 就是 注册中⼼ + 配置中⼼的组合,提供简单易⽤的特性集,帮助我们解决微服务开发必会涉及到的服务注册 与发现,服务配置,服务管理等问题。 Nacos 还是 Spring Cloud Alibaba 组件之⼀,负责服务注册与发现。

组件名

语⾔

CAP

Eureka

Java

AP

Consul

Go

CP

Zookeeper

Java

CP

Nacos

Java

AP

Eureka闭源影响

在Euraka的GitHub上,宣布Eureka 2.x闭源。近这意味着如果开发者继续使⽤作为 2.x 分⽀上现有⼯作

repo ⼀部分发布的代码库和⼯件,则将⾃负⻛险。Nacos替换⽅案

2. nacos简介

Nacos 致⼒于帮助您发现、配置和管理微服务。Nacos 提供了⼀组简单易⽤的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。 nacos的作⽤就是⼀个注册中⼼,⽤来管理注册上来的各个微服务

2.1 nacos实战⼊⻔

我们就在现有的环境中加⼊nacos,并将我们的两个微服务注册上去。

2.2.1 搭建nacos环境
第1步: 安装nacos
下载地址: https://github.com/alibaba/nac
os/releases 
下载zip格式的安装包,然后进⾏解压缩操作
第2步: 启动nacos
#切换⽬录 
cd nacos/bin 
#命令启动 
startup.cmd -m standalone
或者直接双击startup.cmd运⾏
第3步: 访问nacos

打开浏览器输⼊http://localhost:8848/nacos,即可访问服务, 默认密码是nacos/nacos

2.2.2 将商品微服务注册到nacos

开始修改 shop-product 模块的代码, 将其注册到nacos服务上

1 在pom.xml中添加nacos的依赖

2 在主类上添加@EnableDiscoveryClient注解

3 在application.yml中添加nacos服务的地址

4 启动服务, 观察nacos的控制⾯板中是否有注册上来的商品微服务

2.2.3 将订单微服务注册到nacos

开始修改 shop_order 模块的代码, 将其注册到nacos服务上

1 在pom.xml中添加nacos的依赖

2 在主类上添加@EnableDiscoveryClient注解

3 在application.yml中添加nacos服务的地址

4 启动服务, 观察nacos的控制⾯板中是否有注册上来的订单微服务

5 修改OrderController, 借助DiscoveryClient实现微服务调⽤

3.服务调⽤Ribbon⼊⻔

经过以上的学习,已经实现了服务的注册和服务发现。当启动某个服务的时候,可以通过HTTP的形式 将信息注册到注册中⼼,并且可以通过SpringCloud提供的⼯具获取注册中⼼的服务列表。但是服务之间

的调⽤还存在很多的问题,如何更加⽅便的调⽤微服务,多个微服务的提供者如何选择,如何负载均衡等。

3.1 Ribbon概述3.1.1 什么是Ribbon

是 Netflixfa 发布的⼀个负载均衡器,有助于控制 HTTP 和 TCP客户端⾏为。在 SpringCloud 中,

Nacos⼀般配合Ribbon进⾏使⽤,Ribbon提供了客户端负载均衡的功能,Ribbon利⽤从Nacos中读取到的服务信息,在调⽤服务节点提供的服务时,会合理的进⾏负载。

在SpringCloud中可以将注册中⼼和Ribbon配合使⽤,Ribbon⾃动的从注册中⼼中获取服务提供者的列表信息,并基于内置的负载均衡算法,请求服务

3.1.2 Ribbon的主要作⽤

( 1)服务调⽤

基于Ribbon实现服务调⽤, 是通过拉取到的所有服务列表组成(服务名-请求路径的)映射关系。借助RestTemplate 最终进⾏调⽤

( 2)负载均衡

当有多个服务提供者时,Ribbon可以根据负载均衡的算法⾃动的选择需要调⽤的服务地址

3.2 基于Ribbon实现订单调⽤商品服务3.2.1 坐标依赖

在springcloud提供的服务发现的jar中以及包含了Ribbon的依赖。所以这⾥不需要导⼊任何额外的坐标

3.2.2 ⼯程改造

( 1 )服务提供者

控制台打印查询商品的信息

( 2 )服务消费者

在创建RestTemplate⽅法 上添加 @LoadBalanced 注解

通过服务名称消费使⽤

restTemplate .getForObject("http://商品服务名称/product/1" , Product.class);

4.服务调⽤Ribbon⾼级

4.1 负载均衡概述
4.1.1 什么是负载均衡

在搭建⽹站时,如果单节点的 web服务性能和可靠性都⽆法达到要求;或者是在使⽤外⽹服务时,经常担⼼被⼈攻破,⼀不⼩⼼就会有打开外⽹端⼝的情况,通常这个时候加⼊负载均衡就能有效解决服务问题。

负载均衡是⼀种基础的⽹络服务,其原理是通过运⾏在前⾯的负载均衡服务,按照指定的负载均衡算法,将流量分配到后端服务集群上,从⽽为系统提供并⾏扩展的能⼒。

负载均衡的应⽤场景包括流量包、转发规则以及后端服务,由于该服务有内外⽹个例、健康检查等功能,能够有效提供系统的安全性和可⽤性。

4.1.2 客户端负载均衡与服务端负载均衡

服务端负载均衡

先发送请求到负载均衡服务器或者软件,然后通过负载均衡算法,在多个服务器之间选择⼀个进⾏访问;即在服务器端再进⾏负载均衡算法分配

客户端负载均衡

客户端会有⼀个服务器地址列表,在发送请求前通过负载均衡算法选择⼀个服务器,然后进⾏访问,这是客户端负载均衡;即在客户端就进⾏负载均衡算法分配

4.2 基于Ribbon实现负载均衡
4.2.1 搭建多服务实例

通过idea再启动⼀个 shop-product 微服务,设置其端⼝为8082

分别启动两次服务器验证效果,并查看两个控制台发现已轮询的⽅式调⽤了商品服务

4.2.2 负载均衡策略

Ribbon内置了多种负载均衡策略,内部负责复杂均衡的顶级接⼝为 com.netflix.loadbalancer.IRule ,实现⽅式如下

  • com.netflix.loadbalancer.RoundRobinRule :以轮询的⽅式进⾏负载均衡
  • com.netflix.loadbalancer.RandomRule :随机策略
  • com.netflix.loadbalancer.RetryRule :重试策略
  • com.netflix.loadbalancer.WeightedResponseTimeRule :权重策略。会计算每个服务的权重,越⾼的被调⽤的可能性越⼤
  • com.netflix.loadbalancer.BestAvailableRule :最佳策略。遍历所有的服务实例,过滤掉故障实
  • 例,并返回请求数最⼩的实例返回
  • com.netflix.loadbalancer.AvailabilityFilteringRule :可⽤过滤策略。过滤掉故障和请 求数超过阈值的服务实例,再从剩下的实⼒中轮询调⽤
  • ZoneAvoidanceRule:以区域可⽤的服务器为基础进⾏服务器的选择。使⽤Zone对服务器进⾏分类,这个Zone可以理解为⼀个机房、⼀个机架等。⽽后再对Zone内的多个服务做轮询

⾃定义负载均衡策略

⽅式1:定义⼀个新的IRule:(全局设置)

⽅式2:在yml配置⽂件中配置:(局部设置)

@Bean
public IRule randomRule(){
 return new RandomRule();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/883568.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

linux信号 | 学习信号三步走 | 全解析信号的产生方式

前言:本节内容是信号, 主要讲解的是信号的产生。信号的产生是我们学习信号的第二个阶段。 我们已经学习过第一个阶段——信号的概念与预备知识(没有学过的友友可以查看我的前一篇文章)。 以及我们还没有学习信号的第三个阶段——信…

CleanMyMac X 评价、介绍、使用教学|Mac系统最推荐的系统优化和清理软件工具!

本篇文章要带大家看一款知名的Mac系统优化、清理工具– CleanMyMac X ,并且也会附上详细的介绍和使用教学。 链接: https://pan.baidu.com/s/1_TFnrIVH1NGsZPsA3lpwAA 提取码: dpjw CleanMyMac X-安装包:https://souurl.cn/QUYb57 为什么Mac电脑需要装系…

Cocos 3.8.3 实现外描边效果(逃课玩法)

本来想着用Cocos 的Shader Graph照搬Unity的思路来加外描边,发现不行,然后我就想弄两个物体不就行了吗,一个是放大的版本,再放大的版本上加一个材质,这个材质面剔除选择前面的面剔除就行了,果不其然还真行。…

前端开发必备:实用Tool封装工具类方法大全

程序员必备宝典网站https://tmxkj.top/#/ 1.判断空值 /*** 判断是否是空值*/ export function isEmpty(value) {if (typeof value string) {return value.length 0 || value "";} else if (typeof value number) {return value 0;} else if (Array.isArray(va…

Kafka 面试题

参考: https://javabetter.cn/interview/kafka-40.htmlhttps://javaguide.cn/high-performance/message-queue/kafka-questions-01.html Kafka 架构 名词概念 Producer(生产者) : 产生消息的一方。 Consumer(消费者) …

MySQL---创建数据库(基于SQLyog)

目录 0.前言 1.基本认识 1.1编码集 1.2检验规则 2.库的创建和销毁 2.1指令介绍 2.2你可能会出现的问题 3.查看数据库属性 4.创建指定数据库 5.创建表操作 0.前言 之前写过一篇这个关于表的创建和销毁的操作,但是当时是第一次学习,肯定有些地方…

failed to load steamui.dll的多种处理方法,steamui.dll的作用

在使用Steam平台时,不少玩家可能会遇到“failed to load steamui.dll”这样令人头疼的错误提示。这个错误会阻碍Steam客户端的正常运行,影响我们享受游戏和Steam平台的各种服务。不过,不必过于担心,因为有多种方法可以尝试解决这个…

【Linux】当前进展

驱动层日志添加了下文件目录,函数,代码行的打印(这里要小心,驱动目录源代码打印日志里边添进程号可能有问题,因为在驱动初始化的时候,内核还没有创建进程,不过猜测可以先不打印进程相关信息&…

C++ | Leetcode C++题解之第419题棋盘上的战舰

题目&#xff1a; 题解&#xff1a; class Solution { public:int countBattleships(vector<vector<char>>& board) {int row board.size();int col board[0].size();int ans 0;for (int i 0; i < row; i) {for (int j 0; j < col; j) { if (board…

Linux下线程间的通信

为什么需要线程通信&#xff1f; 线程是操作系统调度的最小单元&#xff0c;拥有自己的栈空间。如果线程之间孤立运行&#xff0c;可能会导致资源浪费。线程需要协调工作以完成共同的任务&#xff0c;这就需要线程间相互通信 在 Linux 系统中&#xff0c;线程间通信&#xff…

MySQL数据库进阶知识(四)《视图、存储过程、触发器》

学习目标&#xff1a; 掌握数据库视图基础知识 掌握数据库存储过程原理 掌握数据库触发器相关知识 学习内容&#xff1a; 一. 视图 介绍 视图&#xff08;View&#xff09;是一种虚拟存在的表。视图中的数据并不在数据库中实际存在&#xff0c;行和列数据来自定义视图的查询…

基于GIKT深度知识追踪模型的习题推荐系统源代码+数据库+使用说明,后端采用flask,前端采用vue

基于GIKT深度知识追踪模型的习题推荐系统 目录结构 Flask-BackEnd flask后端 app 后端主体文件 alg 深度学习模块 data 数据集data_process.py 数据预处理gikt.py GIKT模型pebg.py PEBG模型params.py 一些参数train.py 仅模型训练train_test.py 模型训练和测试-五折交叉验证t…

Docker 天池代码提交

参考零基础入门Docker-cuda练习场_学习赛_天池大赛-阿里云天池的赛制 (aliyun.com) ​ 在Docker零基础入门-CSDN博客中我已经安装了docker,现在开始创建自己的镜像仓库。 1. 开通阿里云容器镜像服务(镜像仓库) 进入容器镜像服务 (aliyun.com) 1.1. 创建个人实例 点击“…

try catch 应该在for循环里面还是外面?

今天咱们就来聊聊“try catch 应该在 for 循环里面还是外面”的问题&#xff0c;别小看这句话&#xff0c;背后可是有大智慧的。 首先&#xff0c;咱得明确一点&#xff0c;try catch 是为了处理异常的。它能让你的代码在遇到问题时不至于“崩溃”&#xff0c;更像是你职场生涯…

实景三维夯实数字乡村孪生底座

随着数字乡村建设的不断推进&#xff0c;实景三维技术在乡村规划、管理、服务等方面发挥着越来越重要的作用。本文将探讨实景三维技术如何夯实数字乡村的孪生底座&#xff0c;为乡村的可持续发展提供强有力的支撑。 一、数字乡村建设的背景 数字乡村建设是推动乡村全面振兴、…

使用Crawler实例进行网页内容抓取

网页内容抓取的背景 随着互联网的快速发展&#xff0c;网页上的信息量日益庞大。如何从海量的网页中快速、准确地抓取所需信息&#xff0c;成为了一个技术挑战。网页内容抓取技术通过自动化的方式&#xff0c;模拟用户浏览网页的过程&#xff0c;获取网页上的文本、图片、链接…

探索未来:MultiOn,AI的下一个革命

文章目录 探索未来&#xff1a;MultiOn&#xff0c;AI的下一个革命背景&#xff1a;为什么选择MultiOn&#xff1f;MultiOn是什么&#xff1f;如何安装MultiOn&#xff1f;简单的库函数使用方法场景应用常见问题及解决方案总结 探索未来&#xff1a;MultiOn&#xff0c;AI的下一…

深度学习与应用:行人跟踪

**实验 深度学习与应用&#xff1a;行人跟踪 ** ------ **1、 实验目的** ------ - 了解行人跟踪模型基础处理流程 - 熟悉行人跟踪模型的基本原理 - 掌握 行人跟踪模型的参数微调训练以及推理的能力 - 掌握行人跟踪模型对实际问题的应用能力&#xff0c;了解如何在特定的场景和…

pycirclize python包画circos环形图

pycirclize python包画circos环形图 很多小伙伴都有画环形图的需求&#xff0c;网上也有很多画环形图的教程&#xff0c;讲解circos软件和circlize R包的比较多&#xff0c;本文介绍一款python包:pyCirclize。适合喜欢python且希望更灵活作图的小伙伴。 pyCirclize包实际上也…

LSI SAS 9361-8i和SAS3008 12 gb / s PCIe 3.0 RAID 阵列卡配置

LSI SAS 9361-8i和SAS3008 12 gb / s PCIe 3.0 RAID 阵列卡配置 开机&#xff0c;BIOS自检&#xff0c;可以看到设备硬盘信息&#xff0c;以及提示CtrlR进入Raid卡配置界面。 按CtrlR进入Raid卡配置界面&#xff0c;一般来说使用CtrlR进入Raid卡配置界面的Raid卡配置都通用。 …