今天是愚人節,而我們卻被阿里雲OCS愚,很多地方的緩存一直不過期,造成很多頁面中的數據一直不更新。這篇博文將向您分享我們這兩天遇到的OCS問題。
阿里雲OCS(Open Cache Service)是阿里雲提供的開放緩存服務,簡單來說就是一個巨大的memcached。我們是從2013年12月12日開始使用阿里雲OCS的(詳見雲計算之路-阿里雲上:用上了開放緩存服務OCS)。OCS是保證網站性能的最重要的功臣之一,而隨着網站訪問量的快速增長,OCS更加舉足輕重。曾經有一個周末,我們因為清空了OCS實例緩存從而引發Web服務器CPU跑滿(詳見C#正則表達式引發的CPU跑高問題以及解決方法)。
最近我們在優化代碼以充分發揮OCS緩存的作用,盡量在OCS緩存中讀取數據(從緩存中讀取數據太快了,一般在10ms以內)。上個周末,我們發布了一次更新,准備在周一訪問高峰時觀察一下效果。結果OCS竟然出問題了。
周一早上9:44-09:46期間,我們感覺網站訪問速度有一點不對勁,一看Web服務器日志——大量的緩存讀取失敗日志。向阿里雲提交工單后得知OCS后端有台機器出了問題,造成讀取緩存超時。
周一下午13:16-13:31期間,OCS又出現了早上的狀況,而且OCS管理控制台顯示的監控數據完全不對。繼續向阿里雲提交工單后獲知當時OCS后端在進行緊急升級,進一步得知今天OCS正在進行商業化前的升級(4月3日OCS正式對外售賣,之前處於試用階段)。
今天,有園友向我們反饋首頁右側的“最新新聞”列表還是昨天的新聞,我們立即意識到OCS又出問題了。“最新新聞”列表用了OCS緩存, 緩存時間是5分鍾,正常情況下5分鍾后會自動過期,可現在OCS始終不讓它過期,所以讀取到的始終是舊數據。手工清除這個緩存項后,問題解決。
接着又有園友情反饋“首頁候選區”顯示的也是昨天的數據,我們一看也是同樣的OCS問題。我們進一步檢查,發現首頁右側的“48小時閱讀排行”、部分網站分類頁面、“所有隨筆”頁面也出現了同樣的OCS緩存不過期的問題。后來又有園友反饋,個人博客“我的隨筆”列表頁面也是同樣的問題。
雖然根據key手工清除對應的緩存項,可以解決問題,可是擺着我們前的是一個無解的難題——怎么找出那些應該過期而沒有過期的緩存項。唯一的解決方法是清空OCS實例緩存,這又是一個不可行的好方法。前面已經提到過,我們在訪問低峰的時候因為清空OCS實例緩存而引發Web服務器CPU跑滿,何況今天的訪問高峰期呢。
愚人節被愚,通常是一笑而過;而被阿里雲OCS愚,卻是一臉的無奈——要么是等到訪問低峰清空OCS實例緩存,等待下一次被愚;要么等待阿里雲幫我們真正地解決這個問題。
SLB(負載均衡)+ECS(虛擬機)+RDS(數據庫)+OCS(緩存)這是IaaS服務的4個支柱,而我們卻被這4根柱子都撞過。希望我們撞出的不是爛木頭,而是鋼筋混凝土。