最佳工程實(shí)踐—Oracle數(shù)據(jù)庫(kù)遷移割接實(shí)錄

概要

本次分享將從一次實(shí)際的數(shù)據(jù)庫(kù)割接案例出發(fā),通過(guò)介紹系統(tǒng)遷移過(guò)程中的項(xiàng)目背景、數(shù)據(jù)同步方案窘面、工具開(kāi)發(fā)、仿真測(cè)試的止、割接心理素質(zhì)等方面展開(kāi),管窺工程實(shí)踐過(guò)程中鮮為人知的幕后故事着撩。

項(xiàng)目背景

某企業(yè)支撐系統(tǒng)诅福,已經(jīng)連續(xù)服務(wù)七年有余。算起來(lái)比我的工作年限還要長(zhǎng)拖叙。
歷年工程中氓润,硬件、軟件薯鳍、運(yùn)營(yíng)團(tuán)隊(duì)都更新?lián)Q了好幾茬咖气,單獨(dú)系統(tǒng)核心數(shù)據(jù)庫(kù)—— 一臺(tái)小型機(jī)搭載Oracle 10g,附加一套磁盤(pán)陣列挖滤,從來(lái)沒(méi)有動(dòng)過(guò)崩溪。隨著近年的業(yè)務(wù)暴漲、負(fù)載上升斩松、硬件老化伶唯,服務(wù)器、磁盤(pán)都時(shí)有故障發(fā)生砸民,負(fù)載水平線(xiàn)逼近極限抵怎,故障率還有加速抬頭的趨勢(shì)奋救。整個(gè)運(yùn)營(yíng)團(tuán)隊(duì)面臨了巨大的客戶(hù)壓力岭参,提升系統(tǒng)穩(wěn)定性的巨大挑戰(zhàn)擺在了大家面前。

數(shù)據(jù):CPU平均空閑率26.7% 尝艘,隔三差五就有空閑率逼近0%的異常告警單演侯,繁忙的磁盤(pán)IO。


割接前_io_error

主要困難

困難1: 團(tuán)隊(duì)大動(dòng)蕩
我是在“天塌地陷”的不利局面中加入到項(xiàng)目組背亥。原運(yùn)營(yíng)團(tuán)隊(duì)秒际,包括但不限于資深項(xiàng)目經(jīng)理悬赏、技術(shù)負(fù)責(zé)人、多名工程師等娄徊,先后因各種原因闽颇,在很短的時(shí)間內(nèi)集中離職了。在接手之前寄锐,我對(duì)該項(xiàng)目一無(wú)所知兵多,接手以后很短暫的交接過(guò)程中,很難獲取多少有價(jià)值的信息橄仆。

此外剩膘,該系統(tǒng)連續(xù)突發(fā)重大故障,項(xiàng)目組不但要解決問(wèn)題盆顾,還要面臨巨大的心理壓力怠褐、商務(wù)壓力,整個(gè)團(tuán)隊(duì)疲憊不堪您宪、士氣低落奈懒。每一次重大故障,所有人都得沒(méi)日沒(méi)夜地干活宪巨,處理好以后還需要寫(xiě)匯報(bào)材料筐赔,匯報(bào)之后也未必能得到客戶(hù)的肯定。甚至在某種程度上說(shuō)揖铜,急劇增長(zhǎng)的故障率茴丰,進(jìn)一步刺激、助漲了離職率天吓。正如一位哲人所說(shuō):

降低故障率是提升團(tuán)隊(duì)幸福指數(shù)的首要保障贿肩。— 弗拉基米.耶維奇.嚴(yán)

困難2: 拓?fù)浯笳{(diào)整
在技術(shù)上龄寞,本次遷移的另一個(gè)難點(diǎn)是系統(tǒng)拓?fù)浣Y(jié)構(gòu)的調(diào)整汰规。系統(tǒng)的拓?fù)浣Y(jié)構(gòu)最初是星型:以數(shù)據(jù)庫(kù)和應(yīng)用服務(wù)器為核心,外掛近100臺(tái)各類(lèi)采集服務(wù)器物邑。采集服務(wù)器的網(wǎng)絡(luò)又分為DCN網(wǎng)和公網(wǎng)兩個(gè)部分溜哮。
星型結(jié)構(gòu)雖然簡(jiǎn)單易用,但是安全隱患也非常明顯色解。在早期建設(shè)的時(shí)候茂嗓,規(guī)范尚未健全,都是在核心服務(wù)器中配置雙網(wǎng)卡科阎,連通內(nèi)網(wǎng)述吸、外網(wǎng)。在本期工程中锣笨,非常明確必須要完成內(nèi)外網(wǎng)分離改造蝌矛。

