Istio熔斷器解析

作者:Laszlo Bence Nagy
譯者:馬若飛
審校:羅廣明
原文:https://banzaicloud.com/blog/istio-circuit-breaking/

編者按

作者簡(jiǎn)要介紹了熔斷的概念贩挣,然后以實(shí)戰(zhàn)演練的方式分別演示了如何通過(guò)Backyards UI王财、CLI等方式創(chuàng)建并設(shè)置熔斷功能绒净。注:Backyards是Banzai Cloud開(kāi)發(fā)的一款基于Istio的服務(wù)網(wǎng)格產(chǎn)品挂疆,本文是該產(chǎn)品功能介紹系列中的一篇缤言。

前言

Istio因靈活的可觀察性和安全的服務(wù)間通信受到了贊許。然而俐东,其他更重要的功能才真正使得Istio成為了服務(wù)網(wǎng)格里的瑞士軍刀瞻离,當(dāng)遇到運(yùn)行時(shí)長(zhǎng)套利、延遲和錯(cuò)誤率等SLO問(wèn)題時(shí),服務(wù)間的流量管理能力是至關(guān)重要的验辞。

在今年早些時(shí)候發(fā)布 Istio operator 時(shí)跌造,我們的目標(biāo)(除了管理Istio的安裝和升級(jí))是為這些出色的流量路由特性提供支持壳贪,同時(shí)使所有的功能都更加易用。最后瑟幕,我們創(chuàng)建了一個(gè)簡(jiǎn)單且自動(dòng)化的服務(wù)網(wǎng)格Backyards辣往,它在Istio operator之上提供了管理UI站削、CLI 和GraphQL API的能力许起。Backyards集成到了Banzai Cloud的容器管理平臺(tái) Pipeline中街氢,也可以作為一個(gè)單一的產(chǎn)品獨(dú)立工作。當(dāng)然馅笙,將Backyards與Pipeline一起使用會(huì)為用戶提供特別的好處(比如在多云和混合云環(huán)境中管理應(yīng)用程序)董习,Backyards也可以被用于任何Kubernetes的安裝環(huán)境皿淋。

我們已經(jīng)發(fā)布了一些Backyards相關(guān)特性的文章比如:

熔斷:失敗是一個(gè)選項(xiàng)

在微服務(wù)架構(gòu)中疯暑,服務(wù)可能會(huì)用不同的語(yǔ)言實(shí)現(xiàn)并部署在多個(gè)節(jié)點(diǎn)或集群上妇拯,具有不同的響應(yīng)時(shí)間或故障率越锈。如果服務(wù)成功(并且及時(shí)地)響應(yīng)了請(qǐng)求甘凭,那么它的性能就算是令人滿意的对蒲。但現(xiàn)實(shí)情況并非如此蹈矮,下游客戶端應(yīng)該在上游服務(wù)過(guò)于緩慢時(shí)受到保護(hù)。反之踊东,上游服務(wù)也必須被保護(hù)再芋,以免被積壓的請(qǐng)求拖垮济赎。在多客戶端下情況會(huì)更加復(fù)雜司训,并可能導(dǎo)致整個(gè)基礎(chǔ)設(shè)施出現(xiàn)一系列的連鎖故障壳猜。這一問(wèn)題的解決方案是采用經(jīng)過(guò)時(shí)間檢驗(yàn)的熔斷器模式统扳。

一個(gè)熔斷器可以有三種狀態(tài):關(guān)閉、打開(kāi)和半開(kāi)啥辨,默認(rèn)情況下處于關(guān)閉狀態(tài)溉知。在關(guān)閉狀態(tài)下级乍,無(wú)論請(qǐng)求成功或失敗玫荣,到達(dá)預(yù)先設(shè)定的故障數(shù)量閾值前捅厂,都不會(huì)觸發(fā)熔斷焙贷。而當(dāng)達(dá)到閾值時(shí)辙芍,熔斷器就會(huì)打開(kāi)故硅。當(dāng)調(diào)用處于打開(kāi)狀態(tài)的服務(wù)時(shí)吃衅,熔斷器將斷開(kāi)請(qǐng)求,這意味著它會(huì)直接返回一個(gè)錯(cuò)誤妄辩,而不去執(zhí)行調(diào)用眼耀。通過(guò)在客戶端斷開(kāi)下游請(qǐng)求的方式哮伟,可以在生產(chǎn)環(huán)境中防止級(jí)聯(lián)故障的發(fā)生楞黄。在經(jīng)過(guò)事先配置的超時(shí)時(shí)長(zhǎng)后鬼廓,熔斷器進(jìn)入半開(kāi)狀態(tài)碎税,這種狀態(tài)下故障服務(wù)有時(shí)間從其中斷的行為中恢復(fù)雷蹂。如果請(qǐng)求在這種狀態(tài)下繼續(xù)失敗责蝠,則熔斷器將再次打開(kāi)并繼續(xù)阻斷請(qǐng)求霜医。否則熔斷器將關(guān)閉支子,服務(wù)將被允許再次處理請(qǐng)求值朋。

