微服務實踐01--微服務管理11--緩存01--技術

微服務實踐目錄,可以參見連接。

作者的公眾號,之后文章都會先發公眾號

緩存系列包括:
1.微服務管理-11.緩存概述
1.微服務管理-11.緩存-0.技術
1.微服務管理-11.緩存-1.多級緩存設計
1.微服務管理-11.緩存-2.典型緩存架構設計
1.微服務管理-11.緩存-3.實踐
1.微服務管理-11.緩存-4.總結

背景

隨著互聯網的普及,內容信息越來越復雜,用戶數和訪問量越來越大,我們的應用需要支撐更多的并發量。對于一個計算機系統來說輸入、輸出、計算、存儲都需要不斷的擴展,從原來的單臺機器擴展到多臺機器以增強系統的輸入、輸出、計算、存儲能力。在硬件上以多臺廉價機器替換單臺的昂貴服務器的趨勢已經從GFS、云計算領域的興起而不斷的被應用在實踐中。相對于硬件基礎設施來說,軟件基礎設施也跟隨者小型化、廉價化的趨勢在不斷的分裂發展。從軟件基礎層面上有使用分布式的方式解決輸入、輸出、計算、存儲能力的問題。

軟件基礎設施方面的輸入可以使用 OpenResty這種可以高度定制化的接入服務,輸出可以使用CDN、P2P這樣的分發網絡進行。計算可以使用微服務,分布式計算解決差異化、大批量計算的問題。存儲方面的發展對于其他方面來說相對比較緩慢。近些年不斷提出存儲方面的特定場景解決方案:大數據存儲與計算方案,NewSql的關系型存儲解決方案,文檔型存儲解決方案等。但業內對于非關系型數據庫的研究與應用還是處于不是很穩定的階段,菲關系型數據庫一方面解決存儲性能的問題,一方面有被CAP所限制。所以出現了BASE這種對CAP進行權衡的方式。

從存儲的基本理論(ACID,CAP,BASE)可以得出存儲的可伸縮性、性能等方面是有理論約束的。不能將系統所要求的并發量、響應時間等壓在數據庫的能力上,所以緩存技術再一次被提上桌面。

數據庫每秒能接受的請求次數也是有限的(或者文件的讀寫也是有限的),但是我們不可能把我們的持久化技術不不實用數據庫。所以,如何能夠有效利用有限的資源來提供盡可能大的吞吐量?就成為數據庫在軟件系統中的最主要責任。一個有效的辦法就是引入緩存,打破標準流程,每個環節中請求可以從緩存中直接獲取目標數據并返回,從而減少計算量,有效提升響應速度,讓有限的資源服務更多的用戶。

技術對比

我們這里討論的緩存技術是針對數據管理與數據存儲方面的技術。不包括像瀏覽器緩存,cdn緩存,nginx緩存這樣的技術。從這個角度說,所有的內存式數據庫都可以作為緩存使用。下圖為google查詢緩存技術的趨勢圖:

緩存技術活躍趨勢

