3. Spring 集成了哪些常用组件?

从 2004 年发布 1.0 版本开始,Spring 目前已经演进至 5.x 版本了,为不同时期的应用开发提供了强有力的支撑。现在我们正面对微服务、DevOps、云计算这些新的挑战,Spring 家族的新生力量 Spring Cloud 又将给我们提供哪些方面的支撑呢?概括起来说,我觉得主要分为四类:

  • 在单个微服务的构建上,它提供了一套应用开发框架,主体是基于 Spring Framework 这个生态的开源产品。
  • 在水平维度服务集成上,它以 Starter 的方式集成了大量常用组件和微服务全家桶,达到开箱即用,降低我们开发微服务的难度,提升效率,避免重复投入。
  • 在垂直维度资源调度上,它可以跟 Cloud Foundry、Kubernetes、Docker 等平滑集成,让应用上云更加简单,让资源调度变得更加智能高效,让应用具备更大的弹性。
  • 在研发流程全线连通上,它可以跟 DevOps 相关系统做一些配合和优化,以便应用能够更加顺畅地通过各个研发环节,让持续集成、持续交付更加高效。

接下来,我们将展开每个点来看一看。首先,我们来看一下它究竟集成了一些什么样的常用组件:

  • 监控服务类,包括主机监控(Vector)、应用监控(Actuator)等;
  • 存储服务类,包括关系型数据库(MySQL)、文档型数据库(MangoDB)、内存型数据库(Redis)等;
  • 消息服务类,包括 ActiveMQ、RocketMQ、Kafka 等;
  • 安全服务类,包括 OAuth2.0、JWT 等。

4. Spring Cloud 微服务全家桶有哪些?

除了常用组件之外,Spring Cloud 还集成了微服务全家桶,开箱即用:

  • 服务注册发现类,包括:Eureka、Consul、Zookeeper、Etcd 等;

服务注册:每个微服务组件都向注册中心登记自己提供的服务,包括服务的主机、端口号、版本号、通讯协议等信息。注册中心按照服务类型分类组织服务清单,同时以心跳检测的方式监测清单中服务是否可用,若不可用需要从服务清单中剔除,以达到排除故障服务的效果。

服务发现:在服务治理框架下,服务间的调用不再通过具体的实例地址来实现,而是通过服务名发起请求调用实现。服务调用方通过服务名从注册中心的服务清单中获取服务实例的列表清单,通过指定的负载均衡策略取出一个服务实例位置来进行服务调用。

  • 服务调用框架类,包括:Ribbon、Feign 等;

客户端负载均衡,将负载均衡逻辑集成到消费方,消费方从注册中心获知服务有哪些实例可用,然后再按照某种策略从这些地址中选择一个服务实例进行访问。

  • 服务容错组件类,包括:Hystrix 等;

服务熔断:某个目标服务不可用或大量访问超时,系统将断开该服务的调用,对后续的调用请求,系统不再继续转发至此服务,直接返回失败应答,从而快速地释放资源;如果目标服务情况好转,则恢复调用。服务降级:在应急屏蔽或服务熔断情况下,直接返回本地缺省的应答。

  • 统一配置中心类,包括:Spring Cloud Config、Spring Cloud Bus 等;

在服务构建阶段,配合构建流水线,为服务软件包或镜像提供配置;在服务运维阶段,动态调整服务配置,满足运维的灵活性需求;在服务开发阶段,提供配置 API 将配置外置化,供其他系统调用。

  • 服务网关代理类,包括:Zuul、Spring Cloud Gateway 等;

主要提供服务路由功能,即接收消费方的所有请求,按照某种策略将请求转发至服务提供方。同时,在服务网关中完成一系列横切面的功能,例如:权限校验、请求计量、流量控制、服务质量、请求管理、响应管理、版本管理等。

  • 调用链路监测类,包括:Spring Cloud Sleuth,封装了 Dapper、Zipkin 和 HTrace 等;

微服务架构下组件的数量众多,一个业务请求可能需要调用多个服务,调用的复杂性决定了错误和异常难以定位。我们需要知道每个请求到底有哪些服务参与,调用顺序是怎么样的,从而清楚每个调用步骤,出现问题也能很快定位。

通常我们会采用 Eureka 作为服务注册中心,实现服务注册与发现;通过 Ribbon 和 Feign 实现服务的消费以及客户端负载均衡;通过 Spring Cloud Config 实现应用不同环境的外部化配置以及版本管理。为了让服务集群更为健壮,借助 Hystrix 的融断机制来避免微服务架构中个别服务出现异常时引起故障蔓延和雪崩。服务网关 Zuul 为微服务架构门户,将权限控制、计量计费等较重的非业务逻辑内容迁移到服务路由层面,使得服务集群主体能够具备更高的可复用性和可测试性。

本文主要价值是帮助大家梳理出 Spring Cloud 相关的知识框架,也就是我们常说的全局视角或者上帝视角。有了这个框架之后,我们可以根据自己的需要按图索骥找相关节点的资料来研究学习,不至于陷入细节找不到方向。当然,考虑到我们每个人的工作学习情况不同,平时遇到的问题也不同,本文内容无法覆盖所有人遇到的问题,欢迎大家留言提问,也欢迎关注「 IT老兵哥 」交流互动,谢谢!

本系列其他文章索引如下:

