赞
踩
在SpringCloud初生到现在,经历了实际项目中的应用变革,有的组术已经被改革换代,但他们的原理大致相同。所以原始组件还是具有一定的参考性质。
· 各微服务在启动时,将自己的网络地址等信息注册到服务发现组件中,服务发现组件会存储这些信息。
· 服务消费者可从服务发现组件中查询到对应微服务提供者的网络地址,并使用该地址调用服务提供者的接口。
· 各个微服务与服务发现组件使用一定的机制进行通信。服务发现组件如长时间无法与某微服务进行实例通信,就会注销该实例。
· 微服务网络地址发生变更的时候,会自动重新注册到服务发现组件中。当我们的网络地址发生改变的时候,就无需自主去修改了。
综上,服务注册与发现的组件就应具备服务注册表、服务注册与服务发现、服务检查的功能。
SpringCloud提供了多种服务发现组件的支持,例如Eureka、Zoomkeeper、Consul、Nacos等等。但是随着业务场景的不断冲刷,Eureka的弊端类似于服务注册慢、已停止的微服务节点注销慢或者不注销、所注册的服务状态为UNKNOW而我们只会请求状态为UP的微服务等等的问题,使得Eureka在实际应用中逐渐退出舞台。
在我们启动微服务时,Eureka Client会把自己的网络信息注册到Eureka Server上,一般来说,在生产环境中,各个微服务都会部署多个实例,那么服务消费者要如何将请求分摊到多个服务提供者实例上呢?
我们来介绍一下Ribbon是如何实现客户点侧的负载均衡的。Ribbon是Netflix发布的负载均衡器,有助于控制Http和Tcp客户端的行为。为Ribbon配置服务提供者地址列表后,Ribbon就可以基于负载均衡的算法,自动地帮助服务消费者去请求。除了我们自定义地负载均衡算法,其提供了轮询,随机等。
在SpringCloud中,Ribbon可自动从Eureka Server中获取服务提供者地地址列表,然后根据负载均衡地算法,请求其中地一个服务提供者的实例。
举个例子,在我们调用某个接口时,需要传入参数,当我们仅有一个访问参数的时候还好说,加在请求后面就好了,那么如果当我们有多个请求参数的时候呢?十个甚至二十个,也手动去添加到请求的后面吗?显然这样会增加我们的编写成本,如下。
return this.restTemplate.getForObject(“http://localhost:8080/user/showAllUserMessage?idNumber=”+idNumber+“&userName=”+userName+“&password=”+password+“&…等等等一系列参数”,User.class);
那么Fiegin就很好地帮我们解决了这个问题,他是Netflix开发地声明式、模板化的Http客户端,可以帮助我们更加便捷地、优雅地、规范地调用HTTP API。除了能够使用其自带的注解外,SpringCloud还使Feign可以支持SpringMVC注解。
但是随着真是业务场景的冲刷,Feign也逐渐不行了,后来选择OpenFeign对相应的接口进行调用。
其实这就好比于,我们在进行项目开发的时候,需要调用别人项目中的接口,那怎么让自己项目的接口被其他项目请求到呢?简单来说这个接口被注册到一个服务器上,然后你使用相应的接口文档按照提供的接口调用方式对其调用即可。
在SpringCloud的原始组件中,上面我们提到Eureka实现了微服务的注册与发现,Ribbon实现了负载均衡,Feign实现了声明式的API调用,那么接下来我们要讲的就是Hystrix是实现微服务的容错处理的。
微服务架构的应用系统通常包含多个服务层,微服务之间通过网络进行通信,从而支撑起整个应用系统,因此,微服务之间难免存在一个依赖的关系。
既然各个微服务之间存在依赖,那么我们就要考虑从到一个问题,当某种业务场景的请求方式为A请求B,B请求C从而返回最终结果,如果C此时此刻不可用,那么导致B不可用,进而导致A的不可用。我们把这种现象称为雪崩。官方话语:“基础服务故障”导致“级联故障”。就是一个提供者不可用从而导致了消费者不可用,并且逐渐讲影响扩大的过程。
那我们如何进行容错呢?
· 为网络请求设置超时:在正常情况下,一个请求大概在技术毫秒内就能得到响应结果,如果说依赖的服务不可用或者网络有问题,那么响应的时间就会大大延长。如果涉及到并发数据变更问题,通常一个请求对应者一个线程/进程,或者是一个锁,如果响应太慢,这个请求就得不到释放,此时此刻如果进来更多的请求,资源就会被消耗殆尽,最终导致服务不可用甚至宕机。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
这份文档从构建一个键值数据库的关键架构入手,不仅带你建立起全局观,还帮你迅速抓住核心主线。除此之外,还会具体讲解数据结构、线程模型、网络框架、持久化、主从同步和切片集群等,帮你搞懂底层原理。相信这对于所有层次的Redis使用者都是一份非常完美的教程了。
整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~
你的支持,我的动力;祝各位前程似锦,offer不断!!!
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
前程似锦,offer不断!!!**
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。