討論微服務(wù)之前,你知道微服務(wù)的 4 個定義嗎杜窄?

關(guān)于“什么是微服務(wù)”的問題肠骆,其實并沒有一個統(tǒng)一的認識。這些年在不同的場合里和不同背景的朋友都在探討微服務(wù)塞耕。但聊得越多蚀腿,就越發(fā)現(xiàn)大家聊的不是同一回事。和 DevOps 一樣扫外,“微服務(wù)”也是一個內(nèi)涵十分廣泛的詞莉钙。本文從“Microservice“這個概念的源頭出發(fā),總結(jié)了 4 個常用的微服務(wù)定義畏浆。

James Lewis 原始版的微服務(wù) 6 大特征

這個版本起源于2012年胆胰,這里首先要注意年份,那時候還沒有 Docker刻获,而且 Netflix 的微服務(wù)化過程也在這個概念提出之前——2008年就開始了,那時候甚至連 DevOps 還沒發(fā)明出來瞎嬉。James Lewis 在波蘭第 33 次 Degree in Kraków 會議上分享了一個案例蝎毡,名稱是 “Micro Services - Java, the Unix Way”。在這個分享里氧枣, James Lewis 分享了在 2011 年中參與的一個項目中所采用的一系列實踐沐兵,以 UNIX 的哲學(xué)重新看待企業(yè)級 Java 應(yīng)用程序,并且把其中的一部分稱之為“ Micro-Services ”便监。

這個時候的微服務(wù)所用的單詞和我們現(xiàn)在所用的 Microservices 這個單詞有所不同扎谎。一方面碳想,采用 Micro 作為形容詞,是和 Monolithic 相對毁靶,而不是和 Macro 相對是源于操作系統(tǒng)這門大學(xué)課程胧奔。我們知道,現(xiàn)代的操作系統(tǒng)課程都是以 UNIX 作為案例進行講解的预吆。而這兩個單詞來自于“微內(nèi)核”(Micro-Kernel)和“宏內(nèi)核”(Monolithic kernel)的比較龙填。而非常見的“微觀經(jīng)濟學(xué)”和“宏觀經(jīng)濟學(xué)”中的 Micro 和 Macro 兩個相對應(yīng)的單詞。

另一方面拐叉,服務(wù)要以復(fù)數(shù)形式出現(xiàn)岩遗,表示的是一個以上。由于漢語里單復(fù)數(shù)是同型的凤瘦,所以我們在翻譯的時候會出現(xiàn)問題宿礁。因此,“微服務(wù)”在作為架構(gòu)的形式出現(xiàn)的時候蔬芥,我們會用“微服務(wù)架構(gòu)”稱呼梆靖。單個的微服務(wù)從概念上為了和 SOA 以及其它領(lǐng)域的“服務(wù)”有所區(qū)分,會以“單個微服務(wù)”以示區(qū)別坝茎。而”微服務(wù)“單獨拿出來是被看作為一系列技術(shù)實踐的總稱涤姊。

