25 | 高可用存儲(chǔ)架構(gòu):雙機(jī)架構(gòu)

存儲(chǔ)高可用方案的本質(zhì)都是通過將數(shù)據(jù)復(fù)制到多個(gè)存儲(chǔ)設(shè)備磕洪,通過數(shù)據(jù)冗余的方式來(lái)實(shí)現(xiàn)高可用,其復(fù)雜性主要體現(xiàn)在如何應(yīng)對(duì)復(fù)制延遲和中斷導(dǎo)致的數(shù)據(jù)不一致問題。因此额港,對(duì)任何一個(gè)高可用存儲(chǔ)方案,我們需要從以下幾個(gè)方面去進(jìn)行思考和分析:

數(shù)據(jù)如何復(fù)制歧焦?

各個(gè)節(jié)點(diǎn)的職責(zé)是什么移斩?

如何應(yīng)對(duì)復(fù)制延遲?

如何應(yīng)對(duì)復(fù)制中斷绢馍?

常見的高可用存儲(chǔ)架構(gòu)有主備向瓷、主從、主主舰涌、集群猖任、分區(qū),每一種又可以根據(jù)業(yè)務(wù)的需求進(jìn)行一些特殊的定制化功能瓷耙,由此衍生出更多的變種朱躺。由于不同業(yè)務(wù)的定制功能難以通用化刁赖,今天我將針對(duì)業(yè)界通用的方案,來(lái)分析常見的雙機(jī)高可用架構(gòu):主備长搀、主從乾闰、主備 / 主從切換和主主。

主備復(fù)制

主備復(fù)制是最常見也是最簡(jiǎn)單的一種存儲(chǔ)高可用方案盈滴,幾乎所有的存儲(chǔ)系統(tǒng)都提供了主備復(fù)制的功能涯肩,例如 MySQL、Redis巢钓、MongoDB 等病苗。

1. 基本實(shí)現(xiàn)

下面是標(biāo)準(zhǔn)的主備方案結(jié)構(gòu)圖:

其整體架構(gòu)比較簡(jiǎn)單,主備架構(gòu)中的“備機(jī)”主要還是起到一個(gè)備份作用症汹,并不承擔(dān)實(shí)際的業(yè)務(wù)讀寫操作硫朦,如果要把備機(jī)改為主機(jī),需要人工操作背镇。

2. 優(yōu)缺點(diǎn)分析

主備復(fù)制架構(gòu)的優(yōu)點(diǎn)就是簡(jiǎn)單咬展,表現(xiàn)有:

對(duì)于客戶端來(lái)說(shuō),不需要感知備機(jī)的存在瞒斩,即使災(zāi)難恢復(fù)后破婆,原來(lái)的備機(jī)被人工修改為主機(jī)后,對(duì)于客戶端來(lái)說(shuō)胸囱,只是認(rèn)為主機(jī)的地址換了而已祷舀,無(wú)須知道是原來(lái)的備機(jī)升級(jí)為主機(jī)。

對(duì)于主機(jī)和備機(jī)來(lái)說(shuō)烹笔,雙方只需要進(jìn)行數(shù)據(jù)復(fù)制即可裳扯,無(wú)須進(jìn)行狀態(tài)判斷和主備切換這類復(fù)雜的操作。

主備復(fù)制架構(gòu)的缺點(diǎn)主要有:

備機(jī)僅僅只為備份谤职,并沒有提供讀寫操作饰豺,硬件成本上有浪費(fèi)。

故障后需要人工干預(yù)允蜈,無(wú)法自動(dòng)恢復(fù)冤吨。人工處理的效率是很低的,可能打電話找到能夠操作的人就耗費(fèi)了 10 分鐘陷寝,甚至如果是深更半夜锅很,出了故障都沒人知道。人工在執(zhí)行恢復(fù)操作的過程中也容易出錯(cuò)凤跑,因?yàn)檫@類操作并不常見爆安,可能 1 年就 2、3 次仔引,實(shí)際操作的時(shí)候很可能遇到各種意想不到的問題扔仓。

