數(shù)據(jù)批處理神器-Spring Batch(1)簡(jiǎn)介及使用場(chǎng)景

tags: springbatch

1.引言

最近使用Spring Batch進(jìn)行做數(shù)據(jù)遷移则剃、數(shù)據(jù)同步拢切、數(shù)據(jù)批處理等工作,感嘆Spring Batch設(shè)計(jì)之簡(jiǎn)潔猎物,對(duì)批處理編程的抽象能力之強(qiáng)大虎囚。

眾所周知,隨著大數(shù)據(jù)技術(shù)發(fā)展霸奕,企業(yè)對(duì)數(shù)據(jù)越來(lái)越重視溜宽,如何把數(shù)據(jù)有效轉(zhuǎn)化為信息,以幫助企業(yè)提供數(shù)據(jù)分析质帅、商業(yè)決策适揉、提高核心競(jìng)爭(zhēng)力。而批處理則是實(shí)現(xiàn)這一目標(biāo)的其中一個(gè)重要手段煤惩。通過(guò)批處理嫉嘀,可以完成數(shù)據(jù)加載、抽取魄揉、轉(zhuǎn)換剪侮、驗(yàn)證、清洗等功能洛退。這些工作具有數(shù)據(jù)量大瓣俯、無(wú)需人工操作、與時(shí)間密切相關(guān)(如隔一段時(shí)間處理一次)等特點(diǎn)兵怯。

對(duì)于批處理數(shù)據(jù)彩匕,無(wú)論是數(shù)據(jù)抽取、數(shù)據(jù)庫(kù)遷移媒区、數(shù)據(jù)同步等業(yè)務(wù)驼仪,涉及的具體操作掸犬,不外乎數(shù)據(jù)讀取,數(shù)據(jù)處理绪爸,數(shù)據(jù)寫入三種湾碎。按這個(gè)思路,在批處理編程過(guò)程中奠货,如何做到結(jié)構(gòu)清晰介褥、接口通用,過(guò)程可見(jiàn)仇味,出錯(cuò)處理呻顽,是需要花費(fèi)一定的功夫的,而Spring Batch框架的出現(xiàn)丹墨,則填補(bǔ)這一空缺廊遍。當(dāng)初看到這個(gè)框架后,真的有相見(jiàn)恨晚的感覺(jué)贩挣,這不就是我想要的嗎喉前。讀、處理王财、寫分別抽象出來(lái)卵迂,通過(guò)Spring Batch,可以把復(fù)雜的業(yè)務(wù)問(wèn)題做成簡(jiǎn)單化的抽象绒净,編程過(guò)程中见咒,只需要關(guān)心具體的業(yè)務(wù)實(shí)現(xiàn)即可,把流程以及流程的控制交給Spring Batch吧挂疆。

在學(xué)習(xí)過(guò)程中改览,我閱讀了Spring Batch的官方文檔及劉相的《Spring Batch批處理框架》,本系列將對(duì)Spring Batch進(jìn)行介紹以及結(jié)合案例進(jìn)行實(shí)踐缤言,希望對(duì)入門的同學(xué)有幫助宝当,也希望和大家一起交流。本篇先對(duì)Spring Batch進(jìn)行介紹胆萧。

2.Spring Batch簡(jiǎn)介

2.1 Spring Batch是批處理框架

對(duì)于使用java技術(shù)進(jìn)行業(yè)務(wù)編程開(kāi)發(fā)的領(lǐng)域庆揩,Spring Framework 無(wú)疑是當(dāng)前企業(yè)開(kāi)發(fā)的龍頭,從早期的spring開(kāi)發(fā)跌穗,到Spring MVC的web開(kāi)發(fā)订晌,再到現(xiàn)在的基于Spring Boot進(jìn)行微服務(wù)開(kāi)發(fā),都具有簡(jiǎn)化開(kāi)發(fā)蚌吸,增強(qiáng)規(guī)范锈拨,快速集成等特點(diǎn),而在數(shù)據(jù)處理領(lǐng)域套利,spring同樣有一個(gè)開(kāi)發(fā)框架推励,那就是Spring Batch。Spring Batch是一個(gè)輕量級(jí)肉迫,完善的批處理框架验辞,旨在幫助企業(yè)建立健壯高效的批處理應(yīng)用程序。 它是以Spring 框架為基礎(chǔ)開(kāi)發(fā)喊衫,使得原來(lái)使用Spring框架的開(kāi)發(fā)者可以更容易利用原來(lái)的服務(wù)跌造。當(dāng)前新版本的Spring Batch更是可以直接基于Spring Boot進(jìn)行開(kāi)發(fā),使得開(kāi)發(fā)更簡(jiǎn)單族购、快捷壳贪。

