热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

springcloud五大组件以及使用原理

本文主要分享【springcloud五大组件以及使用原理】,技术文章【SpringCloud学习后相关组件的总结】为【绝代风华.】投稿,如果你遇到SpringCloud相关问题,本文相关知识或能到你。

本文主要分享【springcloud五大组件以及使用原理】,技术文章【SpringCloud学习后相关组件的总结】为【绝代风华.】投稿,如果你遇到SpringCloud相关问题,本文相关知识或能到你。

springcloud五大组件以及使用原理

一、EureKa,Zookeeper,Consul

服务注册与发现 ,前一个需要加@EnableEureKa注解,后两个需要在主启动类要多写一个@EnableDiscoveryClient注解

把服务端注册到注册中心:
服务端配pom,用啥注册中心;写yam,服务端自己的名字,注册点的ip等等
把消费端注册到注册中心:
消费端配pom,用啥注册中心;写yam,消费端自己的名字,注册点的ip等等,服务端消费端应该是同一个注册中心和地址
(消费端调用服务端,直接使用服务端注册的名字,直接访问服务端或者通过消费端访问服务端都可以了)

二、Ribbon

负载均衡(引入EureKa,OpenFeign都自带Ribbon并默认轮询负载均衡),
服务调用(Ribbon+RestTemplate,RestTemplate是对http请求的封装 )
Ribbon 的负载均衡是本地负载均衡,是在服务消费者身上,在本地自己进行选择调用(我自己选择去哪个)
他会在优先在注册中心里选负载较少的服务端,然后根据指定的策略从服务注册的列表中选一个地址。
(Nginx是服务器负载均衡,所有请求由Nginx进行转发,由服务端实现)(你来告诉我去哪个)

三、OpenFeign

服务调用(替代掉Ribbon+RestTemplate的服务调用)(用在消费端)
主启动类要多写一个@EnableFeignClients注解
创建一个微服务接口,并在接口上添加注解@FeignClient(类似dao),便能实现微服务接口间的调用

四、Hystrix

服务降级,熔断,限流,监控…
主启动类要多写一个@Enablexxx注解
服务降级(服务,消费均可使用,一般在消费)
熔断(失败触发降级,从而用方法,无论)
监控(需要新建另一个模块)

五、Gatewy

服务网关:反向代理,负载均衡(自带Ribbon)
好处:
1、一开始的地址是写死的,如果商品服务挂了我们又得后台手动去改新的商品服务地址,用网关,他可以动态感知注册的服务哪些还活着,自动转发到可用的地址
2、统一鉴权、限流、日志输出等,而不用在具体的服务端去写这些代码

三大核心概念:
路由(由唯一id,url,断言,过滤器共同组成,看yaml配置就懂了),断言(路径匹配,可自行添加要求,符合断言条件就给到指定url路由),过滤器(可以根据逻辑对业务进行处理)
反向代理:
有点像Nginx,通过9527端口这个网关,访问到8001下面的接口
(微服务内部调用不走网关,服务网关只是用于外部访问。访问9527端口并进行断言匹配,判断符合断言后,访问给这个断言所配置的已注册的微服务名称,由这个微服务提供服务)

总结:请求-》网关-》断言(判断是否符合某个url路由规则,不写默认全部符合)-》符合则按照路由规则把请求路由到指定地方(但需要经过一系列的过滤器进行过滤)
难点:1、如何定义好url路由规则;2、怎么写好断言让他判定成功与失败;3、使用哪些Filter

六、Config

配置中心
服务端:可以让服务端连接GitHub,全部使用同一个GitHub上的配置,从而实现统一的配置
客户端:可以让客户端选择一个服务端,使用服务端的配置。从而实现了客户端也使用的GitHub上的配置(但是不能实时更新,需要重启)

七、Bus

