• 啊树
    置顶
    2022-02-07
    服务路由是指etcd eureka这样的注册组件么?还是建立在注册组件之上的服务?

    作者回复: 服务路由是指通过服务的唯一标识找到服务的ip和port,所以它就是服务注册发现~

    
    2
  • 努力努力再努力
    2022-02-08
    今天 才有空 整理,出本节的那天就看了 总结: 1. 负载均衡策略 1.1 无状态 1.2 半状态 1.3 全状态 2. 关键点: 2.1 公平性 2.2 正确性 (请求调度到能正确处理它的后端实例上) 3. 无状态的负载均衡 4. 负载均衡策略: 4.1 无状态 4.1.1 轮训 (请求的工作负载和实例的处理能力差异都较小的情况) 4.1.2 权重轮询 (解决实例的处理能力差异的问题) 4.1.3 FAIR 、随机、权重随机和最少链接数 (可以看gateway / ribbon) 4.2 半状态 (正确性由后端实例来保证 将请求按一定的策略进行路由,后端实例可以利用路由规则来进行优化) 4.2.1 hash 4.2.1.1 正确性: 当实例数发生变化的时候,正确性将会出现问题 4.2.1.2 公平性: 公平 4.2.2 一致性 Hash 4.2.2.1 一句话: 一个圆,但是可能把压力给到某一个节点,怎么办? 添加虚拟节点 4.3 全状态(正确性由路由服务 来保证 ) 应用场景: 1. 无状态 我们正常服务都是 2. 半状态 分库分表的时候 hash id 和 时间戳进行分,属于半状态 3. 全状态 想到了 Kafka的Controller模型 数据分片 / 正常分布式系统 leader/follower 的选举其实也算 全状态 思考题: 就是 分库分表之后 怎么扩容 hash的 属于半状态 1. 升级从库 (这种的最少迁移量) 2. 双写迁移
    展开

    作者回复: 赞~ 1、滚动升级从库,是从提高硬件能力的角度来扩容 2、双写迁移,不能减少迁移的量,只是让迁移平滑一点,一般是 2 倍扩容,比如之前分了 4 张表,那么扩容为分 8 张表,就只需要迁移一半的数据。

    共 2 条评论
    14
  • wd
    2022-02-07
    思考题:“我们利用 Hash 策略路由的 MySQL 集群,如果需要对集群进行扩容,我们怎么做才能在最少迁移数据的情况下,依然保证路由的正确性呢?” 是不是可以考虑采取每次倍增扩容的方式来减少必要的数据迁移?比如从两个实例扩容到四个实例,只需要迁移一半的数据到新节点上。

    作者回复: 是的,非常正确

    
    9
  • peter
    2022-02-07
    请教老师三个问题: Q1:SpringCloud的负载均衡组件,一个是Ribbon,一个是LoadBalencer,他们是有状态的还是无状态的? Q2:半状态负载均衡有哪些例子? Q3:全状态负载均衡等同于数据分片吗? 本文中有这样一句话:“其实全状态的负载均衡和数据分片是同一件事情”,那么,全状态负载均衡就等同于数据分片吗?如果不等同,还有其他什么情况?

    作者回复: Q1:SpringCloud Ribbon 是一个负责均衡组件,可以通过配置选择负载均衡算法:com.netflix.loadbalancer.****,比如com.netflix.loadbalancer.RandomRule 是随机算法,com.netflix.loadbalancer. RoundRobinRule 是轮询算法,这些算法可以是讨论是否有无状态的 Q2:mysql的 分区分表一般都是采用 hash 算法的半状态负载均衡 Q3:是的,数据分片的问题从负载均衡的角度来看,就是全状态负载均衡

    
    2
  • study的程序员
    2022-03-22
    感觉全状态和半状态有点难以区分,能否这样理解:半状态下,负载均衡只保证某一key路由到一个节点;全状态下,负载均衡要保证某一个key路由到固定的一个节点。

    作者回复: 是的,这是一个区别之一,全状态的粒度更细。

    
    1
  • Ronnie
    2022-02-24
    一致性哈希,不过一致性哈希也存在不公平性,这个可以通过虚拟节点来实现

    作者回复: 是的,还有一种处理公平性的策略,不过使用的比较少,它不引入虚拟节点,而是去调整节点在hash环上的位置(节点在hash环上的位置不是通过hash计算来确定,而是维护好节点的位置信息),只不过这种策略使用比较少一点

    
    1
  • Jxin
    2022-02-23
    还有自适应负载均衡。虽然这玩意在应对高并发时并不是很靠谱。

    作者回复: 是的,容易导致雪崩

    
    1
  • Noah
    2022-02-16
    陈老师,您好,关于“请求的状态”中的“状态”的定义,我感到有点困惑,文中以查询用户的年龄作为有状态的请求的示例,请问这里的状态指的是什么?用户的年龄数据么?您能否给出一个“不带状态“的请求示例呢?

    作者回复: 这个状态是由后端提供服务的实例是否对等来决定的。 文中查询用户的年龄的例子,是假设在用户信息是按一定的策略存储在后端的服务上,每一个后端服务只存储一部分。 如果用户的年龄信息是存储在一个外部的数据库中,所有的后端服务实例都可以访问到,那么这些后端服务的对等的,这个时候,请求就是无状态的。

    共 2 条评论
    1
  • Jay
    2022-05-14
    思考题的答案,作者是否可以给下呢?不是后端开发,但对分布式技术很感兴趣,感觉思考题里面可能需要后端方面的背景知识才能回答呢……

    作者回复: 好的,这几天就会提供

    
    
  • 花花大脸猫
    2022-05-31
    思考题应该是以2的幂次方倍数进行扩容,其实跟最新的hashmap扩容原理一样,可以有效降低元素的迁移数量
    
    2