核心功能

配置中心

微服务系统中,存在很多功能开关和参数的配置项,传统的配置文件、数据库等方式无法满足开发人员对配合管理的需求,此时分布式配置中心应运而生。
常用配置中心组件有SpringCloudConfig、阿里Nacos、携程Apollo、谷歌consul。

统一管理

配置中心服务端负责配置管理,集成了配置中心客户端的微服务可以统一从配置中心服务端拉取配置。

区分环境

微服务应用中的某些配置在不同环境通常是不同的,作为分布式配置中心需要具有隔离不同环境的功能。

实时刷新

当配置中心服务端中的配置发生了修改时,配置中心客户端需要能实时监听到配置的改变,使微服务应用程序可以实时获取到最新配置,并且不用重新部署应用程序。

权限管理

在配置中心可以针对不同的角色或用户设置对应的权限。

版本控制

在使用过程中难免会出现误操作,这时就需要进行版本回退,所以配置中心需要支撑版本控制。

灰度发布

当需要发布一项配置到多个实例(集群)时,可以只发布到部分实例,待测试通过后,再发布到全部实例,这就是灰度发布。

注册中心

注册中心相当于微服务架构中的地址通讯录,每个微服务会将服务及其地址注册到注册中心,服务消费者在调用某个微服务之前会先从注册中心查找服务地址,然后进行调用。
常用注册中心组件有Zookeeper、Eureka、Nacos、Consul。

服务的自动注册

微服务应用在启动时,通过注册中心客户端组件,将服务相关信息自动注册给注册中心。

服务的健康检查

当已经注册到驻场中心的微服务实例宕机后,注册中心服务端能发现实例已经宕机,并把相关信息从驻场中心删除掉。

服务的自动发现

服务消费者需要能实时监听到注册中心中服务信息的变更,使在调用服务时不会出现错误。

服务网关

服务网关是整个微服务架构中对外的统一入口,所有的客户端都通过统一的网关使用微服务,服务网关起到了隔离外部访问和内部系统的作用,服务网关是微服务架构中的一个标配组件。
常用的服务网关组件Kong、Zuul、SpringCloudGateway。

高并发

作为微服务架构中对外入口,必须能支持高并发,能承担更高的并发量,并保证高性能。

安全

服务网关通常具有权限认证、黑名单、白名单等保证网关安全的功能。

路由转发

服务网关接收到外部请求后,要求服务网关能根据要求和配置将请求转发到对应的后端服务上去。

监控与限流

作为整个系统的流量入口,服务网关要能监控流量情况,遇到突发情况时能及时限流,保证整个系统的稳定性。

灰度发布

当某个微服务有新版本更新上线时,可以利用服务网关进行流量的切换,实现该微服务的灰度发布。

服务重试

当服务网关调用某个微服务失败后,可以通过服务网关设置重试策略来重新尝试调用服务。

服务别名

可以在服务网关中给某个或某些微服务设置别名,从而对外屏蔽内部微服务相关信息。

负载均衡

负载均衡是指将流量根据分在均衡算法分发到后端服务器的流量分发控制服务,通过负载均衡可以提高
微服务的可用性以及性能。
常用的负载均衡组件Nginx、lvs、ribbon。

简单轮询

将请求按顺序分给到后端服务器,不关心服务器当前的状态,比如后端服务器的性能、当前的负载。

加权轮询

根据服务器自身的性能给服务器设置不同的权重,将请求按顺序和权重分发给后端服务器,可以让性能高的机器处理更多的请求。

简单随机

将请求随机分发给后端服务器,请求越多,各个服务器接收到的请求越平均。

加权随机

根据服务器自身的性能给服务器设置不同的权重,将请求按各个服务器的权重随机分发给后端服务器。

一致性哈希

根据请求的客户端IP或请求参数通过哈希算法得到一个数值,利用该数值取模映射出对应的后端服务器,这样能保证同一个客户端或相同参数的请求每次都使用同一台服务器。

最小活跃数

统计每台服务器上当前正在处理的请求数,也就是请求活跃数,将请求分发给活跃数最少的后台服务器。

RPC调用

RPC就是远程过程调用,对于Java程序而言,RPC就是远程方法调用,表示一个方法调用远程的另外一个方法,微服务框架中一个服务调用另一个服务就可以用RPC调用。
常用的RPC调用组件或框架Dubbo、gRPC、Thrift、Feign。

RPC调用与HTTP调用的区别

HTTP调用使用的是HTTP协议,是网络7层中的应用层协议,HTTP协议规定了数据传输的格式,Restful风格就可以通过HTTP协议来实现。
RPC不是网络层面的协议,而是更上层的灵活的通信协议,RPC调用可以自定义数据格式、数据传输方式,只要能保证调用到远程方法即可。

