一张图带你了解 Spring Cloud 微服务架构
ccwgpt 2024-10-30 01:38 30 浏览 0 评论
- Feign
- Eureka
- Ribbon
- Hystrix
- Zuul
- Config
- Zipkin
- 其它
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等,可以查看微服务的信息、健康状况、刷新配置等。
相关推荐
- 软件开发接口通信总结(软件开发 接口)
-
常用的接口通信开发:1.http协议通信:主要通过post,get方式提交,通信较耗时,至少几百毫秒,但是如果采用线程池做,在初次建立连接时,耗时,建立连接后,通信挺快的,十几毫秒可以搞定。httpC...
- 《哪吒2》中物理知识很多,但无量仙翁喝尿的解释又完美又搞笑~
-
随着《哪吒2》票房的不断攀升,导演饺子背后的故事不断被挖掘大家发现,学历高的导演就是不一样,高考600多分的导演拍出来的作品里面全是知识点啊,尤其是包含了很多物理知识点。大哪吒的头发为什么是向上的?无...
- 用毕加索风格打造动画版“头号玩家”
-
提香·韦切利奥的《乌尔比诺的维纳斯》。桑德罗·波提切利的《维纳斯的诞生》。毕加索的《手里捧着书的女子》。安迪·沃霍尔的《双面猫王》。凡·高的《邮差约瑟鲁林》。马奈的《奥林匹亚》。巴齐耶的《雷诺阿画像》...
- 《章鱼噼的原罪》开播即好评 诡谲美学何时能突破电视框架?
-
由「タイザン5」创作的短篇漫画《章鱼噼的原罪》,自2021年底在少年Jump+连载以来,仅用上下两集单行本的体量,便以「幸福表象下的惊悚内核」引爆话题。作品中扭曲的友情叙事与冲击性画面形成强烈反差,单...
- 妖猫睡猫招财猫,都是怎么“化人”的?
-
陆颖瑶江户时期的猫常常被当作浮世绘的题材,最初是在美人画的角落里作为美人的可爱宠物而登场,后来被画家拟人化,成为役者画、玩具画等的创作对象,澎湃新闻获悉,日本大阪历史博物馆即将举办“国芳、广重、国贞...
- 俄媒:俄空投“章鱼”反坦克炮测试坚固性
-
参考消息网9月15日报道据俄罗斯卫星社莫斯科9月14日报道,俄罗斯国家技术集团公司向卫星社表示,从塔台上投落现代化自行反坦克炮“章鱼”-SDM1,以测试其在伞投期间承受过载的能力。俄罗斯国家技术集团公...
- 新大众文艺生产模式下的网络热梗(大众文艺是scd吗)
-
作者:郑绩当二次元向元宇宙进化,ACGN(动画、漫画、游戏、小说)仅成为虚拟空间的某个维度,以“用户”为名的主体开创出新大众文艺生产模式。孕诞的过程如此丝滑,稍不留神,我们已迷走于强烈复杂的数字现实...
- 安徽业主私人定制188平农村合院,因地制宜建出优质别墅!
-
理想的生活,不仅要有一座院子、一家人、四季春秋,还要有闲适的时间与知己往来。人生得意须尽欢,一席阔厅,既是茶余饭后阖家相聚的生活主场,也是主人尊崇品味的直观呈现。下面这套农村宅院,一入家门、二赏庭院、...
- 用数学融智学人力资源模型的核心架构:建立可量化的理论框架
-
用数学融智学人力资源模型的核心架构建立可量化的理论框架一、潜能开发三阶模型1.潜能探测函数其中:2.认知锻造方程采用1+3倍增算子:其中:二、九五智尊分类模型人才特征空间映射训练优化目标三、实战...
- 优化作文结构:三种实用框架解析(作文框架梳理)
-
优化作文结构:三种实用框架解析一、案例启示:结构优化的重要性子涵写作初用“总分总”结构(如诚信主题),但中间部分未细分导致混乱。优化后:1.引论:以商鞅立木为信案例引入,总述诚信为立身之本。2....
- 农村自建房新宠!半框架结构凭啥这么火?内行人揭开3个扎心真相
-
最近回老家发现一个怪现象:几乎家家盖新房都爱用"半框架结构"。隔壁王叔家刚完工的二层小楼,外墙红砖还没勾缝,里面的水泥柱子已经支棱起来了。这玩意儿到底有啥魔力?我蹲工地三天,问了十几个...
- Apache Log4j高危漏洞,燃爆大厂、燃烧Java开源框架
-
8分钟阅读.一、背景本周对IT界的Java工程师来说,应该都有一个比较难忘的夜晚。夜半迷迷糊糊接到安全部的电话要求立即、马上升级Log4j的版本,修复安全漏洞。What?来不及…就投入了战斗。尤其大厂...
- 我的公司信息(我的公司信息英语作文)
-
软件工程师(平台开发方向)面议福建->厦门本科不限全职职位诱惑:精英团队、福利多样、假期丰富,你会是吉比特的有缘人吗职位描述岗位职责:1、负责游戏平台的功能开发任务;2、搭建游戏...
- 深入了解 Java Spring:从基础到安全防范
-
在Java开发的广阔领域中,Spring框架无疑是一颗璀璨的明星。它经历了从传统企业级开发到现代云原生、响应式编程的演变,每个大版本都在配置简化、性能提升、技术集成等方面持续创新。今天,就让我们...
- 【紧急预警】关于 Apache Log4j 2 任意代码执行漏洞的高危风险通告
-
概述我中心多家网络威胁数据联盟成员单位近日监测到ApacheLog4j2存在任意代码执行漏洞,经过分析,由于ApacheLog4j2新增的lookup功能未对输入进行严格的判断,存在递归...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- MVC框架 (46)
- spring框架 (46)
- 框架图 (58)
- flask框架 (53)
- quartz框架 (51)
- abp框架 (47)
- jpa框架 (47)
- laravel框架 (46)
- springmvc框架 (49)
- 分布式事务框架 (65)
- scrapy框架 (56)
- shiro框架 (61)
- 定时任务框架 (56)
- java日志框架 (61)
- JAVA集合框架 (47)
- mfc框架 (52)
- abb框架断路器 (48)
- grpc框架 (55)
- ppt框架 (48)
- 内联框架 (52)
- cad怎么画框架 (58)
- ps怎么画框架 (47)
- ssm框架实现登录注册 (49)
- oracle字符串长度 (48)
- oracle提交事务 (47)