在這個分享里,James Lewis將所實踐的“微服務(wù)架構(gòu)”總結(jié)為 5 大特征:

  1. Small with a single responsibility —— “小到只有單一職責(zé)”

    在這個特征里嗤放,關(guān)于微服務(wù)有多小有兩個標(biāo)準(zhǔn):

    第一個標(biāo)準(zhǔn)是:如果一個類復(fù)雜的超過一個開發(fā)人員的理解范圍思喊,那么它就太大了,需要被繼續(xù)拆分次酌。

    第二個標(biāo)準(zhǔn)是:如果它小到可以隨時丟棄并重寫恨课,而不是繼續(xù)維護遺留代碼,那么它就足夠小岳服。這個標(biāo)準(zhǔn)有個很重要的原則就是 Rewrite over Maintain剂公,即“重寫勝于維護”。

  2. Containerless and installed as well behaved Unix services —— “去容器化并且作為 Unix Service 安裝”

    在這個特征中吊宋,James Lewis 提倡采用 Jetty 這樣的工具集成到 Maven 里纲辽,可以很方便的調(diào)試或者部署锈候。然后打包成一個可執(zhí)行的 JAR 包并以 UNIX 守護進程的方式在系統(tǒng)啟動時執(zhí)行轧邪。

    特別是在 AWS 這樣的公有云環(huán)境下,把這樣的應(yīng)用程序和虛擬機實例的初始化腳本結(jié)合在一起琳水。使得應(yīng)用程序的生命周期和虛擬機的生命周期綁定成為一體这吻,由于守護進程在所有 Unix 系統(tǒng)中都是通用的吊档,因此簡化整體架構(gòu)的開發(fā)和運維。

  3. Located in different VCS roots ——“分布在不同的版本控制代碼庫里”

    在這個特征中唾糯,James Lewis 提到了應(yīng)用程序的分離怠硼,他認為一個“微服務(wù)”應(yīng)該完全和另外一個服務(wù)實現(xiàn)徹底的隔離鬼贱,這里當(dāng)然是指的從開始的代碼庫就開始隔離了。

    他同樣也要求開發(fā)人員看到相似性和抽象香璃,并采用單一的領(lǐng)域來指導(dǎo)開發(fā)團隊的開發(fā)这难。

    因此接下來他繼續(xù)討論了領(lǐng)域驅(qū)動設(shè)計領(lǐng)域驅(qū)動設(shè)計和康威定律的重要性。他認為界限上下文要足夠的清晰增显,但可以有所重合雁佳。如果沒有辦法做到領(lǐng)域之間很清晰,就通過“物理上的手段”——分離不同的團隊來做到這一點同云。

    這不可避免的帶來一些公共代碼糖权,但要把這些公共代碼作為“庫”和“基礎(chǔ)設(shè)施即代碼”來對待,就像你代碼中用到的開源軟件炸站。并搭建一個 nexus 庫來存儲那些二進制依賴星澳。

  4. Provisioned automatically ——“自動初始化”

    自動初始化的要點不在于如何自動化,因為不同的應(yīng)用不同的平臺有不同的初始化方式旱易。這里的重點在于管理分布式應(yīng)用的復(fù)雜性禁偎。所以對于每個服務(wù),能夠采用聲明出這些初始化阀坏。例如:服務(wù) A如暖,需要一個 負載均衡,并且可以自動擴展忌堂。服務(wù) B盒至,也是同樣的聲明方式。而這些聲明可以用基礎(chǔ)設(shè)施即代碼技術(shù)很好的管理起來士修。

  5. Status aware and auto-scaling ——“關(guān)注狀態(tài)和自動擴展”

    在這里枷遂,他認為這些應(yīng)用應(yīng)該是能夠感知吞吐量的監(jiān)控指標(biāo)來自我進行擴展的。對于一個現(xiàn)代的應(yīng)用而言棋嘲,這是一個基本的架構(gòu)性要求酒唉,但這需要團隊有一定的 DevOps 能力。因為這不光要求開發(fā)人員能夠讓應(yīng)用無狀態(tài)化沸移,而且要求基礎(chǔ)設(shè)施可以及時捕獲環(huán)境的變化痪伦。

  6. They interact via the uniform interface —— “它們通過統(tǒng)一格式的接口進行交互”

    在這里,James 建議大家采用已經(jīng)成熟的 HTTP 協(xié)議以及標(biāo)準(zhǔn)的媒體類型進行接口交互雹锣,而不是采用其它的方式流妻。并且采用 HEATOAS 的方式構(gòu)建 Restful API,使其成為一個超媒體的應(yīng)用狀態(tài)引擎笆制。這樣就可以將狀態(tài)和執(zhí)行過程隔離區(qū)分開來,更加容易進行水平擴展涣达。此外在辆,它也構(gòu)建了一個避免架構(gòu)孵化的層证薇,可以獨立于客戶端持續(xù)演進。

在總結(jié)的時候匆篓,它特意提到了 UNIX 哲學(xué)浑度。這引用自Doug McIlroy 的一篇采訪

Everybody started putting forth the UNIX philosophy. Write programs that do one thing and do it well. Write programs to work together. Write programs that handle text streams, because that is a universal interface." Those ideas which add up to the tool approach, were there in some unformed way before pipes, but they really came together afterwards. Pipes became the catalyst for this UNIX philosophy. "The tool thing has turned out to be actually successful. With pipes, many programs could work together, and they could work together at a distance."

從這段話里,我們看到了“微服務(wù)架構(gòu)”和 UNIX 哲學(xué)之間的關(guān)聯(lián):

  1. 職責(zé)獨立:讓多個程序(注意是 Programs 不是 Program)做好一件事鸦概。
  2. 統(tǒng)一接口:文本流是統(tǒng)一的接口箩张,每個程序都可以通過統(tǒng)一的接口進行消費。
  3. 公共通信:采用管道(pipe)的方式