綜合主備復(fù)制架構(gòu)的優(yōu)缺點(diǎn)褐奥,內(nèi)部的后臺(tái)管理系統(tǒng)使用主備復(fù)制架構(gòu)的情況會(huì)比較多,例如學(xué)生管理系統(tǒng)翘簇、員工管理系統(tǒng)撬码、假期管理系統(tǒng)等,因?yàn)檫@類系統(tǒng)的數(shù)據(jù)變更頻率低版保,即使在某些場(chǎng)景下丟失數(shù)據(jù)呜笑,也可以通過人工的方式補(bǔ)全。

主從復(fù)制

主從復(fù)制和主備復(fù)制只有一字之差彻犁,“從”意思是“隨從叫胁、仆從”,“備”的意思是備份汞幢。我們可以理解為仆從是要幫主人干活的驼鹅,這里的干活就是承擔(dān)“讀”的操作。也就是說(shuō)森篷,主機(jī)負(fù)責(zé)讀寫操作输钩,從機(jī)只負(fù)責(zé)讀操作,不負(fù)責(zé)寫操作仲智。

1. 基本實(shí)現(xiàn)

下面是標(biāo)準(zhǔn)的主從復(fù)制架構(gòu):

與主備復(fù)制架構(gòu)比較類似买乃,主要的差別點(diǎn)在于從機(jī)正常情況下也是要提供讀的操作。

2. 優(yōu)缺點(diǎn)分析

主從復(fù)制與主備復(fù)制相比坎藐,優(yōu)點(diǎn)有:

主從復(fù)制在主機(jī)故障時(shí)为牍,讀操作相關(guān)的業(yè)務(wù)可以繼續(xù)運(yùn)行哼绑。

主從復(fù)制架構(gòu)的從機(jī)提供讀操作岩馍,發(fā)揮了硬件的性能。

缺點(diǎn)有:

主從復(fù)制架構(gòu)中抖韩,客戶端需要感知主從關(guān)系蛀恩,并將不同的操作發(fā)給不同的機(jī)器進(jìn)行處理,復(fù)雜度比主備復(fù)制要高茂浮。

主從復(fù)制架構(gòu)中双谆,從機(jī)提供讀業(yè)務(wù),如果主從復(fù)制延遲比較大席揽,業(yè)務(wù)會(huì)因?yàn)閿?shù)據(jù)不一致出現(xiàn)問題顽馋。

故障時(shí)需要人工干預(yù)。

綜合主從復(fù)制的優(yōu)缺點(diǎn)幌羞,一般情況下寸谜,寫少讀多的業(yè)務(wù)使用主從復(fù)制的存儲(chǔ)架構(gòu)比較多。例如属桦,論壇熊痴、BBS他爸、新聞網(wǎng)站這類業(yè)務(wù),此類業(yè)務(wù)的讀操作數(shù)量是寫操作數(shù)量的 10 倍甚至 100 倍以上果善。

雙機(jī)切換

1. 設(shè)計(jì)關(guān)鍵

主備復(fù)制和主從復(fù)制方案存在兩個(gè)共性的問題:

主機(jī)故障后诊笤,無(wú)法進(jìn)行寫操作。

如果主機(jī)無(wú)法恢復(fù)巾陕,需要人工指定新的主機(jī)角色讨跟。

雙機(jī)切換就是為了解決這兩個(gè)問題而產(chǎn)生的,包括主備切換和主從切換兩種方案鄙煤。簡(jiǎn)單來(lái)說(shuō)许赃,這兩個(gè)方案就是在原有方案的基礎(chǔ)上增加“切換”功能,即系統(tǒng)自動(dòng)決定主機(jī)角色馆类,并完成角色切換混聊。由于主備切換和主從切換在切換的設(shè)計(jì)上沒有差別,我接下來(lái)以主備切換為例乾巧,一起來(lái)看看雙機(jī)切換架構(gòu)是如何實(shí)現(xiàn)的句喜。

要實(shí)現(xiàn)一個(gè)完善的切換方案,必須考慮這幾個(gè)關(guān)鍵的設(shè)計(jì)點(diǎn):

