布条百科 - 专业百科知识分享的网站 手机版
首页 > 生活 >

一张图了解springcloud微服务架构

192次浏览     发布时间:2023-04-10 18:30:06    
Spring cloud 作为当下主流的微服务框架,让我们实现微服务架构简单快捷

Spring cloud中各个组件在微服务架构中扮演的角色如下图所示,黑线表示注释说明,蓝线由A指向B,表示B从A处获取服务。

Spring cloud组成的微服务架构图

由上图所示,微服务架构大致由上图的逻辑结构组成,包括各种微服务、注册发现、服务网关、熔断器、统一配置、跟踪服务等。

下面说说Spring cloud中的组件分别充当其中的什么角色。

Feign

Feign(接口调用):微服务之间通过Rest接口通讯,Spring Cloud提供Feign框架来支持Rest的调用

Feign使得不同进程的Rest接口调用得以用优雅的方式进行,这种优雅表现得就像同一个进程调用一样。

Eureka

Netflix eureka(注册发现):微服务模式下,一个大的Web应用通常都被拆分为很多比较小的web应用(服务)

这个时候就需要有一个地方保存这些服务的相关信息,才能让各个小的应用彼此知道对方,这时就需要在注册中心进行注册。

每个应用启动时向配置的注册中心注册自己的信息(ip地址,端口号, 服务名称等信息),注册中心将他们保存起来

服务间相互调用的时候,通过服务名称就可以到注册中心找到对应的服务信息,从而进行通讯。

注册与发现服务为微服务之间的调用带来了方便,解决了硬编码的问题。服务间只通过对方的服务id,而无需知道其ip和端口即可以获取对方方服务。

Ribbon

Ribbon(负载均衡):Ribbon是Netflix发布的负载均衡器,它有助于控制HTTP和TCP客户端的行为。

为Ribbon配置服务提供者的地址列表后,Ribbon就可基于某种负载均衡算法,自动地帮助服务消费者去请求。

Ribbon默认为我们提供了很多的负载均衡算法,例如轮询、随机等。当然,我们也可为Ribbon实现自定义的负载均衡算法。

在SpringCloud中,当Ribbon与Eureka配合使用时,Ribbon可自动从EurekaServer获取服务提供者的地址列表,并基于负载均衡算法,请求其中一个服务提供者的实例

(为了服务的可靠性,一个微服务可能部署多个实例)

Hystrix

Hystrix(熔断器):当服务提供者响应非常缓慢,那么消费者对提供者的请求就会被强制等待,直到提供者响应或超时。

在高负载场景下,如果不做任何处理,此类问题可能会导致服务消费者的资源耗竭甚至整个系统的崩溃(雪崩效应),Hystrix正是为了防止此类问题发生。

Hystrix是由Netflix开源的一个延迟和容错库,用于隔离访问远程系统、服务或者第三方库,防止级联失败,从而提升系统的可用性与容错性。

Hystrix主要通过以下几点实现延迟和容错:

包裹请求:使用HystrixCommand(或HystrixObservableCommand)包裹对依赖的调用逻辑,每个命令在独立线程中执行。这使用了设计模式中的“命令模式”。

跳闸机制:当某服务的错误率超过一定阈值时,Hystrix可以自动或者手动跳闸,停止请求该服务一段时间。

资源隔离:Hystrix为每个依赖都维护了一个小型的线程池(或者信号量)。如果该线程池已满,发往该依赖的请求就被立即拒绝,而不是排队等候,从而加速失败判定。

监控:Hystrix可以近乎实时地监控运行指标和配置的变化,例如成功、失败、超时和被拒绝的请求等。

回退机制:当请求失败、超时、被拒绝,或当断路器打开时,执行回退逻辑。回退逻辑可由开发人员指定。

Zuul

Zuul(微服务网关) :不同的微服务一般会有不同的网络地址,而外部客户端可能需要调用多个服务的接口才能完成一个业务需求。

例如一个电影购票的手机APP,可能调用多个微服务的接口才能完成一次购票的业务流程

如果让客户端直接与各个微服务通信,会有以下的问题:

  • 客户端会多次请求不同的微服务,增加了客户端的复杂性。
  • 存在跨域请求,在一定场景下处理相对复杂。
  • 认证复杂,每个服务都需要独立认证。
  • 难以重构,随着项目的迭代,可能需要重新划分微服务。
  • 例如,可能将多个服务合并成一个或者将一个服务拆分成多个。如果客户端直接与微服务通信,那么重构将很难实施。
  • 某些微服务可能使用了对防火墙/浏览器不友好的协议,直接访问时会有一定的困难。

以上问题可借助微服务网关解决。微服务网关是介于客户端和服务器端之间的中间层,所有的外部请求都会先经过微服务网关。

使用微服务网关后,微服务网关将封装应用程序的内部结构,客户端只用跟网关交互,而无须直接调用特定微服务的接口。

这样,开发就可以得到简化。不仅如此,使用微服务网关还有以下优点:

易于监控。可在微服务网关收集监控数据并将其推送到外部系统进行分析。

