微服务

发布时间 2023-11-03 20:09:54作者: 唐钰逍遥

注册中心

Nacos和Eureka

  • 共同点
    • 都可以作为服务注册,服务拉取中心。
    • 都有AP特性。
    • 都支持服务提供者心跳方式做健康监测。
  • 异同点
    • nacos可以做配置中心。
    • nacos可以支持服务提供者注册服务为非临时实例时:
      • nacos为CP模式。
      • nacos会主动监测服务提供者是否存活。
      • nacos会主动通知服务列表的更新(更快感知服务变更)。
      • 服务提供者心跳不正常AP模式会被剔除服务列表,CP模式则不会。
    • 当nacos可以支持服务提供者注册服务为临时实例时,和Eureka一样。

负载均衡

Ribbon

负载均衡

  • 轮询方式

  • 随机方式

  • 响应时间加权轮询方式

  • 分区轮询方式

  • 自定义轮询:

    • 声明创建SpringBean(全局配置)

      @Bean
      public IRule customRule(){
          // implements IRule
          return new new CustomeRule();
      }
      
  • 在配置文件中指定服务使用自定义轮询全限定类名(局部配置)

熔断机制

hyrtix

1698735941175

根据10S内请求失败率是否过半来判断要不要打开熔断机制,走fallback接口服务降级机制,随后半开状态会每隔5S判断服务是否可达可用标准,如果达到则关闭熔断机制,否则继续保持服务降级。

服务限流

nginx

  • 漏桶算法

1698740065183

固定桶的大小来充当容器,其他的请求抛弃,同时在桶下面开启固定大小的出口来限定速率。

  • 控制并发连接数
    • perip
    • perserver

网关

  • 令牌桶算法
    1698740550445

    固定速率放入令牌桶,请求到来后看桶中的令牌数决定每秒并发,和漏桶的区别就在于令牌桶的瞬时速率可能会double(eg:一直没有请求进来,令牌桶中已经有了三个令牌,同时桶外已经有三个令牌等待入桶,此时桶中三个令牌颁发出去之后,桶会立马被补满又可以颁发三个,瞬时速率就可以double变为6)

  • 自定义拦截器
    guava 或者 redis ( Sorted Set )

AP&CP

CAP:分布式系统的三要素:一致性、可用性、分区容错性。

因为现在的集群大多都要保证一半以上的节点存活,所以分区容错性是保障。P

CP:当系统想要满足一致性时,节点之前的同步力度就要大很多,甚至到了一定要同步的地步,就会出现部分节点可用,部分节点不可用(对于客户端来说这部分节点都是脏数据、落后数据、甚至拒绝连接)的情景,就满足不了可用性。

AP:当系统想要满足可用性时,就要舍弃强一致性,允许部分节点同步滞后,网络宕机。

BASE则是以牺牲强一致性为代价,追求系统的可用性和分区容错性,通过保证基本可用性、软状态和最终一致性来解决CAP问题。

具体来说,BASE包含以下三个概念:

  1. 基本可用性(Basically Available):系统在面对异常情况时,仍然可以保证核心功能的正常运行。即使某些服务出现故障或延迟,仍然能够接收并处理部分请求。
  2. 软状态(Soft State):允许系统在不同节点上存在数据副本的不一致状态,即系统中的数据可能存在短暂的不一致。
  3. 最终一致性(Eventual Consistency):系统经过一段时间的同步与协调后,最终会达到一致的状态。即系统中的数据副本最终会在合理的时间范围内达到一致。

举例来说,一个使用BASE理论的分布式系统可以采用异步复制方式处理数据一致性问题。当用户提交数据时,系统首先对数据写入本地节点,并立即返回成功响应,保证了基本可用性。然后,系统异步地将数据复制到其他节点,以实现最终一致性。

分布式事务

MQ

使用MQ解耦各个步骤里的业务分支事务,通过MQ来通信。

SETA

通过事务协调器来协调各分支事务的提交和回滚。

接口幂等性

1698744666816

新增和更新实现幂等:

  1. update 绝对值 而非操作符

    update t1 set cost= 500 where id=1; ✔
    update t2 set cost = cost - 500 where id=1;
    
  2. 新增

    • 使用唯一索引新增
    • Token&Redis (性能最好)
    • 分布式锁