主備間狀態(tài)判斷

主要包括兩方面:狀態(tài)傳遞的渠道沟于,以及狀態(tài)檢測(cè)的內(nèi)容咳胃。

狀態(tài)傳遞的渠道:是相互間互相連接,還是第三方仲裁旷太?

狀態(tài)檢測(cè)的內(nèi)容:例如機(jī)器是否掉電展懈、進(jìn)程是否存在、響應(yīng)是否緩慢等供璧。

切換決策

主要包括幾方面:切換時(shí)機(jī)存崖、切換策略、自動(dòng)程度睡毒。

切換時(shí)機(jī):什么情況下備機(jī)應(yīng)該升級(jí)為主機(jī)来惧?是機(jī)器掉電后備機(jī)才升級(jí),還是主機(jī)上的進(jìn)程不存在就升級(jí)演顾,還是主機(jī)響應(yīng)時(shí)間超過 2 秒就升級(jí)供搀,還是 3 分鐘內(nèi)主機(jī)連續(xù)重啟 3 次就升級(jí)等。

切換策略:原來(lái)的主機(jī)故障恢復(fù)后钠至,要再次切換葛虐,確保原來(lái)的主機(jī)繼續(xù)做主機(jī),還是原來(lái)的主機(jī)故障恢復(fù)后自動(dòng)成為新的備機(jī)棉钧?

自動(dòng)程度:切換是完全自動(dòng)的屿脐,還是半自動(dòng)的?例如,系統(tǒng)判斷當(dāng)前需要切換摄悯,但需要人工做最終的確認(rèn)操作(例如赞季,單擊一下“切換”按鈕)。

數(shù)據(jù)沖突解決

當(dāng)原有故障的主機(jī)恢復(fù)后奢驯,新舊主機(jī)之間可能存在數(shù)據(jù)沖突申钩。例如,用戶在舊主機(jī)上新增了一條 ID 為 100 的數(shù)據(jù)瘪阁,這個(gè)數(shù)據(jù)還沒有復(fù)制到舊的備機(jī)撒遣,此時(shí)發(fā)生了切換,舊的備機(jī)升級(jí)為新的主機(jī)管跺,用戶又在新的主機(jī)上新增了一條 ID 為 100 的數(shù)據(jù)义黎,當(dāng)舊的故障主機(jī)恢復(fù)后,這兩條 ID 都為 100 的數(shù)據(jù)豁跑,應(yīng)該怎么處理廉涕?

以上設(shè)計(jì)點(diǎn)并沒有放之四海而皆準(zhǔn)的答案,不同的業(yè)務(wù)要求不一樣艇拍,所以切換方案比復(fù)制方案不只是多了一個(gè)切換功能那么簡(jiǎn)單狐蜕,而是復(fù)雜度上升了一個(gè)量級(jí)。形象點(diǎn)來(lái)說(shuō)卸夕,如果復(fù)制方案的代碼是 1000 行层释,那么切換方案的代碼可能就是 10000 行,多出來(lái)的那 9000 行就是用于實(shí)現(xiàn)上面我所講的 3 個(gè)設(shè)計(jì)點(diǎn)的快集。

2. 常見架構(gòu)

根據(jù)狀態(tài)傳遞渠道的不同贡羔,常見的主備切換架構(gòu)有三種形式:互連式、中介式和模擬式个初。

互連式

故名思議乖寒,互連式就是指主備機(jī)直接建立狀態(tài)傳遞的渠道,架構(gòu)圖請(qǐng)注意與主備復(fù)制架構(gòu)對(duì)比勃黍。

你可以看到宵统,在主備復(fù)制的架構(gòu)基礎(chǔ)上,主機(jī)和備機(jī)多了一個(gè)“狀態(tài)傳遞”的通道覆获,這個(gè)通道就是用來(lái)傳遞狀態(tài)信息的。這個(gè)通道的具體實(shí)現(xiàn)可以有很多方式:

可以是網(wǎng)絡(luò)連接(例如瓢省,各開一個(gè)端口)弄息,也可以是非網(wǎng)絡(luò)連接(用串口線連接)。

可以是主機(jī)發(fā)送狀態(tài)給備機(jī)勤婚,也可以是備機(jī)到主機(jī)來(lái)獲取狀態(tài)信息摹量。

可以和數(shù)據(jù)復(fù)制通道共用,也可以獨(dú)立一條通道。

狀態(tài)傳遞通道可以是一條缨称,也可以是多條凝果,還可以是不同類型的通道混合(例如,網(wǎng)絡(luò) + 串口)睦尽。

為了充分利用切換方案能夠自動(dòng)決定主機(jī)這個(gè)優(yōu)勢(shì)器净,客戶端這里也會(huì)有一些相應(yīng)的改變,常見的方式有:

為了切換后不影響客戶端的訪問当凡,主機(jī)和備機(jī)之間共享一個(gè)對(duì)客戶端來(lái)說(shuō)唯一的地址山害。例如虛擬 IP,主機(jī)需要綁定這個(gè)虛擬的 IP沿量。

客戶端同時(shí)記錄主備機(jī)的地址浪慌,哪個(gè)能訪問就訪問哪個(gè);備機(jī)雖然能收到客戶端的操作請(qǐng)求朴则,但是會(huì)直接拒絕权纤,拒絕的原因就是“備機(jī)不對(duì)外提供服務(wù)”。

互連式主備切換主要的缺點(diǎn)在于:

如果狀態(tài)傳遞的通道本身有故障(例如乌妒,網(wǎng)線被人不小心踢掉了)妖碉,那么備機(jī)也會(huì)認(rèn)為主機(jī)故障了從而將自己升級(jí)為主機(jī),而此時(shí)主機(jī)并沒有故障芥被,最終就可能出現(xiàn)兩個(gè)主機(jī)欧宜。

雖然可以通過增加多個(gè)通道來(lái)增強(qiáng)狀態(tài)傳遞的可靠性,但這樣做只是降低了通道故障概率而已拴魄,不能從根本上解決這個(gè)缺點(diǎn)冗茸,而且通道越多,后續(xù)的狀態(tài)決策會(huì)更加復(fù)雜匹中,因?yàn)閷?duì)備機(jī)來(lái)說(shuō)夏漱,可能從不同的通道收到了不同甚至矛盾的狀態(tài)信息。

中介式

中介式指的是在主備兩者之外引入第三方中介顶捷,主備機(jī)之間不直接連接挂绰,而都去連接中介间涵,并且通過中介來(lái)傳遞狀態(tài)信息徙硅,其架構(gòu)圖如下:

對(duì)比一下互連式切換架構(gòu)遭居,我們可以看到怀骤,主機(jī)和備機(jī)不再通過互聯(lián)通道傳遞狀態(tài)信息秽褒,而是都將狀態(tài)上報(bào)給中介這一角色钓葫。單純從架構(gòu)上看全封,中介式似乎比互連式更加復(fù)雜了频鉴,首先要引入中介缺厉,然后要各自上報(bào)狀態(tài)永高。然而事實(shí)上隧土,中介式架構(gòu)在狀態(tài)傳遞和決策上卻更加簡(jiǎn)單了,這是為何呢命爬?

連接管理更簡(jiǎn)單:主備機(jī)無(wú)須再建立和管理多種類型的狀態(tài)傳遞連接通道曹傀,只要連接到中介即可,實(shí)際上是降低了主備機(jī)的連接管理復(fù)雜度饲宛。

例如皆愉,互連式要求主機(jī)開一個(gè)監(jiān)聽端口,備機(jī)來(lái)獲取狀態(tài)信息落萎;或者要求備機(jī)開一個(gè)監(jiān)聽端口亥啦,主機(jī)推送狀態(tài)信息到備機(jī);如果還采用了串口連接练链,則需要增加串口連接管理和數(shù)據(jù)讀取翔脱。采用中介式后,主備機(jī)都只需要把狀態(tài)信息發(fā)送給中介媒鼓,或者從中介獲取對(duì)方的狀態(tài)信息届吁。無(wú)論是發(fā)送還是獲取,主備機(jī)都是作為中介的客戶端去操作绿鸣,復(fù)雜度會(huì)降低疚沐。