Circuit Breaking

Istio中的熔斷

Istio的 熔斷 可以在 流量策略 中配置昨登。Istio的 自定義資源Destination Rule里丰辣,TrafficPolicy字段下有兩個(gè)和熔斷相關(guān)的配置: ConnectionPoolSettingsOutlierDetection笙什。

ConnectionPoolSettings可以為服務(wù)配置連接的數(shù)量琐凭。OutlierDetection用來(lái)控制從負(fù)載均衡池中剔除不健康的實(shí)例统屈。

例如愁憔,ConnectionPoolSettings控制請(qǐng)求的最大數(shù)量吨掌,掛起請(qǐng)求代虾,重試或者超時(shí)棉磨;OutlierDetection 設(shè)置服務(wù)被從連接池剔除時(shí)發(fā)生錯(cuò)誤的請(qǐng)求數(shù)乘瓤,可以設(shè)置最小逐出時(shí)間和最大逐出百分比衙傀。有關(guān)完整的字段列表统抬,請(qǐng)參考文檔.

Istio在底層使用了Envoy的熔斷特性

讓我們來(lái)看看Destination Rule中有關(guān)熔斷的配置:

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: notifications
spec:
  host: notifications
  trafficPolicy:
    connectionPool:
      tcp:
        maxConnections: 1
      http:
        http1MaxPendingRequests: 1
        maxRequestsPerConnection: 1
    outlierDetection:
      consecutiveErrors: 1
      interval: 1s
      baseEjectionTime: 3m
      maxEjectionPercent: 100

使用ConnectionPoolSettings字段中的這些設(shè)置金麸,在給定的時(shí)間內(nèi)只能和notifications 服務(wù)建立一個(gè)連接:每個(gè)連接最多只能有一個(gè)掛起的請(qǐng)求挥下。如果達(dá)到閾值,熔斷器將開(kāi)始阻斷請(qǐng)求喜最。

OutlierDetection部分的設(shè)置用來(lái)檢查每秒調(diào)用服務(wù)是否有錯(cuò)誤發(fā)生禀苦。如果有振乏,則將服務(wù)從負(fù)載均衡池中逐出至少三分鐘(100%最大彈出百分比表示,如果需要舟陆,所有的服務(wù)實(shí)例都可以同時(shí)被逐出)忆谓。

在手動(dòng)創(chuàng)建Destination Rule資源時(shí)有一件事需要特別注意倡缠,那就是是否為該服務(wù)啟用了mTLS昙沦。如果是的話,還需要在Destination Rule中設(shè)置如下字段丘损,否則當(dāng)調(diào)用movies服務(wù)時(shí)号俐,調(diào)用方可能會(huì)收到503錯(cuò)誤:

trafficPolicy:
   tls:
  mode: ISTIO_MUTUAL

還可以為特定namespace 或特定服務(wù)啟用全局的mTLS吏饿。你應(yīng)該了解這些設(shè)置以便確定是否把trafficPolicy.tls.mode設(shè)置為 ISTIO_MUTUAL。更重要的是蔬浙,當(dāng)你試圖配置一個(gè)完全不同的功能(例如熔斷)時(shí)猪落,很容易忘記設(shè)置此字段。

提示:在創(chuàng)建Destination Rule前總是考慮mTLS畴博!

為了觸發(fā)熔斷笨忌,讓我們同時(shí)從兩個(gè)連接來(lái)調(diào)用 notifications服務(wù)。maxConnections字段被設(shè)置為1俱病。這時(shí)應(yīng)該會(huì)看到503與200的響應(yīng)同時(shí)到達(dá)官疲。