根據(jù)官方文檔說(shuō)明,Spring Batch是由Spring SourceAccenture(埃森哲)合作開(kāi)發(fā)的寝杖,埃森哲貢獻(xiàn)了幾十年來(lái)在使用和構(gòu)建批量架構(gòu)方面的經(jīng)驗(yàn)违施,埃森哲與SpringSource之間的合作旨在促進(jìn)軟件處理方法,框架和工具的標(biāo)準(zhǔn)化瑟幕,在創(chuàng)建批處理應(yīng)用程序時(shí)磕蒲,企業(yè)或用戶可以始終如一地利用這些方法,框架和工具只盹。無(wú)論如何辣往,這是開(kāi)發(fā)者的福利,避免重復(fù)開(kāi)發(fā)殖卑。

2.2 Spring Batch不是調(diào)度框架

Spring Batch本身是批處理邏輯的抽象站削,是對(duì)執(zhí)行任務(wù)的規(guī)范化,跟調(diào)度框架是兩回事孵稽。它可以結(jié)合調(diào)度框架许起,由調(diào)度框架進(jìn)行調(diào)度Spring Batch作業(yè),完成對(duì)批處理的任務(wù)肛冶。調(diào)度框架有相應(yīng)的開(kāi)源軟件可供選擇街氢,如quartzcron睦袖,xxl-job等珊肃。

2.3 Spring Batch的簡(jiǎn)單說(shuō)明

前面說(shuō)的,Spring Batch把批處理簡(jiǎn)單化馅笙,標(biāo)準(zhǔn)化是如何體現(xiàn)出來(lái)伦乔。簡(jiǎn)單來(lái)說(shuō),Spring Batch把批處理簡(jiǎn)化為JobJob step兩部分董习,在Job step中烈和,把數(shù)據(jù)處理分為讀數(shù)據(jù)(Reader)、處理數(shù)據(jù)(Processor)皿淋、寫數(shù)據(jù)(Writer)三個(gè)步驟招刹,異常處理機(jī)制分為跳過(guò)恬试、重試、重啟三種疯暑,作業(yè)方式分為多線程训柴、并行、遠(yuǎn)程妇拯、分區(qū)四種幻馁。開(kāi)發(fā)者在開(kāi)發(fā)過(guò)程中,大部分工作是根據(jù)業(yè)務(wù)要求編寫Reader越锈、Processor和Writer即可仗嗦,提高了批處理開(kāi)發(fā)的效率。同時(shí)Spring Batch本身也提供了很多默認(rèn)的Reader和Writer甘凭,開(kāi)箱即用稀拐。

3.Spring Batch優(yōu)勢(shì)與使用場(chǎng)景

對(duì)于Spring Batch的優(yōu)勢(shì)和使用場(chǎng)景,在《Spring Batch批處理框架》書中对蒲,已經(jīng)作了比較全面的說(shuō)明钩蚊,個(gè)人覺(jué)得寫得比較好了,現(xiàn)摘抄下來(lái)蹈矮,可以供大家參考砰逻,以判斷Spring Batch是否適用于自己開(kāi)發(fā)的業(yè)務(wù)。

