SpringCloud相关组件-组件功能概念介绍及对应组件
分布式配置中心
微服务系统中,存在很多功能开关和各种参数配置项,传统配置文件、数据库等方式无法满足开发人员对配置管理的需求。此时,分布式配置中心应运而生。
- 统一管理:配置中心分为服务端与客户端。服务端负责配置的管理,如新增、修改、删除、发布等。微服务程序可以通过客户端统一从服务端拉取配置。
- 区分环境:一个微服务中的某些配置项,在不同的开发环境中可能是不同的。分布式配置中心需要有隔离环境的功能,允许同一个微服务在不同环境下拉取对应的配置。
- 动态刷新:服务端的配置发生修改时,客户端能实时监听配置的改变。微服务程序可以试试获取最新配置,且不用重新部署程序。
- 权限控制:配置中心中,针对不同的角色设置不同的权限。
- 版本控制:支持版本回退,避免误操作。
- 灰度发布:发布新配置时先发布到部分实例的过程。
常见组件:Config、Nacos、Apollo,Consul
分布式注册中心
微服务将服务及注册地址注册到注册中心,服务消费者调用服务时,先从注册中心查找地址,然后进行调用。
- 服务自动注册:微服务应用启动时,通过注册中心客户端组件,将服务相关信息自动注册到注册中心服务端组件。
- 服务健康检查:注册中心能发现已注册服务实例宕机,并删除相关信息。
- 服务自动发现:消费者能实时监听到注册中心中服务信息的变更,真正调用服务时不会出现错误。
常见组件:Zookeeper、Eureka、Nacos、Consul
服务网关
服务网关是微服务架构中对外的统一入口,所有客户端都通过统一的网关使用微服务。
服务网关可以隔离外部访问和内部系统,是微服务架构中的不可缺少的一部分。
- 高并发:作为对外入口,网关要有承受较高并发量的能力。
- 安全:网关要有权限认证、黑白名单等保证网关安全的功能。
- 路由转发:服务网关能根据请求和配置,将请求转发到对应后端微服务上。
- 监控与限流:服务网关要能监控流量情况,遇到突发情况能及时限流,保证系统稳定。
- 灰度发布:微服务更新版本,可以利用服务网关进行流量切换,实现微服务灰度发布。
- 服务重试:网关调用微服务失败后,可以重新尝试调用该服务。
- 服务别名:给微服务设置别名,对外屏蔽微服务相关信息。
常用组件:Kong、Zuul、Gateway
负载均衡
负载均衡指将访问流量根据负载均衡算法分发到后端服务器的流量分发控制服务。
负载均衡可以提高微服务的可用性以及性能。
负载均衡常用算法:
- 简单轮询:请求按顺序发给后端服务器上,不关心服务器状态,如性能、负载。
- 加权轮询:根据性能给服务器设置权重,按顺序和权重发送请求。
- 简单随机:请求随机分发,请求越多,服务器接收到的请求越平均。
- 加权随机:按照权重随机分发。
- 一致性哈希:根据客户端ip或者请求参数,经过哈希计算出服务器。能保证同一个客户端或相同参数的请求每次可以使用同一台服务器。
- 最小活跃数:统计每台服务器正在处理的请求数,将请求发给活跃数最小的服务器。
常见负载均衡组件:Nginx、lvs、ribbon
RPC调用
RPC调用就是远程过程调用,表示一个方法调用远程的另外一个方法,微服务架构中一个服务调用另外一个服务可以使用RPC调用。
RPC与HTTP调用区别:
- HTTP调用使用HTTP协议,是网络七层中的应用层协议。HTTP规定了数据传输格式,Restful风格可以通过HTTP协议实现。
- RPC不是网络层面的协议,是更上层更灵活地通信协议。RPC调用可以自定义数据格式、数据传输方式,只要能保证调用到远程方法即可。
常用RPC组件或框架:Dubbo、gRPC、Thrift、Feign
服务熔断
服务熔断指,服务A调用不可用的服务B时,上游服务A为了保证自己不受影响,不在调用服务B,直接返回结果,减轻服务AB的压力,直到服务B恢复。
熔断器指实现熔断功能的组件,如Hystrix、Sentinel。
熔断器的三种状态:
- Closed:关闭状态。失败次数达到阈值时,启动熔断器。
- Open:打开状态。此时不会真正调用下游服务,而是直接返回,一段时间后会进入半打开状态。
- Half-Open:半打开状态。会有部分请求访问下游服务,如果这些请求都调用成功了,则认为下游服务恢复了,关闭熔断器。否则熔断器回到打开状态。
服务降级
服务降级指,发现系统压力过载时,可以通过关闭或者限流某个服务来减轻系统压力。
服务降级与服务熔断的异同:
- 都为了防止系统崩溃
- 都让用户体验到某些服务不可用
- 熔断是下游服务故障触发;降级是为了降低系统负载
什么是服务雪崩:
服务A调用服务B,服务B调用服务C。此时大量请求调用服务A,如果A能抗住这些请求,而C不行,就会导致服务C请求堆积、然后B服务堆积,总而导致服务A不可用,这就是服务雪崩。可以通过服务降级和服务熔断解决。
服务限流
高并发请求下,为了保护系统,对访问服务的请求进行数量上的限制,防止系统被大量请求压垮。常用于秒杀系统。
常用限流算法:
- 固定窗口计数器
- 滑动窗口计数器
- 令牌桶
- 漏桶
全局锁
常说的分布式锁,是分布式、微服务架构中的锁机制。可以很好地在分布式系统中互斥使用共享资源。
- Zookeeper:利用watch机制与临时节点特性。
- Redis:利用消费订阅机制和数据超时特性。
- Redisson
- Curator
控制总线
也称消息总线,是微服务系统中用来连接系统中所有服务节点的,微服务中所有的服务节点可以通过控制总线通讯。
使用场景:Bus就是控制总线的具体实现,某个微服务可以通过Bus广播实践,其他微服务可以接受到事件,并进行相关处理。
分布式事务
一次请求中,涉及的分散在多个微服务上的操作要保证同时成功或失败。比如创建订单减库存、银行转账等。
实现方式:
- 通过数据库
- 通过消息队列
- 两阶段提交
- 三阶段提交
分布式事务的角色:
- 事务协调器
- 事务管理者
- 资源管理者
常见组件:seata、lcn、bytetcc
服务安全
为保证微服务系统的服务安全性,对服务的认证和授权是企业必备的。
组件:Spring Cloud Security
服务安全特性:
- 可扩展、可配置的认证与授权
- 单点登录
- 防止会话固定、点击劫持、跨网站请求伪造等攻击手段
- 集成Servlet API
链路追踪
链路追踪为微服务系统提供了完整的调用链路还原、调用请求量统计、链路拓扑、应用依赖分析等功能,可以帮助开发者快速分析和诊断微服务架构下的性能瓶颈。
链路追踪功能:
- 分布式调用链查询与诊断
- 应用性能实时汇总
- 分布式拓扑动态发现
- 多语言开发程序接入
- 丰富下游对接场景
常用技术:Sleuth、Zipkin
集群管理
对微服务系统中的某个服务集群提供的集群管理功能,Spring Cloud Cluster的职责就是集群管理。
功能:
- 领导者选举
- 一致性存储
- 集群状态管理
- 一次性tokens
事件驱动
事件驱动就是消息驱动,Spring Cloud Stream用来实现事件驱动。事件驱动可以在微服务中更方便地通过发送消息进行通信。
相关概念:
- 目标绑定器:指Kafka或RabbitMQ
- 绑定桥梁:连接消息系统和应用程序
- 消息:应用程序和消息系统之间传递的数据
- 异步处理
- 流量削峰
- 服务解耦
云连接器
可以用来更方便地连接部署在云上的各种服务,Connectors就是云连接器的组件实现。
支持平台:Spring Cloud Cloud Foundry,Spring Cloud Heroku
函数计算
也成为函数式编程,是实现Serverless的一种手段。如果能使用函数计算可以大大节约成本,提供了Spring Cloud Function开发基于云平台的函数计算。
特点:
- 支持响应式等编程风格
- 输入输出类型透明转化
- 流数据处理
- 同一个JVM中运行多版本函数
- 打包函数到指定云平台