企業(yè)應(yīng)用架構(gòu)演化探討:從微服務(wù)到Service Mesh

導(dǎo)讀

當(dāng)下微服務(wù)的實(shí)踐方案中,Spring Cloud姻氨,Dubbo作為主流的落地方案贫堰,在企業(yè)應(yīng)用架構(gòu)中發(fā)揮越來越重要的作用。本文探討企業(yè)應(yīng)用架構(gòu)如何從微服務(wù)架構(gòu)向Service Mesh架構(gòu)演化死陆,并形成落地方案招拙。需要特別說明:本文討論的架構(gòu)目前適用于普通的企業(yè)級(jí)應(yīng)用,其他行業(yè)(例如互聯(lián)網(wǎng))需要進(jìn)一步擴(kuò)展措译。

在討論之前别凤,我們需要明確一個(gè)事實(shí):企業(yè)應(yīng)用一定是圍繞業(yè)務(wù)進(jìn)行的。無論采用什么的架構(gòu)落地领虹,都是為了更好的為應(yīng)用業(yè)務(wù)進(jìn)行服務(wù)规哪。從企業(yè)應(yīng)用的特性考慮,主要包括:穩(wěn)定性掠械,安全性由缆,擴(kuò)展性,容錯(cuò)性猾蒂。

圍繞著企業(yè)應(yīng)用的這些特點(diǎn)均唉,我們來看一個(gè)典型的微服務(wù)企業(yè)架構(gòu)模型,如圖所示:

服務(wù)接入層:企業(yè)暴露到外部訪問的入口肚菠,一般通過防火墻等舔箭。

網(wǎng)關(guān)層:服務(wù)網(wǎng)關(guān)是介于客戶端和服務(wù)端的中間層,所有的外部請(qǐng)求會(huì)先經(jīng)過服務(wù)網(wǎng)關(guān),為企業(yè)應(yīng)用提供統(tǒng)一的訪問控制入口层扶。服務(wù)網(wǎng)關(guān)是微服務(wù)架構(gòu)下的服務(wù)拆分箫章,聚合,路由镜会,認(rèn)證以及流控綜合體現(xiàn)檬寂。

支撐服務(wù)層:為企業(yè)應(yīng)用提供運(yùn)行所需的支撐環(huán)境,包括注冊(cè)發(fā)現(xiàn)戳表,集中配置桶至,容錯(cuò)限流,認(rèn)證授權(quán)匾旭,日志聚合镣屹,監(jiān)測(cè)告警,消息服務(wù)等

業(yè)務(wù)服務(wù)層:業(yè)務(wù)服務(wù)是企業(yè)應(yīng)用的核心所在价涝,為企業(yè)領(lǐng)域應(yīng)用的具體實(shí)現(xiàn)女蜈,一般進(jìn)一步拆分為基礎(chǔ)服務(wù)(基礎(chǔ)功能)和聚合服務(wù)(綜合場(chǎng)景)。

平臺(tái)服務(wù)層:為企業(yè)應(yīng)用提供運(yùn)行所需的軟件資源色瘩,包括應(yīng)用服務(wù)器伪窖,應(yīng)用發(fā)布管理,應(yīng)用鏡像包管理泞遗,服務(wù)治理惰许。

基礎(chǔ)設(shè)施層:為企業(yè)應(yīng)用提供運(yùn)行所需的硬件資源,包括計(jì)算資源史辙,網(wǎng)絡(luò)資源汹买,存儲(chǔ)資源,基本的安全策略控制等聊倔。

從這個(gè)典型的服務(wù)架構(gòu)體系中晦毙,能夠清晰的表明層級(jí)架構(gòu)以及各層涵蓋的職責(zé)說明。我們暫不考慮基礎(chǔ)設(shè)施層和平臺(tái)服務(wù)兩層耙蔑,重點(diǎn)關(guān)注網(wǎng)關(guān)服務(wù)见妒,業(yè)務(wù)服務(wù),支撐服務(wù)甸陌,突出其中的一些基礎(chǔ)支撐功能組件须揣,這也是我們本篇探討的重點(diǎn)內(nèi)容。如下圖所示:

