微服务开发框架——SpringCloud组件简介(1)

在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中获取服务提供者地地址列表,然后根据负载均衡地算法,请求其中地一个服务提供者的实例。

声明式REST调用


举个例子,在我们调用某个接口时,需要传入参数,当我们仅有一个访问参数的时候还好说,加在请求后面就好了,那么如果当我们有多个请求参数的时候呢?十个甚至二十个,也手动去添加到请求的后面吗?显然这样会增加我们的编写成本,如下。

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的不可用。我们把这种现象称为雪崩。官方话语:“基础服务故障”导致“级联故障”。就是一个提供者不可用从而导致了消费者不可用,并且逐渐讲影响扩大的过程。

那我们如何进行容错呢?

· 为网络请求设置超时:在正常情况下,一个请求大概在技术毫秒内就能得到响应结果,如果说依赖的服务不可用或者网络有问题,那么响应的时间就会大大延长。如果涉及到并发数据变更问题,通常一个请求对应者一个线程/进程,或者是一个锁,如果响应太慢,这个请求就得不到释放,此时此刻如果进来更多的请求,资源就会被消耗殆尽,最终导致服务不可用甚至宕机。

· 使用断路器模式:简单来讲就是,如果请求某个微服务由大量的超时,那么此时此刻再去发送请求已经没有什么意义,只会无谓地消耗资源。那么路器地作用是什么呢?就是去检测某一段时间里,是否有一定量的调用失败次数,如果有那么我们就禁止访问再进来了,此时断路器就打开,再将等待的请求通过一个,判断其是否能够请求成功,如果可以,断路器关闭,微服务的调度恢复正常使用,如果不可以,断路器继续执行。

Hystrix就是一个实现了超时机制和断路器模式的工具类库。实现了包裹请求、跳闸机制、资源隔离、监控、回退机制、自我修复功能。回退机制可由开发人员自行定义。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

面试题总结

其它面试题(springboot、mybatis、并发、java中高级面试总结等)

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
-1713682463211)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 21
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值