消息总线,用于加强Config,实现全局或定点的动态刷新配置(但还是需要发post请求)
全局广播
1、利用消息总线触发一个客户端/bus/refresh,从而刷新所有客户端配置(不合适:1、破坏了微服务的职责单一性;2、破坏了节点对等性)
2、利用消息总线触发一个服务端ConfigServer的/bus/refresh,从而刷新所有客户端配置(更合适)
定点通知:
只通知其中一部分进行更新,通过添加微服务名称+端口号实现精确通知

八、Stream

消息驱动
1、通过绑定器Binder做中间层,屏蔽底层消息中间件的差异,降低切换成本,统一消息的编程模型
2、默认是分组的,一个消息会被全部的组都获得并消费一次
3、微服务应用应放置在同一个组中,就能保证消息只会被其中一个应用消费一次。不同的组是可以消费的,同一个组内会发生竞争关系,只有其中一个可以消费。

九、Nacos

服务注册和配置中心(=EureKa+Config+Bus并提供Web界面)(自带Ribbon负载均衡)
好处:
注册中心:
1、可用对多个服务统一管理;
2、动态感知服务上线下线;
3、不在需要手动的维护所有的服务访问ip地址列表;
4、单个服务实现负载均衡需要自己搭建,例如使用nginx负载均衡策略,或者基于容器化多实例部署单个服务,在实例之间做负载均衡。。。。。。。。。。很多好处

配置中心
以往修改了配置文件需要重启服务,而使用配置中心只需要修改配置中心就可用动态刷新
各个服务的配置文件繁琐,进行统一的管理

内容:
支持AP,CP切换(AP是高可用,所有请求都会有相应;CP是一致性,同一时间数据是一致的)
服务注册:
EureKa需要自己建一个微服务,让大家注册进去,而Nacos不需要新建微服务,只需要启动下载的Nacos,其他微服务只要改下yaml就可以注册进Nacos
配置中心:
配置微服务Yaml(选用某一个配置文件)和操作Nacos主界面(crud配置文件)进行配置,自动支持动态刷新
Nacos主界面由命名空间,DataID,分组组成,类似于三层目录的文件夹,简单又方便的切换配置
持久化:
将自带的嵌入式数据库切换为MySQL
集群:
配多个Nacos(可以让一台机子开3个Nacos配3个不同的端口实现),并连接同一个MySQL保证数据一致性,实现Nacos集群

十、Sentinel

