一张图了解springcloud微服务架构

panchanggui panchanggui     2022-12-01     194

关键词:

 

Spring Cloud作为当下主流的微服务框架,可以让我们更简单快捷地实现微服务架构。Spring Cloud并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。Spring Cloud中各个组件在微服务架构中扮演的角色如下图所示,黑线表示注释说明,蓝线由A指向B,表示B从A处获取服务。

技术图片


Spring Cloud组成的微服务架构图

由上图所示微服务架构大致由上图的逻辑结构组成,其包括各种微服务、注册发现、服务网关、熔断器、统一配置、跟踪服务等。下面说说Spring Cloud中的组件分别充当其中的什么角色。

Fegin(接口调用):微服务之间通过Rest接口通讯,Spring Cloud提供Feign框架来支持Rest的调用,Feign使得不同进程的Rest接口调用得以用优雅的方式进行,这种优雅表现得就像同一个进程调用一样。

Netflix eureka(注册发现):微服务模式下,一个大的Web应用通常都被拆分为很多比较小的Web应用(服务),这个时候就需要有一个地方保存这些服务的相关信息,才能让各个小的应用彼此知道对方,这个时候就需要在注册中心进行注册。每个应用启动时向配置的注册中心注册自己的信息(IP地址,端口号, 服务名称等信息),注册中心将他们保存起来,服务间相互调用的时候,通过服务名称就可以到注册中心找到对应的服务信息,从而进行通讯。注册与发现服务为微服务之间的调用带来了方便,解决了硬编码的问题。服务间只通过对方的服务ID,而无需知道其IP和端口即可以获取对方方服务。

Ribbon(负载均衡):Ribbon是Netflix发布的负载均衡器,它有助于控制HTTP和TCP客户端的行为。为Ribbon,配置服务提供者的地址列表后,Ribbon就可基于某种负载均衡算法,自动地帮助服务消费者去请求。Ribbon默认为我们提供了很多的负载均衡算法,例如轮询、随机等。当然,我们也可为Ribbon实现自定义的负载均衡算法。在Spring Cloud中,当Ribbon与Eureka配合使用时,Ribbon可自动从EurekaServer获取服务提供者的地址列表,并基于负载均衡算法,请求其中一个服务提供者的实例(为了服务的可靠性,一个微服务可能部署多个实例)。

Hystrix(熔断器):当服务提供者响应非常缓慢,那么消费者对提供者的请求就会被强制等待,直到提供者响应或超时。在高负载场景下,如果不做任何处理,此类问题可能会导致服务消费者的资源耗竭甚至整个系统的崩溃(雪崩效应)。Hystrix正是为了防止此类问题发生。Hystrix是由Netflix开源的一个延迟和容错库,用于隔离访问远程系统、服务或者第三方库,防止级联失败,从而提升系统的可用性与容错性。Hystrix主要通过以下几点实现延迟和容错。

  • 包裹请求:使用HystrixCommand(或HystrixObservableCommand)包裹对依赖的调用逻辑,每个命令在独立线程中执行。这使用了设计模式中的“命令模式”。
  • 跳闸机制:当某服务的错误率超过一定阈值时,Hystrix可以自动或者手动跳闸,停止请求该服务一段时间。
  • 资源隔离:Hystrix为每个依赖都维护了一个小型的线程池(或者信号量)。如果该线程池已满,发往该依赖的请求就被立即拒绝,而不是排队等候,从而加速失败判定。
  • 监控:Hystrix可以近乎实时地监控运行指标和配置的变化,例如成功、失败、超时和被拒绝的请求等。
  • 回退机制:当请求失败、超时、被拒绝,或当断路器打开时,执行回退逻辑。回退逻辑可由开发人员指定。


Zuul(微服务网关):不同的微服务一般会有不同的网络地址,而外部客户端可能需要调用多个服务的接口才能完成一个业务需求。例如一个电影购票的手机APP,可能调用多个微服务的接口才能完成一次购票的业务流程,如果让客户端直接与各个微服务通信,会有以下的问题:

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