困難3: 安全一票否決
Oracle 部署主版本由10g 升級(jí)到 11g道批,加強(qiáng)管理訪(fǎng)問(wèn)權(quán)限。最大限度地提高安全性入撒,口令60天更換一次隆豹,同時(shí)要求不能因?yàn)楦鼡Q口令而中斷業(yè)務(wù);如果出現(xiàn)連續(xù)的錯(cuò)誤口令訪(fǎng)問(wèn)茅逮,甚至可以不惜鎖定數(shù)據(jù)庫(kù)噪伊。
從安全的角度看,類(lèi)似這些規(guī)定可以降低風(fēng)險(xiǎn)氮唯。但是在軟件架構(gòu)規(guī)范化不足鉴吹、自動(dòng)化嚴(yán)重不足的條件下,卻給我們的遷移工作增加了難度惩琉。

遷移前準(zhǔn)備

基于上述三大問(wèn)題豆励,在正式遷移之前主要做了下列幾項(xiàng)工作:

  1. 加強(qiáng)監(jiān)控手段,降低日常故障率瞒渠。梳理需要監(jiān)控的基礎(chǔ)指標(biāo)和業(yè)務(wù)指標(biāo)良蒸,側(cè)重關(guān)鍵業(yè)務(wù)可用性。例如伍玖,某業(yè)務(wù)的正常調(diào)度周期是3小時(shí)嫩痰,部署模擬腳本,將模擬腳本的調(diào)度周期提高到5分鐘一次甚至更高窍箍,通過(guò)高頻率的調(diào)用執(zhí)行串纺,主動(dòng)觸發(fā)風(fēng)險(xiǎn)點(diǎn),一些隱藏的問(wèn)題就比較容易暴露出來(lái)椰棘。
  2. 重點(diǎn)培訓(xùn)新人纺棺,穩(wěn)定隊(duì)伍。本質(zhì)上說(shuō)邪狞,這次遷移工作的首要任務(wù)不在技術(shù)祷蝌、也不在數(shù)據(jù),而在于人帆卓。上一個(gè)團(tuán)隊(duì)整體流失巨朦,新補(bǔ)充的人員又完全沒(méi)有相關(guān)經(jīng)驗(yàn),可以說(shuō)是從0開(kāi)始剑令『龋基于該階段的特殊情況,我選擇了實(shí)質(zhì)性暫停遷移工作尚洽,而把主要的精力投入到人員培訓(xùn)和組織重建上來(lái)悔橄。關(guān)于這塊內(nèi)容比較復(fù)雜,實(shí)際是另外一個(gè)主題腺毫,計(jì)劃后續(xù)再發(fā)布癣疟,敬請(qǐng)關(guān)注。
  3. 梳理全局視圖潮酒。全局視圖包括兩個(gè)維度:技術(shù)和人睛挚。
    第一,重繪系統(tǒng)架構(gòu)圖急黎。部分參考現(xiàn)有文檔資料扎狱,但是主要立足于自主調(diào)研。繪制的過(guò)程勃教,即是收集淤击、整理的過(guò)程,也是制定遷移方案的思考過(guò)程故源。唯有自己動(dòng)手污抬,才能加深認(rèn)識(shí),做到胸有成竹绳军。
    第二印机,重新梳理系統(tǒng)干系人。主要通過(guò)大量接觸各方面的領(lǐng)導(dǎo)门驾、配合部門(mén)以及第三方廠家射赛。個(gè)人工作經(jīng)歷方面,獨(dú)立工作的場(chǎng)景居多奶是,自己能直接控制的情況居多楣责,不太需要理會(huì)復(fù)雜的部門(mén)關(guān)系、人際關(guān)系聂沙。這項(xiàng)工作對(duì)于某些人來(lái)說(shuō)比較容易腐魂,但是對(duì)我而言,其實(shí)是有過(guò)一段比較困難的過(guò)程逐纬。

