Spring cloud 作为当下主流的微服务框架,让我们实现微服务架构简单快捷
Spring cloud中各个组件在微服务架构中扮演的角色如下图所示,黑线表示注释说明,蓝线由A指向B,表示B从A处获取服务。
Spring cloud组成的微服务架构图
由上图所示,微服务架构大致由上图的逻辑结构组成,包括各种微服务、注册发现、服务网关、熔断器、统一配置、跟踪服务等。
下面说说Spring cloud中的组件分别充当其中的什么角色。
Feign(接口调用):微服务之间通过Rest接口通讯,Spring Cloud提供Feign框架来支持Rest的调用
Feign使得不同进程的Rest接口调用得以用优雅的方式进行,这种优雅表现得就像同一个进程调用一样。
Netflix eureka(注册发现):微服务模式下,一个大的Web应用通常都被拆分为很多比较小的web应用(服务)
这个时候就需要有一个地方保存这些服务的相关信息,才能让各个小的应用彼此知道对方,这时就需要在注册中心进行注册。
每个应用启动时向配置的注册中心注册自己的信息(ip地址,端口号, 服务名称等信息),注册中心将他们保存起来
服务间相互调用的时候,通过服务名称就可以到注册中心找到对应的服务信息,从而进行通讯。
注册与发现服务为微服务之间的调用带来了方便,解决了硬编码的问题。服务间只通过对方的服务id,而无需知道其ip和端口即可以获取对方方服务。
Ribbon(负载均衡):Ribbon是Netflix发布的负载均衡器,它有助于控制HTTP和TCP客户端的行为。
为Ribbon配置服务提供者的地址列表后,Ribbon就可基于某种负载均衡算法,自动地帮助服务消费者去请求。
Ribbon默认为我们提供了很多的负载均衡算法,例如轮询、随机等。当然,我们也可为Ribbon实现自定义的负载均衡算法。
在SpringCloud中,当Ribbon与Eureka配合使用时,Ribbon可自动从EurekaServer获取服务提供者的地址列表,并基于负载均衡算法,请求其中一个服务提供者的实例
(为了服务的可靠性,一个微服务可能部署多个实例)
Hystrix(熔断器):当服务提供者响应非常缓慢,那么消费者对提供者的请求就会被强制等待,直到提供者响应或超时。
在高负载场景下,如果不做任何处理,此类问题可能会导致服务消费者的资源耗竭甚至整个系统的崩溃(雪崩效应),Hystrix正是为了防止此类问题发生。
Hystrix是由Netflix开源的一个延迟和容错库,用于隔离访问远程系统、服务或者第三方库,防止级联失败,从而提升系统的可用性与容错性。
Hystrix主要通过以下几点实现延迟和容错:
包裹请求:使用HystrixCommand(或HystrixObservableCommand)包裹对依赖的调用逻辑,每个命令在独立线程中执行。这使用了设计模式中的“命令模式”。
跳闸机制:当某服务的错误率超过一定阈值时,Hystrix可以自动或者手动跳闸,停止请求该服务一段时间。
资源隔离:Hystrix为每个依赖都维护了一个小型的线程池(或者信号量)。如果该线程池已满,发往该依赖的请求就被立即拒绝,而不是排队等候,从而加速失败判定。
监控:Hystrix可以近乎实时地监控运行指标和配置的变化,例如成功、失败、超时和被拒绝的请求等。
回退机制:当请求失败、超时、被拒绝,或当断路器打开时,执行回退逻辑。回退逻辑可由开发人员指定。
Zuul(微服务网关) :不同的微服务一般会有不同的网络地址,而外部客户端可能需要调用多个服务的接口才能完成一个业务需求。
例如一个电影购票的手机APP,可能调用多个微服务的接口才能完成一次购票的业务流程
如果让客户端直接与各个微服务通信,会有以下的问题:
以上问题可借助微服务网关解决。微服务网关是介于客户端和服务器端之间的中间层,所有的外部请求都会先经过微服务网关。
使用微服务网关后,微服务网关将封装应用程序的内部结构,客户端只用跟网关交互,而无须直接调用特定微服务的接口。
这样,开发就可以得到简化。不仅如此,使用微服务网关还有以下优点:
易于监控。可在微服务网关收集监控数据并将其推送到外部系统进行分析。
易于认证。可在微服务网关上进行认证,然后再将请求转发到后端的微服务,而无须在每个微服务中进行认证。
减少了客户端与各个微服务之间的交互次数。
Spring cloud Config( 统一配置服务):对于传统的单体应用,常使用配置文件管理所有配置。
例如一个SpringBoot开发的单体应用,可将配置内容放在application.yml文件中。如果需要切换环境,可设置多个Profile,并在启动应用时指定spring.profiles.active={profile}。
然而,在微服务架构中,微服务的配置管理一般有以下需求:
集中管理配置。一个使用微服务架构的应用系统可能会包含成百上千个微服务,因此集中管理配置是非常有必要的。
不同环境,不同配置。例如,数据源配置在不同的环境(开发、测试、预发布、生产等)中是不同的。
运行期间可动态调整。例如,可根据各个微服务的负载情况,动态调整数据源连接池大小或熔断阈值,并且在调整配置时不停止微服务。
配置修改后可自动更新。如配置内容发生变化,微服务能够自动更新配置。
综上所述,对于微服务架构而言,一个通用的配置管理机制是必不可少的,常见做法是使用配置服务器管理配置。
Spring cloud bus利用Git或SVN等管理配置、采用Kafka或者RabbitMQ等消息总线通知所有应用,从而实现配置的自动更新并且刷新所有微服务实例的配置。
Sleuth+ZipKin(跟踪服务):Sleuth和Zipkin结合使用可以通过图形化的界面查看微服务请求的延迟情况以及各个微服务的依赖情况。
需要注意的是Spring boot2及以上不在支持Zipkin的自定义,需要到官方网站下载ZipKin相关的jar包。
另外需要提一点的是Spring boot actuator,提供了很多监控端点如/actuator/info、/actuator/health、/acutator/refresh等,可以查看微服务的信息、健康状况、刷新配置等。
长寿花是许多花友家中常见的植物,不仅名字讨喜,寓意吉祥,还因其花色艳丽、好养易活而深受喜爱。很多人在种植长寿花时,总会遇到一个问题:长寿花开花太少,或花期太短,甚至有些花友辛辛苦苦养了一年,到春节的时候却开得稀稀拉拉,实在让人失望。长寿花的花期并不短,正常情况下,它的花期可以从每年的12月一直延续到
2025-03-09 10:36:39
在家里坐着什么也没干,总是能隐隐约约闻到一股子臭味,每次仔细闻就找不到了,根本找不到来源,但时不时飘来的臭味真的很恼人,所以这个气味是从哪里飘来的呢?这篇揭秘↓像市面上除异味的产品有很多像除臭喷雾、固体香氛、除臭盒等,最好用的还是空气净化器,小编推荐大家贝尔克家的D9L,也是我一直在用的,对去除室内
2025-03-09 10:33:49
锡纸可谓是厨房中极具吸引力的烹饪工具,它不仅可以聚集热量,使食物更快地吸收能量,缩短烹饪时间,它还可以保存这份热量,不受外界的影响,锡纸在厨房中是不可或缺的得力帮手。锡纸怎么用锡纸是厨房烹饪时都经常要用到的,一般多用于烤箱中使用,它是一种合金制成的。锡纸分感光面与哑光面,通常使用时哑光面接触食物,感
2025-03-09 10:32:19
地漏东西虽小,但是作用却很大。那么地漏是不是越贵越好呢?将下水方式和材质两个方面分类讲解:一、按下水方式分类1、浅水封(或深水封地漏)其下水原理是通过U型双层孔径+存水弯进行下水和防臭功能。理论上,水是最好隔绝任何味道的介质,但是事实上,污水中含有很多粘质杂质,水封越深,头发和这些粘质杂质附着面积越
2025-03-09 10:31:33
以前人们在盖房子的时候,对上梁是很重视的,上梁对盖房人来说是大喜事,到了上梁的环节,会选择一个吉日进行,并且在主梁上挂上一条红布,这到底是为什么?有什么讲究吗?时至今日,在一些农村地区身建房时仍流传着这种风俗。上梁的过程大体是这样的,在屋架主体建成后,选择一个晴好的吉日,通常是上午八九点钟,太阳往上
2025-03-09 10:06:04
一、混凝土收缩的原因由于混凝土组成、配比、养护工艺等原因,混凝土在凝结过程中体积会收缩,硬化初期的收缩主要是水泥水化凝结过程中产生的体积变化,后期主要是混凝土内自由水份蒸发而引起的干缩。混凝土收缩后形成的表面龟裂混凝土收缩后形成的竖向裂纹其中混凝土的组成、配比是影响混凝土收缩的重要因素,水泥的用量多
2025-03-09 10:04:40