熔断、限流和监控等(=Hystrix并提供Web界面)
不需要像Hystrix新建微服务,配置微服务Yaml(添加Sentinel地址等 )然后启动Sentinel即可
在热点key上那节视频中,讲了使用@SentinelResource注解代替原来HystrixCommand的那个注解实现自定义降级的兜底方法
@SentinelResource处理的是Sentinel控制台配置的违规情况,由blockHandler方法配置兜底处理
Java代码的运行错误是RuntimeException,由
流控:
1、QPS直接失败:可以设置QPS,当一定时间内的请求数量大于设定值是=时直接报错
2、线程数直接失败:可以设置线程数,当请求量多余设置的线程数能操作的请求时报错
3、关联:当A关联B,可以设置关联对象,B满足失败条件时,请求A会失败
4、预热:默认3,可以设置时间和最高值,会慢慢预热到最高值。当一定时间后达到最高值仍不能满足QPS或者线程数就报错
5、排队等待:一次处理不了的多余的请求会排队等待,可以设定时间值,当到达时间值还未处理完就报错
降级:(没有Hystrix的半开半闭状态了)
1、RT:1秒内持续进入5个请求且平均相应时间>阀值-----》触发降级(断路器打开)-----》直到时间窗口(熔断时间)结束-----》关闭降级
2、异常比例:1秒内持续进入5个请求且异常比例>阀值-----》触发降级(断路器打开)-----》直到时间窗口(熔断时间)结束-----》关闭降级
3、异常数:1分钟内异常数>阀值-----》触发降级(断路器打开)-----》直到时间窗口(熔断时间)结束-----》关闭降级
热点Key限流:
@SentinelResource配置方法名,Sentinel中选择那个方法名。
1、可以设置是第几个参数,只要1秒内这个参数的QPS超过设定的次数,马上进行降级处理,最好是自定义一个降级的兜底方法。
(参数P1的QPS大于5时,进行降级)
2、可以在参数例外项那配置特殊的参数,设置参数的类型,值和他的阀值,给这个参数做单独的设置
(参数是String类型的P1的值是5时,QPS大于200时,才进行降级。不等于5时就和平常的上面1的设置一样)
系统规则:
上面是对【某个方法或类】做限制,系统规则则是在最外层,对单台机器上的所有入口流量做限制
包含:Load自适应(装载率保护),CPU阀值保护,平均RT阀值保护,并发线程数阀值保护,QPS阀值保护
@SentinelResource注解详解1:
p127~p129。
@SentinelResource注解详解2:
p132~p134:
fallback兜底管运行异常,负责业务异常的出现(代码写错、出错。相当于服务降级);
blockHndler兜底管配置违规,负责sentinel控制台配置违规的出现(代码没错,触发了配置的规则。相当于服务熔断);
可以都配,如果两个同时触发了,按blockHandler处理
【普通服务降级是出现异常会切换到兜底方案并且不会自动恢复过来。但是服务熔断导致的服务降级过一段时间会自动恢复。】
熔断:
【普通服务降级是出现异常会切换到兜底方案并且不会自动恢复过来。但是服务熔断导致的服务降级过一段时间会自动恢复。】
持久化:
(就是把我们做的配置做持久化)
因为保存的都是临时的,每次服务关闭后Sentinel控制台之前的配置就都消失了,这样每次更新都得全部在Sentinel这里再配一次太麻烦,
所以我们需要持久化,无论是用MySQL还是Nacos自带数据库等等都可以。

十一、Seata

分布式事务==

本文《SpringCloud学习后相关组件的总结》版权归绝代风华.所有,引用SpringCloud学习后相关组件的总结需遵循CC 4.0 BY-SA版权协议。


推荐阅读
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 本文介绍了一种轻巧方便的工具——集算器,通过使用集算器可以将文本日志变成结构化数据,然后可以使用SQL式查询。集算器利用集算语言的优点,将日志内容结构化为数据表结构,SPL支持直接对结构化的文件进行SQL查询,不再需要安装配置第三方数据库软件。本文还详细介绍了具体的实施过程。 ... [详细]
  • 代理模式的详细介绍及应用场景
    代理模式是一种在软件开发中常用的设计模式,通过在客户端和目标对象之间增加一层中间层,让代理对象代替目标对象进行访问,从而简化系统的复杂性。代理模式可以根据不同的使用目的分为远程代理、虚拟代理、Copy-on-Write代理、保护代理、防火墙代理、智能引用代理和Cache代理等几种。本文将详细介绍代理模式的原理和应用场景。 ... [详细]
  • 本文介绍了在sqoop1.4.*版本中,如何实现自定义分隔符的方法及步骤。通过修改sqoop生成的java文件,并重新编译,可以满足实际开发中对分隔符的需求。具体步骤包括修改java文件中的一行代码,重新编译所需的hadoop包等。详细步骤和编译方法在本文中都有详细说明。 ... [详细]
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • Struts2+Sring+Hibernate简单配置
    2019独角兽企业重金招聘Python工程师标准Struts2SpringHibernate搭建全解!Struts2SpringHibernate是J2EE的最 ... [详细]
  • springboot yaml配置文件
    yaml配置文件给对象赋值首先是实体类aplication.yaml配置文件结果:yaml文件,命名必须为application.yaml,spring才能扫描到配置文件sprin ... [详细]
  • 如何在Vue项目中安装和使用VUX组件?
    vux2模板fork自webpack模板,基本和官方同步。1、默认为webpack2模板npminstallvue-cli-g如果还没安装vueinitairyla ... [详细]
author-avatar
gaoxuxinyue23
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有