易于认证。可在微服务网关上进行认证,然后再将请求转发到后端的微服务,而无须在每个微服务中进行认证。

减少了客户端与各个微服务之间的交互次数。

Config

Spring cloud Config( 统一配置服务):对于传统的单体应用,常使用配置文件管理所有配置。

例如一个SpringBoot开发的单体应用,可将配置内容放在application.yml文件中。如果需要切换环境,可设置多个Profile,并在启动应用时指定spring.profiles.active={profile}。

然而,在微服务架构中,微服务的配置管理一般有以下需求:

集中管理配置。一个使用微服务架构的应用系统可能会包含成百上千个微服务,因此集中管理配置是非常有必要的。

不同环境,不同配置。例如,数据源配置在不同的环境(开发、测试、预发布、生产等)中是不同的。

运行期间可动态调整。例如,可根据各个微服务的负载情况,动态调整数据源连接池大小或熔断阈值,并且在调整配置时不停止微服务。

配置修改后可自动更新。如配置内容发生变化,微服务能够自动更新配置。

综上所述,对于微服务架构而言,一个通用的配置管理机制是必不可少的,常见做法是使用配置服务器管理配置。

Spring cloud bus利用Git或SVN等管理配置、采用Kafka或者RabbitMQ等消息总线通知所有应用,从而实现配置的自动更新并且刷新所有微服务实例的配置。

Zipkin

Sleuth+ZipKin(跟踪服务):Sleuth和Zipkin结合使用可以通过图形化的界面查看微服务请求的延迟情况以及各个微服务的依赖情况。

需要注意的是Spring boot2及以上不在支持Zipkin的自定义,需要到官方网站下载ZipKin相关的jar包。

其它

另外需要提一点的是Spring boot actuator,提供了很多监控端点如/actuator/info、/actuator/health、/acutator/refresh等,可以查看微服务的信息、健康状况、刷新配置等。

相关文章

除蚂蚁的方法(教你几招防治蚂蚁的方法)

家庭养花常发生蚁害,蚂蚁不但影响花木的生长,还会造成花木死亡,甚至损坏家具、污染食物,给养花者带来诸多烦恼。以下介绍几种简单的防治方法。①换土法。如养花数量不多,发现蚁害较早,可以马上进行换土。方法是:用新鲜土将原来带有蚂蚁及其卵的土彻底更换,换入前要彻底消毒新鲜土,检查确无蚁卵后才能使用。花盆装入

2024-10-20 10:32:39

销售折扣与折扣销售有什么区别(销售折扣、折扣销售、销售折让分不清?)

申税小微,我司最近开展促销活动,因为客户提前付款所以我们给予一定的折扣,这部分折扣金额还需要申报缴纳增值税吗?这属于销售折扣、折扣销售,还是销售折让呢?发票应当如何开具啊?销售折扣、折扣销售、销售折让,从字面看都有“折”,但在税务处理上可不一样哦。今天为大家梳理了销售折扣、折扣销售、销售折让的三大区

2024-10-20 10:17:45

水清则无鱼的后半句是什么(俗语“水至清则无鱼”,后半句是精华)

平时在我们的日常生活中,经常能听到一些俗语,这些俗语听起来朗朗上口,还十分押韵,语言很简单明了,但是简单的语言中,蕴含着不少人生道理。有时候它就像黑暗中的指路明灯,在漆黑的夜晚指引着我们前行。这是我们老祖宗的智慧所在,他们用他们的经验,来告诉后人如何为人处世,让我们在今后的生活或者工作中领悟其中的精

2024-10-20 10:03:09

唳怎么读(成语华亭鹤唳的意思是什么?)

朋友们好,今天来学习一下汉字→华亭鹤唳的“唳”怎么读?什么意思?成语华亭鹤唳的意思是什么?一起来了解认识一下吧!一、“唳”字的读音唳,读作唳(lì),汉语二级字。二、“唳”字基本信息中文:唳拼音:lì注音:ㄌㄧˋ部首:口五笔:KYND仓颉:RHSK结构:左右结构总笔画:11部外笔画:8笔顺:丨フ一丶

2024-10-20 09:47:47

卡塔尔有多少人口(卡塔尔如何做到人口仅200多万,GDP2000多亿美元)

卡塔尔人口200多万,GDP2000多亿美元,如何做到?事实上,卡塔尔可能是名副其实的全球最高收入国家,甚至没有之一。原因是,卡塔尔的本地人口只有200多万,却创造出了2000多亿美元的国民生产总值。也就是说,卡塔尔人均收入可能已经超过十万美元。问题就在于,卡塔尔一个小国为何能够做到200多万人口,

2024-10-20 09:32:39

月曜日什么意思(为什么日本人用“月火水木金土日”表示日期?)

相信喜欢看日剧的小伙伴,对“月九”、“火十”不陌生。 日本各大电视台在不同时间段播出不同剧集,“月九”、“火十”就代表了播出的时间段。 那月和火是什么意思呢?与中国的“一二三四五六日”星期说法不同,日语是用太阳系的七星“月火水木金土日”来命名星期的。 对应如下:不少学习日语小伙伴初期对日语星期的说法

2024-10-20 09:18:02