java基础巩固-宇宙第一AiYWM:为了维持生计,架构知识+分布式微服务+高并发高可用高性能知识序幕就此拉开(三:注册中心balabala)~整起

news2025/1/11 19:48:59

比如咱们作为客户端进行购物时,那么多服务提供者【服务提供者有很多实例,可能人家已经搞了拆分模块后的分布式集群,那实例就不少啦】,如果用非技术的眼光看就是,你提供多个,我挑一个买,咱们的访问过程应该是这样的。
在这里插入图片描述
话说回来,除了用东方神秘的力量之外,那么多超市服务,我咋知道实际调哪一个呢、这么多怎么管理呢…?【重要概念,微服务中一个服务既可以是服务消费者又可以是服务提供者,服务这个概念是相对的
针对这么多问题就需要注册中心来帮助我们

  • SpringCloud的注册中心Eureka
    • Eureka手里有几员大将,为了攒战功,Eureka分别把自己的大将派往不同地方。其中这个eureka-server这个将军属于上将之一。Eureka的大将之一eureka-server,作为大管家,新官上任三把火。【可以到Github或者Gitee看代码,结合图一块看:】
      在这里插入图片描述
      在这里插入图片描述
      • 第一把火,你们market-service但凡要提供shopping服务,必须在你们market-service服务实例启动后到我这里来注册你们的服务信息【到eureka-server进行服务注册】【每个需要被注册中心管理的服务的配置文件中,有Eureka的配置,包括defalutZone=…,表示你这个服务要注册到哪里呀,这个哪里就指的是eureka-server注册中心所在】
        在这里插入图片描述
      • 第二把火,我这里给购物的消费者(服务)保存服务实例地址列表,并把列表提供给消费者让他们选择,然后拉取market-service的信息选择出心仪的那一个【people-service根据服务名称列表进行服务发现或者拉取】
        • 【服务发现其实指的是,咱们服务不是已经注册在Eureka中了嘛,咱们界面上可以看到哪些注册进来了,然后,咱们可以通过DiscoveryClient这个类的getService()方法获得微服务列表List,以及getInstances(服务ID)方法获得一个具体的微服务信息。然后在主程序类加上一个@EnableDiscoveryClient开启服务发现。当然那个actuator导包之后并在application.xml中配置info配置之后,可以配置一些监控信息,在Eureka的页面中点链接也可以显示一下信息,但是这个不好用,一般显示一些author信息这些,主要的还是通过DiscoveryClient】
        • Eureka的自我保护机制:
          • 某个微服务不可用了,没发来心跳,eureka会90秒后立即清理注销这个实例【有时候由于网络分区存在,微服务可能本身非常健康,不应该被注销】。但是Eurake通过自我保护机制不会注销服务,当网络故障恢复后自动退出保护模式【宁可错误保留,也不盲目注销】
      • 第三把火,为了防止market-service哪个由于疫情或者其他原因搞不下去了宕机了【我又不能说是你都不卖东西了,人家购物的人啥啥坐在在看你家的东西,搞了半天下架你也不吭声,这不是坑人嘛】,market-service这边的服务们必须每隔一段时间(默认30)向eureka-server发起请求报告自己的心跳状态【超过一定时间没发心跳则eureka-server就会认为这个微服务发生故障,剔除,你给我除去】
      • Eureka说,eureka-server,你烧的好,再奖励你一把火,于是,eureka-server再次下令,但是是一把小火,就是你们people从eureka-server提供的实例列表中选择一个心仪的实例(地址)时,需要通过“负载均衡算法”选择,然后向该实例发起远程调用
    • 【Eureka是基于REST(代表性状态转移)的服务,主要在 AWS 云中用于定位服务,以实现负载均衡和中间层服务器的故障转移。我们称此服务为Eureka服务器。】【可以充当服务发现的组件有很多:Zookeeper ,Consul , Eureka 等
      • 这里面ctrl+F搜餐馆:在这里插入图片描述
      • 我们依旧那拿上面的餐馆为例,我们要找合适的餐馆吃饭,但是我又不知道哪个餐馆有啥菜,有这个菜的饭馆在哪里…,所以此时,作为微服务中的 Consumer的咱们以及作为微服务中的Provider。【此时我们作为Consumer需要调用提供者Provider提供的一些服务,就是找到他们的餐馆吃饭】。要是光咱们双方在交涉,不管是餐馆随地贴小广告还是咱们傻乎乎的找,就会出现几个问题(效率是很低的:不是所有人都能看到小广告,所以会出现 资源消耗问题)。所以搞个中介,中介为我们提供统一房源的餐馆,我们只需要找中介就可以找到餐馆+参观这个服务提供者也只需要把餐馆所在信息发布或者叫注册在中介那里就行。然后就得考虑餐馆有新的旧的咱们是不是应该增删注册表+服务消费者是不是也得让中介知道自己的信息+一个中介生病了退休了怎么办,你不搞个中介集群
      • 服务发现:其实就是一个“中介”,整个过程中有三个角色:服务提供者(餐馆)、服务消费者(干饭人)、服务中介。
      • 服务中介其实就是服务提供者和服务消费者之间的“桥梁”,服务提供者可以把自己注册到服务中介那里,而服务消费者如需要消费一些服务(使用一些功能)就可以在服务中介中寻找注册在服务中介的服务提供者
        • 服务注册 Register:当 Eureka 客户端向 Eureka Server 注册时,它提供自身的元数据,比如 IP 地址、端口,运行状况指示符 URL,主页等。餐馆 (提供者 Eureka Client Provider)把自己餐馆所在信息以及可以做的菜等信息在中介 (服务器 Eureka Server) 那里登记下来
        • 服务续约 Renew:Eureka 客户会每隔 30 秒(默认情况下)发送一次心跳来续约。 通过续约来告知 Eureka Server 该 Eureka 客户仍然存在,没有出现问题。 正常情况下,如果 Eureka Server 在 90 秒没有收到 Eureka 客户的续约,它会将实例从其注册表中删除。【餐馆 (提供者 Eureka Client Provider)定期告诉中介 (服务器 Eureka Server) 我的餐馆还提供伙食(续约) ,中介 (服务器Eureka Server) 收到之后继续保留该餐馆的信息。】
        • 获取注册列表信息 Fetch Registries:Eureka 客户端从服务器获取注册表信息,并将其缓存在本地。客户端会使用该信息查找其他服务,从而进行远程调用。该注册列表信息定期(每 30 秒钟)更新一次。每次返回注册列表信息可能与 Eureka 客户端的缓存信息不同, Eureka 客户端自动处理。如果由于某种原因导致注册列表信息不能及时匹配,Eureka 客户端则会重新获取整个注册表信息。 Eureka 服务器缓存注册列表信息,整个注册表以及每个应用程序的信息进行了压缩,压缩内容和没有压缩的内容完全相同。Eureka 客户端和 Eureka 服务器可以使用 JSON / XML 格式进行通讯。在默认的情况下 Eureka 客户端使用压缩 JSON 格式来获取注册列表的信息。【咱们干饭人(消费者 Eureka Client Consumer) 去中介 (服务器 Eureka Server) 那里获取所有的餐馆信息列表 (客户端列表 Eureka Client List) ,而且干饭人为了获取最新的信息会定期向中介 (服务器 Eureka Server) 那里获取并更新本地列表。】
        • 服务下线 Cancel:Eureka 客户端在程序关闭时向 Eureka 服务器发送取消请求。 发送请求后,该客户端实例信息将从服务器的实例注册表中删除。该下线请求不会自动完成,它需要调用以下内容:DiscoveryManager.getInstance().shutdownComponent();【餐馆 (提供者 Eureka Client Provider)告诉中介 (服务器 Eureka Server) 我的餐馆不卖饭了,中介之后就将注册的房屋信息从列表中剔除。
        • 服务剔除 Eviction:在默认的情况下,当 Eureka 客户端连续 90 秒(3 个续约周期)没有向 Eureka 服务器发送服务续约,即心跳,Eureka 服务器会将该服务实例从服务注册列表删除,即服务剔除。【餐馆 (提供者 Eureka Client Provider)会定期联系 中介 (服务器 Eureka Server) 告诉他我的餐馆还卖饭(续约),如果中介 (服务器 Eureka Server) 长时间没收到提供者的信息,那么中介会将他的餐馆信息给下架(服务剔除)。别人就不到这家买饭了
      • 服务提供者: 就是提供一些自己能够执行的一些服务给外界。就是餐馆,可以给干饭人提供伙食
      • 服务消费者:就是需要使用一些服务的“用户”
    • Eureka的搭建或者实践过程:三步可以上篮
      • pom.xml中导入依赖+编写application.xml配置文件【端口号、服务名称,你要被哪个中间件管理,配置中心?注册中心?…】+在主程序类加个@EnableEurekaServer注解,老版本要加,新版本不需要加
      • 其实比如你要搞Eureka集群,就是1的application.xml中的defaultZone中原本放一个http://…,现在放集群中除他自己之外的所有http://…,其余的节点一样,自己的application.xml中的defaultZone中原本放一个http://…,现在放集群中除他自己之外的所有http://…
    • RestTemplate:微服务之间的调用经常是使用的 RestTemplate,RestTemplate是Spring提供的一个访问 Http 服务的客户端类,比如这个时候我们 消费者 B 需要调用 提供者 A 所提供的服务我们就需要这么写。
      @Autowired
      private RestTemplate restTemplate;
      // 这里是提供者A的ip地址,但是如果使用了 Eureka 那么就应该是提供者A的名称
      private static final String SERVICE_PROVIDER_A = "http://localhost:8081";
      						
      @PostMapping("/judge")
      public boolean judge(@RequestBody Request request) {
      	String url = SERVICE_PROVIDER_A + "/service1";
      	return restTemplate.postForObject(url, request, Boolean.class);
      }
      
      @RestController
      public class UserInfoController {
      
          /**
           * RestTemplate用来提供多种便捷访问远程http服务的方法,简单的restful服务模板
           * 消费者这边是不应该有service的,借助RestTemplate,有很多方法供我们直接调用,比如利用GET/POST方式获得实体,好多方法都跟网络有关【参数是url之类的】
           */
          @Autowired
          private RestTemplate restTemplate;
      
          private static final String REST_URL_PREFIX = "http://localhost:8081";
      
          @RequestMapping("/consumer/userinfo/get/{id}")
          public UserInfo get(@PathVariable("id") Long id){
              return restTemplate.getForObject(REST_URL_PREFIX + "/userinfo/get/" + id, UserInfo.class);
          }
          ...
      }
      
  • Zookeeper也可以做注册中心:
    • zookeeper主要看这里【https://blog.csdn.net/m0_52436398/article/details/125193033】
  • 注册中心中间件们的区别:
    • Zookeeper保证的是CP(降低可用性)
      • 因为选举新主机过程中,整个集群是不可用的
    • Eureka保证的是AP(降低数据一致性,允许返回旧数据,不能接受服务直接宕机)
      • 几个节点宕机其余的依旧可以提供注册和查询服务。只要有一台Eureka还在就可以继续保证注册服务的可用性