可以說窗市,微服務(wù)架構(gòu)本身是對 UNIX 哲學(xué)在企業(yè)級 Java 應(yīng)用系統(tǒng)中的另一個案例先慷。可以說咨察,雖然應(yīng)用場景變了论熙,但 UNIX 分解復(fù)雜度的方式和保持簡單的理念并未改變。

最后摄狱,James Lewis 把上述六點特征變成了一個六邊形的業(yè)務(wù)能力:

Hexagonal Business capabilities composed of:
Micro Services that you can
Rewrite rather than maintain and which form
A Distributed Bounded Context.
Deployed as containerless OS services
With standardised application protocols and message semantics
Which are auto-scaling and designed for failure

翻譯過來就是:

微服務(wù)你可以通過重寫而非維護一個分布式的界限上下文脓诡,且作為一個無應(yīng)用容器的操作系統(tǒng)服務(wù)部署。并以標(biāo)準(zhǔn)化的應(yīng)用協(xié)議和消息語義媒役,為失敗設(shè)計且可自動擴展祝谚。

Martin Fowler & James Lewis 合作版的微服務(wù) 9 大特征

由于在 James Lewis 之后,有很多不同的項目也采用“微服務(wù)”作為它們的實踐的名稱酣衷。然而交惯,不同的項目之間還是存在一些差異的,且每個人都按照自己的方式在實踐“微服務(wù)”鸥诽。因此商玫,基于“求同存異”的原則,Jame Lewis 的同事 —— 大名鼎鼎的 Martin Fowler 采用一種歸納的方式來解決這個問題:他認為“定義”是一些“共有的特征”(Common characteristics)牡借。Martin Fowler 繼續(xù)采用了 James Lewis 對這一系列實踐的命名拳昌,并且做了修改,使之成為一個單獨的名詞 —— Microservices钠龙。

所以炬藤,他將微服務(wù)總結(jié)為以下9大特征

  1. 通過服務(wù)組件化
  2. 圍繞業(yè)務(wù)能力組織
  3. 是產(chǎn)品不是項目
  4. 智能端點和啞管道
  5. 去中心化治理
  6. 去中心化數(shù)據(jù)管理
  7. 基礎(chǔ)設(shè)施自動化
  8. 為失效設(shè)計
  9. 演進式設(shè)計

這 9 大特征的中文版具體內(nèi)容請參考這里,限于篇幅原因碴里,本文不展開討論沈矿。

我們可以從中看出,Martin Fowler 試圖將 James Lewis 的微服務(wù)定義進行一般化推廣咬腋,使其不光之可以在不同的語言架構(gòu)和技術(shù)棧上使用羹膳。又可以兼顧敏捷、DevOps 等其它技術(shù)根竿,成為一個架構(gòu)的“最佳實踐”集合陵像。但這樣一組實踐本質(zhì)上并沒有太多的創(chuàng)新就珠,只是把我們本身知道的很多架構(gòu)和設(shè)計的原則結(jié)合在當(dāng)前的技術(shù)棧上進行了一次整體的組合和應(yīng)用。

恰逢一系列互聯(lián)網(wǎng)公司的成功事跡帶來的新實踐(持續(xù)交付醒颖、DevOps)和新技術(shù)(Docker)在經(jīng)歷了早期實踐者(Early Adopter)實踐積累后的結(jié)果井噴后妻怎。這樣的最佳實踐的集中反應(yīng)固然得到了技術(shù)人員的掌聲。然而泞歉,這樣的一種定義對于妄圖采用“微服務(wù)架構(gòu)“的人來說是一個很高的門檻逼侦。如果這樣的 9 個特征的總結(jié)是對”微服務(wù)架構(gòu)“的定義。那么腰耙,為了要滿足以上的 9 個定義榛丢,則需要花費很大的精力來進行改造,而且已經(jīng)超出了技術(shù)升級和企業(yè) IT 部門的職責(zé)范圍沟优。此外涕滋,即便我們知道其中每個特征所帶來的收益,但卻很難拿出案例和數(shù)據(jù)去佐證滿足這 9 個特征的改造收益挠阁。

避開這 9 個特征的概念正交性不談宾肺,即便這 9 個特征可以從既有的結(jié)果來回答”什么(What)是微服務(wù)“,但卻沒有給出“為什么(Why)要滿足這些特征”和”如何(How)同時滿足這些特征”侵俗。

