在ChatGPT的幫助下從零開(kāi)始了解Event Sourcing的一次記錄

昨天,我從朋友那里聽(tīng)到了一個(gè)詞——Event Sourcing,據(jù)說(shuō)是一種很有趣的架構(gòu)模式,但目前在國(guó)內(nèi)卻沒(méi)有一個(gè)成熟的應(yīng)用。那該死的好奇心就控制了我,晚上便立刻去知乎上搜了一篇介紹Event Sourcing的文章,但掃了一眼之后,并沒(méi)有那種被深深吸引住的感覺(jué)。

我感到十分疑惑和不甘心,于是又去了B站,找了一段10分鐘的介紹視頻來(lái)看,這次算是對(duì)Event Sourcing有了一些初步的概念,但還是覺(jué)得不夠深入和令人滿意。

終于,我決定打開(kāi)ChatGPT,并開(kāi)始了一系列關(guān)于Event Sourcing的靈魂提問(wèn)。以下是整個(gè)探究過(guò)程的記錄:

  • 我:你知道event sourcing么?

  • ChatGPT:

    是的,Event Sourcing 是一種由 Martin Fowler 和 Greg Young 等人提出的架構(gòu)模式,主要用于構(gòu)建事務(wù)性業(yè)務(wù)應(yīng)用系統(tǒng)。

    Event Sourcing 中,所有的操作都被視為系統(tǒng)中發(fā)生的事件,系統(tǒng)狀態(tài)的變化是通過(guò)一系列事件的順序而得到的,這些事件會(huì)被保存下來(lái),用于重建系統(tǒng)狀態(tài)。通過(guò)這種方式,我們可以將狀態(tài)存儲(chǔ)到一個(gè)不可變的事件日志中,實(shí)現(xiàn)了事件的溯源,可以輕易地回溯系統(tǒng)的歷史狀態(tài),支持多版本狀態(tài)的管理和并行處理多個(gè)操作等。

    Event Sourcing 通過(guò)使用事件來(lái)描述系統(tǒng)狀態(tài)的變化,實(shí)現(xiàn)了對(duì)時(shí)間的敏感度,而不僅僅是基于當(dāng)前狀態(tài)。這使得它能夠處理很多傳統(tǒng)架構(gòu)難以支持的復(fù)雜應(yīng)用場(chǎng)景,例如多版本控制、日志審計(jì)、系統(tǒng)歷史狀態(tài)回溯等。但是,它也對(duì)數(shù)據(jù)的處理和實(shí)現(xiàn)方式提出了更高的要求,需要在系統(tǒng)設(shè)計(jì)之初就將事件溯源機(jī)制考慮進(jìn)去,需要設(shè)計(jì)并實(shí)現(xiàn)將事件入庫(kù)、事件存儲(chǔ)、事件檢索等多個(gè)方面的系統(tǒng)組成部分。

  • 我:它和DDD有什么關(guān)系?

  • ChatGPT:

    Event Sourcing 和領(lǐng)域驅(qū)動(dòng)設(shè)計(jì) (DDD) 有很強(qiáng)的關(guān)聯(lián)關(guān)系,兩者可以一起使用來(lái)構(gòu)建高度穩(wěn)健、可擴(kuò)展和可維護(hù)的業(yè)務(wù)應(yīng)用程序。

    在 DDD 中,我們將系統(tǒng)看作由多個(gè)領(lǐng)域模型組成的,每個(gè)領(lǐng)域模型具有自己的生命周期和狀態(tài)轉(zhuǎn)換規(guī)則。而在 Event Sourcing 中,我們更強(qiáng)調(diào)系統(tǒng)狀態(tài)的演進(jìn)過(guò)程,它會(huì)將每一個(gè)狀態(tài)改變都視為一個(gè)事件,這些事件組成了系統(tǒng)的事件流,根據(jù)這些事件可以逐步重建出系統(tǒng)當(dāng)前狀態(tài)。

    在使用 Event Sourcing 架構(gòu)模式時(shí),我們需要使用 DDD 的思想來(lái)對(duì)領(lǐng)域模型進(jìn)行劃分,并利用事件流來(lái)保持模型的狀態(tài)。使用 DDD 模型可以讓我們更清晰地了解模型的狀態(tài)合理性,以及如何采取措施來(lái)防止?fàn)顟B(tài)的非法轉(zhuǎn)換。

    此外,DDD 和 Event Sourcing 的核心思想都是圍繞著領(lǐng)域模型進(jìn)行的,它們通過(guò)共同關(guān)注領(lǐng)域知識(shí)和業(yè)務(wù)需求,可以幫助我們?cè)陂_(kāi)發(fā)過(guò)程中更好地把握系統(tǒng)概念、架構(gòu)和實(shí)現(xiàn)。在實(shí)際開(kāi)發(fā)中,DDD 和 Event Sourcing 應(yīng)該結(jié)合起來(lái)使用,通過(guò)事件流和領(lǐng)域模型的雙重保障來(lái)實(shí)現(xiàn)可維護(hù)、可擴(kuò)展、高性能的業(yè)務(wù)應(yīng)用系統(tǒng)。

  • 我:這方面,你知道有哪些成熟的應(yīng)用?

  • ChatGPT:

    vent Sourcing 的應(yīng)用相對(duì)較新,尚未有太多的成熟應(yīng)用。不過(guò)這種架構(gòu)模式逐漸被越來(lái)越多的企業(yè)和組織所接受,也已經(jīng)在某些領(lǐng)域得到了廣泛的應(yīng)用。

    下面列舉一些比較知名的使用 Event Sourcing 的應(yīng)用:

    1. 車(chē)輛物聯(lián)網(wǎng)系統(tǒng)

    車(chē)輛物聯(lián)網(wǎng)系統(tǒng)是一個(gè)由多臺(tái)設(shè)備組成的系統(tǒng),包括車(chē)載終端、路邊設(shè)備和云服務(wù)器等。在這個(gè)系統(tǒng)中,使用 Event Sourcing 可以保證每個(gè)車(chē)輛的狀態(tài)變化、路況數(shù)據(jù)收集和行駛軌跡等信息都被記錄下來(lái),對(duì)車(chē)輛監(jiān)視、駕駛數(shù)據(jù)分析和行駛路線優(yōu)化等有很大的幫助。

    1. 電子商務(wù)應(yīng)用

    電子商務(wù)應(yīng)用中,使用 Event Sourcing 可以實(shí)現(xiàn)訂單管理、庫(kù)存管理、支付處理等核心業(yè)務(wù)功能。由于訂單狀態(tài)的變化非常頻繁,傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)方式不太適合用來(lái)處理這種高寫(xiě)入頻率的信息。使用 Event Sourcing 可以更好地處理這些信息,保證每個(gè)訂單狀態(tài)的變化都被記錄下來(lái),從而實(shí)現(xiàn)更好的訂單管理和跟蹤。

    1. 區(qū)塊鏈應(yīng)用

    區(qū)塊鏈應(yīng)用的核心是去中心化的分布式賬本系統(tǒng),其記錄了所有交易發(fā)生的時(shí)間和內(nèi)容,所有的賬戶、交易都是不可變的。Event Sourcing 提供了可溯源性和可信性,是區(qū)塊鏈應(yīng)用設(shè)計(jì)中不可或缺的一環(huán)。

    還有一些業(yè)界較著名的 Event Sourcing 實(shí)際應(yīng)用框架和工具,如 Axon Framework、Lagom、EventStore、Apache Kafka 等。這些工具和框架都提供了一定程度上的支持來(lái)幫助我們更容易地實(shí)現(xiàn) Event Sourcing 架構(gòu)模式,可以更快速地開(kāi)發(fā)出可靠、高效的業(yè)務(wù)應(yīng)用程序。

  • 我:是否可以說(shuō)Event Sourcing在應(yīng)用上就是DDD?

  • ChatGPT:

    Event Sourcing 和 DDD 是兩種不同的架構(gòu)設(shè)計(jì)思想,它們?cè)趹?yīng)用上有很多相似之處,但并不是完全相同的。

    Event Sourcing 是指將系統(tǒng)狀態(tài)的演進(jìn)過(guò)程,劃分為一系列的事件,并將這些事件組成一個(gè)事件流來(lái)維護(hù)系統(tǒng)狀態(tài)。這種設(shè)計(jì)思想強(qiáng)調(diào)每個(gè)狀態(tài)改變都是可追溯的,可以通過(guò)查看事件流來(lái)重建系統(tǒng)的狀態(tài)。

    而 DDD 則是一種面向業(yè)務(wù)領(lǐng)域的軟件設(shè)計(jì)思想,它強(qiáng)調(diào)通過(guò)針對(duì)業(yè)務(wù)領(lǐng)域的領(lǐng)域模型(Domain Model)來(lái)實(shí)現(xiàn)功能和降低耦合度。DDD 不關(guān)注具體的實(shí)現(xiàn)方式,而是關(guān)注如何劃分、組織和管理領(lǐng)域模型。

    從應(yīng)用上來(lái)看,Event Sourcing 和 DDD 常常一起使用,因?yàn)?Event Sourcing 維護(hù)的事件流可以作為 DDD 中領(lǐng)域模型的持久化存儲(chǔ)。通過(guò)將 DDD 中領(lǐng)域模型的狀態(tài)記錄到事件流中,可以幫助我們更好地處理狀態(tài)變化和重建問(wèn)題。同時(shí),DDD 在事件流的設(shè)計(jì)上也可以提供一些幫助,比如通過(guò)將事件分類(lèi)、命名、組織來(lái)幫助我們更好地理解領(lǐng)域模型中不同狀態(tài)的變化。

    因此,可以說(shuō) Event Sourcing 經(jīng)常與 DDD 一起使用,但并不能簡(jiǎn)單地將它們歸為一類(lèi)。它們?cè)谲浖O(shè)計(jì)中各自發(fā)揮不同的作用,但都可以幫助我們構(gòu)建高質(zhì)量、可擴(kuò)展、穩(wěn)健的業(yè)務(wù)系統(tǒng)。

  • 我:那和“事件驅(qū)動(dòng)開(kāi)發(fā)”的關(guān)系是什么?

  • ChatGPT:

    事件驅(qū)動(dòng)開(kāi)發(fā)是指通過(guò)響應(yīng)事件來(lái)驅(qū)動(dòng)應(yīng)用程序的開(kāi)發(fā)模式。它與 Event Sourcing 和 DDD 有一定的關(guān)聯(lián),但這三者并不是完全相同的概念。

    事件驅(qū)動(dòng)開(kāi)發(fā)可以與 Event Sourcing 配合使用,以實(shí)現(xiàn)在應(yīng)用程序中記錄和處理事件的功能。在 Event Sourcing 中,應(yīng)用程序中的每個(gè)變化都可以視為一個(gè)事件,這些事件被按順序記錄到一個(gè)不可變的事件流中。相比之下,事件驅(qū)動(dòng)開(kāi)發(fā)中的事件則是由外部的事件源或系統(tǒng)組件發(fā)出的,應(yīng)用程序需要根據(jù)這些事件來(lái)執(zhí)行相應(yīng)的操作。因此,在使用 Event Sourcing 的同時(shí),事件驅(qū)動(dòng)開(kāi)發(fā)可以為應(yīng)用程序提供更多的事件來(lái)源和響應(yīng)機(jī)制,從而提高應(yīng)用程序的可伸縮性和靈活性。

    另一方面,DDD 中的領(lǐng)域事件也可以被視為一種事件驅(qū)動(dòng)的方法,用于描述系統(tǒng)中的業(yè)務(wù)過(guò)程和狀態(tài)變化。在使用 Event Sourcing 時(shí),可以利用領(lǐng)域事件來(lái)幫助設(shè)計(jì)事件模型和重建系統(tǒng)狀態(tài)。因此,DDD 和 Event Sourcing 的配合可以幫助我們更好地構(gòu)建具備業(yè)務(wù)價(jià)值的應(yīng)用程序。

    綜上所述,雖然事件驅(qū)動(dòng)開(kāi)發(fā)、Event Sourcing 和 DDD 都與事件處理相關(guān),但它們是針對(duì)不同方面的技術(shù)和概念。它們可以在一些場(chǎng)景下相互結(jié)合和補(bǔ)充,以提高應(yīng)用程序的可維護(hù)性、可擴(kuò)展性和可靠性。

  • 我:我可以把Event Sourcing理解成一種log么?

  • ChatGPT:

    是的,你可以把 Event Sourcing 理解為一種事件日志(event log)的實(shí)現(xiàn)方式之一。在 Event Sourcing 中,應(yīng)用程序中的各種狀態(tài)變化和操作都被視為事件,被順序記錄到一個(gè)基于時(shí)間的不可變數(shù)據(jù)結(jié)構(gòu)中(通常是一個(gè)事件流或事件存儲(chǔ))。這個(gè)過(guò)程類(lèi)似于一個(gè)事件日志,而事件存儲(chǔ)中的每個(gè)事件就相當(dāng)于事件日志中的每個(gè)時(shí)間戳條目。

    與傳統(tǒng)的日志系統(tǒng)不同,Event Sourcing 的事件記錄不僅記錄了應(yīng)用程序狀態(tài)的變化,還可以用于重建應(yīng)用程序狀態(tài)和執(zhí)行業(yè)務(wù)邏輯。通過(guò)回放事件流,應(yīng)用程序可以在任意時(shí)間點(diǎn)恢復(fù)它的狀態(tài),甚至可以在不同的部署環(huán)境中復(fù)制應(yīng)用程序狀態(tài)。因此,Event Sourcing 讓?xiě)?yīng)用程序的狀態(tài)變得不可變和可重現(xiàn),并且能夠提高應(yīng)用程序的可伸縮性和可維護(hù)性。

    當(dāng)然,Event Sourcing 和傳統(tǒng)的日志系統(tǒng)也有所不同。Event Sourcing 記錄的事件應(yīng)該是領(lǐng)域事件,和特定的應(yīng)用程序業(yè)務(wù)邏輯相關(guān)。而傳統(tǒng)的日志系統(tǒng)則更多地關(guān)注系統(tǒng)級(jí)別的事件,比如網(wǎng)絡(luò)連接、錯(cuò)誤日志等等。此外,Event Sourcing 記錄的事件也更加詳細(xì)和有意義,記錄了事件發(fā)生的時(shí)刻、事件來(lái)源、事件內(nèi)容等方面的信息。

  • 我:Event Sourcing模式下,會(huì)不會(huì)發(fā)生數(shù)據(jù)上的錯(cuò)誤?

  • ChatGPT:

    在 Event Sourcing 模式下,雖然不會(huì)出現(xiàn)丟失數(shù)據(jù)的情況(因?yàn)樗械臓顟B(tài)變化都被記錄下來(lái)了),但仍然可能發(fā)生數(shù)據(jù)上的錯(cuò)誤。以下是一些可能出現(xiàn)的錯(cuò)誤情況:

    1. 事件版本沖突:當(dāng)兩個(gè)或多個(gè)并發(fā)的操作產(chǎn)生相同的事件,且這些事件都要對(duì)同一個(gè)聚合根進(jìn)行狀態(tài)變更時(shí),這些事件就會(huì)產(chǎn)生版本沖突。這種情況下,需要使用樂(lè)觀鎖等機(jī)制來(lái)解決版本沖突,否則可能會(huì)導(dǎo)致數(shù)據(jù)錯(cuò)誤。

    2. 數(shù)據(jù)同步問(wèn)題:在多個(gè)服務(wù)之間交換消息時(shí),可能會(huì)出現(xiàn)數(shù)據(jù)同步問(wèn)題。例如,一個(gè)服務(wù)發(fā)布了一個(gè)事件,但由于網(wǎng)絡(luò)延遲等原因,另一個(gè)服務(wù)沒(méi)有及時(shí)接收到該事件,而導(dǎo)致數(shù)據(jù)不一致。

    3. 事件溢出:如果事件數(shù)量太多,可能會(huì)導(dǎo)致事件存儲(chǔ)器空間不足。此時(shí),需要對(duì)事件進(jìn)行歸檔或刪除,否則可能會(huì)對(duì)系統(tǒng)性能和穩(wěn)定性造成影響。

    4. 數(shù)據(jù)錯(cuò)誤:在記錄事件的過(guò)程中,如果出現(xiàn)了錯(cuò)誤或者非法操作,可能會(huì)導(dǎo)致事件本身的錯(cuò)誤,從而影響應(yīng)用程序狀態(tài)的正確性。

    為了解決這些問(wèn)題,需要使用合適的設(shè)計(jì)模式、技術(shù)和工具。例如,使用基于時(shí)間戳的并發(fā)控制機(jī)制,通過(guò)異步消息傳遞實(shí)現(xiàn)數(shù)據(jù)同步,使用高可靠的事件存儲(chǔ)器來(lái)防止事件丟失等。同時(shí),也需要進(jìn)行定期的事件清理和備份,以確保數(shù)據(jù)的完整性和可靠性。

  • 我:有沒(méi)有一種可能,git的版本管理方式,就是一種Event Sourcing?

  • ChatGPT:

    是的,可以將 Git 的版本管理方式視為一種基于事件溯源(Event Sourcing)的實(shí)現(xiàn)方式之一。

    在 Git 中,每次提交操作都會(huì)被記錄為一個(gè)新的版本,在版本控制樹(shù)上形成分支和合并的歷史記錄。這些提交操作都是修改某些文件內(nèi)容的事件,這些事件以時(shí)間戳的方式記錄在 Git 的對(duì)象庫(kù)中。類(lèi)似于 Event Sourcing,這些事件是不可變的,可以被追溯和回溯,可以重現(xiàn)歷史狀態(tài)。

    不同的是,Git 中的事件并沒(méi)有像 Event Sourcing 中的事件那樣完整記錄應(yīng)用程序狀態(tài)的變化。而是只記錄了對(duì)特定文件或代碼庫(kù)的操作。因此 Git 可以被歸類(lèi)為一種更為特化的事件存儲(chǔ),特別用于版本控制。而在 Event Sourcing 中,事件通常涵蓋更多方面的領(lǐng)域事件,而不僅僅是針對(duì)代碼庫(kù)的版本控制。

    但是,Git 的版本控制方式仍然具有許多與 Event Sourcing 相似的特點(diǎn)和優(yōu)點(diǎn),如可追溯性、可重放性、冪等性、可恢復(fù)性等。因此可以說(shuō),基于 Git 的版本管理,可以借鑒 Event Sourcing 的一些優(yōu)秀設(shè)計(jì)思想和實(shí)踐。

  • 它之前提到的應(yīng)用中,包括了區(qū)塊鏈,我就順勢(shì)把區(qū)塊鏈拎出來(lái)問(wèn)問(wèn):區(qū)塊鏈的技術(shù)有哪些?

  • ChatGPT:

    區(qū)塊鏈技術(shù)有以下幾個(gè)主要方面:

    1. 分布式賬本技術(shù):區(qū)塊鏈的核心技術(shù)之一,將所有參與者之間的交易信息記錄在一個(gè)共享的賬本中。這個(gè)賬本是分布式存儲(chǔ)的,只要存在網(wǎng)絡(luò)中的一個(gè)節(jié)點(diǎn),就可以獲取到完整的賬本信息。其中最著名的實(shí)現(xiàn)方式是比特幣區(qū)塊鏈。

    2. 共識(shí)算法:由于區(qū)塊鏈的去中心化特性,在進(jìn)行交易時(shí)必須要保證賬本信息的一致性。為此,區(qū)塊鏈需要一種共識(shí)算法,以確保節(jié)點(diǎn)之間對(duì)交易的確認(rèn)達(dá)成一致。常見(jiàn)的共識(shí)算法有工作量證明(PoW)、權(quán)益證明(PoS)、拜占庭容錯(cuò)(BFT)等。

    3. 密碼學(xué)技術(shù):區(qū)塊鏈基于密碼學(xué)實(shí)現(xiàn)了去中心化的安全性,如公私鑰加密、哈希算法和數(shù)字簽名等技術(shù),確保只有合法的使用者才能讀寫(xiě)區(qū)塊鏈上的記錄,保證交易的安全性和隱私性。

    4. 智能合約:智能合約是構(gòu)建在區(qū)塊鏈技術(shù)之上的一種編程模型,可以封裝和自動(dòng)執(zhí)行協(xié)議。智能合約能夠?qū)灰走M(jìn)行自動(dòng)化執(zhí)行和驗(yàn)證,以確保交易順利完成。以太坊是智能合約應(yīng)用最廣泛的區(qū)塊鏈項(xiàng)目之一。

    5. 跨鏈技術(shù):由于不同的區(qū)塊鏈之間無(wú)法直接通信,因此需要一種跨鏈技術(shù)來(lái)實(shí)現(xiàn)不同區(qū)塊鏈之間的交互。常見(jiàn)的跨鏈技術(shù)有側(cè)鏈、原子交換和跨鏈協(xié)議等。

    6. 元數(shù)據(jù)標(biāo)準(zhǔn)化:在許多區(qū)塊鏈應(yīng)用中,需要對(duì)大量的數(shù)據(jù)進(jìn)行存儲(chǔ)和交換。元數(shù)據(jù)標(biāo)準(zhǔn)化是將這些數(shù)據(jù)進(jìn)行統(tǒng)一格式和設(shè)定的技術(shù),確保區(qū)塊鏈上的數(shù)據(jù)格式一致,從而方便數(shù)據(jù)交換和分析。例如,Hyperledger Indy 就提供了統(tǒng)一的身份元數(shù)據(jù)標(biāo)準(zhǔn)。

    這些技術(shù)在不同的區(qū)塊鏈項(xiàng)目中可能會(huì)有所不同,不同的區(qū)塊鏈應(yīng)用場(chǎng)景需要使用不同的技術(shù)組合,以適應(yīng)各自的需求。

  • 我:這些哪個(gè)用到Event Sourcing了?

  • ChatGPT:

    Event Sourcing 是一種在應(yīng)用程序中記錄和存儲(chǔ)事件的架構(gòu)模式,它允許構(gòu)建一個(gè)可靠的事件日志,可以記錄系統(tǒng)中所有的變化。以下是一些使用 Event Sourcing 技術(shù)的區(qū)塊鏈項(xiàng)目:

    1. Corda:Corda 是一個(gè)分布式賬本平臺(tái),可以用于在機(jī)構(gòu)之間傳輸價(jià)值和協(xié)議數(shù)據(jù)。Corda 使用 Event Sourcing 技術(shù)來(lái)記錄和存儲(chǔ)所有的狀態(tài)變化,以便在需要時(shí)進(jìn)行審計(jì)和重放交易。

    2. Hyperledger Fabric:Hyperledger Fabric 是一個(gè)企業(yè)級(jí)區(qū)塊鏈框架,它支持各種不同的共識(shí)算法和身份驗(yàn)證機(jī)制。Hyperledger Fabric 使用 Event Sourcing 技術(shù)來(lái)記錄事務(wù)歷史,以便可以追溯和審計(jì)所有的交易。

    3. Ethereum:Ethereum 是一個(gè)智能合約平臺(tái),它允許使用 Solidity 編寫(xiě)智能合約,這些智能合約可以在區(qū)塊鏈上運(yùn)行。Ethereum 使用 Event Sourcing 技術(shù)來(lái)記錄所有的交易事件和狀態(tài)變化,以便可以驗(yàn)證所有的交易和狀態(tài)更改。

    4. Bitcoin:Bitcoin 是一種用于價(jià)值傳輸?shù)募用茇泿牛褂昧藚^(qū)塊鏈技術(shù)。Bitcoin 使用 Event Sourcing 技術(shù)來(lái)記錄所有的交易歷史,以便在需要時(shí)進(jìn)行追溯和審計(jì)。

    這些項(xiàng)目都使用了 Event Sourcing 技術(shù)來(lái)記錄和存儲(chǔ)事件,以便可以在需要時(shí)進(jìn)行審計(jì)和追溯。