3.1 Spring Batch優(yōu)勢(shì)

  • 豐富的開(kāi)箱即用組件
    開(kāi)箱即用組件包括各種資源的讀泛鸟、寫蝠咆。讀/寫:支持文本文件讀/寫、XML文件讀/寫北滥、數(shù)據(jù)庫(kù)讀/寫刚操、JMS隊(duì)列讀/寫等。還提供作業(yè)倉(cāng)庫(kù)再芋,作業(yè)調(diào)度器等基礎(chǔ)設(shè)施菊霜,大大簡(jiǎn)化開(kāi)發(fā)復(fù)雜度。

  • 面向chunk處理
    支持多次讀济赎、一次寫鉴逞、避免多次對(duì)資源的寫入,大幅提升批處理效率司训。

  • 事務(wù)管理能力
    默認(rèn)采用Spring提供的聲明式事務(wù)管理模型构捡,面向Chunk的操作支持事務(wù)管理,同時(shí)支持為每個(gè)tasklet操作設(shè)置細(xì)粒度的事務(wù)配置:隔離級(jí)別壳猜、傳播行為勾徽、超時(shí)設(shè)置等。

  • 元數(shù)據(jù)管理
    自動(dòng)記錄Job和Step的執(zhí)行情況统扳、包括成功喘帚、失敗畅姊、失敗的異常信息、執(zhí)行次數(shù)吹由、重試次數(shù)涡匀、跳過(guò)次數(shù)、執(zhí)行時(shí)間等溉知,方便后期的維護(hù)和查看。

  • 易監(jiān)控的批處理應(yīng)用
    提供了靈活的監(jiān)控模式腕够,包括直接查看數(shù)據(jù)庫(kù)级乍、通過(guò)Spring Batch提供的API查看、JMX控制臺(tái)查看等帚湘。其中還說(shuō)到Spring Batch Admin玫荣,不過(guò)這個(gè)項(xiàng)目已不維護(hù),改為用Spring Cloud Data Flow了大诸。

  • 豐富的流程定義
    支持順序任務(wù)捅厂、條件分支任務(wù)、基于這兩種任務(wù)可以組織復(fù)雜的任務(wù)流程资柔。

  • 健壯的批處理應(yīng)用
    支持作業(yè)的跳過(guò)焙贷、重試、重啟能力贿堰、避免因錯(cuò)誤導(dǎo)致批處理作業(yè)的異常中斷辙芍。

  • 易擴(kuò)展的批處理應(yīng)用
    擴(kuò)展機(jī)制包括多線程執(zhí)行一個(gè)Step(Multithreaded step)、多線程并行執(zhí)行多個(gè)Step(Parallelizing step)羹与、遠(yuǎn)程執(zhí)行作業(yè)(Remote chunking)故硅、分區(qū)執(zhí)行(partitioning step)。

  • 復(fù)用企業(yè)現(xiàn)有IT資產(chǎn)
    提供多種Adapter能力纵搁,使得企業(yè)現(xiàn)有的服務(wù)可以方便集成到批處理應(yīng)用中吃衅。避免重新開(kāi)發(fā)、達(dá)到復(fù)用企業(yè)遺留的服務(wù)資產(chǎn)腾誉。

3.2 Spring Batch 使用的典型場(chǎng)景

  • 定期提交批處理任務(wù)

  • 并行批處理

  • 企業(yè)消息驅(qū)動(dòng)處理

  • 大規(guī)模并行批處理

  • 失敗后手動(dòng)或定時(shí)重啟

  • 按順序處理依賴的任務(wù)(可擴(kuò)展為工作流驅(qū)動(dòng)的批處理)

  • 部分處理:跳過(guò)記錄(例如徘层,回滾時(shí))

  • 批處理事務(wù)

4.Spring Batch概念預(yù)覽

上面已經(jīng)列舉了很多Spring Batch的優(yōu)點(diǎn)和適用場(chǎng)景,接下來(lái)我們對(duì)它的具體架構(gòu)及相應(yīng)使用到的概念做個(gè)簡(jiǎn)要說(shuō)明妄辩,以便實(shí)現(xiàn)后綴應(yīng)用實(shí)踐的開(kāi)發(fā)惑灵。

4.1 Spring Batch架構(gòu)

Spring Batchgithub開(kāi)源項(xiàng)目中,可以看到主要是spring-batch-infrastructurespring-batch-core模塊代碼眼耀,這也構(gòu)成了它的主要架構(gòu)英支。如下圖:

架構(gòu)

圖中突出了三個(gè)主要的高級(jí)組件:應(yīng)用層(Application),核心層(Batch Core)和基礎(chǔ)架構(gòu)層(Batch Infrastructure)哮伟。其中該應(yīng)用層包含開(kāi)發(fā)人員使用Spring Batch編寫的所有自定義的批處理作業(yè)和自定義代碼干花。 核心層包含啟動(dòng)和控制批處理作業(yè)所需的核心運(yùn)行時(shí)類妄帘。它包括 JobLauncherJobStep 的實(shí)現(xiàn)池凄。 應(yīng)用層和核心層都建立 在通用基礎(chǔ)架構(gòu)之上抡驼。此基礎(chǔ)結(jié)構(gòu)包含通用的讀(ItemReader)、寫(ItemWriter)和服務(wù)處理(如RetryTemplate)肿仑。在開(kāi)發(fā)應(yīng)用時(shí)致盟,引用spring-batch-infrastructurespring-batch-core包,即可使用基礎(chǔ)架構(gòu)層及核心層內(nèi)容尤慰,然后基于這兩層進(jìn)行應(yīng)用業(yè)務(wù)邏輯的實(shí)現(xiàn)馏锡。

4.2 Spring Batch基本概念

熟悉Spring Batch,先從基本概念學(xué)起伟端,開(kāi)發(fā)過(guò)程中不可避免會(huì)使用到這些概念杯道,因此需要先了解。下圖是Spring Batch批處理的具體組件圖:

Spring Batch組件圖

前面已經(jīng)提到责蝠,Spring Batch在基礎(chǔ)架構(gòu)層党巾,把任務(wù)抽象為JobStep,一個(gè)Job由多個(gè)Step來(lái)完成霜医,每個(gè)step對(duì)應(yīng)一個(gè)ItemReader齿拂、ItemProcessorItemWriterJob是通過(guò)JobLauncher來(lái)啟動(dòng)肴敛,JobJob的運(yùn)行結(jié)果和狀態(tài)创肥、Step的運(yùn)行結(jié)果和狀態(tài),都會(huì)保存在JobRepository中值朋。
概念說(shuō)明可見(jiàn)下表:

領(lǐng)域?qū)ο?/th> 描述
JobRepository 作業(yè)倉(cāng)庫(kù)叹侄,保存Job、Step執(zhí)行過(guò)程中的狀態(tài)及結(jié)果
JobLauncher 作業(yè)執(zhí)行器昨登,是執(zhí)行Job的入口
Job 一個(gè)批處理任務(wù)趾代,由一個(gè)或多個(gè)Step組成
Step 一個(gè)任務(wù)的具體的執(zhí)行邏輯單位
Item 一條數(shù)據(jù)記錄
ItemReader 從數(shù)據(jù)源讀數(shù)據(jù)
ItemProcessor 對(duì)數(shù)據(jù)進(jìn)行處理,如數(shù)據(jù)清洗丰辣、轉(zhuǎn)換撒强、過(guò)濾、校驗(yàn)等
ItemWriter 寫入數(shù)據(jù)到指定目標(biāo)
Chunk 給定數(shù)量的Item集合笙什,如讀取到chunk數(shù)量后飘哨,才進(jìn)行寫操作
Tasklet Step中具體執(zhí)行邏輯,可重復(fù)執(zhí)行

5.批處理工具比較

在實(shí)際應(yīng)用中琐凭,在批處理中用得較多的是場(chǎng)景是數(shù)據(jù)同步芽隆。在做數(shù)據(jù)集成工作中,常常需要從源位置把數(shù)據(jù)同步到目標(biāo)位置,以便于進(jìn)行后續(xù)的邏輯操作胚吁。在做這種批處理工具時(shí)牙躺,在網(wǎng)上查資料,發(fā)現(xiàn)用得比較多的是kettle及阿里的datax腕扶,對(duì)于這兩款工具孽拷,各有各的優(yōu)缺點(diǎn),我也試用了一段時(shí)間(有機(jī)會(huì)的話會(huì)針對(duì)它們的使用再寫一下文章)半抱,下面可以簡(jiǎn)要做個(gè)說(shuō)明脓恕,做個(gè)比較。