如果自己挖的坑填不了锨用,就教給別人來填吧:

Sam Newman 版微服務(wù)的 2 大特征和 7 個原則

同樣作為 Martin Fowler 的同事,Sam Newman 在其著作 ”Building Microservice“(中文譯名為”微服務(wù)設(shè)計“)的第一章就重新回答了”什么是微服務(wù)架構(gòu)“并回答了”為什么要采用微服務(wù)架構(gòu)“的問題隘谣。

Sam Newman 在書中是這么定義微服務(wù)的(《微服務(wù)設(shè)計》的翻譯):

微服務(wù)就是一些協(xié)同工作的小而自治的服務(wù)增拥。

Sam Newman 自述的微服務(wù)的定義更加簡單,包含了兩個特征:“小” 和 “自治”寻歧。

除了繼承 James Lewis 關(guān)于微服務(wù)應(yīng)該有多小的描述以外(當(dāng)然掌栅,大小都是基于個人的主觀判斷),還創(chuàng)造性的用康威定律來約束微服務(wù)的大小码泛,即“能否和團隊結(jié)構(gòu)相匹配”:如果你的團隊維護單個服務(wù)很吃力猾封,需要保持團隊大小不變的情況下還對維護工作游刃有余,那么這個服務(wù)就需要繼續(xù)被拆分噪珊。

而“自治” 則很謹慎的把 Martin Fowler 微服務(wù)定義的 9 大特征中的“去中心化”晌缘、“獨立” 、”松散耦合“等字眼進行了統(tǒng)一痢站。并進一步解釋到“一個微服務(wù)就是一個獨立的實體”磷箕。并且從外部,也就是黑盒的角度來看每個符合"自治"的單個微服務(wù)所具有的特征阵难,即:

  1. 可以獨立部署岳枷。
  2. 通過網(wǎng)絡(luò)通信。
  3. 對消費方的透明。
  4. 盡可能降低耦合嫩舟,使其自治氢烘。

此外,他還采用了更簡單的“黃金法則”來判斷期"自治性"家厌。即能否修改一個服務(wù)并對其部署,且不影響其他任何服務(wù)椎工。如果答案是否定的饭于,說明你的微服務(wù)還不夠”自治“。

從 Sam Newman 的定義中维蒙,我們可以推導(dǎo)出“微服務(wù)”的幾個基本事實:

  1. 微服務(wù)架構(gòu)是一個分布式系統(tǒng)架構(gòu)掰吕。
  2. 微服務(wù)是微服務(wù)架構(gòu)的基本單元。
  3. 網(wǎng)絡(luò)隔離是”必要的“解耦手段颅痊。
  4. 微服務(wù)的業(yè)務(wù)功能從概念上是完整的殖熟,并符合用戶角度的“獨立”認知。

簡而言之斑响,以上的兩個特征的表述主要是將微服務(wù)從邏輯架構(gòu)上和部署架構(gòu)上都看作是一個正交的原子功能單元菱属。而要做到這一點,則需要而要把整個應(yīng)用系統(tǒng)正確的建模到這個層次舰罚,則需要參考很多的內(nèi)部外部因素纽门。

此外,為了達到“小”和“自治”的目的营罢,Sam Newman 還總結(jié)了 7 條原則用來在實施的時候和具體實踐結(jié)合赏陵,分別是:

  1. 圍繞業(yè)務(wù)概念建模
  2. 接受自動化文化
  3. 隱藏內(nèi)部實現(xiàn)細節(jié)
  4. 讓一切都去中心化
  5. 可獨立部署
  6. 隔離失敗
  7. 高度可觀察

可以看出,Sam Newman 把 Martin Fowler 的 9 大特征用更加具體的術(shù)語來重新描述饲漾,并且從邏輯上處理了 Martin Fowler 微服務(wù) 9 大特征中概念重復(fù)和不明確的部分蝙搔,使其更簡單和明確并且更加可操作。例如把“去中心化的數(shù)據(jù)管理” 和 "去中心化治理"合并為“讓一切都去中心化”等考传。