當(dāng)一個(gè)服務(wù)從客戶端接收到的負(fù)載大于它所能處理的負(fù)載(如熔斷器中配置的那樣)袱结,它會(huì)在調(diào)用之前返回503錯(cuò)誤果元。這是防止錯(cuò)誤級(jí)聯(lián)的一種方法阅畴。

監(jiān)控

在生產(chǎn)環(huán)境中必須要監(jiān)控你的服務(wù)焦匈,以便得到通知并能夠在系統(tǒng)發(fā)生錯(cuò)誤時(shí)進(jìn)行檢查够滑。因此况毅,如果你已經(jīng)為你的服務(wù)配置了一個(gè)熔斷器味廊,你就會(huì)想知道它什么時(shí)候跳閘辉巡;熔斷器攔截了百分之多少的請(qǐng)求痢甘;何時(shí)觸發(fā)放椰,來(lái)自哪個(gè)下游客戶端衣厘?如果能夠回答這些問(wèn)題撬呢,你就可以確定熔斷器是否工作正常晨另,并根據(jù)需要微調(diào)配置狈癞,或者優(yōu)化服務(wù)來(lái)處理額外的并發(fā)請(qǐng)求。

提示:如果你繼續(xù)閱讀,可以在Backyards UI中看到和配置所有的這些設(shè)置癣蟋。

讓我們看看怎樣在Istio里確定熔斷器跳閘:

熔斷器跳閘時(shí)的響應(yīng)碼是503罪治,因此你無(wú)法僅根據(jù)該響應(yīng)與其他的503錯(cuò)誤區(qū)分開(kāi)來(lái)。在Envoy中屠缭,有一個(gè)計(jì)數(shù)器叫upstream_rq_pending_overflow,它記錄了熔斷且失敗的請(qǐng)求總數(shù)富腊。如果為你的服務(wù)深入研究Envoy的統(tǒng)計(jì)數(shù)據(jù)就可以獲得這些信息阳欲,但這并不容易巢掺。

除了響應(yīng)代碼含懊,Envoy還返回響應(yīng)標(biāo)志 茁影,并且存在一個(gè)專用響應(yīng)標(biāo)志來(lái)表示熔斷器跳閘:UO蚁廓。如果這個(gè)標(biāo)志只能通過(guò)Envoy的日志獲得,這將不會(huì)特別有用棠隐。幸運(yùn)的是暑刃,它在Istio中實(shí)現(xiàn)了土全,因此響應(yīng)標(biāo)志在Istio指標(biāo)中是可用的并且能被Prometheus獲取到铃将。

熔斷器的跳閘可以像這樣查詢到:

sum(istio_requests_total{response_code="503", response_flags="UO"}) by (source_workload, destination_workload, response_code)

Backyards的熔斷更簡(jiǎn)單

使用Backyards時(shí)撤嫩,你不需要手動(dòng)編輯Destination Rules來(lái)設(shè)置熔斷慌核。可以通過(guò)一個(gè)方便的UI界面或者(如果你愿意的話)是Backyards CLI 命令行工具來(lái)達(dá)到相同的結(jié)果。

不必?fù)?dān)心由于忘記把trafficPolicy.tls.mode 設(shè)置為 ISTIO_MUTUAL而配錯(cuò)了Destination Rules察皇。Backyards會(huì)為你解決這個(gè)問(wèn)題稻爬;它會(huì)找到啟用了mTLS的服務(wù)并相應(yīng)地設(shè)置上述字段。

上面只是Backyards驗(yàn)證特性的一個(gè)例子辫秧,這能避免你設(shè)置錯(cuò)誤笛求。后面還有更多的特性植旧。

在此之上写穴,你可以看到服務(wù)和請(qǐng)求的可視化界面和活動(dòng)儀表板,因此可以輕松地確定有多少請(qǐng)求被熔斷器觸發(fā)雌贱,以及它來(lái)自哪個(gè)調(diào)用者和何時(shí)觸發(fā)。

熔斷實(shí)戰(zhàn)

創(chuàng)建一個(gè)集群

首先偿短,我們需要一個(gè)Kubernetes集群欣孤。