狀態(tài)決策更簡(jiǎn)單:主備機(jī)的狀態(tài)決策簡(jiǎn)單了,無(wú)須考慮多種類型的連接通道獲取的狀態(tài)信息如何決策的問題潮模,只需要按照下面簡(jiǎn)單的算法即可完成狀態(tài)決策亮蛔。

無(wú)論是主機(jī)還是備機(jī),初始狀態(tài)都是備機(jī)擎厢,并且只要與中介斷開連接究流,就將自己降級(jí)為備機(jī),因此可能出現(xiàn)雙備機(jī)的情況动遭。

主機(jī)與中介斷連后芬探,中介能夠立刻告知備機(jī),備機(jī)將自己升級(jí)為主機(jī)厘惦。

如果是網(wǎng)絡(luò)中斷導(dǎo)致主機(jī)與中介斷連偷仿,主機(jī)自己會(huì)降級(jí)為備機(jī),網(wǎng)絡(luò)恢復(fù)后宵蕉,舊的主機(jī)以新的備機(jī)身份向中介上報(bào)自己的狀態(tài)酝静。

如果是掉電重啟或者進(jìn)程重啟,舊的主機(jī)初始狀態(tài)為備機(jī)国裳,與中介恢復(fù)連接后形入,發(fā)現(xiàn)已經(jīng)有主機(jī)了,保持自己備機(jī)狀態(tài)不變缝左。

主備機(jī)與中介連接都正常的情況下,按照實(shí)際的狀態(tài)決定是否進(jìn)行切換。例如渺杉,主機(jī)響應(yīng)時(shí)間超過 3 秒就進(jìn)行切換蛇数,主機(jī)降級(jí)為備機(jī),備機(jī)升級(jí)為主機(jī)即可是越。

雖然中介式架構(gòu)在狀態(tài)傳遞和狀態(tài)決策上更加簡(jiǎn)單耳舅,但并不意味著這種優(yōu)點(diǎn)是沒有代價(jià)的,其關(guān)鍵代價(jià)就在于如何實(shí)現(xiàn)中介本身的高可用倚评。如果中介自己宕機(jī)了浦徊,整個(gè)系統(tǒng)就進(jìn)入了雙備的狀態(tài),寫操作相關(guān)的業(yè)務(wù)就不可用了天梧。這就陷入了一個(gè)遞歸的陷阱:為了實(shí)現(xiàn)高可用盔性,我們引入中介,但中介本身又要求高可用呢岗,于是又要設(shè)計(jì)中介的高可用方案……如此遞歸下去就無(wú)窮無(wú)盡了冕香。

MongoDB 的 Replica Set 采取的就是這種方式,其基本架構(gòu)如下:

?(http://img.my.csdn.net/uploads/201301/13/1358056331_2790.png

MongoDB(M) 表示主節(jié)點(diǎn)后豫,MongoDB(S) 表示備節(jié)點(diǎn)悉尾,MongoDB(A) 表示仲裁節(jié)點(diǎn)。主備節(jié)點(diǎn)存儲(chǔ)數(shù)據(jù)挫酿,仲裁節(jié)點(diǎn)不存儲(chǔ)數(shù)據(jù)构眯。客戶端同時(shí)連接主節(jié)點(diǎn)與備節(jié)點(diǎn)早龟,不連接仲裁節(jié)點(diǎn)惫霸。

幸運(yùn)的是,開源方案已經(jīng)有比較成熟的中介式解決方案拄衰,例如 ZooKeeper 和 Keepalived它褪。ZooKeeper 本身已經(jīng)實(shí)現(xiàn)了高可用集群架構(gòu),因此已經(jīng)幫我們解決了中介本身的可靠性問題翘悉,在工程實(shí)踐中推薦基于 ZooKeeper 搭建中介式切換架構(gòu)茫打。

模擬式

模擬式指主備機(jī)之間并不傳遞任何狀態(tài)數(shù)據(jù),而是備機(jī)模擬成一個(gè)客戶端妖混,向主機(jī)發(fā)起模擬的讀寫操作老赤,根據(jù)讀寫操作的響應(yīng)情況來(lái)判斷主機(jī)的狀態(tài)。其基本架構(gòu)如下:

對(duì)比一下互連式切換架構(gòu)制市,我們可以看到抬旺,主備機(jī)之間只有數(shù)據(jù)復(fù)制通道,而沒有狀態(tài)傳遞通道祥楣,備機(jī)通過模擬的讀寫操作來(lái)探測(cè)主機(jī)的狀態(tài)开财,然后根據(jù)讀寫操作的響應(yīng)情況來(lái)進(jìn)行狀態(tài)決策汉柒。

模擬式切換與互連式切換相比,優(yōu)點(diǎn)是實(shí)現(xiàn)更加簡(jiǎn)單责鳍,因?yàn)槭∪チ藸顟B(tài)傳遞通道的建立和管理工作碾褂。

