故障公告阿里云抢占式实例服务器被释放引发全站故障

Posted 博客园官方博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了故障公告阿里云抢占式实例服务器被释放引发全站故障相关的知识,希望对你有一定的参考价值。

5月7日23:50-5月8日1:40期间,由于园子自建 k8s 集群所使用的大部分阿里云抢占式实例服务器被同时释放,造成200多个 pod 宕机,引发全站故障,由此给您带来很大的麻烦,请您谅解。我们会吸取教训,靠节约无法服务好用户,唯有自己变强。

5月7日23:50-5月8日1:40期间,由于园子自建 k8s 集群所使用的大部分阿里云抢占式实例服务器被同时释放,造成200多个 pod 宕机,引发全站故障,由此给您带来很大的麻烦,请您谅解。

在园子的日常运营成本中云资源费用占了1/3左右,为了节约成本,k8s 集群的 worker node 主要使用阿里云抢占式实例服务器,抢占式实例有随时被释放的风险,如果少部分服务器被释放影响不大,今天遇到的是罕见的大部分服务器被同时释放。

我们会吸取教训,靠节约无法服务好用户,唯有自己变强。

故障公告数据库服务器 CPU 近 100% 引发的故障

非常抱歉,今天上午 10:48 ~ 11:33 期间,我们所使用的数据库服务(阿里云 RDS 实例 SQL Server 2016 标准版)又出现了 CPU 近 100% 问题,由此给您带来麻烦,请您谅解。

这次刚开始出现 CPU 近 100% 问题时,没有造成大的影响,后来有段时间 CPU 降了下来,由于是访问高峰,我们没有敢立即进行主备切换,但 11:20 之后出现的 CPU 近 100% 问题对网站的正常访问影响越大越大,11:33 左右我们进行了主备切换后恢复了正常。

这次数据库 CPU 近 100% 期间,从阿里云 RDS CloudDBA 控制台看执行最多的是 3 条 SQL 语句,前2条是 EF Core 3.0 生成的包含 "IS NOT NULL" 的 SQL 语句,第3条是一个存储过程。

由于 .NET Core 3.1 正式版12月初即将发布,所以在上次故障之后我们没有立即将 EF Core 升级至 3.1 Preview 版,现在来看,不能等了,我们会尽快升级,消除 EF Core 生成的多余 "IS NOT NULL" 。

另外,阿里云数据库专家会帮我进一步分析数据库,看是否会发现更多线索。

【更新】

经过阿里云数据库专家的分析,这次 CPU 近 100% 问题依然是 EF Core 生成的 null checks SQL 语句引起的,这次的罪魁祸首是下面的 SQL

...
WHERE [b].[BlogID] = @__blogId_0
    AND @__blogId_0 IS NOT NULL
    AND [b].[IsExist] = CAST(? AS bit)
    AND ([b].[PostType] | @__type_1 = @__type_1
        AND ([b].[PostType] | @__type_1 IS NOT NULL
            AND @__type_1 IS NOT NULL)
        OR [b].[PostType] | @__type_1 IS NULL
        AND @__type_1 IS NULL)
    AND ([b].[PostConfig] & @__config_2 = @__config_2
        AND ([b].[PostConfig] & @__config_2 IS NOT NULL
            AND @__config_2 IS NOT NULL)
        OR [b].[PostConfig] & @__config_2 IS NULL
        AND @__config_2 IS NULL)
    AND [b0].[DiggCount] > ?
ORDER BY COALESCE([b0].[DiggCount], ?) DESC

以上是关于故障公告阿里云抢占式实例服务器被释放引发全站故障的主要内容,如果未能解决你的问题,请参考以下文章

故障公告数据库服务器 CPU 近 100% 造成全站故障,雪上加霜难上加难的三月

故障公告博客站点一台阿里云负载均衡被DDoS攻击

[故障公告]受阿里云部分ECS服务器故障影响,目前无法上传图片与文件

故障公告攻击式巨量并发请求再次来袭,引发博客站点故障

故障公告再次出现数据库 CPU 居高不下的问题以及找到了最可能的原因

云计算之路-阿里云上-容器服务:移除节点引发博问站点短暂故障