我通過(guò)Pipeline platform的免費(fèi)開(kāi)發(fā)版本在GKE上創(chuàng)建了一個(gè)Kubernetes集群。如果你也想這樣做昔逗,可以在我們支持的五個(gè)云提供商或使用Pipeline在本地創(chuàng)建集群降传。否則,你需要提供自己的Kubernetes集群勾怒。

安裝BACKYARDS

在一個(gè)新集群安裝Istio婆排,Backyards和demo應(yīng)用的最簡(jiǎn)單的辦法是使用Backyards CLI声旺。

你只需要執(zhí)行下面的命令(集群必須設(shè)置了KUBECONFIG):

$ backyards install -a --run-demo

該命令首先使用我們開(kāi)源的Istio operator安裝Istio,然后安裝Backyards和demo應(yīng)用程序段只。安裝完成后腮猖,Backyards UI將自動(dòng)打開(kāi)并向demo應(yīng)用發(fā)送一些流量。通過(guò)這個(gè)簡(jiǎn)單的命令赞枕,你可以看到Backyards在幾分鐘內(nèi)啟動(dòng)了一個(gè)全新的Istio集群澈缺!試試吧!

你也可以按順序執(zhí)行所有這些步驟炕婶。Backyards需要一個(gè)Istio集群——如果沒(méi)有姐赡,可以通過(guò)$ backyards istio install安裝。一旦安裝了Istio柠掂,就可以使用$ backyards install安裝Backyards项滑。最后,使用$ backyards demoapp install部署demo應(yīng)用程序涯贞。

提示:Backyards是Pipeline平臺(tái)的核心組件——可以嘗試開(kāi)發(fā)者版本(Service Mesh 標(biāo)簽頁(yè))杖们。

使用BACKYARDS UI創(chuàng)建熔斷

配置熔斷器

你不需要手動(dòng)創(chuàng)建或編輯Destination Rule,可以很容易的在UI界面中改變?nèi)蹟嗟呐渲眉缈瘛W屛覀兿葎?chuàng)建一個(gè)demo摘完。

正如你將看到的,Backyards(與Kiali相比)不僅是為可觀察性構(gòu)建的web UI傻谁,而且是具有豐富功能的服務(wù)網(wǎng)格管理工具孝治,支持單集群和多集群,并且具有強(qiáng)大的CLI和GraphQL API审磁。

Circuit Breaking set

查看熔斷器設(shè)置

你不需要通過(guò)Destination Rule(例如通過(guò)kubectl)來(lái)查看熔斷器的配置谈飒,當(dāng)你點(diǎn)擊notification 服務(wù)圖標(biāo)并切換SHOW CONFIGS滑塊時(shí),可以在Backyards UI的右側(cè)看到它們态蒂。

Circuit Breaking view

監(jiān)控熔斷器

根據(jù)剛才的設(shè)置杭措,當(dāng)兩個(gè)連接同時(shí)產(chǎn)生流量時(shí),熔斷器將發(fā)出跳閘請(qǐng)求钾恢。在Backyards UI中手素,你將看到圖形的邊緣出現(xiàn)了紅色。如果單擊該服務(wù)瘩蚪,你將了解有關(guān)錯(cuò)誤的更多信息泉懦,并將看到兩個(gè)專門(mén)用來(lái)顯示熔斷器跳閘的實(shí)時(shí)Grafana儀表板。

第一個(gè)儀表板展示了熔斷器觸發(fā)的總請(qǐng)求的百分比疹瘦。當(dāng)沒(méi)有熔斷器錯(cuò)誤崩哩,而你的服務(wù)工作正常,這張圖將顯示0%。否則邓嘹,你將能夠立即看到有多少請(qǐng)求被熔斷器觸發(fā)酣栈。

第二個(gè)儀表板提供了由源熔斷器引起的跳閘故障。如果沒(méi)有發(fā)生跳閘汹押,則此圖中不會(huì)出現(xiàn)尖峰矿筝。否則,你將看到哪個(gè)服務(wù)導(dǎo)致了跳閘鲸阻,何時(shí)跳閘跋涣,以及跳閘次數(shù)∧胥玻可以通過(guò)此圖來(lái)追蹤惡意的客戶端陈辱。

Circuit Breaking trip