簡(jiǎn)單既是優(yōu)點(diǎn),同時(shí)也是缺點(diǎn)历葛。因?yàn)槟M式讀寫操作獲取的狀態(tài)信息只有響應(yīng)信息(例如正塌,HTTP 404,超時(shí)恤溶、響應(yīng)時(shí)間超過 3 秒等)乓诽,沒有互連式那樣多樣(除了響應(yīng)信息,還可以包含 CPU 負(fù)載咒程、I/O 負(fù)載鸠天、吞吐量、響應(yīng)時(shí)間等)孵坚,基于有限的狀態(tài)來(lái)做狀態(tài)決策粮宛,可能出現(xiàn)偏差。

主主復(fù)制

主主復(fù)制指的是兩臺(tái)機(jī)器都是主機(jī)卖宠,互相將數(shù)據(jù)復(fù)制給對(duì)方巍杈,客戶端可以任意挑選其中一臺(tái)機(jī)器進(jìn)行讀寫操作,下面是基本架構(gòu)圖扛伍。

相比主備切換架構(gòu)筷畦,主主復(fù)制架構(gòu)具有如下特點(diǎn):

兩臺(tái)都是主機(jī),不存在切換的概念刺洒。

客戶端無(wú)須區(qū)分不同角色的主機(jī)鳖宾,隨便將讀寫操作發(fā)送給哪臺(tái)主機(jī)都可以。

從上面的描述來(lái)看逆航,主主復(fù)制架構(gòu)從總體上來(lái)看要簡(jiǎn)單很多鼎文,無(wú)須狀態(tài)信息傳遞,也無(wú)須狀態(tài)決策和狀態(tài)切換因俐。然而事實(shí)上主主復(fù)制架構(gòu)也并不簡(jiǎn)單拇惋,而是有其獨(dú)特的復(fù)雜性,具體表現(xiàn)在:如果采取主主復(fù)制架構(gòu)抹剩,必須保證數(shù)據(jù)能夠雙向復(fù)制撑帖,而很多數(shù)據(jù)是不能雙向復(fù)制的。例如:

用戶注冊(cè)后生成的用戶 ID澳眷,如果按照數(shù)字增長(zhǎng)胡嘿,那就不能雙向復(fù)制,否則就會(huì)出現(xiàn) X 用戶在主機(jī) A 注冊(cè)钳踊,分配的用戶 ID 是 100衷敌,同時(shí) Y 用戶在主機(jī) B 注冊(cè)勿侯,分配的用戶 ID 也是 100,這就出現(xiàn)了沖突逢享。

庫(kù)存不能雙向復(fù)制罐监。例如吴藻,一件商品庫(kù)存 100 件瞒爬,主機(jī) A 上減了 1 件變成 99,主機(jī) B 上減了 2 件變成 98沟堡,然后主機(jī) A 將庫(kù)存 99 復(fù)制到主機(jī) B侧但,主機(jī) B 原有的庫(kù)存 98 被覆蓋,變成了 99航罗,而實(shí)際上此時(shí)真正的庫(kù)存是 97禀横。類似的還有余額數(shù)據(jù)。