如何正确使用 Spring Cloud?【中】的更多相关文章

  1. Spring Cloud中关于Feign的常见问题总结

    一.FeignClient接口,不能使用@GettingMapping 之类的组合注解 代码示例: @FeignClient("microservice-provider-user" ...

  2. Spring Cloud中Hystrix、Ribbon及Feign的熔断关系是什么?

    导读 今天和大家聊一聊在Spring Cloud微服务框架实践中,比较核心但是又很容易把人搞得稀里糊涂的一个问题,那就是在Spring Cloud中Hystrix.Ribbon以及Feign它们三者之 ...

  3. 如何正确使用 Spring Cloud?【上】

    如何更快地交付软件,每周.每天甚至每个小时向用户发布新特性?如何让新员工在入职后就能部署代码?在如此快的节奏下如何保证质量?快,我们应用开发面临的主要挑战,交付越快就越能紧密地收集到用户反馈,从而更有 ...

  4. 如何正确使用 Spring Cloud?【下】

    5. Spring Cloud 如何融合 DevOps? 接下来,我们来了解一下 Spring Cloud 在与 DevOps 融合方面可以做哪些事情,它是如何让应用持续交付更加快捷的?我们都知道,D ...

  5. 详解Spring Cloud中Hystrix 线程隔离导致ThreadLocal数据丢失

    在Spring Cloud中我们用Hystrix来实现断路器,Zuul中默认是用信号量(Hystrix默认是线程)来进行隔离的,我们可以通过配置使用线程方式隔离. 在使用线程隔离的时候,有个问题是必须 ...

  6. Spring Cloud中负载均衡器概览

    在上篇文章中(RestTemplate的逆袭之路,从发送请求到负载均衡)我们完整的分析了RestTemplate的工作过程,在分析的过程中,我们遇到过一个ILoadBalancer接口,这个接口中有一 ...

  7. Spring Cloud中Feign如何统一设置验证token

    代码地址:https://github.com/hbbliyong/springcloud.git 原理是通过每个微服务请求之前都从认证服务获取认证之后的token,然后将token放入到请求头中带过 ...

  8. Spring Cloud中的负载均衡策略

    在上篇博客(Spring Cloud中负载均衡器概览)中,我们大致的了解了一下Spring Cloud中有哪些负载均衡器,但是对于负载均衡策略我们并没有去详细了解,我们只是知道在BaseLoadBal ...

  9. Spring Cloud中服务的发现与消费

    之前没注意,微信公众号的图片不能引用到其他地方,本文图片显示不正常,原图在写完博客后已经删了,,,,,,所以本文小伙伴可以移步这里https://mp.weixin.qq.com/s/GoIZdwt5 ...

随机推荐

  1. 打算写一个《重学Node.js》系列,希望大家多多支持

    先放上链接吧,项目已经开始2周了:https://github.com/hellozhangran/happy-egg-server 想法 现在是2019年11月24日,还有人要开始学习Node.js ...

  2. Python的os,shutil和sys模块

    *********OS*********** os.sep 可以取代操作系统特定的路径分隔符.windows下为 '\\' os.name 字符串指示你正在使用的平台.比如对于Windows,它是'n ...

  3. warning: rpmts_HdrFromFdno: Header V4 DSA/SHA1 Signature, key ID XXXXXX: NOKEY

    我在使用Centos时,会出现这种错误: 本人实践有效的办法是: 加上"--nogpgcheck"参数 就是在你要执行的语句后面加上该参数就行了! 我当时是为了安装jenkins时 ...

  4. C数据结构(文件操作,随机数,排序,栈和队列,图和遍历,最小生成树,最短路径)程序例子

    文件操作 文件打开方式               意义     ”r” 只读打开一个文本文件,只允许读数据     ”w” 只写打开或建立一个文本文件,只允许写数据     ”a” 追加打开一个文本 ...

  5. Python内置类属性,元类研究

    Python内置类属性 我觉得一切都是对象,对象和元类对象,类对象其实都是一样的,我在最后进行了证明,但是只能证明一半,最后由于元类的父类是type,他可以阻挡对object属性的访问,告终 __di ...

  6. shell中的函数、shell中的数组、告警系统需求分析

    7月16日任务 20.16/20.17 shell中的函数20.18 shell中的数组20.19 告警系统需求分析 20.16/20.17 shell中的函数 函数就是一个子shell就是一个代码段 ...

  7. python字符串的特性及相关应用

    一.字符串定义 字符串是 Python 中最常用的数据类型.用单引号(' '),双引号(" ")或者三引号(''' ''')括起来的数据称为字符串(其中,使用三引号的字符串可以横跨 ...

  8. 痞子衡嵌入式:恩智浦i.MX RTxxx系列MCU启动那些事(8)- 从Serial(1-bit SPI) NOR恢复启动

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RTxxx系列MCU的1-bit SPI NOR恢复启动. 在前几篇里痞子衡介绍的Boot Device都属于主动启动的 ...

  9. node.js入门安装过程

    本次随笔的目的是教大家如何安装 node.js安装 第一步:安装node环境 下载地址:https://nodejs.org/en/download/ 下载好后 对应一下你的node版本 ,傻瓜式安装 ...

  10. 带着canvas去流浪系列之九 粒子动画【华为云技术分享】

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/devcloud/article/detai ...