Spring Cloud系列(一)——相关概念及组件简介

Spring Cloud系列(一)——相关概念及组件简介

微服务架构

发展过程:
1. 单体架构–>集群与垂直化

在业务的发展过程中,由于用户量和访问量的不断扩大,单体架构下服务器无法支撑高负载,因此出现了两种优化方法:

  1. 横向增加服务器——集群
  2. 垂直拆分业务为多个子业务——垂直化
2. SOA

为了解决以下问题:

  • 信息孤岛
  • 共享信息重用

出现了SOA (Service-Oriented Architecture ),即面向服务的架构。SOA架构将业务划分为了粗粒度的业务服务和业务流程作为服务层。而在服务层及不同系统间,采用ESB企业服务总线来作为通信桥梁。

3. 微服务

与SOA不同,微服务关注的重点在于:解耦。在微服务架构中可以将业务拆分的更细,相应的服务独立性更强,但管理大量的为服务也会变得复杂。因此微服务中的粒度需要根据实际业务情况而定,并不一定越细越好。

微服务框架的功能:

  • 注册中心:可以注册服务、获得服务信息
  • 配置中心:统一管理配置文件
  • 服务链路追踪:追踪服务间的调用,有助于快速定位问题
  • 负载均衡:保证服务高可用
  • 服务容错:隔离、熔断、降级、限流等容错策略
    • 隔离:线程池隔离(调用服务时给予固定线程数量)、信号量隔离(使用Semaphore实现,拿不到信号量时直接拒接)。线程池隔离适用于对延时要求不高的服务,信号量非常轻量级,对低延时的调用影响较小(常用)。
    • 熔断:熔断器模型(closed状态:请求正常访问;open状态:所有请求被降级;half open状态:释放部分请求通过)
    • 降级:服务压力增大时,系统将某些不重要的业务或接口功能降级,只提供部分功能或完全停止。
    • 限流:漏桶算法;令牌桶算法;固定时间窗口算法
  • 服务网关:可对用户请求进行限流、排队、过载保护、黑白名单、过滤拦截等操作
  • 服务发布与回滚
  • 服务动态伸缩、容器化

Spring Cloud框架及相关组件

​ Spring Cloud框架是Spring提供的微服务框架,借助了Spring Boot并利用其特性和优势简化了开发步骤,做到一键启动和部署。

Eureka:服务注册和发现 组件

Eureka是一个用户服务注册和发现的组件。

​ 为什么要使用Eureka?在微服务架构中,各个微服务之间存在业务关系,例如订单服务(服务消费者)需要调用支付服务(服务提供者)实现支付功能。调用时需要指定微服务的调用地址,当微服务的数量很多时,管理和维护服务的调用地址就变得非常困难,如果能有一个组件实现服务的注册和发现,要调用服务的时候就去找这个组件,由组件返回可用的服务提供者的集合,就降低了维护成本,提高了效率。

Eureka中有三大角色:服务提供者、服务消费者、注册中心

​ 可以将注册中心看成物业,服务提供者看成住户,服务消费者则是抄水表员。每当有新的业主(服务提供者)入住,都需要向物业进行注册(服务注册),并且定期向物业交管理费(发送心跳),表明住户还住着,抄水表员向物业确认(获取服务列表)后则可以正常入室抄水表(消费服务)。当住户连续几个月没有交管理费(连续几次未发送心跳),则物业会将该户视为无人居住(剔除该服务),抄水表员则无法再入室抄水表。

LoadBalancer:负载均衡

负载均衡:将负载分摊到多个执行单元上。
常见方式:
  1. 一个独立进程单元,通过负载均衡策略,将请求转发到不用的执行单元。如Nginx。
  2. 将负载均衡逻辑以代码的形式封装到服务消费者的客户端,服务消费者客户端维护了一份服务提供者的信息列表,通过负载均衡策略将请求分摊给多个服务提供者。

LoadBalancer是Spring Cloud Commons的一个子项目,以上述第2种方式实现负载均衡。

使用方式:

  1. 与RestTemplate结合
  2. 与Feign相结合

RestTemplate:RESTful API接口请求框架

​ RestTemplate提供了简单的方法来实现对REST服务的访问(支持常见的HTTP协议请求方法:POST、GET、PUT、DELETE等),并且可以将调用结果(一般为json)反序列化为指定对象,大大提高了开发效率。

Spring Cloud OpenFeign:HTTP客户端组件

​ Feign是声明式的HTTP客户端组件,旨在使编写HTTP客户端变得更加容易。

​ OpenFeign支持Spring MVC注解,同时集成了Spring Cloud LoadBalancer和Spring Cloud CircuitBreaker,即提供了负载均衡和熔断降级的功能。

​ 在微服务框架中,OpenFeign主要用于微服务间的调用。

Resilience4j:轻量级容错框架

Resilience4j提供了一组高阶函数(装饰器),在使用时不需要引入所有依赖,只引入需要的依赖即可。

核心模块:

  • resilience4j-circuitbreaker: 熔断
  • resilience4j-ratelimiter: 限流
  • resilience4j-bulkhead: 隔离
  • resilience4j-retry: 自动重试
  • resilience4j-cache: 结果缓存
  • resilience4j-timelimiter: 超时处理

Spring Cloud Gateway:微服务网关

​ 为了将各种微服务提供给外部应用调用,同时避免直接让客户端与各个微服务通讯(可能会存在:跨域请求、认证复杂、难以重构等问题),我们需要使用微服务网关将内部服务隐藏起来,统一管理,对外统一暴露api接口。

​ 微服务网关能实现:路由、负载均衡、权限管理、身份认证等多种功能。

Spring Cloud Config:配置中心组件

​ 为了降低维护配置文件的成本(在不同环境下需要有不同的服务连接配置;配置的更新),需要对配置进行统一的管理,因此可以将各个系统中的配置放到一个第三方组件上进行统一维护,同时,配置中心上的数据变更需要推送给相应的服务节点实现动态更新。

​ Spring Cloud Config就是这样一个配置中心组件,且可以选择git、svn、本地文件作为存储。配置动态更新需要使用消息队列来实现,支持Kafka和RabbitMQ后续的实践中选择RabbitMQ

Spring Cloud Bus、Sping Boot Actuator:实现配置自动刷新

实现过程:

​ 用户在git上修改了配置文件后,发起一个post请求/actuator/bus-refresh到配置中心,此时配置中心的Spring Cloud Bus会发送消息给消息队列,监听该队列的各个微服务收到消息后会重新获取配置。

Spring Cloud Sleuth:链路追踪

​ 由于各个微服务之间可能存在多层调用,当问题出现时难以定位,因此在微服务架构中需要实现分布式链路追踪,跟进每一个请求都有哪些服务参与,调用的顺序,从而实现问题快速定位。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值