根據(jù)圖中紅色標(biāo)識(shí)钱豁,我們會(huì)發(fā)現(xiàn)這樣一個(gè)事實(shí):在微服務(wù)架構(gòu)下耻卡,無論是哪種落地實(shí)現(xiàn)方式,都集中在網(wǎng)關(guān)服務(wù)牲尺、支撐服務(wù)兩個(gè)層面卵酪。無論是Spring Cloud“套裝組件”幌蚊,Dubbo“套件”還是其他開源組件,都為支撐服務(wù)的實(shí)現(xiàn)提供了數(shù)量眾多的選擇溃卡。功能完整溢豆、選擇性多這是業(yè)內(nèi)喜聞樂見的事情,但是也無形中增加了開發(fā)瘸羡,測(cè)試漩仙,運(yùn)維人員的壓力。大家需要掌握越來越多的“使用工具”以更“方便”犹赖、“快捷”地應(yīng)對(duì)業(yè)務(wù)服務(wù)讯赏。有時(shí)候,可能為了實(shí)現(xiàn)單一功能冷尉,而必須引入一堆組件,這時(shí)候我們希望能夠有一個(gè)完整的平臺(tái)來為應(yīng)用業(yè)務(wù)提供一體化的支撐服務(wù)系枪,而不是一系列“套裝組件”與業(yè)務(wù)的集成雀哨。

那么如何基于一個(gè)平臺(tái)來實(shí)現(xiàn)這些企業(yè)應(yīng)用需要的能力呢?經(jīng)過一定階段的技術(shù)調(diào)研私爷,我們認(rèn)為Service Mesh能夠幫助我們初步達(dá)到這個(gè)目標(biāo)雾棺。

我們都知道Service Mesh以解決“服務(wù)通信”的問題作為其設(shè)計(jì)初衷,聚焦基礎(chǔ)設(shè)施“網(wǎng)絡(luò)層”衬浑,并以此做技術(shù)基礎(chǔ)捌浩,解決業(yè)務(wù)通信場(chǎng)景面臨的問題。那么如何把它應(yīng)用在企業(yè)應(yīng)用架構(gòu)中來取代“微服務(wù)套裝組件”呢工秩?那接下來讓我們針對(duì)網(wǎng)關(guān)服務(wù)尸饺,業(yè)務(wù)服務(wù),支撐服務(wù)分別來看一下助币,如何從原來的微服務(wù)“套裝組件”中抽離出來浪听,實(shí)現(xiàn)Service Mesh方向的轉(zhuǎn)變。

網(wǎng)關(guān)服務(wù)

前面提到過:服務(wù)網(wǎng)關(guān)是介于客戶端和服務(wù)端的中間層眉菱。從功能上不難理解迹栓,對(duì)內(nèi)屏蔽內(nèi)部細(xì)節(jié),對(duì)外提供統(tǒng)一服務(wù)接口俭缓。從場(chǎng)景聚焦角度考慮克伊,網(wǎng)關(guān)根據(jù)不同的場(chǎng)景承載不同的職責(zé),包括認(rèn)證华坦,授權(quán)愿吹,路由,流控季春,負(fù)載等洗搂。(之前我們也聊過網(wǎng)關(guān)組件的對(duì)比及具體實(shí)現(xiàn),感興趣的同學(xué)可點(diǎn)擊微服務(wù)五種開源API網(wǎng)關(guān)實(shí)現(xiàn)組件對(duì)比)。

由此可見耘拇,服務(wù)網(wǎng)關(guān)是企業(yè)應(yīng)用架構(gòu)下一些列功能的綜合體現(xiàn)撵颊。那么在Service Mesh情況下如何處理網(wǎng)關(guān)服務(wù)呢?在展開之前首先需要說明一個(gè)前提:目前為止Service Mesh跟真正企業(yè)網(wǎng)關(guān)相比還存在一定的不足之處惫叛,例如“協(xié)議轉(zhuǎn)化”倡勇,“安全策略”,“性能要求”等方面嘉涌。在這里我們也是探討這樣的可能性妻熊。下面以Istio為例,我們來看一下仑最,如何提供網(wǎng)關(guān)層面的服務(wù)扔役。

Istio在網(wǎng)關(guān)層面提供兩種類型的網(wǎng)關(guān)服務(wù):Ingress Gateway,Egress警医。

Ingress Gateway

Ingress Gateway用于接收傳入的HTTP/TCP連接亿胸,它配置暴露端口,協(xié)議供外部統(tǒng)一接入预皇,但是自身不提供任何的路由配置侈玄,而是完全依賴 Istio 的控制規(guī)則來進(jìn)行流量路由。從而與內(nèi)部服務(wù)請(qǐng)求統(tǒng)一到同一個(gè)控制層面上吟温。

Egress