以上问题可借助微服务网关解决。微服务网关是介于客户端和服务器端之间的中间层,所有的外部请求都会先经过微服务网关。使用微服务网关后,微服务网关将封装应用程序的内部结构,客户端只用跟网关交互,而无须直接调用特定微服务的接口。这样,开发就可以得到简化。不仅如此,使用微服务网关还有以下优点:

  • 易于监控。可在微服务网关收集监控数据并将其推送到外部系统进行分析。
  • 易于认证。可在微服务网关上进行认证,然后再将请求转发到后端的微服务,而无须在每个微服务中进行认证。
  • 减少了客户端与各个微服务之间的交互次数。


SpringCloud Config & Spring Cloud Bus( 统一配置服务):对于传统的单体应用,常使用配置文件管理所有配置。例如一个SpringBoot开发的单体应用,可将配置内容放在application.yml文件中。如果需要切换环境,可设置多个Profile,并在启动应用时指定spring.profiles.active=profile。然而,在微服务架构中,微服务的配置管理一般有以下需求:

  • 集中管理配置。一个使用微服务架构的应用系统可能会包含成百上千个微服务,因此集中管理配置是非常有必要的。
  • 不同环境,不同配置。例如,数据源配置在不同的环境(开发、测试、预发布、生产等)中是不同的。
  • 运行期间可动态调整。例如,可根据各个微服务的负载情况,动态调整数据源连接池大小或熔断阈值,并且在调整配置时不停止微服务。
  • 配置修改后可自动更新。如配置内容发生变化,微服务能够自动更新配置。综上所述,对于微服务架构而言,一个通用的配置管理机制是必不可少的,常见做法是使用配置服务器管理配置。Spring Cloud Bus利用Git或SVN等管理配置、采用Kafka或者RabbitMQ等消息总线通知所有应用,从而实现配置的自动更新并且刷新所有微服务实例的配置。


Sleuth+ZipKin(跟踪服务):Sleuth和Zipkin结合使用可以通过图形化的界面查看微服务请求的延迟情况以及各个微服务的依赖情况。需要注意的是Spring Boot 2及以上不在支持Zipkin的自定义,需要到官方网站下载ZipKin相关的jar包。另外需要提一点的是Spring Boot Actuator,提供了很多监控端点如/actuator/info、/actuator/health、/acutator/refresh等,可以查看微服务的信息、健康状况、刷新配置等。

原文链接:一张图了解Spring Cloud微服务架构(作者:SimpleEasy)

一张图看懂微服务架构路线

-   我为什么选择微服务架构  -众所周知,单体应用程序,由于其种种不足,几乎不支持敏捷方法。如果你想为一个大型或复杂的业务创建一个软件项目,最好从微服务架构开始。微服务架构是一种灵活的架构... 查看详情

19张图梳理springcloud中的重要知识点

...务1.1、架构演进1.2、微服务架构1.3、微服务解决方案2、SpringCloud概览2.1、什么是SpringCloud2.1、SpringCloud主要组件3、总结1、什么是微服务1.1、架构演进架构的发展历程是从单体式架构,到分布式架构,到SOA架构,再到微服务架构。... 查看详情

一张图看懂微服务架构路线(代码片段)

目录一张图看懂微服务架构路线我为什么选择微服务架构?微服务架构路线基本思路Docker容器编排Docker容器管理API网关负载均衡服务发现事件总线日志记录监控和警报分布式追踪数据持久化缓存云供应商结论一张图看懂微服... 查看详情

一张图看懂微服务架构路线(代码片段)

目录一张图看懂微服务架构路线我为什么选择微服务架构?微服务架构路线基本思路Docker容器编排Docker容器管理API网关负载均衡服务发现事件总线日志记录监控和警报分布式追踪数据持久化缓存云供应商结论一张图看懂微服... 查看详情

19张图让你秒懂springcloud全家桶!

...么是微服务、架构演进、微服务架构、微服务解决方案、SpringCloud概览、Eureka、Ribbon、Feign、Hystri 查看详情