在緩存技術剛出現的那幾年,memcache和redis是不相上下的。后來redis異軍突起,其他的緩存技術已經不可與redis同日而語。但對于技術來說,不同的技術有不同的側重點有自己所適用的場景。所以對于每項技術都需要有一些了解。
對于緩存技術有一些通用的特性,還有一些自己的特點。所以本文會從通用的角度對比幾個現在可以看到的,會從不同的方面進行對比。具體指標有:客戶端,分布式支撐,命中率,最大元素數,換入換出策略,數據類型,持久化,監控管理,緩存穿透支持,標準規范(JSR-107 JAVA緩存規范)

  • redis

    • 介紹
      Redis是一個開源(BSD許可)的內存數據結構存儲,用作數據庫、緩存和消息代理。它支持數據結構,如字符串、哈希、列表、集合、帶范圍查詢的排序集合、位圖、超日志、帶半徑查詢的地理空間索引和流。Redis具有內置的復制、Lua腳本、LRU逐出、事務和不同級別的磁盤持久性,并通過Redis Sentinel和帶有Redis集群的自動分區提供高可用性。

    • 特點
      Redis能讀的速度是110000次/s,寫的速度是81000次/s 。Redis的所有操作都是原子性的,同時Redis還支持對幾個操作全并后的原子性執行。Redis還支持 publish/subscribe, 通知, key 過期等等特性。可以使用命令行進行非常容易的操作。Redis支持Lua腳本擴展功能。

    • 類型
      key-value型,遠程服務。

    • 客戶端
      多種宿主語言客戶端支持,客戶端還可以支持JSR-107標準。可以參見:https://redis.io/clients

    • 最大元素數
      Redis最大支持的Key大小、Value大小都為512MB。最多可以建立2^32個key,經過實踐測試,每個實例至少可以處理2.5億個key。每個hash,list,set和sort set都可以容納2^32個元素。可以參見:https://redis.io/topics/data-types-intro
      https://redis.io/topics/faq

    • 數據類型
      支持String、Hash、List、Set、Sorted Set、Geo、Stream、HyperLogLog。每種都可以有多種用法。

    • 持久化
      Redis支持三種持久化方式:AOF,RDB,禁止持久化。可以參見:https://redis.io/topics/persistence
      換出策略支持多種:lru,lfu,fifo。可以參見:https://redis.io/topics/lru-cache

    • 監控管理
      Redis原生支持多種監控方式。可以使用redis-cli中的monitor,info,time命令行參數可以獲取信息。從命令上可以獲得多種類型的原始數據包括很多redis的指標型數據。還有多種類型的界面化監控軟件Prometheus--redis_exporter,RedisLive等都可以很好的滿足監控的要求。

    • 緩存穿透、緩存同步
      redis本身是未支持的緩存穿透與緩存同步的功能,需要使用第三方組建完成。可以使用阿里的canal。

    • 分布式支持
      Redis支持復制(replication)、Sentinel 和集群(cluster)三個多機功能。可以支持一致性Hash算法進行數據的分片工作。

  • Memcached

    • 介紹
      Memcached是免費開放源代碼、高性能、分布式內存對象緩存系統,本質上是通用的,但旨在通過減輕數據庫負載來加速動態web應用程序。Memcached是內存中的鍵值存儲,用于存儲數據庫調用、API調用或頁面呈現結果中的任意小塊數據(字符串、對象)。Memcached簡單但功能強大。它的簡單設計促進了快速部署,易于開發,并解決了大型數據緩存面臨的許多問題。它的API可用于大多數流行語言。

    • 特點
      Memcached 是單進程多線程的工作模式,請求到達時,主線程會將請求分發給多個工作線程,因此必須要做數據的互斥。memcached每秒可以輕松處理200,000+個請求。使用libevent提供事件驅動能力。資料比較難找。

    • 類型
      key-value型,遠程服務。

    • 客戶端
      多種宿主語言客戶端支持。

    • 最大元素數
      Memcached單個key-value大小有限,一個value最大只支持1MB。MemCache中可以保存的item數據量是沒有限制的,只要內存足夠。MemCache單進程在32位機中最大使用內存為2G,這個之前的文章提了多次了,64位機則沒有限制。

    • 數據類型
      支持String,Object類型

    • 持久化
      MemCached不支持數據持久化,斷電或重啟后數據消失,但其穩定性是有保證的。

    • 監控管理
      memcache使用命令stats可以得到很多監控信息。界面化的監控工具有open-falcon,memcachephp可以使用。

    • 緩存穿透、緩存同步
      memcache本身是未支持的緩存穿透與緩存同步的功能,需要使用第三方組建完成。可以使用阿里的canal。

    • 分布式支持
      各個memcached服務器之間互不通信,各自獨立存取數據,不共享任何信息。服務器并不具有分布式功能,分布式部署取決于memcache客戶端。

  • etcd

    • 介紹
      etcd是一個分布式鍵值對存儲,設計用來可靠而快速的保存關鍵數據并提供訪問。通過分布式鎖,leader選舉和寫屏障(write barriers)來實現可靠的分布式協作。etcd集群是為高可用,持久性數據存儲和檢索而準備。
      您的應用程序可以讀取數據并將數據寫入etcd。一個簡單的用例是將數據庫連接細節或特性標志作為鍵值對存儲在etcd中。這些值可以被監視,允許應用程序在更改時重新配置自身。高級使用利用etcd的一致性保證來實現數據庫領導人選舉或跨工作集群執行分布式鎖定。

    • 特點
      etcd提供了leader選舉、分布式時鐘、分布式鎖、持續監控(watch)和集群內各個成員的liveness監控等功能。zookeer雖然也實現了類似的功能,但是不方便易用,還需借助Netflix提供的Apache Curator庫。
      etcd比較多的應用場景是用于服務發現。etcd是CoreOS團隊于2013年6月發起的開源項目,它的目標是構建一個高可用的分布式鍵值(key-value)數據庫。etcd內部采用raft協議作為一致性算法,etcd基于Go語言實現。安裝配置簡單,而且提供了HTTP API進行交互,使用也很簡單。根據官方提供的benchmark數據,單實例支持每秒2k+讀操作。

    • 類型
      key-value型,遠程服務。

    • 客戶端
      多種宿主語言客戶端支持。可以參見:https://etcd.io/docs/v3.4.0/integrations/

    • 最大元素數
      etcd旨在處理典型的元數據小鍵值對。默認情況下,任何請求的最大大小為1.5 MiB。 可以通過etcd服務器的--max-request-bytes標志配置此限制。默認的存儲大小限制為2GB,可使用--quota-backend-bytes標志進行配置。 建議在正常環境下使用8GB的最大大小。可以參見:https://github.com/etcd-io/etcd/blob/master/Documentation/dev-guide/limit.md

    • 數據類型
      因為使用http api的方式進行數據管理,所以對于數據類型的直接支持就只有String類型。

    • 持久化
      Etcd 就會在默認的工作目錄下生成兩個子目錄:snap 和 wal。兩個目錄的作用說明如下。
      snap:用于存放快照數據。Etcd 為防止 WAL 文件過多會創建快照,snap 用于存儲 Etcd 的快照數據狀態。
      wal:用于存放預寫式日志,其最大的作用是記錄整個數據變化的全部歷程。在 Etcd 中,所有數據的修改在提交前,都要先寫入 WAL 中。使用 WAL 進行數據的存儲使得 Etcd 擁有故障快速回復和數據回滾這兩個重要功能。

    • 監控管理
      etcd因為它的k8s體系的原因,可以直接使用 Prometheus
      進行監控。并且為其提供了完整的指標體系。可以參見:https://etcd.io/docs/v3.4.0/metrics/

    • 緩存穿透、緩存同步
      主要針對服務發現場景,所以這方面的考慮應該較少。因為我沒有找到etcd關于這方面的資料。

    • 分布式支持
      集群方式類似與zookeeper。

  • H2 Database

    • 介紹
      H2是一個Java編寫的關系型數據庫,它可以被嵌入Java應用程序中使用,或者作為一個單獨的數據庫服務器運行。H2數據庫的前身是HypersonicSQL,它的名字的含義是 Hypersonic2,但是它的代碼是從頭開始編寫的,沒有使用HypersonicSQL或者HSQLDB的代碼。

    • 特點
      H2 Database是一個開源的嵌入式數據庫引擎,采用java語言編寫,不受平臺的限制,同時H2 Database提供了一個十分方便的web控制臺用于操作和管理數據庫內容。H2 Database還提供兼容模式,可以兼容一些主流的數據庫,因此采用H2 Database作為開發期的數據庫非常方便。

    • 類型
      RDBMS,內嵌,本地。

    • 客戶端
      因為h2使用java編寫的內嵌式數據庫,所以對于java的支持,或jvm上語言支持較好。

    • 最大元素數

    • 數據類型
      基本支持所有的sql數據類型。

    • 持久化
      支持單個文件獨立存儲。

    • 監控管理
      提供界面化操作。

    • 緩存穿透、緩存同步
      未知。

    • 分布式支持
      支持集群。可以參見:http://www.h2database.com/html/advanced.html#clustering

  • Guava Cache

    • 介紹
      Guava是google的一個開源java框架。guava工程包含了若干被Google的 Java項目廣泛依賴的核心庫,例如:集合 [collections] 、緩存 [caching] 、原生類型支持 [primitives support] 、并發庫 [concurrency libraries] 、通用注解 [common annotations] 、字符串處理 [string processing] 、I/O 等等。 所有這些工具每天都在被Google的工程師應用在產品服務中。

    • 特點
      Guava Cache是在內存中緩存數據,相比較于數據庫或redis存儲,訪問內存中的數據會更加高效。Guava官網介紹,下面的這幾種情況可以考慮使用Guava Cache:愿意消耗一些內存空間來提升速度。預料到某些鍵會被多次查詢。緩存中存放的數據總量不會超出內存容量。

    • 類型
      key-value型,內嵌,本地。

    • 客戶端
      java以及JVM上語言。

    • 最大元素數
      未找到最大實際測試數據。但是有文章說可能會造成oom的問題。GuavaCache支持四種回收方式: (1)基于容量回收(Size-based Eviction);(2)基于時間回收(Timed Eviction);(3)基于引用類型的回收Reference-based Eviction);(4)手動回收。 4. 它可以監控加載/命中情況。

    • 數據類型
      java本身所有的數據類型都可以支持。

    • 持久化
      Guava Cache不持久化數據。

    • 監控管理
      不支持。CacheBuilder.recordStats()用來開啟Guava Cache的統計功能。

    • 緩存穿透、緩存同步
      未支持。

    • 分布式支持
      需要自己實現。

  • Caffeine

    • 介紹
      Caffeine使用的是一個內存緩存,是基于Google 的 Guava與ConcurrentLinkedHashMap進行實現的。Caffeine是一個開源的Java緩存庫,它能提供高命中率和出色的并發能力。

    • 特點
      Caffeine提出了《設計一個現代的緩存》,這樣的現代化緩存架構。在文章中Caffeine使用Caffeine設計的Window TinyLfu作為回收策略,TinyLfu算法提供了一個近乎最佳的命中率。

    • 類型
      key-value型,內嵌,本地。

    • 客戶端
      支持JSR-107標準。可以與Spring Cache集成使用。

    • 最大元素數
      無相關數據。

    • 數據類型
      java本身所有的數據類型都可以支持。

    • 持久化
      無相關數據。

    • 監控管理
      緩存訪問統計功能。

    • 緩存穿透、緩存同步
      未支持。

    • 分布式支持
      未支持。

  • Ehcache

    • 介紹
      Ehcache是一個開源的、基于標準的緩存,它可以提高性能、減輕數據庫負載并簡化可伸縮性。它是使用最廣泛的基于Java的緩存,因為它健壯、可靠、功能齊全,并且與其他流行的庫和框架集成。Ehcache可以從進程內緩存擴展到進程內/進程外混合部署和太字節大小的緩存。

    • 特點
      Ehcache是一個純java的進程內緩存框架,具有快速、精干的特點。是hibernate默認的cacheprovider。支持REST和SOAP api等特點。

    • 類型
      key-value型,內嵌,本地。

    • 客戶端
      Java或者Jvm上語言。可通過RMI、可插入APi等方式進行分布式緩存。

    • 最大元素數
      通過參數配置。

    • 數據類型
      java本身所有的數據類型都可以支持。

    • 持久化
      可以持久化到硬盤上。

    • 監控管理
      Ehcache最初是由Greg Luck于2003年開始開發。2009年,該項目被Terracotta購買。軟件仍然是開源,但一些新的主要功能只能在商業產品中使用,其中主要的產品有Big MemoryGo, Big Memory Max, Enterprise Ehcache.其官網有介紹http://www.terracotta.org/products/

    • 緩存穿透、緩存同步
      可以使用j2cache進行二級緩存設置。

    • 分布式支持
      使用Terracotta進行集群處理。

  • hazelcast

    • 介紹
      Hazelcast全稱是Hazelcast IMDG (In-Memory Data Grid),內存數據網格。新的支持數據的應用程序可以提供變革性的業務能力——如果它們滿足當今的即時性要求的話。Hazelcast平臺允許您通過跨計算機集群訪問可擴展的共享RAM池來構建最快的應用程序。
    • 特點
      Hazelcast是由Hazelcast公司開發和維護的開源產品,可以為基于jvm環境運行的各種應用提供分布式集群和分布式緩存服務。
    • 類型
      Key-Value型,本地/遠程。
    • 客戶端
      java本身所有的數據類型都可以支持。
    • 最大元素數
      無數據。
    • 數據類型
      java本身所有的數據類型都可以支持。
    • 持久化
      支持3種持久化策略,Read-Through、Write-Through和Write-Behind。
    • 監控管理
      未找到相關資料。
    • 緩存穿透、緩存同步
      可以使用j2cache進行二級緩存設置。
    • 分布式支持
      支持Coherence和Terracotta。
  • Apache Ignite

    • 介紹
      Apache Ignite內存數組組織框架是一個高性能、集成和分布式的內存計算和事務平臺,用于大規模的數據集處理,比傳統的基于磁盤或閃存的技術具有更高的性能,同時他還為應用和不同的數據源之間提供高性能、分布式內存中數據組織管理的功能。
      Ignite來源于尼基塔·伊萬諾夫于2007年創建的GridGain系統公司開發的GridGain軟件,尼基塔領導公司開發了領先的分布式內存片內數據處理技術-領先的Java內存片內計算平臺,今天在全世界每10秒它就會啟動運行一次。他有超過20年的軟件應用開發經驗,創建了HPC和中間件平臺,并在一些創業公司和知名企業都做出過貢獻,包括Adaptec, Visa和BEA Systems。尼基塔也是使用Java技術作為服務器端開發應用的先驅者,1996年他在為歐洲大型系統做集成工作時他就進行了相關實踐。
      2014年3月,GridGain公司將該軟件90%以上的功能和代碼開源,僅在商業版中保留了高端企業級功能,如安全性,數據中心復制,先進的管理和監控等。2015年1月,GridGain通過Apache 2.0許可進入Apache的孵化器進行孵化,很快就于8月25日畢業并且成為Apache的頂級項目,9月28日即發布了1.4.0版,應該說發展、迭代速度非常之快。該技術相關資料較少,但確是一個很有潛力的技術,解決了大規模、大數據量、高并發企業級或者互聯網應用面臨的若干痛點。

    • 特點
      Spark是一個和Ignite類似的項目。但是Spark聚焦于OLAP,而Ignite憑借強大的事務處理能力在混合型的OLTP/ OLAP場景中表現更好。特別是針對Hadoop,Ignite將為現有的Map/Reduce,Pig或Hive作業提供即插即用式的加速,避免了推倒重來的做法,而Spark需要先做數據ETL,更適合新寫的分析應用。

    • 類型
      Key-Value型,本地/遠程。

    • 客戶端
      使用語言api和rest api進行操作。

    • 最大元素數
      PB級數據

    • 數據類型
      java本身所有的數據類型都可以支持。

    • 持久化
      持久化到磁盤。

    • 監控管理
      自身就支持監控。

    • 緩存穿透、緩存同步
      使用j2cache進行緩存穿透。

    • 分布式支持
      自身支持集群。

  • LevelDB

    • 介紹
      LevelDB是一個由Google編寫的快捷鍵值存儲庫,它提供了從字符串鍵到字符串值的有序映射。2013年Facebook基于LevelDB開發出RocksDB,特別針對服務器負載而優化。

    • 特點
      LevelDB 只是一個 C/C++ 編程語言的庫, 不包含網絡服務封裝, 所以無法像一般意義的存儲服務器(如 MySQL)那樣, 用客戶端來連接它. LevelDB 自己也聲明, 使用者應該封裝自己的網絡服務器.

    • 類型
      key-value型,遠程。

    • 客戶端
      需要自行封裝。

    • 最大元素數
      LevelDB 是單進程的服務,性能非常之高,在一臺4核Q6600的CPU機器上,每秒鐘寫數據超過40w,而隨機讀的性能每秒鐘超過10w。 此處隨機讀是完全命中內存的速度,如果是不命中速度大大下降。

    • 數據類型

    • 持久化
      LevelDB底層存儲利用了LSM tree的思想, RocksDB是Facebook基于LevelDB開發的存儲引擎,針對LevelDB做了很多優化,但是大部分模塊的實現機制是一樣的。

    • 監控管理
      未找到相關資料。

    • 緩存穿透、緩存同步
      未找到相關資料。

    • 分布式支持
      leveldb是google開源的單機key-value存儲引擎。

  • alibaba tair

    • 介紹
      Tair是快速訪問內存(MDB)/持久性(LDB)存儲服務。Tair采用高性能、高可用的分布式集群體系結構,能夠滿足企業對讀寫性能和可擴展容量的高要求。
    • 特點
      一個 Tair 集群主要包括3個必選模塊:ConfigServer、Dataserver和 Client.
    • 類型
      key-value型,遠程。
    • 客戶端
      Java
    • 最大元素數
      資料不全。
    • 數據類型
      java本身所有的數據類型都可以支持。
    • 持久化
      Tair 的存儲引擎有一個抽象層,只要滿足存儲引擎需要的接口,便可以很方便地替換 Tair 底層的存儲引擎。比如你可以很方便地將 bdb、tc 甚至 MySQL 作為 Tair 的存儲引擎,而同時使用 Tair 的分布方式、同步等特性。
    • 監控管理
      資料不全。
    • 緩存穿透、緩存同步
      資料不全。
    • 分布式支持
      本身就是分布式的。