遷移前準(zhǔn)備:數(shù)據(jù)同步

主要實(shí)現(xiàn)方案:OGG + DBLINK + 自主定制遷移程序蛔屹。

Oracle Golden Gate
在最早的方案中,我們打算完全依賴(lài)Oracle Golden Gate (以下簡(jiǎn)稱(chēng)OGG)豁生。

ogg workflow

但是在實(shí)驗(yàn)階段發(fā)現(xiàn)兔毒,實(shí)施該方案有其限制條件。
首先甸箱,歷史遺留系統(tǒng)有龐大的歷史數(shù)據(jù)育叁,如果都用OGG,無(wú)法確保新庫(kù)的及時(shí)性芍殖、一致性豪嗽。其次、由于管理的不規(guī)范,存在很多該做分區(qū)而沒(méi)有做分區(qū)的大表龟梦,而且迭代過(guò)程中本身會(huì)產(chǎn)生數(shù)量眾多隐锭、非必要的表,一時(shí)還真的很難分離出來(lái)计贰。

EXP/IMP

連接源庫(kù)執(zhí)行:

exp userid=username/pass 
    file=/oradata5/ogg/dp/part.dmp 
    log=/oradata5/ogg/dp/part.log 
    buffer=819200 feedback=10000 GRANTS=n INDEXES=n COMPRESS=n RECORD=n TRIGGERS=n  CONSTRAINTS=n  
    parfile=/oradata5/ogg/dp/part.par
    
vi part.par
tables=(
    TABLE_A:P_20160531,
    TABLE_B:P_20160526,
    TABLE_C:P_20160526
)

連接目標(biāo)庫(kù)執(zhí)行(注意NLS_LANG保持一致):

imp username/pass@dbnms file=part.dmp buffer=819200 log=part_imp.log ignore=y

** DATABASE LINK **
dblink建立之后钦睡,連接其中一個(gè)庫(kù)就可以對(duì)兩個(gè)庫(kù)執(zhí)行SQL,它的優(yōu)勢(shì)是提供了舊庫(kù)->新庫(kù)之間的連接通道躁倒。也就僅僅是個(gè)通道而已荞怒。

insert into TableA(….)  select … from TableA@linkname where colltime=‘’;

**定制遷移程序 **在某些特殊情況下,無(wú)論使用 OGG 和 DBLINK 都會(huì)存在一定問(wèn)題秧秉。
例如A表是大量的原始數(shù)據(jù)褐桌,每天一個(gè)分區(qū)象迎,每個(gè)分區(qū)約為4000萬(wàn)條記錄荧嵌,一個(gè)月就有1.2億條。由于業(yè)務(wù)上非常重要挖帘,該表的數(shù)據(jù)必須遷移到新庫(kù)完丽。這種情況下,我們就只能自己編寫(xiě)遷移腳本拇舀,實(shí)現(xiàn)數(shù)據(jù)推送逻族。

堅(jiān)持“少量、多批次骄崩、并行”的原則聘鳞。首先,控制每個(gè)批次提交的記錄數(shù)要拂,將每個(gè)分區(qū)4000萬(wàn)的數(shù)據(jù)抠璃,切分成10萬(wàn)一份的小切片,這樣即使失敗也能快速重試脱惰,還能杜絕UNDO表空間暴漲(例如exp/imp整個(gè)分區(qū)的方式)搏嗡。基于小粒度的切片拉一,進(jìn)一步就可以實(shí)現(xiàn)多批次采盒、多進(jìn)程的并行推送,從而保證每個(gè)commit和時(shí)間單元的推送規(guī)模都做到failed范圍可控蔚润、同步進(jìn)度可視磅氨。

遷移前準(zhǔn)備:工具開(kāi)發(fā) & 測(cè)試

  1. 轉(zhuǎn)發(fā)入庫(kù)組件
    在跳轉(zhuǎn)服務(wù)器起守護(hù)進(jìn)程,監(jiān)聽(tīng)特定端口請(qǐng)求嫡纠,再“bond”到下一跳服務(wù)器烦租。邏輯比較簡(jiǎn)單延赌,偽代碼如下:
public void run() {
    
        try{    
                
                ServerSocket serverSocket = new ServerSocket(local_port);
                
                while (true) {
                    Socket socket = serverSocket.accept();              
                    ProxyWorker worker = new ProxyWorker(socket, remote_ip, remote_port);           
                    worker.start();
                }
                
        }catch(Exception e) {
                //====異常處理  
        }
}

從實(shí)現(xiàn)的角度看,再網(wǎng)絡(luò)設(shè)備上配置轉(zhuǎn)發(fā)的話(huà)叉橱,效率應(yīng)該會(huì)更高挫以,但是客戶(hù)只扔給你服務(wù)器,其它讓你自己實(shí)現(xiàn)赏迟。誰(shuí)讓我們是乙方呢屡贺。不過(guò)從后來(lái)的效果上看還不錯(cuò)蠢棱,基于自主實(shí)現(xiàn)的轉(zhuǎn)發(fā)機(jī)制锌杀,讓我們可以記錄每一個(gè)數(shù)據(jù)庫(kù)連接的時(shí)間消耗、“看到”當(dāng)前連接泻仙,為更細(xì)粒度的負(fù)載分析糕再、troubleshooting等提供了更多可能。

  1. 割接工具
    所有可能要遇到的操作玉转,即使是非常簡(jiǎn)單的一句命令突想,能固化的堅(jiān)決固化,能批量執(zhí)行的堅(jiān)決批量執(zhí)行究抓,因?yàn)閷?duì)割接來(lái)說(shuō)猾担,最寶貴的是時(shí)間。特別是遺留系統(tǒng)刺下,配置不一致的地方很多绑嘹,開(kāi)發(fā)工具的過(guò)程,也是檢查橘茉、提升系統(tǒng)一致性的過(guò)程工腋。
    系統(tǒng)配置收集器;
    轉(zhuǎn)發(fā)路徑監(jiān)視( 外網(wǎng)跳板到內(nèi)網(wǎng)跳板畅卓、跳板到數(shù)據(jù)庫(kù)等)擅腰;
    割接前預(yù)配置/割接后檢查工具;
    連接 切換 & 回退 工具等(事實(shí)將會(huì)證明每一行回退代碼都是非常必要的)翁潘;
    測(cè)試工具(批量插入/刪除數(shù)據(jù)趁冈,對(duì)比分析SQL執(zhí)行的時(shí)間長(zhǎng)度);
    制作割接后檢查驗(yàn)證清單拜马。
割接流程
  1. 高仿真測(cè)試
    為了在遷移之前確認(rèn)新庫(kù)的可用性渗勘,我們采用了雙庫(kù)并行的策略。
    即在所有采集服務(wù)器開(kāi)啟兩個(gè)入庫(kù)進(jìn)程一膨,讓一份原始結(jié)果同時(shí)入兩套數(shù)據(jù)庫(kù)呀邢。最大限度在沒(méi)有額外測(cè)試系統(tǒng)的條件下,利用現(xiàn)有資源豹绪,模擬仿真正式生產(chǎn)環(huán)境的并發(fā)壓力价淌,提前優(yōu)化新庫(kù)參數(shù)設(shè)置申眼,也同時(shí)完成負(fù)載均衡、單點(diǎn)故障驗(yàn)證測(cè)試蝉衣。

并不是所有的程序都能輕易的實(shí)現(xiàn)雙庫(kù)并行括尸,有的可能只要稍微調(diào)整配置文件,有些可能就必須修改代碼病毡,還有的可能就做不到濒翻。從這個(gè)角度觀察,第一種應(yīng)該就是好的代碼啦膜,靈活適應(yīng)各類(lèi)場(chǎng)景有送。靈活性低的應(yīng)用程序往往缺乏設(shè)計(jì),甚至都沒(méi)有做到配置-代碼分離僧家,存在大量侵入式編程等雀摘。

沒(méi)有一帆風(fēng)順

第一次割接失敗了!