更重要的是吃型,Sam Newman 提出了采用微服務(wù)技術(shù)的主要好處,告訴了我們“為什么要用微服務(wù)”:

  1. 技術(shù)異構(gòu)性:采用更合適的技術(shù)棧靈活的處理局部問題伙菊。
  2. 彈性:這里的“彈性”是彈性工程學(xué)的概念败玉,指的是局部失敗會被隔離,使得整體不會失敗镜硕。
  3. 擴展:可以根據(jù)系統(tǒng)的部分組件按需擴展运翼。
  4. 簡化部署:這里簡化部署不是指的是部署的拓撲結(jié)構(gòu),而是通過持續(xù)的小批量兴枯、小范圍的部署來降低整體失敗的風(fēng)險血淌。
  5. 與組織結(jié)構(gòu)相匹配:微服務(wù)架構(gòu)可以讓組織的團隊轉(zhuǎn)化為合適的大小,并采用透明的制度來進行規(guī)范和復(fù)制悠夯。避免團隊的人數(shù)增長而帶來更多的管理層,使組織熵的上漲。
  6. 可組合性:由于各個微服務(wù)間不存在依賴關(guān)系,所以可以根據(jù)用戶界面的情況進行靈活的調(diào)整和復(fù)用,避免對單體應(yīng)用進行整體的大規(guī)模調(diào)整。
  7. 對可替代性的優(yōu)化:由于風(fēng)險和領(lǐng)域更加獨立和隔離买鸽。因此看幼,拋棄一個微服務(wù)并重寫的成本并就變的十分低廉搏熄。

Chris Richardson 的“微服務(wù)架構(gòu)模式”

2017 年止后,Chris Richardson 使用 Microservices.io 域名開始推廣自己的微服務(wù)理念。他是這樣定義微服務(wù)的:

Microservices - also known as the microservice architecture - is an architectural style that structures an application as a collection of loosely coupled services, which implement business capabilities. The microservice architecture enables the continuous delivery/deployment of large, complex applications. It also enables an organization to evolve its technology stack.

中文翻譯過來肃续,大意如下:

微服務(wù)始锚,也就是微服務(wù)架構(gòu)。是一種用于把一個應(yīng)用程序結(jié)構(gòu)化為一個實現(xiàn)業(yè)務(wù)功能的松散耦合的服務(wù)集合的架構(gòu)風(fēng)格喳逛。
微服務(wù)架構(gòu)使得在大型瞧捌、復(fù)雜的應(yīng)用程序中實現(xiàn)持續(xù)交付和持續(xù)部署成為可能。它使得組織可以演進自己的技術(shù)棧润文。

在 Chris Richardson 采用了較為簡單的架構(gòu)定義和準(zhǔn)確的目標(biāo)定義相結(jié)合的方式來定義”微服務(wù)架構(gòu)“:它一方面簡單的把微服務(wù)架構(gòu)定義成一個實現(xiàn)業(yè)務(wù)功能的松散耦合的服務(wù)集合姐呐,另一方面又以十分具體的目標(biāo)和結(jié)果(持續(xù)交付/持續(xù)集成)來約束這樣一個松散耦合系統(tǒng)的效果:組織可以演進自己的技術(shù)棧。

Chris Richardson 將“單體架構(gòu)”和“微服務(wù)架構(gòu)”看做兩種架構(gòu)模式典蝌。并且在同樣的上下文中對二者各自的優(yōu)劣進行了比較曙砂。更加重要的是,Chris Richardson 采用 AFK 擴展立方來拆分微服務(wù)從而回答了“如何做微服務(wù)”的問題骏掀。

值得注意的是鸠澈,Chris Richardson 所采用的例子雖然在同樣的上下文中,但由于特征不同并不具備可比較性截驮。因此笑陈,他采用了在”單體架構(gòu)模式“(Pattern: Monolithic Architecture)的基礎(chǔ)上描述其局限性的方法引出了”微服務(wù)架構(gòu)模式“(Pattern: Microservice Architecture)。嚴格的說葵袭,Chris Richardson 的“單體架構(gòu)模式“是一種對現(xiàn)狀的和舉例涵妥,并沒有給出其特征和方法的描述,因此不能稱之為模式坡锡。而”微服務(wù)架構(gòu)模式“則又是一系列模式的總和蓬网,如下圖所示:

MicroservicePatternLanguage

