日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

记录一次生产发布事件——(简单的非空验证也能引发大问题)

發(fā)布時(shí)間:2023/12/4 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 记录一次生产发布事件——(简单的非空验证也能引发大问题) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

事件經(jīng)過(guò)

下午四點(diǎn),發(fā)布生產(chǎn)g環(huán)境(生產(chǎn)環(huán)境m為正式環(huán)境,g為內(nèi)測(cè)環(huán)境)。這時(shí)測(cè)試有人提出“服務(wù)器忙”。聽(tīng)到這里我趕緊翻了翻內(nèi)測(cè)日志,發(fā)現(xiàn)了最熟悉的老朋友——未將對(duì)象引用設(shè)置到對(duì)象的實(shí)例。問(wèn)題出現(xiàn)在如下代碼上。(我下面附上了偽代碼,大家可以看看下面的代碼有沒(méi)有問(wèn)題,當(dāng)時(shí)我看了很久才發(fā)現(xiàn)問(wèn)題所在)


public AccountInfo GetAccountInfo(){

AccountInfo info=cache.GetCache();
if(info!=null)
{
return info;
}
info=SOAService.GetInfo();
if(info!=null){
cache.SetCache(info);
return info;
}
return null;
}
public class SOAService()
{

public static AccountInfo GetInfo()
{

SOAClient client=SOAClient.GetClient();

Account account= client.GetAccountInfo();
if(account!=null){
AccountInfo info=new AccountInfo();
info.xx=account.xx;

info.Test=account.Test??string.empty;
return info;
}
return null;
}
}


public class AccountInfo{

private string name;



private string test;


public string Name{
get { return this.name; }
set { this.name=value; }
}


public string Test{
get { return this.test; }
set { this.test=value; }
}
}

在代碼中觀察許久仍沒(méi)有發(fā)現(xiàn)問(wèn)題。這時(shí)測(cè)試一句話(huà)提醒了我,“我看m環(huán)境沒(méi)有問(wèn)題”。靈光一閃,原來(lái)測(cè)試先從m環(huán)境登錄,瀏覽了一圈頁(yè)面后,已經(jīng)緩存了AccountInfo,但是m環(huán)境此時(shí)是沒(méi)有新增字段Test的,此時(shí)切換到g環(huán)境(我們的m環(huán)境,g環(huán)境對(duì)應(yīng)緩存數(shù)據(jù)都是一樣的,區(qū)別僅僅是應(yīng)用服務(wù)器不同),獲取賬戶(hù)信息時(shí)會(huì)直接從Cache中讀出來(lái),然后accountInfo.Test在用之前并沒(méi)有判空,所以...未將對(duì)象引用設(shè)置到對(duì)象的實(shí)例。于是乎得意的跟測(cè)試說(shuō),你登錄后別再m環(huán)境操作,直接切到g環(huán)境,就可以了,等發(fā)m不會(huì)有問(wèn)題的。果不其然,測(cè)試按我說(shuō)的做了不再報(bào)錯(cuò)。

如果你以為事情就這么結(jié)束,那就錯(cuò)了。請(qǐng)?jiān)徫夷秦i友蒙了心的傻叉操作。不久,g環(huán)境驗(yàn)證無(wú)誤,開(kāi)始往m環(huán)境發(fā)布。起初未見(jiàn)異常,當(dāng)發(fā)了集群大概三分之一節(jié)點(diǎn)的時(shí)候,大量異常突然襲來(lái),瞬間監(jiān)控開(kāi)始報(bào)警。一看日志滿(mǎn)屏的老朋友。緊急關(guān)頭得虧腦子反應(yīng)快,緊急回滾代碼。靜下心來(lái)腦子一想,生產(chǎn)用戶(hù)本身處于登錄狀態(tài),有使用緩存。剛剛出現(xiàn)問(wèn)題沒(méi)去處理,真是悔之晚矣!于是緊急修復(fù)。增加使用前判空,問(wèn)題終于解決。

事件教訓(xùn)

  • 對(duì)于程序中大量使用緩存的系統(tǒng),開(kāi)發(fā)時(shí)一定要考慮好緩存。(這個(gè)系統(tǒng)一些不合理的緩存設(shè)計(jì)坑的我苦不堪言)

  • 對(duì)于測(cè)試中的每一個(gè)問(wèn)題都要認(rèn)真對(duì)待

  • 紙上得來(lái)終覺(jué)淺——背的滾瓜爛熟的,緩存穿透、雪崩,緩存更新、程序非空驗(yàn)證。實(shí)戰(zhàn)起來(lái)還是不夠用

  • 敬畏每一次生產(chǎn)環(huán)境的發(fā)布


總結(jié)

以上是生活随笔為你收集整理的记录一次生产发布事件——(简单的非空验证也能引发大问题)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。