失敗的體驗(yàn)
第一次割接之后八拱,系統(tǒng)各項(xiàng)功能正如我們預(yù)計(jì)的那樣順利運(yùn)行阵赠。就在我們準(zhǔn)備慶祝成功的時(shí)候,幾項(xiàng)關(guān)鍵業(yè)務(wù)的吞吐量卻急劇下降肌稻。初步判斷是性能問(wèn)題清蚀,因?yàn)槊看芜B接時(shí)延飆升了100多倍,高達(dá)秒級(jí)爹谭,基本是不可用的枷邪。
人工排查幾次以后,看到了大量的掛起進(jìn)程旦棉,一堆的鎖表齿风。而且失敗來(lái)源遍布一多半的服務(wù)器。雖然不想承認(rèn)绑洛,但是我們不得不做出回退的決定救斑。

**萬(wàn)事留后路 **
割接失敗是需要承擔(dān)很大壓力的。這次割接是大家都期待很久的真屯,為了幾分鐘的操作脸候,用戶(hù)和我們整個(gè)團(tuán)隊(duì)都付出了很大的努力,調(diào)動(dòng)了方方面面的資源參與進(jìn)來(lái)绑蔫。
如果說(shuō)有什么能稍感欣慰的話(huà)运沦,那就是我們遍歷了各種可能,幾乎成功配深,在不可知的情況出現(xiàn)之后携添,還能趕在割接窗口結(jié)束之前,快速回退篓叶。這主要得益于前期準(zhǔn)備方案時(shí)烈掠,特別考慮了最壞的情況羞秤,認(rèn)真演練了回退流程。
這種體驗(yàn)與技術(shù)關(guān)系不大左敌,來(lái)自于勇氣——無(wú)論是正確的瘾蛋,還是錯(cuò)誤的決定。

幽靈進(jìn)程
事后篩查發(fā)現(xiàn)矫限,導(dǎo)致割接失敗的是一個(gè)監(jiān)測(cè)程序——不在生產(chǎn)程序清單里面哺哼,沒(méi)有讀統(tǒng)一配置,自帶定時(shí)調(diào)度叼风,零散分布在一些機(jī)器上取董,早已經(jīng)被人遺忘。

新數(shù)據(jù)庫(kù)的版本是Oracle 11g 咬扇。為了提高安全性甲葬,防止暴力破解數(shù)據(jù)庫(kù)中用戶(hù)的密碼廊勃,Oracle默認(rèn)提供了一種機(jī)制:延長(zhǎng)失敗嘗試響應(yīng)懈贺。它的策略是:在連續(xù)使用錯(cuò)誤密碼反復(fù)嘗試登錄時(shí),從第四次錯(cuò)誤嘗試開(kāi)始坡垫,每次增加1秒的延遲梭灿,最長(zhǎng)延遲目前是10秒。使用這種手段可以相對(duì)比較有效的防治用戶(hù)密碼的暴力破解冰悠。

第一次割接后堡妒,歷史遺留程序瞬間就觸發(fā)該機(jī)制,導(dǎo)致應(yīng)用不可用溉卓。

01.png

02.png

03.png

割接后

我們后來(lái)是如何發(fā)現(xiàn)幽靈進(jìn)程的呢皮迟?
沒(méi)有什么絕招。單曲播放:“完善配置檢查工具->模擬執(zhí)行->發(fā)現(xiàn)解決問(wèn)題”桑寨。
直到你清楚地理解系統(tǒng)里的每一個(gè)進(jìn)程伏尼,幽靈自然無(wú)所遁形。一切都是功到自然成尉尾。
最后的割接非常平靜爆阶。

割接后的數(shù)據(jù)庫(kù)CPU利用率

總結(jié)

