10月18日晚上 22:00 ,我们对处于灰度发布阶段的新版博客后台(Angular 8.2.7 + .NET Core 3.0)进行了一次发布操作,在发布后由于清除缓存 web api 的一个 bug 造成在发布后通过新版博客后台修改的博文无法访问(404错误);在发现问题后,我们回退至发布之前的版本,但是由于 appsettings.Production.json 配置文件的不一致造成回退后的版本出现 500 错误;在修复配置文件问题后,在 docker swarm 集群上部署时又遭遇奇怪的容器健康检查失败的问题,多次部署后才成功,直至 23:00 左右才恢复正常。
非常抱歉,这次故障给使用新版博客后台的园友带来了很大的麻烦,请您谅解。
在这次发布中包含一个比较大但却没有引起我们足够重视的变更,原先在博客后台代码中进行的清除 memcached 缓存(修改博文时清除对应的缓存)的操作改为调用 web api ,在实现清除缓存 web api 时由于没有足够重视在没有写集成测试覆盖的情况下就发布了,从而没有及时发现其中埋藏的一个 bug ,这个 bug 是由下面的 C# 代码引起的:
await _cacheService.RemoveAsync(CacheKeyManager.GetBlogPost(blogId.Value, postId.Value)); var post = await blogPostService.GetCachedPostById(blogId.Value, postId.Value); //... if (post.DisplayOnHomePage) { await CleanHomePostsList(blogId.Value); } //..