因此粥血,主主復(fù)制架構(gòu)對(duì)數(shù)據(jù)的設(shè)計(jì)有嚴(yán)格的要求柏锄,一般適合于那些臨時(shí)性、可丟失复亏、可覆蓋的數(shù)據(jù)場(chǎng)景趾娃。例如,用戶登錄產(chǎn)生的 session 數(shù)據(jù)(可以重新登錄生成)缔御、用戶行為的日志數(shù)據(jù)(可以丟失)抬闷、論壇的草稿數(shù)據(jù)(可以丟失)等。

小結(jié)

今天我為你講了高可用存儲(chǔ)架構(gòu)中常見的雙機(jī)架構(gòu)耕突,分析了每類架構(gòu)的優(yōu)缺點(diǎn)以及適應(yīng)場(chǎng)景笤成,希望對(duì)你有所幫助。

這就是今天的全部?jī)?nèi)容眷茁,留一道思考題給你吧炕泳,如果你來(lái)設(shè)計(jì)一個(gè)政府信息公開網(wǎng)站的信息存儲(chǔ)系統(tǒng),你會(huì)采取哪種架構(gòu)上祈?談?wù)勀愕姆治龊屠碛伞?/p>

歡迎你把答案寫到留言區(qū)培遵,和我一起討論。相信經(jīng)過深度思考的回答雇逞,也會(huì)讓你對(duì)知識(shí)的理解更加深刻荤懂。(編輯亂入:精彩的留言有機(jī)會(huì)獲得豐厚福利哦!)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末塘砸,一起剝皮案震驚了整個(gè)濱河市节仿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌掉蔬,老刑警劉巖廊宪,帶你破解...
    沈念sama閱讀 212,542評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件矾瘾,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡箭启,警方通過查閱死者的電腦和手機(jī)壕翩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)傅寡,“玉大人放妈,你說(shuō)我怎么就攤上這事〖霾伲” “怎么了芜抒?”我有些...
    開封第一講書人閱讀 158,021評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)托启。 經(jīng)常有香客問我宅倒,道長(zhǎng),這世上最難降的妖魔是什么屯耸? 我笑而不...
    開封第一講書人閱讀 56,682評(píng)論 1 284
  • 正文 為了忘掉前任拐迁,我火速辦了婚禮,結(jié)果婚禮上疗绣,老公的妹妹穿的比我還像新娘线召。我一直安慰自己,他們只是感情好持痰,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,792評(píng)論 6 386
  • 文/花漫 我一把揭開白布灶搜。 她就那樣靜靜地躺著,像睡著了一般工窍。 火紅的嫁衣襯著肌膚如雪割卖。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,985評(píng)論 1 291
  • 那天患雏,我揣著相機(jī)與錄音鹏溯,去河邊找鬼。 笑死淹仑,一個(gè)胖子當(dāng)著我的面吹牛丙挽,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播匀借,決...
    沈念sama閱讀 39,107評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼颜阐,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了吓肋?” 一聲冷哼從身側(cè)響起凳怨,我...
    開封第一講書人閱讀 37,845評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后肤舞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體紫新,經(jīng)...
    沈念sama閱讀 44,299評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,612評(píng)論 2 327
  • 正文 我和宋清朗相戀三年李剖,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了芒率。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,747評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡篙顺,死狀恐怖偶芍,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情慰安,我是刑警寧澤腋寨,帶...
    沈念sama閱讀 34,441評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站化焕,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏铃剔。R本人自食惡果不足惜撒桨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,072評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望键兜。 院中可真熱鬧凤类,春花似錦、人聲如沸普气。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)现诀。三九已至夷磕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間仔沿,已是汗流浹背坐桩。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留封锉,地道東北人绵跷。 一個(gè)月前我還...
    沈念sama閱讀 46,545評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像成福,于是被迫代替她去往敵國(guó)和親碾局。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,658評(píng)論 2 350

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