雖然這次的遷移不甚完美,事情本身也談不上宏大沙咏,簡(jiǎn)短的一篇更不可能窮舉所有的問(wèn)題和細(xì)節(jié)辨图,
但是有幾點(diǎn)思考還是想和大家交流:

  1. 知識(shí)圖譜
    就以數(shù)據(jù)同步技術(shù)為例,網(wǎng)上關(guān)于exp/imp肢藐,OGG , DBLINK等的資料可謂多如牛毛故河,然而對(duì)于新手來(lái)說(shuō)并沒(méi)有什么用!因?yàn)檫@些材料頂多只能算縮略版單一技術(shù)手冊(cè)(基本套路:原理吆豹、安裝鱼的、配置杉女、運(yùn)行,簡(jiǎn)單DEMO)鸳吸,無(wú)法展現(xiàn)不同工具在技術(shù)全局中的位置和關(guān)聯(lián)關(guān)系熏挎,更不要說(shuō)真實(shí)現(xiàn)場(chǎng)中的系統(tǒng)架構(gòu)和決策經(jīng)驗(yàn)部分。

  2. 變通
    開(kāi)始設(shè)計(jì)方案時(shí)想到的幾個(gè)大難題晌砾,都是通過(guò)替代方案實(shí)現(xiàn)的:奇葩的內(nèi)外網(wǎng)分離方案坎拐,與IT部門(mén)關(guān)于權(quán)限問(wèn)題的艱難談判,數(shù)據(jù)復(fù)制過(guò)程中及時(shí)性的要求...... 真實(shí)割接過(guò)程中养匈,現(xiàn)場(chǎng)壓力狀態(tài)的進(jìn)退困境哼勇。到處都需要權(quán)衡、選擇呕乎。
    決策是一件非常艱難的事情积担,受到多種因素的制約,最終的決策是一個(gè)各種利益妥協(xié)的結(jié)果猬仁。正如另一位資深哲人所說(shuō):“項(xiàng)目經(jīng)理首先要學(xué)會(huì)變通帝璧。——瓦西里.楊” 誠(chéng)如斯言湿刽,天下武功的烁,無(wú)堅(jiān)不摧,唯變不破诈闺。

  3. 韌性
    按照最初的方案渴庆,我其實(shí)并不負(fù)責(zé)這項(xiàng)工作,后來(lái)就算參與進(jìn)來(lái)雅镊,也并不負(fù)責(zé)主導(dǎo)襟雷。應(yīng)該說(shuō)起初也有僥幸心理,希望有其他人來(lái)背這個(gè)鍋仁烹。為了這次遷移耸弄,前面已經(jīng)生生嚇走了好幾撥人。從技術(shù)上分析晃危,我以前沒(méi)怎么搞過(guò)數(shù)據(jù)庫(kù)叙赚,并不具備任何優(yōu)勢(shì)。如果說(shuō)還有一點(diǎn)可以憑借的東西僚饭,我感覺(jué)是韌性震叮。面對(duì)未知的恐懼,敢于直面鳍鸵;面對(duì)不確定的方案苇瓣,不斷在嘗試;面對(duì)失敗的后果偿乖,坦然接受击罪。

事情能做成哲嘲,感覺(jué)很好,我喜歡干成事的感覺(jué)媳禁。

掌握分散知識(shí)點(diǎn)=>成體系實(shí)踐應(yīng)用
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末眠副,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子竣稽,更是在濱河造成了極大的恐慌囱怕,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件毫别,死亡現(xiàn)場(chǎng)離奇詭異娃弓,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)岛宦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)台丛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人砾肺,你說(shuō)我怎么就攤上這事挽霉。” “怎么了债沮?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵炼吴,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我疫衩,道長(zhǎng),這世上最難降的妖魔是什么荣德? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任闷煤,我火速辦了婚禮,結(jié)果婚禮上涮瞻,老公的妹妹穿的比我還像新娘鲤拿。我一直安慰自己,他們只是感情好署咽,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布近顷。 她就那樣靜靜地躺著,像睡著了一般宁否。 火紅的嫁衣襯著肌膚如雪窒升。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,692評(píng)論 1 305
  • 那天慕匠,我揣著相機(jī)與錄音饱须,去河邊找鬼。 笑死台谊,一個(gè)胖子當(dāng)著我的面吹牛蓉媳,可吹牛的內(nèi)容都是我干的譬挚。 我是一名探鬼主播,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼酪呻,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼减宣!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起玩荠,我...
    開(kāi)封第一講書(shū)人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤蚪腋,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后姨蟋,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體屉凯,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年眼溶,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了悠砚。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡堂飞,死狀恐怖灌旧,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情绰筛,我是刑警寧澤枢泰,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站铝噩,受9級(jí)特大地震影響衡蚂,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜骏庸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一毛甲、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧具被,春花似錦玻募、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至叮叹,卻和暖如春艾栋,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背衬横。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工裹粤, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓遥诉,卻偏偏與公主長(zhǎng)得像拇泣,于是被迫代替她去往敵國(guó)和親家凯。 傳聞我的和親對(duì)象是個(gè)殘疾皇子隘世,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容