云计算之路-阿里云上:OCS问题的进展以及11:30-11:50遇到的问题
(上图是今天出问题期间Web服务器性能监控图,紫色表示的是Request Execution Time)
昨天我们发布了一篇博客分享了我们这两天遇到的OCS(开放缓存服务)问题,详见云计算之路-阿里云上:愚人节被阿里云OCS愚。
后来,阿里云确认了问题的原因:在OCS升级过程中造成了写入的缓存数据过期时间丢失,只需删除这些有问题的缓存数据就不会再出现这个问题。
今天一大早访问低峰的时候,我们进行了清空OCS实例缓存的操作,解决了OCS缓存不能过期的问题。
今天中午11:30左右,园子访问速度突然变慢,上Web服务器一看——就看到了上面的性能监控器,大量请求执行缓慢。当时看到这样的图,真的很心痛——每个跳高的紫色都代表着用户的不满、愤怒,都是对用户体验的极大伤害,我们性能优化的一切努力都是为了降低这个紫色。而云基础实施服务的一点问题就会让我们的努力付之流水。
心痛归心痛,面对问题,唯一的选择是解决问题。
再看上面的性能监控图,Web服务器的CPU占用是正常的(红色线条),说明问题不在云服务器。
接着看数据库服务器(RDS)的状况——
(上图是RDS数据库连接数的监控数据)
出问题期间,RDS的数据库连接数突然飙上去了,这是一个很重要的线索——根据我们的应用场景,只有缓存服务出问题或者缓存命中率急骤下降,才能造成这样的数据库连接数突增。
而出现这样的问题,不仅仅是给数据库带来压力造成性能下降,更糟糕的是在从数据库中读取数据后还要再写入缓存,这也带来额外的性能影响。如果缓存一直有问题,就会不断地进行这样的循环:读缓存->没命中->读数据库->写缓存。。。这样一折腾,网站访问速度会大受影响
出问题时的场景很可能就是这样,所以我们不得不把怀疑对象又放到了阿里云OCS上。
紧接着就是查看应用程序的日志,我们在应用中进行了这样的记录——只要读取缓存超过100毫秒,就记录日志。出人意料的是日志中几乎没有超过100毫秒的缓存读取记录,也就是说出问题期间读取OCS缓存的速度是很快的。
难道也不是OCS引起的问题?。。。
关于缓存,还有一个我们不能忽视的地方——缓存命中率。
如果假设当时OCS的缓存命中出了问题——缓存中有数据却读取不到或者数据没有真正写入缓存,问题期间所发生的现象就都得到了合理的解释。
但是由于OCS管理控制台查看不到历史监控数据,看不到出问题期间的缓存命中率,我们无法验证这个猜测。只能等待阿里云的排查,目前阿里云还在排查中。
11:50左右,一切又恢复了正常。
在出问题的期间,给大家带来了麻烦,望大家谅解!