至此,我形成了對(duì)Event Sourcing的一個(gè)非常初步的印象: 跟DDD和TDD都有點(diǎn)像又有點(diǎn)不一樣,感覺(jué)更像個(gè)git,區(qū)塊鏈?zhǔn)撬囊环N應(yīng)用。

在問(wèn)答的過(guò)程中,我會(huì)用google之類(lèi)的其他工具來(lái)交叉印證ChatGPT的回答。即使這樣做,在ChatGPT上用時(shí)不到半小時(shí)。

這是一次非常高效的探究體驗(yàn)。


ps:本篇主體文字用ChatGPT潤(rùn)色過(guò)。


image.png

本作品由 IvyWooo 采用知識(shí)共享署名-非商業(yè)性使用-相同方式共享 4.0 國(guó)際許可協(xié)議 進(jìn)行許可,轉(zhuǎn)載請(qǐng)注明出處。

本文鏈接

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,606評(píng)論 6 533
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,582評(píng)論 3 418
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 176,540評(píng)論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 63,028評(píng)論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,801評(píng)論 6 410
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 55,223評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,294評(píng)論 3 442
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,442評(píng)論 0 289
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,976評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,800評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,996評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,543評(píng)論 5 360
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,233評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 34,662評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 35,926評(píng)論 1 286
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,702評(píng)論 3 392
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,991評(píng)論 2 374

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