双活和虚拟机BUG

这几天,发现几个BUG。
写一个伪代码(我pathon比较熟,就用python写个)

try:
    if 主机1正常 and 主机1内存占用比2低:
       主机1处理
    if  主机2正常 and 主机2内存占用比1低
       主机2处理
except:
    系统崩溃,告警

这个有个逻辑:当主机1比主机2性能差的时候,平均性能就更倾向于1。

这么说:如果主机1放在前面,那就主机1优先处理



举个例子:主机1装的是i3,主机2装的是i9 9900K,然后由于主机1内存占用低,所以优先主机1处理。

比如主机1处于不稳定状态(比如主机1网络不稳定、性能不稳定),系统稳定性和最差的系统一致,系统的最慢处理速度和最差性能一致。

只考虑负载均衡,而没有考虑性能……
所以,当弱网条件下,系统的性能会崩溃……

正常情况下,主机之间性能近似。但是如果有一个憨憨非要给一个性能差的主机作为多活,不是取性能平均值,而是波动性的性能变差。

第二个是虚拟机BUG,多个虚拟机采用一个CPU核心,当系统使用的时候会自动选择进程。
有的时候,系统不是这么分配核心的:123给A、456给B。而是:我给你核心,你们自己分。只要需求不超限,我就满足你。
当两个虚拟机不是“选择空闲核心”,而是“随机选择核心”。
当使用相同核心的时候,会导致系统卡顿。

比如说一个CPU的主频是3000。如果是多核心的话,如果有三个虚拟机同时使用相同线程,就会导致系统卡顿。
出现的问题是:内存占用低、系统占用低、性能占用低,但是三个子线程全部走相同核心,系统性能极低。

这个问题在于:有钱人肯定独占一个U,大型公司有自己的分配规则,尽量避免。但是有的时候,程序员没有考虑过CPU分配规则…

——————————————————————————————
还有一个问题:当一个服务优先选择端口,然后就不检测这个系统是否稳定。
也就是说:每个连接只走一次判断,选择最优节点。除非系统主动关闭连接,不然会一直挂着。
当系统崩溃的时候,客户端并不会尝试重新连接,而是反复的尝试、pin这个连接直到最大次数。
(看不懂的可以去看看三次握手四次挥手,服务端单方面停止服务无法实现停止连接)
如果有个人开开心心的配了一个200次尝试,一次0.5秒,这个系统就会卡死100秒。

如果这个主机不是崩溃,而是弱网时断时续,那么系统的稳定性会更差。系统不会主动选择更优秀的节点,反而是一次次的尝试。

比如说:连接成功率是20%,最大尝试次数20次。客户端会反反复复的进行尝试。导致大量服务超时。

猜你喜欢

转载自blog.csdn.net/weixin_45642669/article/details/113543250