一张图了解hyperladgerfabric架构

Hyperladger平台与其相关项目的了解HyperladgerFabric架构解析 查看详情

你真的了解微服务架构吗?听听八年阿里架构师怎样讲述dubbo和springcloud微服务架构

...源微服务架构框架提供了微服务的关键思路,例如Dubbo和SpringCloud。各大互联网公司也有自研的微服务框架,但其模式都于这二者相差不大。微服务主要的优势如下:1、降低 查看详情

springcloud微服务搭建

首先搭建微服务架构需要了解微服务的组成有哪些组件,下面我罗列一下微服务架构的组件。1.服务注册2.服务配置3.服务网关 查看详情

springcloud微服务架构简介

最近阅读了周立的《SpringCloud与Docker》收获挺大的,抽了一点时间对书中的内容做了总结。方便大家快速了解什么是SpringCloud,SpringCloud主要的功能及SpringCloud服务治理。如下博客的内容都出自这本书。什么是微服务微服务架构风... 查看详情

微服务框架之springcloud简介

参考技术A在了解SpringCloud之前先了解一下微服务架构需要考量的核心关键点,如下图:对于以上等核心关键点的处理,不需要我们重复造车轮,SpringCloud已经帮我们集成了,它使用SpringBoot风格将一些比较成熟的微服务框架组合起... 查看详情

springcloud-微服务架构基础

一前言学习微服务要从基础的架构学起,首先你要有个微服务的概念才能学习对吧!!如果你都不知道啥是微服务,就一头扎进去学习,你自己也觉得自己也学不会对吧。本篇文章主要让大家快速了解基础的架构分格,以便于微... 查看详情

dubbo和springcloud微服务架构比较及相关差异

...了解微服务架构吗?听听八年阿里架构师怎样讲述Dubbo和SpringCloud微服务架构。微服务架构是互联网很热门的话题,是互联网技术发展的必然结果。它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为... 查看详情

使用springcloud和docker构建微服务架构

如何使用SpringBoot、SpringCloud、Docker和Netflix的一些开源工具来构建一个微服务架构。本文通过使用SpringBoot、SpringCloud和Docker构建的概念型应用示例,提供了了解常见的微服务架构模式的起点。该代码可以在Github上获得,并且在Docke... 查看详情

微服务课程_springcloud_01

SpringCloud01点击查看微服务课程点击下载微服务课程资料提取码:12341.认识微服务随着互联网行业的发展,对服务的要求也越来越高,服务架构也从单体架构逐渐演变为现在流行的微服务架构。这些架构之间有怎样的... 查看详情

devops架构师--07springboot与springcloud微服务项目交付

文章目录SpringCloud微服务项目交付微服务扫盲篇单体应用架构微服务应用架构微服务架构问题及挑战微服务框架了解SpringCloud核心项目及组件与Dubbo对比SpringBoot交付实践从零开始创建SpringBoot项目编写功能代码如何在java项目中使用... 查看详情

基于springcloud的微服务架构分析(代码片段)

...:blog.caogo.cn/2021/06/20/基于Spring-Cloud的微服务架构分析SpringCloud是一个相对比较新的微服务框架,2016年才推出1.0的release版本.虽然SpringCloud时间最短,但是相比Dubbo等RPC框架,SpringCloud提供的全套的分布式系统解决方案。Sp 查看详情

springcloud深入学习-----服务消费(代码片段)

在上一篇博文中简单实现了eureka-server以及eureka-provider,后面会实现eureka-cosumer,现在针对eureka做进一步的详解。 微服务整体架构文字再美也没有图片直观,下面通过一张图来说明微服务的整体架构以及调用过程,如下:服务... 查看详情

springcloud微服务云架构-集成项目简介

SpringCloud集成项目有很多,下面我们列举一下和SpringCloud相关的优秀项目,我们的企业架构中用到了很多的优秀项目,说白了,也是站在巨人的肩膀上去整合的。在学习SpringCloud之前大家必须了解一下相关项目,希望可以帮助到大... 查看详情