巨人的肩膀:
Dubbo中文文档
SpringCloud中文文档
极客时间

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

立足浙江 辐射全国 护航数字经济发展|美创科技亮相首届数贸会

12月11日-14日,首届全球数字贸易博览会在杭州隆重召开。作为国内唯一经党中央、国务院批准的以数字贸易为主题的国家级、全球性专业博览会,首届数贸会由浙江省人民政府和商务部联合主办,杭州市人民政府、浙江省商务厅和商务部贸发局共同承办。…

EtherCAT设备协议详解二、EtherCAT状态机及配置流程

EtherCAT状态机(ESM) EtherCAT状态机定义了每个EtherCAT从站设备的分步设置,并指示了可用的功能。设备可以拒绝来自主站的状态请求,并通过错误指示(AL 状态寄存器中的错误标志)和相关错误代码(A…

Linux高级 I/O

目录 一、五种I/O模型 1. 阻塞式I/O 2. 非阻塞式I/O 3. I/O复用(多路转接) 4. 信号驱动式I/O 5. 异步I/O 二、五种I/O模型的比较 三、I/O复用典型使用在下列网络应用场合 一、五种I/O模型 阻塞式I/O非阻塞式I/OI/O复用(多路转接&a…

ios 计算label宽度方法效率对比

方式1: 设置好label的文字,字号等属性后,调用 self.label.text "111"; self.label.font [UIFont systemFontOfSize:17]; [self.label sizeToFit]; 方式2: 使用字符串的方法计算文字宽度, - (CGRect)boun…

TheFuck—Python写的超实用命令纠正工具

序言 哈喽兄弟们,我们在学习Python的过程中,有这么一款工具,可以轻松纠正我们写错的命令,简直太好用了~ The Fuck 是一款功能强大的、Python编写的应用程序,可用于纠正控制台命令中的错误,非常强大。此外…

Linux多线程(二):线程控制

文章目录一、前言二、认识线程控制函数1.线程创建2.线程退出3.线程等待4.查看线程id5.线程分离6.综合demo三、线程id本质是地址?一、前言 上篇博客谈到,Linux并没有真线程,而是通过复用进程的数据结构来模拟实现线程的。因此 Linux 自然不会提…

所有的为时已晚都是恰逢其时,社科院与杜兰大学金融管理硕士邀你在职读研

最近有咨询的同学询问,我年龄快35岁了读研晚吗?记得在网上看到过一句话,你觉得为时已晚的时候,恰恰是最早的时候。你可以确定一下你的内心,是不是真的想读研,既然迟早要读的话,与其等到了40、50…

ISO 15765-2协议分享(一)- TP时间参数详解

文章目录 前言一、时间参数协议定义二、使用步骤 1.引入库2.读入数据总结前言 无大志者常立志,让自己生活中时时有目标,有努力的方向。 老规矩,正文前分享喜欢的文字: 生活中,你越是去竭力回避不适的感觉,就越是难以推进生活中的重要转变。 不回避,积极面对,是提升自…

蓝奥声网关为什么会受到广大用户的欢迎?

蓝奥声GP20蓝牙网关是一款支持无线和有线连接的智能网关,配有独特的网口驱动,支持带有TCP/IP的以太网接口。用于互联网访问和与主机服务器的通信,用于远程命令和本地处理数据的数据上传/下载。它支持 RJ45/POE 和 WiFi 两种网络角色。 GP20蓝…

点面科技荣获优胜企业奖,圆满从2022“创·在上海”国际创新创业大赛之“创·加速营”毕业

创在上海 赢在未来 “创在上海”国际创新创业大赛暨中国创新创业大赛 (上海赛区) 是一项具有广泛影响力的创新创业活动。 为提升入围全国赛的参赛企业的参赛能力,“创在上海”将充分整合和调动多方资源,结合国赛进程,创新推出针对入围国赛企…

Git常用命令总结

配置git 本地创建 ssh key: ssh keygen -t rsa -c “email” // email:github上注册用的邮箱 把上面生成的 key 粘贴到 gitHUb中的 sshkey中 验证 是否成功 ssh -T gitgithub.com 如果是第一次的会 提示 是否continue ,输入 yes 就会看到 You’ve succe…

Springboot健康上报小程序: element后台管理系统(完整代码)

这几天接到了个学生的需求,挺简单的,大概就是按照她的需求做一个疫情期间常态化管理的小程序,由于我对java不熟悉,基本上是边做边学,这里我将对本次项目做个记录 ✨✨欢迎订阅本专栏或者关注我,大家一起努力…

内科大机器学习框架课程重点内容笔记

文章目录一.背景二.内容一.背景 这是2020届内科大机器学习框架课程的考试复习内容 二.内容 1.变量间的相互关系: (1)确定性关系或函数关系:研究的是确定现象非随机变量间的关系。 (2)相关关系或统计依赖关系:研究的是非确定现象随机变量间…

计算机毕设Python+Vue校园一卡通管理系统(程序+LW+部署)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

外滩金融峰会公布“第七届融城杯十佳案例”,工行、创邻科技等成功上榜

12月11日,由中国金融四十人论坛(CF40)主办的第四届外滩金融峰会在上海召开。国家副主席王岐山为峰会致开幕辞,中国人民银行原行长周小川、上海新金融研究院理事长屠光绍、中国人民银行副行长宣昌能、中央财经委员会办公室副主任尹…

存储mybatis的xml标签,动态sql 查询

前言: 通过表动态存储mybatis 的xml标签,通过动态sql 入参查询,方便更新查询逻辑,无需发版即可;(当前用的是 mybatis-plus ,db用的是oracle【这个无所谓】) 注意事项:这…

【C】带你复习有趣的函数

作者 :会敲代码的Steve 墓志铭:博学笃志,切问静思。 前言:本文旨在总结C语言函数章节的知识点、分为以下九个模块、分别是: 1.函数是什么 2.库函数 3.自定义函数 4.函数参数 5.函数调用 6.函数的嵌套调用和链式…

vue3计算属性和侦听与script setup区别使用

一、计算属性computed 计算属性&#xff0c;只要依赖值不变&#xff0c;那么不会重新计算计算属性将基于它们的反应依赖关系缓存&#xff0c;提高性能对于任何包含响应式数据的复杂逻辑&#xff0c;应该使用计算属性 <template><!--重复使用--><p>{{ msg.s…

Redis——好友关注、共同关注、Feed流推送

1. 好友关注 在探店图文的详情页面中&#xff0c;可以关注发布笔记的作者&#xff1a; 进到探店笔记详情页&#xff0c;会发出两个请求&#xff0c;1是判断是否已经关注&#xff0c;2是尝试关注用户的请求。 关注是User之间的关系&#xff0c;是博主与粉丝的关系&#xff0c;…

你用过猿如意吗?猿如意可以使用ChatGPT哦,这里详细介绍了猿如意的功能,为什么我建议你使用猿如意,来看看吧

文章内容介绍 你是否还在为为每次安装IDE&#xff08;集成开发工具&#xff09;要去各种网站找教程而烦恼&#xff1f;你是否还在为各种文本格式转换而头痛&#xff1f;你是否在为斗图都不过兄弟们而卑微&#xff1f;你是否在为互联网中庞大冗杂却低效的教程文档而崩溃&#x…