服务熔断 *

服务熔断是指,当服务A调用的某个服务B不可用时,上游服务A为了保证自己不受影响,从而不再调用服务B,直接返回一个结果,减轻服务A和服务B的压力,直到服务B恢复。
常用的熔断组件有Hystrix、Sentinel。

熔断器的三中状态

Closed关闭状态:当调用次数达到阈值时则启动熔断器。
Open打开状态:此时不会真正的调用下游服务,而是直接返回,当过了某段时间后,熔断器会进入到半打开状态。
Half-Open半打开状态:此时会有部分请求访问下游服务,如果这些请求都调用成功了,则认为下游服务恢复了,那么则关闭熔断器,否则熔断器回到打开状态。

服务降级 *

服务降级是指,当发现系统压力过载时,可以通过关闭某个服务,或限流某个服务来减轻系统压力,这就是服务降级。

服务降级与服务熔断

  • 都是为了防止系统崩溃
  • 都是让用户体验到某些功能暂时不可用
  • 熔断是下游服务故障触发的
  • 降级是为了降低系统负载

    什么是服务雪崩

    服务A调用服务B,服务B调用C,此时大量请求突然调用服务A,假如服务A本身能抗住这些请求,但是服务C抗不住,导致服务C请求堆积,从而服务B请求堆积,从而服务A不可用,这就是服务雪崩,解决方式就是服务降级和服务熔断。

    服务限流

    服务限流是指在高并发请求下,为了保护系统,可以对访问服务的请求进行数量上的限制,从而防止系统不被大量请求压垮,在秒杀中,限流是非常重要的。

    常用限流算法

  • 固定窗口计数器

  • 滑动窗口计数器
  • 令牌桶
  • 漏桶

    全局锁

    全局锁就是分布式锁,是分布式、微服务架构中的一种锁机制,通过全局锁可以很好的在分布式系统中互斥使用共享资源。

    全局锁的实现原理

  • Zookeeper:利用Zookeeper的watch机制与临时节点特性

  • Redis:利用Redis的消费订阅机制与数据超时特性
  • MySQL:利用数据库唯一索引的互斥特性

    控制总线

    控制总线也称消息总线,是微服务系统中用来连接系统中所有服务节点的,微服务中的所有服务节点可以通过控制总线来进行通讯。
    目前,SpringCloudBus就是控制总线的具体实现,某个微服务可以通过Bus来广播事件,而其他微服务可以接收到事件并进行相关处理。

    分布式事务

    在一次请求中,所涉及的分散在多个微服务上的操作要保证同时成功或同时失败,这就是分布式事务,比如创建订单减库存、银行转账等。
    常用的分布式事务框架有seata、lcn、bytetcc。

    实现分布式事务的方式

  • 直接通过数据库

  • 通过消息队列
  • 两阶段提交
  • 三阶段提交

    分布式事务中的三个角色

  • 事务协调器

  • 事务管理者
  • 资源管理者

    服务安全

    对于企业来说,微服务系统中的服务完全性越来越重要,服务的认证和授权是企业必须具备的,SpringCloudSecurity是SpringCloud提供的微服务安全组件。

  • 可扩展、可配置的认证和授权

  • 单点登录
  • 防止会话固定、点击劫持、跨网站请求伪造等攻击
  • 与ServletAPI集成

    链路追踪

    链路追踪为微服务系统提供了完整的调用链路还原、调用请求量统计、链路拓扑、应用依赖分析等功能,可以帮助开发者快速分析和诊断微服务架构下的性能瓶颈。
    常用的链路追踪技术有Sleuth、Zipkin。

  • 分布式调用链查询和诊断

  • 应用性能实时汇总
  • 分布式拓扑动态发现
  • 多语言开发程序接入
  • 丰富的下游对接场景

    集群管理

    集群管理是指,对于微服务系统中的某个服务集群所提供的针对集群管理的功能,SpringCloudCluster的职责就是集群管理。

  • 领导者选举

  • 一致性存储
  • 集群状态管理
  • 一次性tokens

    事件动

    事件驱动就是消息驱动,在SpringCloud中提供了SpringCloudStream来实现事件驱动,有了事件驱动,在微服务系统中可以更方便的通过发送消息来进行通信。

  • 目标绑定器:目标指的是kafka或rabbitmq

  • 绑定桥梁:连接消息系统的应用程序
  • 消息:应用程序和消息系统之间传递的数据

    特点

  • 异步处理

  • 流量削峰
  • 服务解耦

    任务调度

    云链接器

    云连接器可以用来更方便的连接部署在云上的各种服务,SpringCloud中的SpringCloudConnectors就是云连接器的组件实现。
    目前支持的云平台有SpringCloudCloudFoundry、SpringCloudHeroku。

    函数计算