從這個角度看,Chris Richardson 的這些模式并沒有突破 Sam Newman 在《微服務(wù)設(shè)計》中總結(jié)出的實踐鹉勒。但相較于我們所知道的微服務(wù)的優(yōu)點帆锋。Chris Richardson 也列出了微服務(wù)的缺點:

  1. 開發(fā)者必須應(yīng)對創(chuàng)建分布式系統(tǒng)所產(chǎn)生的額外的復(fù)雜因素。
    • 現(xiàn)有開發(fā)者工具/IDE主要面向單體應(yīng)用程序贸弥,因此無法顯式支持分布式應(yīng)用的開發(fā)窟坐。
    • 測試工作更加困難。
    • 開發(fā)者必須采取服務(wù)間通信機制。
    • 很難在不使用分布式事務(wù)機制的情況下跨服務(wù)實現(xiàn)功能哲鸳。
    • 跨服務(wù)實現(xiàn)功能要求各團隊進行密切協(xié)作臣疑。
  2. 部署復(fù)雜。在生產(chǎn)環(huán)境下徙菠,對這類多種服務(wù)類型構(gòu)建而成的系統(tǒng)進行部署與管理十分困難讯沈。
  3. 內(nèi)存占用量更高。微服務(wù)架構(gòu)使用N*M個服務(wù)實例替代N個單體應(yīng)用實例婿奔,如果每項服務(wù)運行自己的JVM(或者其它類似機制)缺狠,且各實例之間需要進行隔離,那將導(dǎo)致M倍JVM運行時的額外開銷萍摊。另外挤茄,如果每項服務(wù)都在自己的虛擬機(例如 EC2 實例)上運行,如同Netflix一樣冰木,那么額外開銷會更高穷劈。

相較于之前的微服務(wù)定義而言, Chris Richardson 的微服務(wù)體系比較完整踊沸,而不僅僅是總結(jié)和列舉實踐歇终。Chris Richardson 的"微服務(wù)架構(gòu)模式"不光回答了“什么是(What)微服務(wù)”,也回答了“為什么(Why)要用微服務(wù)”逼龟,“什么時候(When)用微服務(wù)”评凝,“什么場景(Where)下”以及“如何(How)實現(xiàn)微服務(wù)”的問題。

Chris Richardson 還編寫了一套微服務(wù)的指南腺律,可以在這里 查看奕短。

比”什么是微服務(wù)“更重要的事

本文總結(jié)了微服務(wù)常見的 4 個定義。但比這些定義更重要的是你為什么要用微服務(wù)疾渣?你想從微服務(wù)中獲得什么益處篡诽?你是否了解為了追求這些益處所帶來的代價?如果不先明確這些問題榴捡,在不理解微服務(wù)架構(gòu)或者技術(shù)所帶來的的風(fēng)險和成本杈女。盲目的采用所謂的微服務(wù),可能帶來的結(jié)果并不理想吊圾。

不過达椰,在討論這些問題之前,坐下來統(tǒng)一一下對微服務(wù)的理解项乒,會提升我們討論和實踐微服務(wù)的效率啰劲。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市檀何,隨后出現(xiàn)的幾起案子蝇裤,更是在濱河造成了極大的恐慌廷支,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件栓辜,死亡現(xiàn)場離奇詭異恋拍,居然都是意外死亡,警方通過查閱死者的電腦和手機藕甩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進店門施敢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人狭莱,你說我怎么就攤上這事僵娃。” “怎么了腋妙?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵默怨,是天一觀的道長。 經(jīng)常有香客問我骤素,道長先壕,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任谆甜,我火速辦了婚禮,結(jié)果婚禮上集绰,老公的妹妹穿的比我還像新娘规辱。我一直安慰自己,他們只是感情好栽燕,可當(dāng)我...
    茶點故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布罕袋。 她就那樣靜靜地躺著,像睡著了一般碍岔。 火紅的嫁衣襯著肌膚如雪浴讯。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天蔼啦,我揣著相機與錄音榆纽,去河邊找鬼。 笑死捏肢,一個胖子當(dāng)著我的面吹牛奈籽,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播鸵赫,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼衣屏,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了辩棒?” 一聲冷哼從身側(cè)響起狼忱,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤膨疏,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后钻弄,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體佃却,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年斧蜕,在試婚紗的時候發(fā)現(xiàn)自己被綠了双霍。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡批销,死狀恐怖洒闸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情均芽,我是刑警寧澤丘逸,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站掀宋,受9級特大地震影響深纲,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜劲妙,卻給世界環(huán)境...
    茶點故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一湃鹊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧镣奋,春花似錦币呵、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至哈垢,卻和暖如春妻柒,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背耘分。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工举塔, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人陶贼。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓啤贩,卻偏偏與公主長得像,于是被迫代替她去往敵國和親拜秧。 傳聞我的和親對象是個殘疾皇子痹屹,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,543評論 2 349

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