5.1 kettle

kettle是一款可以可視化編程的開(kāi)源ETL工具窿侈,把數(shù)據(jù)處理簡(jiǎn)化為Job和Transform进肯,在Transform中,提供了各種數(shù)據(jù)讀棉磨、寫、轉(zhuǎn)換学辱、處理的工具乘瓤。開(kāi)發(fā)者僅需要以工具界面中拖拽相應(yīng)的工具,進(jìn)行步驟連接即可完成一個(gè)ETL工作策泣,不同的工具及步驟結(jié)合起來(lái)可以形成相對(duì)復(fù)雜的作業(yè)流程衙傀,以完成ETL工作。它的優(yōu)點(diǎn)就在于可視化編程萨咕,非常容易上手统抬,對(duì)于不熟悉編程的人員來(lái)說(shuō),是一個(gè)福利危队。個(gè)人感覺(jué)針對(duì)簡(jiǎn)單(即邏輯判斷和操作不多的)的ETL工作聪建,是比較推薦用它。但缺點(diǎn)也有茫陆,一是易學(xué)難精金麸,它提供的操作非常多,要把它們都熟悉而且做到相互結(jié)合來(lái)完成任務(wù)簿盅,是有一定難度的挥下。二是對(duì)于一些復(fù)雜的的邏輯判斷及操作,kettle雖然可以做桨醋,但操作起來(lái)就很復(fù)雜棚瘟。三是不方便調(diào)試,盡管它內(nèi)置有調(diào)試功能喜最,但由于在轉(zhuǎn)換中偎蘸,操作都是并行的,單步調(diào)試比較難實(shí)現(xiàn)。四是內(nèi)存消耗禀苦,本身kettle界面跑起來(lái)已經(jīng)是比較耗內(nèi)存的蔓肯,而作業(yè)中數(shù)據(jù)量大的時(shí)候,內(nèi)存消耗更大振乏。

5.2 datax

DataX 是阿里巴巴集團(tuán)內(nèi)被廣泛使用的離線數(shù)據(jù)同步工具/平臺(tái)蔗包,實(shí)現(xiàn)包括 MySQL、Oracle慧邮、SqlServer调限、Postgre、HDFS误澳、Hive耻矮、ADS、HBase忆谓、TableStore(OTS)裆装、MaxCompute(ODPS)、DRDS 等各種異構(gòu)數(shù)據(jù)源之間高效的數(shù)據(jù)同步功能倡缠。DataX本身作為數(shù)據(jù)同步框架哨免,將不同數(shù)據(jù)源的同步抽象為從源頭數(shù)據(jù)源讀取數(shù)據(jù)的Reader插件,以及向目標(biāo)端寫入數(shù)據(jù)的Writer插件昙沦,理論上DataX框架可以支持任意數(shù)據(jù)源類型的數(shù)據(jù)同步工作琢唾。同時(shí)DataX插件體系作為一套生態(tài)系統(tǒng), 每接入一套新數(shù)據(jù)源該新加入的數(shù)據(jù)源即可實(shí)現(xiàn)和現(xiàn)有的數(shù)據(jù)源互通。

DataX從架構(gòu)上而言也是設(shè)計(jì)得很簡(jiǎn)潔的盾饮,它作為數(shù)據(jù)搬運(yùn)工采桃,支持任意數(shù)據(jù)類型的同步工作,跟Spring Batch有異曲同工之妙丘损,DataX本身作為離線數(shù)據(jù)同步框架普办,采用Framework + plugin架構(gòu)構(gòu)建。將數(shù)據(jù)源讀取和寫入抽象成為Reader/Writer插件徘钥,納入到整個(gè)同步框架中泌豆。
Reader:Reader為數(shù)據(jù)采集模塊,負(fù)責(zé)采集數(shù)據(jù)源的數(shù)據(jù)吏饿,將數(shù)據(jù)發(fā)送給Framework踪危。
Writer: Writer為數(shù)據(jù)寫入模塊,負(fù)責(zé)不斷向Framework取數(shù)據(jù)猪落,并將數(shù)據(jù)寫入到目的端贞远。
Framework:Framework用于連接reader和writer,作為兩者的數(shù)據(jù)傳輸通道笨忌,并處理緩沖蓝仲,流控,并發(fā),數(shù)據(jù)轉(zhuǎn)換等核心技術(shù)問(wèn)題袱结。