這些是實(shí)時(shí)的Grafana儀表盤(pán),用于顯示熔斷相關(guān)的信息细诸。在默認(rèn)情況下Backyards集成了Grafana和Prometheus——還有更多的儀表板可以幫助你深入查看服務(wù)的指標(biāo)沛贪。

移除熔斷器配置

可以通過(guò) Remove 按鈕很容易的移除熔斷配置。

Backyards UI 的熔斷實(shí)戰(zhàn)

這個(gè)視頻總結(jié)了所有這些UI操作(譯者注:視頻來(lái)自YouTube)

使用BACKYARDS-CLI創(chuàng)建熔斷

從經(jīng)驗(yàn)來(lái)看震贵,可以從UI界面做的事一定也可以通過(guò) Backyards CLI 命令行工具完成利赋。

配置熔斷

讓我們?cè)僮鲆淮蝿?chuàng)建熔斷的測(cè)試,這次通過(guò)CLI命令行猩系。

可以以交互模式進(jìn)行:

$ backyards r cb set backyards-demo/notifications
? Maximum number of HTTP1/TCP connections 1
? TCP connection timeout 3s
? Maximum number of pending HTTP requests 1
? Maximum number of requests 1024
? Maximum number of requests per connection 1
? Maximum number of retries 1024
? Number of errors before a host is ejected 1
? Time interval between ejection sweep analysis 1s
? Minimum ejection duration 3m
? Maximum ejection percentage 100
INFO[0043] circuit breaker rules successfully applied to 'backyards-demo/notifications'
Connections  Timeout  Pending Requests  Requests  RPC  Retries  Errors  Interval  Ejection time  percentage
1            3s       1                 1024      1    1024     1       1s        3m             100

或者用非交互模式媚送,指定要設(shè)置的值:

$ backyards r cb set backyards-demo/notifications --non-interactive --max-connections=1 --max-pending-requests=1 --max-requests-per-connection=1 --consecutiveErrors=1 --interval=1s --baseEjectionTime=3m --maxEjectionPercent=100
Connections  Timeout  Pending Requests  Requests  RPC  Retries  Errors  Interval  Ejection time  percentage
1            3s       1                 1024      1    1024     5       1s        3m             100

命令執(zhí)行后,熔斷配置會(huì)立刻獲取到并顯示出來(lái)寇甸。

查看熔斷設(shè)置

你可以用下面的命令通過(guò)namespace來(lái)列出熔斷的設(shè)置:

$ backyards r cb get backyards-demo/notifications
  Connections  Timeout  Pending Requests  Requests  RPC  Retries  Errors  Interval  Ejection time  percentage
  1            3s       1                 1024      1    1024     5       1s        3m             100

默認(rèn)情況結(jié)果以表格的方式顯示塘偎,也支持JSON或者YMAL格式:

$ backyards r cb get backyards-demo/notifications -o json
  {
    "maxConnections": 1,
    "connectTimeout": "3s",
    "http1MaxPendingRequests": 1,
    "http2MaxRequests": 1024,
    "maxRequestsPerConnection": 1,
    "maxRetries": 1024,
    "consecutiveErrors": 5,
    "interval": "1s",
    "baseEjectionTime": "3m",
    "maxEjectionPercent": 100
  }

$ backyards r cb get backyards-demo/notifications -o yaml
  maxConnections: 1
  connectTimeout: 3s
  http1MaxPendingRequests: 1
  http2MaxRequests: 1024
  maxRequestsPerConnection: 1
  maxRetries: 1024
  consecutiveErrors: 5
  interval: 1s
  baseEjectionTime: 3m
  maxEjectionPercent: 100

監(jiān)控熔斷

要從CLI中查看和前面Grafana UI界面類似的儀表板,可以通過(guò)從多個(gè)連接調(diào)用服務(wù)來(lái)觸發(fā)跳閘拿霉,執(zhí)行命令:

$ backyards r cb graph backyards-demo/notifications

可以看到類似下面的結(jié)果:

Circuit Breaking trip cli

移除熔斷配置

移除熔斷執(zhí)行下面的命令:

$ backyards r cb delete backyards-demo/notifications
INFO[0000] current settings
Connections  Timeout  Pending Requests  Requests  RPC  Retries  Errors  Interval  Ejection time  percentage
1            3s       1                 1024      1    1024     5       1s        3m             100
? Do you want to DELETE the circuit breaker rules? Yes
INFO[0008] circuit breaker rules set to backyards-demo/notifications successfully deleted