在企業(yè)應(yīng)用與外部應(yīng)用之間序仙,有時(shí)候?yàn)榱藰I(yè)務(wù)需要會(huì)出現(xiàn)內(nèi)部服務(wù)調(diào)用外部服務(wù)的情況,此時(shí)一般會(huì)從企業(yè)內(nèi)部接入第三方網(wǎng)關(guān)來獲取服務(wù)數(shù)據(jù)鲁豪。在 Isito 中你同樣可以基于Egress來達(dá)到目的潘悼。Isito中提供兩種方式:一種基于ServiceEntry VirtualService的配置,實(shí)現(xiàn)第三方服務(wù)的訪問呈昔,一種擴(kuò)大sidecar的訪問地址列表挥等。(參考文檔:https://preliminary.istio.io/z ... ress/)。

基于上述兩種場(chǎng)景堤尾,我們可以看出肝劲,在 Service Mesh 的體系下,網(wǎng)關(guān)層面變成一個(gè)可以動(dòng)態(tài)生成和銷毀的組件郭宝,能夠通過控制層面實(shí)現(xiàn)統(tǒng)一規(guī)則管理辞槐,并且實(shí)時(shí)生效。

基于Service Mesh的網(wǎng)關(guān)服務(wù)如下圖所示:

從實(shí)現(xiàn)原理上分析粘室,傳統(tǒng)的網(wǎng)關(guān)實(shí)現(xiàn)基于 Servlet 的 filter 的模式榄檬,實(shí)現(xiàn)服務(wù)請(qǐng)求轉(zhuǎn)移過程中的層層過濾和處理。區(qū)別在于采用同步或者異步處理機(jī)制衔统,用來解決網(wǎng)關(guān)的性能瓶頸鹿榜。而Service Mesh的網(wǎng)關(guān)完全是基于網(wǎng)絡(luò)代理的請(qǐng)求轉(zhuǎn)發(fā)與控制海雪,本質(zhì)上作用在服務(wù)的 Iptables 上,通過對(duì) Iptables 的規(guī)則控制達(dá)到同樣的效果舱殿。

業(yè)務(wù)服務(wù)

業(yè)務(wù)是企業(yè)應(yīng)用的“重中之重”奥裸,無論哪種企業(yè)架構(gòu),最終都是為了更好地為業(yè)務(wù)提供服務(wù)沪袭,那么我們?nèi)绾卧赟ervice Mesh的體系下湾宙,重構(gòu)業(yè)務(wù)服務(wù)呢?我們以兩個(gè)簡(jiǎn)化的服務(wù)調(diào)用來說明整個(gè)架構(gòu)的轉(zhuǎn)變過程冈绊。

假如要實(shí)現(xiàn)服務(wù)A侠鳄,服務(wù)B的相互調(diào)用,最原始的方式是服務(wù)A基于協(xié)議層直接調(diào)用服務(wù)B(這里暫時(shí)忽略高可用死宣,多副本伟恶,負(fù)載均衡的方式),如圖所示:

由圖可見毅该,服務(wù)A基于某種協(xié)議完成對(duì)服務(wù)B的請(qǐng)求知押,相對(duì)比較簡(jiǎn)單。但是我們知道這樣雖然能夠快速完成業(yè)務(wù)關(guān)聯(lián)鹃骂,但是無法確保業(yè)務(wù)正常穩(wěn)定的運(yùn)行,因此我們需要引入更多的服務(wù)來保證業(yè)務(wù)的穩(wěn)定罢绽,可靠畏线,可控。此時(shí)我們最容易想到的是引入微服務(wù)的支撐組件來達(dá)到目標(biāo)良价。

以Spring Cloud方案為例寝殴,我們來說明當(dāng)前微服務(wù)架構(gòu)的實(shí)現(xiàn)方式。為了滿足企業(yè)應(yīng)用對(duì)服務(wù)A明垢,服務(wù)B的管理控制蚣常,需要額外引入“注冊(cè)中心”,“網(wǎng)關(guān)”痊银,“配置中心”抵蚊,“服務(wù)監(jiān)測(cè)”,“事件消息”溯革,“鏈路跟蹤”贞绳,“日志服務(wù)”等眾多與直接業(yè)務(wù)無關(guān)的“旁路保障服務(wù)”,簡(jiǎn)化一下致稀,如下圖所示:

從圖中可以看出冈闭,每個(gè)服務(wù)都引入了大量與業(yè)務(wù)無關(guān)的“保障服務(wù)”,這些“旁路保障服務(wù)”消耗的資源抖单,與比業(yè)務(wù)本身消耗的資源成“倍數(shù)關(guān)系”萎攒。隨著服務(wù)數(shù)目的增多遇八,業(yè)務(wù)服務(wù)本身占用的資源比會(huì)越來越少,此時(shí)開發(fā)人員會(huì)把大量的精力花費(fèi)在維護(hù)這些“旁路保障服務(wù)”上耍休,而忽略業(yè)務(wù)本身刃永。這對(duì)于企業(yè)應(yīng)用而言,有些本末倒置的意思羹应。

我們?cè)賮砜匆幌?Service Mesh 體系下揽碘,我們?nèi)绾谓鉀Q上述問題。Service Mesh為了解決企業(yè)應(yīng)用的“通信問題”重點(diǎn)做了四個(gè)方面的工作园匹,以 Istio 為代表雳刺,提供了包括流量管理,安全配置裸违,策略控制以及外圍組件支撐的遙測(cè)功能(需要的朋友掖桦,可以參考官方文檔:https://preliminary.istio.io/zh/docs),在Service Mesh的架構(gòu)下供汛,服務(wù)A調(diào)用服務(wù)B的架構(gòu)會(huì)變成下圖所示:

通過上圖我們可以發(fā)現(xiàn)枪汪,與Spring Cloud的實(shí)現(xiàn)方式相比,似乎簡(jiǎn)單了很多怔昨,我們不再需要在業(yè)務(wù)服務(wù)中引入眾多的“旁路保障服務(wù)”雀久,而是保障了業(yè)務(wù)服務(wù)本身的簡(jiǎn)單化。那么Service Mesh是如何處理的呢趁舀?

第一赖捌,引入了Sidecar代理模型,作為服務(wù)流量控制的入口和出口矮烹,保證能夠?qū)W(wǎng)絡(luò)層面數(shù)據(jù)做實(shí)時(shí)監(jiān)控和調(diào)整越庇;

第二,控制器根據(jù)具體業(yè)務(wù)情況奉狈,分發(fā)控制狀態(tài)和控制指令卤唉,Sidecar獲取控制信息后,及時(shí)更新緩存信息仁期,保證策略有效性桑驱。

第三,Sidecar由于能夠攔截所有請(qǐng)求的流量信息跛蛋,定期把收集的數(shù)據(jù)向控制層進(jìn)行上報(bào)碰纬,從而完成服務(wù)狀態(tài)和應(yīng)用鏈路的監(jiān)測(cè)。

第四问芬,所有的這些都是在應(yīng)用部署階段完成悦析,在開發(fā)層面不需要花費(fèi)大量的精力。

基于以上四點(diǎn)我們可以發(fā)現(xiàn)此衅,Service Mesh 僅僅通過方式轉(zhuǎn)變就達(dá)到了同樣的效果强戴,還極大的解放了開發(fā)人員亭螟。

通過業(yè)務(wù)服務(wù)調(diào)用方式的實(shí)現(xiàn)轉(zhuǎn)變,我們發(fā)現(xiàn)這樣一個(gè)事實(shí):Service Mesh在保證業(yè)務(wù)簡(jiǎn)化有效的同時(shí)骑歹,進(jìn)一步屏蔽了多種開發(fā)語言帶來的障礙预烙。它完全基于網(wǎng)絡(luò)層面和協(xié)議層面作為出發(fā)點(diǎn),達(dá)到“以不變應(yīng)萬變”的效果道媚。

支撐服務(wù)

從企業(yè)業(yè)務(wù)的價(jià)值角度考慮扁掸,其實(shí)支撐服務(wù)更多屬于“資源消耗”品,雖然如此最域,它卻是企業(yè)應(yīng)用架構(gòu)不可或缺的一部分谴分。從單一的業(yè)務(wù)調(diào)用--->微服務(wù)體系業(yè)務(wù)調(diào)用--->Service Mesh 體系業(yè)務(wù)調(diào)用的轉(zhuǎn)變方式中,可以看出支撐服務(wù)處于一個(gè)層級(jí)不斷下降的過程镀脂。而依賴于ServiceMesh的定位牺蹄,最終一些支撐服務(wù)會(huì)作為基礎(chǔ)設(shè)施的形態(tài)呈現(xiàn)出來,這也是未來發(fā)展的趨勢(shì)所在薄翅。支撐服務(wù)在企業(yè)架構(gòu)的形態(tài)轉(zhuǎn)變?nèi)鐖D所示:

傳統(tǒng)架構(gòu):傳統(tǒng)架構(gòu)下沙兰,支撐服務(wù),業(yè)務(wù)服務(wù)基本上沒有明確的邊界區(qū)分翘魄,實(shí)現(xiàn)方式上都通過代碼雜糅在一起鼎天。

微服務(wù)架構(gòu):微服務(wù)架構(gòu)下,支撐服務(wù)暑竟,業(yè)務(wù)服務(wù)能夠初步分離训措,但是需要保證代碼框架的統(tǒng)一性和依賴性,跨語言受限比較嚴(yán)重光羞。

Service Mesh架構(gòu):Service Mesh架構(gòu)下,支撐服務(wù)怀大,業(yè)務(wù)服務(wù)能夠徹底分離纱兑,不收語言限制,唯一需要考慮的是不同協(xié)議的支持情況化借。

通過支撐服務(wù)的轉(zhuǎn)變形態(tài)可以看出潜慎,支撐服務(wù)與業(yè)務(wù)服務(wù)分離是必然趨勢(shì),而最終的受限取決于多元化的網(wǎng)絡(luò)協(xié)議的處理分析能力蓖康。當(dāng)然我們需要明確一個(gè)事實(shí):就Service Mesh目前的發(fā)展趨勢(shì)和定位而言铐炫,并不能夠完全取代所有的支撐服務(wù),例如事件消息蒜焊,配置管理等倒信。我們更多期望它能夠幫助解決應(yīng)用服務(wù)在網(wǎng)絡(luò)層面需要面對(duì)的場(chǎng)景和問題。這也是它發(fā)揮價(jià)值的地方所在泳梆。

通過對(duì)網(wǎng)關(guān)服務(wù)鳖悠,業(yè)務(wù)服務(wù)榜掌,支撐服務(wù)在不同體系架構(gòu)下的轉(zhuǎn)變,我們清晰的認(rèn)識(shí)到Service Mesh能夠幫助我們重點(diǎn)解決微服務(wù)體系下繁瑣的“旁路支撐”服務(wù)乘综,保證業(yè)務(wù)服務(wù)的簡(jiǎn)單有效性憎账。通過演化分析,最終基于Service Mesh的企業(yè)應(yīng)用架構(gòu)如下圖:

從圖中可以看到 Service Mesh 架構(gòu)下重點(diǎn)做了三件事情:

網(wǎng)關(guān)層的接入工作卡辰,無論是外部請(qǐng)求接入胞皱,還是內(nèi)部服務(wù)請(qǐng)求轉(zhuǎn)發(fā),都可以基于 Service Mesh 提供的不同類型的 gateway 實(shí)現(xiàn)九妈,同時(shí)還可以保證策略的統(tǒng)一控制和管理反砌。省略了獨(dú)立的網(wǎng)關(guān)管理控制臺(tái)。

針對(duì)業(yè)務(wù)服務(wù)允蚣,增加了 Sidecar 的代理模型于颖,用來處理所有的入站和出站流量,并且配合支撐服務(wù)的控制策略嚷兔,實(shí)現(xiàn)業(yè)務(wù)服務(wù)的旁路控制功能森渐。

統(tǒng)一面向網(wǎng)絡(luò)的支撐服務(wù),基于控制與數(shù)據(jù)分離的思想冒晰,根據(jù)業(yè)務(wù)的運(yùn)行情況同衣,提高企業(yè)應(yīng)用運(yùn)行過程中的動(dòng)態(tài)控制能力。

同樣我們也意識(shí)到壶运,利用 Service Mesh 處理服務(wù)通信的能力耐齐,替換需要不同組件支撐的“注冊(cè)發(fā)現(xiàn)”,“容錯(cuò)限流”“認(rèn)證授權(quán)”“日志搜集”蒋情,“監(jiān)控告警”“流量控制”等功能埠况。在減少組件代碼開銷的同時(shí),將企業(yè)應(yīng)用的支撐服務(wù)進(jìn)一步下移棵癣。無論是開發(fā)人員辕翰,還是領(lǐng)域?qū)<遥梢约芯τ脕硖幚響?yīng)用業(yè)務(wù)狈谊,而不用在維護(hù)第三方的不同的功能組件上“浪費(fèi)時(shí)間”喜命。而業(yè)務(wù)運(yùn)維人員,通過 Service Mesh 的控制平臺(tái)河劝,能夠?qū)崟r(shí)監(jiān)測(cè)企業(yè)服務(wù)的運(yùn)行狀態(tài)壁榕,而不需要向之前那樣花費(fèi)精力維護(hù)不同的工具和組件。