DataX本身也提供比較豐富的Reader和Writer亮隙,按它的文檔,以它作為工具進(jìn)行數(shù)據(jù)同步垢夹,還是比較簡(jiǎn)單的溢吻。而且有阿里的背書,可放心使用果元。不過(guò)缺點(diǎn)一是不常維護(hù)更新促王,github上最近的更新是去年(2018);二是二次開(kāi)發(fā)有難度而晒,我嘗試跑源碼蝇狼,想做二次開(kāi)發(fā),雖然最終跑起來(lái)倡怎,但也費(fèi)了不少力氣迅耘。三是雖然架構(gòu)清晰,但使用規(guī)則操作起來(lái)不是很靈活监署,基本是通過(guò)json配置文件颤专,按規(guī)則進(jìn)行配置,想自定義規(guī)則是不行的焦匈。

5.3 總體感受

相對(duì)而言,統(tǒng)合考慮易用性昵仅、可擴(kuò)展性缓熟,靈活性,可編程性摔笤,個(gè)人感覺(jué)Spring Batch會(huì)比較適合有點(diǎn)編程基礎(chǔ)(特別是使用Spring及SpringBoot框架)的開(kāi)發(fā)人員够滑,針對(duì)業(yè)務(wù)編程,可自由發(fā)揮吕世。

6彰触、總結(jié)

本文章對(duì)Spring Batch框架進(jìn)行簡(jiǎn)要介紹,并指出它的優(yōu)勢(shì)及使用場(chǎng)景命辖,然后對(duì)它使用的組件基本概念進(jìn)行簡(jiǎn)要說(shuō)明况毅,最后跟現(xiàn)在比較通用的kettle和DataX進(jìn)行比較,希望讀者通過(guò)這篇文章尔艇,對(duì)Spring Batch有一定的了解尔许。在接下來(lái)的文章,即進(jìn)入實(shí)戰(zhàn)類的編寫终娃,逐步構(gòu)建企業(yè)級(jí)的批處理應(yīng)用味廊。

參考資源

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末红氯,一起剝皮案震驚了整個(gè)濱河市框咙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌痢甘,老刑警劉巖喇嘱,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異塞栅,居然都是意外死亡者铜,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門放椰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)作烟,“玉大人,你說(shuō)我怎么就攤上這事砾医∧昧茫” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵如蚜,是天一觀的道長(zhǎng)压恒。 經(jīng)常有香客問(wèn)我,道長(zhǎng)错邦,這世上最難降的妖魔是什么探赫? 我笑而不...
    開(kāi)封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮撬呢,結(jié)果婚禮上伦吠,老公的妹妹穿的比我還像新娘。我一直安慰自己魂拦,他們只是感情好毛仪,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著芯勘,像睡著了一般潭千。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼跪但。 笑死狈癞,一個(gè)胖子當(dāng)著我的面吹牛茄靠,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蝶桶,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼慨绳,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了真竖?” 一聲冷哼從身側(cè)響起脐雪,我...
    開(kāi)封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎恢共,沒(méi)想到半個(gè)月后战秋,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡讨韭,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年脂信,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片透硝。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡狰闪,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出濒生,到底是詐尸還是另有隱情埋泵,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布罪治,位于F島的核電站丽声,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏规阀。R本人自食惡果不足惜恒序,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一瘦麸、第九天 我趴在偏房一處隱蔽的房頂上張望谁撼。 院中可真熱鬧,春花似錦滋饲、人聲如沸厉碟。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)箍鼓。三九已至,卻和暖如春呵曹,著一層夾襖步出監(jiān)牢的瞬間款咖,已是汗流浹背何暮。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留铐殃,地道東北人海洼。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像富腊,于是被迫代替她去往敵國(guó)和親坏逢。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

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