使用下面的命令驗(yàn)證是否成功:

$ backyards r cb get backyards-demo/notifications
  INFO[0001] no circuit breaker rules set for backyards-demo/notifications

使用BACKYARDS GRAPHQL API創(chuàng)建熔斷

Backyards由多個(gè)組件組成吟秩,比如Istio、Banzai Cloud的Istio operator绽淘,多集群Canary release operator涵防,以及多個(gè)后端基礎(chǔ)設(shè)施。所有的這些都在Backyards’ GraphQL API的后面沪铭。

Backyards UI和CLI都使用Backyards的GraphQL API壮池,它將在9月底與GA版本一起發(fā)布。用戶將很快能夠使用我們的工具來(lái)管理Istio和構(gòu)建他們自己的客戶端伦意。

清理

從你的集群移除demo應(yīng)用火窒、Backyards和Istio,執(zhí)行下面的命令驮肉,它將按順序卸載這些組件:

$ backyards uninstall -a

總結(jié)

使用Backyards,你可以通過(guò)UI或CLI命令行工具輕松的配置熔斷器已骇。然后通過(guò)嵌入的Grafana儀表板從Backyards UI實(shí)時(shí)的監(jiān)控熔斷器离钝,來(lái)查看跳閘率和按源計(jì)算的跳閘次數(shù)票编。

下一次我們將介紹錯(cuò)誤注入,請(qǐng)繼續(xù)關(guān)注卵渴!

關(guān)于 ServiceMeshe 社區(qū)

ServiceMesher 社區(qū)是由一群擁有相同價(jià)值觀和理念的志愿者們共同發(fā)起慧域,于 2018 年 4 月正式成立。

社區(qū)關(guān)注領(lǐng)域有:容器浪读、微服務(wù)昔榴、Service Mesh、Serverless碘橘,擁抱開(kāi)源和云原生互订,致力于推動(dòng) Service Mesh 在中國(guó)的蓬勃發(fā)展。

社區(qū)官網(wǎng):https://www.servicemesher.com

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末痘拆,一起剝皮案震驚了整個(gè)濱河市仰禽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌纺蛆,老刑警劉巖吐葵,帶你破解...
    沈念sama閱讀 221,695評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異桥氏,居然都是意外死亡温峭,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)字支,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)凤藏,“玉大人,你說(shuō)我怎么就攤上這事祥款∏灞浚” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,130評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵刃跛,是天一觀的道長(zhǎng)抠艾。 經(jīng)常有香客問(wèn)我,道長(zhǎng)桨昙,這世上最難降的妖魔是什么检号? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,648評(píng)論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮蛙酪,結(jié)果婚禮上齐苛,老公的妹妹穿的比我還像新娘。我一直安慰自己桂塞,他們只是感情好凹蜂,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般玛痊。 火紅的嫁衣襯著肌膚如雪汰瘫。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,268評(píng)論 1 309
  • 那天擂煞,我揣著相機(jī)與錄音混弥,去河邊找鬼。 笑死对省,一個(gè)胖子當(dāng)著我的面吹牛蝗拿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蒿涎,決...
    沈念sama閱讀 40,835評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼哀托,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了同仆?” 一聲冷哼從身側(cè)響起萤捆,我...
    開(kāi)封第一講書(shū)人閱讀 39,740評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎俗批,沒(méi)想到半個(gè)月后俗或,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,286評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡岁忘,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評(píng)論 3 340
  • 正文 我和宋清朗相戀三年辛慰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片干像。...
    茶點(diǎn)故事閱讀 40,505評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡帅腌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出麻汰,到底是詐尸還是另有隱情速客,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布五鲫,位于F島的核電站溺职,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏位喂。R本人自食惡果不足惜浪耘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望塑崖。 院中可真熱鬧七冲,春花似錦、人聲如沸规婆。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,357評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至苗踪,卻和暖如春颠区,著一層夾襖步出監(jiān)牢的瞬間削锰,已是汗流浹背通铲。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,466評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留器贩,地道東北人颅夺。 一個(gè)月前我還...
    沈念sama閱讀 48,921評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像蛹稍,于是被迫代替她去往敵國(guó)和親吧黄。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評(píng)論 2 359

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