最后讓我們一起討論一下赎瞎,Service Mesh是如何做到這些的牌里。Service Mesh 本質(zhì)上并沒有采用任何技術(shù)上的創(chuàng)新,更多是思想層面的變革务甥。我們認(rèn)為有幾個(gè)轉(zhuǎn)變是需要提出來的:

層級(jí)轉(zhuǎn)變:Service Mesh在設(shè)計(jì)思路上二庵,把自己不再定位成企業(yè)應(yīng)用組件贪染,而是把自己下沉到基礎(chǔ)設(shè)施層,成為基礎(chǔ)設(shè)施的一部分催享,這樣層級(jí)的轉(zhuǎn)變就與企業(yè)業(yè)務(wù)本身劃清楚界限杭隙。

方式轉(zhuǎn)變:Service Mesh在實(shí)現(xiàn)思路上,高度抽象因妙,聚焦于通信鏈路本身痰憎,而不是聚焦于組件功能上,從網(wǎng)絡(luò)層入手攀涵,抓住了服務(wù)通信交互的本質(zhì)铣耘。

控制轉(zhuǎn)變:Service Mesh將控制和實(shí)現(xiàn)分離,提供統(tǒng)一以故,靈活的控制入口蜗细,能夠快速方便的針對(duì)業(yè)務(wù)場(chǎng)景進(jìn)行自定義處理。

最后的最后需要說明 Service Mesh 還不完善怒详,還有很多問題需要在實(shí)際的企業(yè)應(yīng)用過程中逐步去解決炉媒,讓我們一起拭目以待吧。

本文由博云研究院原創(chuàng)發(fā)表昆烁,轉(zhuǎn)載請(qǐng)注明出處吊骤。

歡迎工作一到五年的Java工程師朋友們加入Java程序員開發(fā): 721575865

群內(nèi)提供免費(fèi)的Java架構(gòu)學(xué)習(xí)資料(里面有高可用、高并發(fā)静尼、高性能及分布式白粉、Jvm性能調(diào)優(yōu)、Spring源碼鼠渺,MyBatis鸭巴,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個(gè)知識(shí)點(diǎn)的架構(gòu)資料)合理利用自己每一分每一秒的時(shí)間來學(xué)習(xí)提升自己,不要再用"沒有時(shí)間“來掩飾自己思想上的懶惰拦盹!趁年輕鹃祖,使勁拼,給未來的自己一個(gè)交代掌敬!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市池磁,隨后出現(xiàn)的幾起案子奔害,更是在濱河造成了極大的恐慌,老刑警劉巖地熄,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件华临,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡端考,警方通過查閱死者的電腦和手機(jī)雅潭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門揭厚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人扶供,你說我怎么就攤上這事筛圆。” “怎么了椿浓?”我有些...
    開封第一講書人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵太援,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我扳碍,道長(zhǎng)提岔,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任笋敞,我火速辦了婚禮碱蒙,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘夯巷。我一直安慰自己赛惩,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開白布鞭莽。 她就那樣靜靜地躺著坊秸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪澎怒。 梳的紋絲不亂的頭發(fā)上褒搔,一...
    開封第一講書人閱讀 51,692評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音喷面,去河邊找鬼星瘾。 笑死,一個(gè)胖子當(dāng)著我的面吹牛惧辈,可吹牛的內(nèi)容都是我干的琳状。 我是一名探鬼主播,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼盒齿,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼念逞!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起边翁,我...
    開封第一講書人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤翎承,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后符匾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體叨咖,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了甸各。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片垛贤。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖趣倾,靈堂內(nèi)的尸體忽然破棺而出聘惦,到底是詐尸還是另有隱情,我是刑警寧澤誊酌,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布部凑,位于F島的核電站,受9級(jí)特大地震影響碧浊,放射性物質(zhì)發(fā)生泄漏涂邀。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一箱锐、第九天 我趴在偏房一處隱蔽的房頂上張望比勉。 院中可真熱鬧,春花似錦驹止、人聲如沸浩聋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽衣洁。三九已至,卻和暖如春抖仅,著一層夾襖步出監(jiān)牢的瞬間坊夫,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來泰國打工撤卢, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留环凿,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓放吩,卻偏偏與公主長(zhǎng)得像智听,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子渡紫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355

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