總結

緩存技術有很多中,但是每個緩存技術都有自己的特點。最強大的是Apache Ignite把緩存做成了Cache as a Service(CaaS) 緩存即服務。下來就是幾個獨立的緩存數據庫:alibaba tair,redis,memcache,etcd。內嵌式的緩存有Hazelcast,Ehcache,Guava Cache,H2 Database。在這些技術中還有兩種可以支持IMGD (In-Memory Data Grid內存數據網格)的兩種Apache Ignite,Hazelcast。Apache Ignite還可以支持網格計算的緩存。Apache Ignite還有蘇寧 11.11:基于 Apache Ignite 日均十億數據對賬實踐應用這樣的實踐應用。

不要將所有的壓力、吞吐都壓在數據庫上,因為數據庫理論上是有限制的。其他還有像zookeeper,mysql memory database,sqlite3,Berkeley DB服務可以作為緩存使用。

參考

【分布式存儲】CAP、BASE與ACID原則
Memcache,Redis,MongoDB(數據緩存系統)方案對比與分析
緩存那些事
Tair
Etcd官方文檔中文版
阿里云Redis開發規范
Apache Ignite 初探
Apache Ignite中文網
Guava Cache使用介紹
etcd:從應用場景到實現原理的全方位解讀
H2 Database簡介
緩存篇 : Guava cache 之全面剖析
用 Terracotta 實現 Master-Worker
Hazelcast介紹和優勢
Apache Ignite簡介以及Ignite和Coherence、Gemfire、Redis等的比較

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,431評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,637評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,555評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,900評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,629評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,976評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,976評論 3 448
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,139評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,686評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,411評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,641評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,129評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,820評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,233評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,567評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,362評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,604評論 2 380

推薦閱讀更多精彩內容