Apache和Nginx的運(yùn)行原理以及優(yōu)缺點(diǎn)

Web服務(wù)器

Web服務(wù)器也稱為WWW(WORLD WIDE WEB)服務(wù)器添忘,主要功能是提供網(wǎng)上信息瀏覽服務(wù)。

應(yīng)用層使用HTTP協(xié)議低淡。

HTML文檔格式台谢。

瀏覽器統(tǒng)一資源定位器(URL)寻狂。

Web服務(wù)器常常以B/S(Browser/Server)方式提供服務(wù)。瀏覽器和服務(wù)器的交互方式如下:

GET /index.php HTTP/1.1

+---------------+                    +----------------+
 |               +------------------->                |
 |   Browser     |                   |   Server       |
 |               <-------------------+                |
 +---------------+                   +----------------+
               HTTP/1.1 200 OK

瀏覽器向服務(wù)器發(fā)出HTTP請(qǐng)求(Request)朋沮。

服務(wù)器收到瀏覽器的請(qǐng)求數(shù)據(jù)蛇券,經(jīng)過(guò)分析處理,向?yàn)g覽器輸出響應(yīng)數(shù)據(jù)(Response)樊拓。

瀏覽器收到服務(wù)器的響應(yīng)數(shù)據(jù)纠亚,經(jīng)過(guò)分析處理,將最終結(jié)果顯示在瀏覽器中筋夏。

Apache 概述

Apache HTTP Server是Apache軟件基金會(huì)的一個(gè)開(kāi)放源代碼的網(wǎng)頁(yè)服務(wù)器蒂胞,可以在大多數(shù)計(jì)算機(jī)操作系統(tǒng)中運(yùn)行,由于其跨平臺(tái)和安全性条篷。被廣泛使用啤誊,是最流行的Web服務(wù)器端軟件之一岳瞭。它快速、可靠并且可通過(guò)簡(jiǎn)單的API擴(kuò)充蚊锹,將Perl/Python等解釋器編譯到服務(wù)器中。

Apache組件

Apache是基于模塊化設(shè)計(jì)的稚瘾,它的核心代碼并不多牡昆,大多數(shù)的功能都被分散到各個(gè)模塊中,各個(gè)模塊在系統(tǒng)啟動(dòng)的時(shí)候按需載入摊欠。

"text">         +----------+
      +- | Module   | -----------------+
      |  +----------+                  |
      |                          +------------+
+-----------+   Apache HTTPD     | php module |
| Module    |                    +------------+
+-----------+              +----------+|
      +----------+-------- |  MPM     |+
                 |         +----+---+-+
               +-v-----------+  |   |
               |    ARP      <--+   |
               +------+------+      |
                      |             |
      +---------------v-------------v--+
      |      Operating  System         |
      +--------------------------------+

MPM(Multi -Processing Modules丢烘,多重處理模塊)是Apache的核心組件之一,Apache通過(guò)MPM來(lái)使用操作系統(tǒng)的資源些椒,對(duì)進(jìn)程和線程池進(jìn)行管理播瞳。Apache為了能夠獲得最好的運(yùn)行性能,針對(duì)不同的平臺(tái) (Unix/Linux免糕、Window)做了優(yōu)化赢乓,為不同的平臺(tái)提供了不同的MPM,用戶可以根據(jù)實(shí)際情況進(jìn)行選擇石窑,其中最常使用的MPM有 prefork和worker兩種牌芋。至于您的服務(wù)器正以哪種方式運(yùn)行,取決于安裝Apache過(guò)程中指定的MPM編譯參數(shù),在X系統(tǒng)上默認(rèn)的編譯參數(shù)為 prefork松逊。

由于大多數(shù)的Unix都不支持真正的線程躺屁,所以采用了預(yù)派生子進(jìn)程(prefork)方式,象Windows或者Solaris這些支持 線程的平臺(tái)经宏,基于多進(jìn)程多線程混合的worker模式是一種不錯(cuò)的選擇犀暑。Apache中還有一個(gè)重要的組件就是APR(Apache portable Runtime Library),即Apache可移植運(yùn)行庫(kù)烁兰,它是一個(gè)對(duì)操作系統(tǒng)調(diào)用的抽象庫(kù)耐亏,用來(lái)實(shí)現(xiàn)Apache內(nèi)部組件對(duì)操作系統(tǒng)的使用,提高系統(tǒng)的可移植性缚柏。 Apache對(duì)于php的解析苹熏,就是通過(guò)眾多Module中的php Module來(lái)完成的。

Apache生命周期

"text">   +--------------------------------------------------------------+
   |                 +---------------------+       啟動(dòng)階段        |
   |                 |    系統(tǒng)啟動(dòng), 配置     |                      |
   |                 +----------+----------+                      |
   |                            |                                 |
   |                 +----------v----------+                      |
   |                 |      模塊的初始化     |                      |
   |                 +-+--------+--------+-+                      |
   |                   |        |        |                        |
   |   +-------------+ | +------v-------+| +--------------+       |
   |   | 子進(jìn)程初始化  |<+ | 子進(jìn)程初始化   |+>|  子進(jìn)程初始化  |       |
   |   +------+------+   +-------+------+  +-------+------+       |
   +--------------------------------------------------------------+
   |          |                  |                 |     運(yùn)行階段  |
   |     +----v----+        +----v----+       +----v----+         |
   |     | 請(qǐng)求循環(huán) |        |  請(qǐng)求循環(huán) |       | 請(qǐng)求循環(huán) |         |
   |     +----+----+        +----+----+       +----+----+         |
   |          |                  |                 |              |
   |   +------v------+    +------v------+   +------v------+       |
   |   |  子進(jìn)程結(jié)束   |    |  子進(jìn)程結(jié)束  |   |   子進(jìn)程結(jié)束  |       |
   |   +-------------+    +-------------+   +-------------+       |
   +--------------------------------------------------------------+

這個(gè)生命周期是在perfork工作下的示意币喧,從圖中可以看出轨域,Apache對(duì)于每一個(gè)請(qǐng)求都要啟動(dòng)一個(gè)單獨(dú)的進(jìn)程來(lái)處理。

Apache的工作模式 prefork的工作原理

一個(gè)單獨(dú)的控制進(jìn)程(父進(jìn)程)負(fù)責(zé)產(chǎn)生子進(jìn)程杀餐,這些子進(jìn)程用于監(jiān)聽(tīng)請(qǐng)求并作出應(yīng)答干发。Apache總是試圖保持一些備用的 (spare)或是空閑的子進(jìn)程用于迎接即將到來(lái)的請(qǐng)求。這樣客戶端就無(wú)需在得到服務(wù)前等候子進(jìn)程的產(chǎn)生史翘。在Unix系統(tǒng)中枉长,父進(jìn)程通常以root身份運(yùn)行以便邦定80端口冀续,而 Apache產(chǎn)生的子進(jìn)程通常以一個(gè)低特權(quán)的用戶運(yùn)行。User和Group指令用于配置子進(jìn)程的低特權(quán)用戶必峰。運(yùn)行子進(jìn)程的用戶必須要對(duì)他所服務(wù)的內(nèi)容有讀取的權(quán)限洪唐,但是對(duì)服務(wù)內(nèi)容之外的其他資源必須擁有盡可能少的權(quán)限。

worker的工作原理

每個(gè)進(jìn)程能夠擁有的線程數(shù)量是固定的吼蚁。服務(wù)器會(huì)根據(jù)負(fù)載情況增加或減少進(jìn)程數(shù)量凭需。一個(gè)單獨(dú)的控制進(jìn)程(父進(jìn)程)負(fù)責(zé)子進(jìn)程的建立。每個(gè)子進(jìn)程能夠建立 ThreadsPerChild數(shù)量的服務(wù)線程和一個(gè)監(jiān)聽(tīng)線程肝匆,該監(jiān)聽(tīng)線程監(jiān)聽(tīng)接入請(qǐng)求并將其傳遞給服務(wù)線程處理和應(yīng)答粒蜈。Apache總是試圖維持一個(gè)備 用(spare)或是空閑的服務(wù)線程池。這樣旗国,客戶端無(wú)須等待新線程或新進(jìn)程的建立即可得到處理枯怖。在Unix中,為了能夠綁定80端口能曾,父進(jìn)程一般都是以 root身份啟動(dòng)度硝,隨后,Apache以較低權(quán)限的用戶建立子進(jìn)程和線程借浊。User和Group指令用于配置Apache子進(jìn)程的權(quán)限塘淑。雖然子進(jìn)程必須對(duì) 其提供的內(nèi)容擁有讀權(quán)限,但應(yīng)該盡可能給予他較少的特權(quán)蚂斤。另外存捺,除非使用了suexec ,否則曙蒸,這些指令配置的權(quán)限將被CGI腳本所繼承捌治。

Apache的運(yùn)行 啟動(dòng)階段

在啟動(dòng)階段,Apache主要進(jìn)行配置文件解析(例如http.conf以及Include指令設(shè)定的配置文件等)纽窟、模塊加載(例如modphp.so,modperl.so等)和系統(tǒng)資源初始化(例如日志文件肖油、共享內(nèi)存段等)工作。在這個(gè)階段臂港,Apache為了獲得系統(tǒng)資源最大的使用權(quán)限森枪,將以特權(quán)用戶root或超級(jí)管理員administrator完成啟動(dòng)。

這個(gè)過(guò)程可以通過(guò)下圖來(lái)深入了解:

"text">     
       |  開(kāi)始   |
       +----+---+
            |
 +----------v------------+   解析主配置文件http.conf中配置信息审孽,
 |     解析配置文件        |   像LoadModule, AddType
 +----------+------------+   等指令被加載至內(nèi)存
            |
 +----------v------------+   依據(jù)AddModule, LoadModule等指令
 |   加載靜態(tài)/動(dòng)態(tài)模塊      |   加載Apache模塊县袱,像mod_php5.so被
 +----------+------------+   加載至內(nèi)存,映射到Apache地址空間佑力。
            |
 +----------v------------+   日志文件式散、共享內(nèi)存段,數(shù)據(jù)庫(kù)鏈接
 |     系統(tǒng)資源初始化      |    等初始化
 +----------+------------+
            |
        +---v----+
        |  結(jié)束   |
        +--------+

運(yùn)行階段

在運(yùn)行階段打颤,Apache主要工作是處理用戶的服務(wù)請(qǐng)求暴拄。在這個(gè)階段漓滔,Apache放棄特權(quán)用戶級(jí)別,使用普通權(quán)限乖篷,這主要是基于安全性的考慮响驴,防止由于代碼的缺陷引起的安全漏洞。

由于Apache的Hook機(jī)制那伐,Apache 允許模塊(包括內(nèi)部模塊和外部模塊踏施,例如mod_php5.so,mod_perl.so等)將自定義的函數(shù)注入到請(qǐng)求處理循環(huán)中。 mod_php5.so/php5apache2.dll就是將所包含的自定義函數(shù)罕邀,通過(guò)Hook機(jī)制注入到Apache中,在Apache處理流程的各 個(gè)階段負(fù)責(zé)處理php請(qǐng)求养距。

Apache將請(qǐng)求處理循環(huán)分為11個(gè)階段诉探,依次是:Post-Read-Request,URI Translation棍厌,Header Parsing肾胯,Access Control,Authentication耘纱,Authorization敬肚,MIME Type Checking,F(xiàn)ixUp束析,Response艳馒,Logging,CleanUp员寇。

Apache處理http請(qǐng)求的生命周期:

Apache處理http請(qǐng)求的生命周期

Post-Read-Request階段:在正常請(qǐng)求處理流程中弄慰,這是模塊可以插入鉤子的第一個(gè)階段。對(duì)于那些想很早進(jìn)入處理請(qǐng)求的模塊來(lái)說(shuō)蝶锋,這個(gè)階段可以被利用陆爽。

URI Translation階段 : Apache在本階段的主要工作:將請(qǐng)求的URL映射到本地文件系統(tǒng)。模塊可以在這階段插入鉤子扳缕,執(zhí)行自己的映射邏輯慌闭。mod_alias就是利用這個(gè)階段工作的。

Header Parsing階段 : Apache在本階段的主要工作:檢查請(qǐng)求的頭部躯舔。由于模塊可以在請(qǐng)求處理流程的任何一個(gè)點(diǎn)上執(zhí)行檢查請(qǐng)求頭部的任務(wù)驴剔,因此這個(gè)鉤子很少被使用。mod_setenvif就是利用這個(gè)階段工作的庸毫。

Access Control階段 : Apache在本階段的主要工作:根據(jù)配置文件檢查是否允許訪問(wèn)請(qǐng)求的資源仔拟。Apache的標(biāo)準(zhǔn)邏輯實(shí)現(xiàn)了允許和拒絕指令。modauthzhost就是利用這個(gè)階段工作的飒赃。

Authentication階段 : Apache在本階段的主要工作:按照配置文件設(shè)定的策略對(duì)用戶進(jìn)行認(rèn)證利花,并設(shè)定用戶名區(qū)域科侈。模塊可以在這階段插入鉤子,實(shí)現(xiàn)一個(gè)認(rèn)證方法炒事。

Authorization階段 : Apache在本階段的主要工作:根據(jù)配置文件檢查是否允許認(rèn)證過(guò)的用戶執(zhí)行請(qǐng)求的操作臀栈。模塊可以在這階段插入鉤子,實(shí)現(xiàn)一個(gè)用戶權(quán)限管理的方法挠乳。

MIME Type Checking階段 : Apache在本階段的主要工作:根據(jù)請(qǐng)求資源的MIME類型的相關(guān)規(guī)則权薯,判定將要使用的內(nèi)容處理函數(shù)。標(biāo)準(zhǔn)模塊modnegotiation和modmime實(shí)現(xiàn)了這個(gè)鉤子睡扬。

FixUp階段 : 這是一個(gè)通用的階段盟蚣,允許模塊在內(nèi)容生成器之前,運(yùn)行任何必要的處理流程卖怜。和PostReadRequest類似屎开,這是一個(gè)能夠捕獲任何信息的鉤子,也是最常使用的鉤子马靠。

Response階段 : Apache在本階段的主要工作:生成返回客戶端的內(nèi)容奄抽,負(fù)責(zé)給客戶端發(fā)送一個(gè)恰當(dāng)?shù)幕貜?fù)。這個(gè)階段是整個(gè)處理流程的核心部分甩鳄。

Logging階段 : Apache在本階段的主要工作:在回復(fù)已經(jīng)發(fā)送給客戶端之后記錄事務(wù)逞度。模塊可能修改或者替換Apache的標(biāo)準(zhǔn)日志記錄。

CleanUp階段 : Apache在本階段的主要工作:清理本次請(qǐng)求事務(wù)處理完成之后遺留的環(huán)境妙啃,比如文件档泽、目錄的處理或者Socket的關(guān)閉等等,這是Apache一次請(qǐng)求處理的最后一個(gè)階段彬祖。

Nginx 概述

Nginx是一款由俄羅斯程序員Igor Sysoev所開(kāi)發(fā)輕量級(jí)的網(wǎng)頁(yè)服務(wù)器茁瘦、反向代理服務(wù)器以及電子郵件(IMAP/POP3)代理服務(wù)器。起初是供俄國(guó)大型的門戶網(wǎng)站及搜索引擎Rambler使用储笑。

Nginx的模塊與工作原理

Nginx由內(nèi)核和模塊組成甜熔,其中,內(nèi)核的設(shè)計(jì)非常微小和簡(jiǎn)潔突倍,完成的工作也非常簡(jiǎn)單腔稀,僅僅通過(guò)查找配置文件將客戶端請(qǐng)求映射到一個(gè)location block(location是Nginx配置中的一個(gè)指令,用于URL匹配)羽历,而在這個(gè)location中所配置的每個(gè)指令將會(huì)啟動(dòng)不同的模塊去完成相應(yīng)的工作焊虏。

Nginx的模塊從結(jié)構(gòu)上分為核心模塊、基礎(chǔ)模塊和第三方模塊:

核心模塊:HTTP模塊秕磷、EVENT模塊和MAIL模塊

基礎(chǔ)模塊:HTTP Access模塊诵闭、HTTP FastCGI模塊、HTTP Proxy模塊和HTTP Rewrite模塊,

第三方模塊:HTTP Upstream Request Hash模塊疏尿、Notice模塊和HTTP Access Key模塊瘟芝。

Nginx的模塊從功能上分為如下三類:

Handlers(處理器模塊)。此類模塊直接處理請(qǐng)求褥琐,并進(jìn)行輸出內(nèi)容和修改headers信息等操作锌俱。Handlers處理器模塊一般只能有一個(gè)。

Filters (過(guò)濾器模塊)敌呈。此類模塊主要對(duì)其他處理器模塊輸出的內(nèi)容進(jìn)行修改操作贸宏,最后由Nginx輸出。

Proxies (代理類模塊)磕洪。此類模塊是Nginx的HTTP Upstream之類的模塊吭练,這些模塊主要與后端一些服務(wù)比如FastCGI等進(jìn)行交互,實(shí)現(xiàn)服務(wù)代理和負(fù)載均衡等功能析显。

"text">                     +                    ^
        Http Request |                    |  Http Response
                     |                    |
    +---------+------v-----+         +----+----+
    |  Conf   | Nginx Core |         | FilterN |
    +---------+------+-----+         +----^----+
                     |                    |
                     |               +----+----+
                     |               | Filter2 |
choose a handler     |               +----^----+
based conf           |                    |
                     |               +----+----+
                     |               | Filter1 |
                     |               +----^----+
                     |                    | Generate content
               +-----v--------------------+----+
               |           Handler             |
               +-------------------------------+

Nginx本身做的工作實(shí)際很少线脚,當(dāng)它接到一個(gè)HTTP請(qǐng)求時(shí),它僅僅是通過(guò)查找配置文件將此次請(qǐng)求映射到一個(gè)location block叫榕,而此location中所配置的各個(gè)指令則會(huì)啟動(dòng)不同的模塊去完成工作,因此模塊可以看做Nginx真正的勞動(dòng)工作者姊舵。通常一個(gè) location中的指令會(huì)涉及一個(gè)handler模塊和多個(gè)filter模塊(當(dāng)然晰绎,多個(gè)location可以復(fù)用同一個(gè)模塊)。handler模塊負(fù) 責(zé)處理請(qǐng)求括丁,完成響應(yīng)內(nèi)容的生成荞下,而filter模塊對(duì)響應(yīng)內(nèi)容進(jìn)行處理。

Nginx架構(gòu)及工作流程

Nginx架構(gòu)

上圖是Nginx的架構(gòu)史飞,這個(gè)架構(gòu)類似于Apache的Worker工作狀態(tài)尖昏,Nginx的每一個(gè)Worker進(jìn)程都管理著大量的線程,真正處理請(qǐng)求的是Worker之下的線程构资。

所有實(shí)際上的業(yè)務(wù)處理邏輯都在worker進(jìn)程抽诉。worker進(jìn)程中有一個(gè)函數(shù),執(zhí)行無(wú)限循環(huán)吐绵,不斷處理收到的來(lái)自客戶端的請(qǐng)求迹淌,并進(jìn)行處理,直到整個(gè)<u style="box-sizing: border-box; outline: 0px; margin: 0px; padding: 0px; overflow-wrap: break-word;">nginx</u>服務(wù)被停止己单。Worker中這個(gè)函數(shù)執(zhí)行內(nèi)容如下:

操作系統(tǒng)提供的機(jī)制(例如epoll, kqueue等)產(chǎn)生相關(guān)的事件唉窃。

接收和處理這些事件,如是接受到數(shù)據(jù)纹笼,則產(chǎn)生更高層的request對(duì)象纹份。

處理request的header和body。

產(chǎn)生響應(yīng),并發(fā)送回客戶端蔓涧。

完成request的處理件已。

重新初始化定時(shí)器及其他事件。

Apache和Nginx比較 功能對(duì)比

Nginx和Apache一樣蠢笋,都是HTTP服務(wù)器軟件拨齐,在功能實(shí)現(xiàn)上都采用模塊化結(jié)構(gòu)設(shè)計(jì),都支持通用的語(yǔ)言接口昨寞,如PHP瞻惋、Perl、Python等援岩,同時(shí)還支持正向和反向代理歼狼、虛擬主機(jī)、URL重寫享怀、壓縮傳輸羽峰、SSL加密傳輸?shù)取?/p>

在功能實(shí)現(xiàn)上,Apache的所有模塊都支持動(dòng)添瓷、靜態(tài)編譯梅屉,而Nginx模塊都是靜態(tài)編譯的,

對(duì)FastCGI的支持鳞贷,Apache對(duì)Fcgi的支持不好坯汤,而Nginx對(duì)Fcgi的支持非常好曹傀;

在處理連接方式上销斟,Nginx支持epoll谣蠢,而Apache卻不支持必盖;

在空間使用上瑟由,Nginx安裝包僅僅只有幾百K芜赌,和Nginx比起來(lái)Apache絕對(duì)是龐然大物作儿。

Nginx相對(duì)apache的優(yōu)點(diǎn)

輕量級(jí)豆茫,同樣起web 服務(wù)迅箩,比apache 占用更少的內(nèi)存及資源

靜態(tài)處理溉愁,Nginx 靜態(tài)處理性能比 Apache 高 3倍以上

抗并發(fā),nginx 處理請(qǐng)求是異步非阻塞的沙热,而apache則是阻塞型的叉钥,在高并發(fā)下nginx 能保持低資源低消耗高性能。在Apache+PHP(prefork)模式下篙贸,如果PHP處理慢或者前端壓力很大的情況下投队,很容易出現(xiàn)Apache進(jìn)程數(shù)飆升,從而拒絕服務(wù)的現(xiàn)象爵川。

高度模塊化的設(shè)計(jì)敷鸦,編寫模塊相對(duì)簡(jiǎn)單

社區(qū)活躍,各種高性能模塊出品迅速啊

apache相對(duì)nginx的優(yōu)點(diǎn)

rewrite,比nginx 的rewrite 強(qiáng)大

模塊超多扒披,基本想到的都可以找到

少bug值依,nginx的bug相對(duì)較多

超穩(wěn)定

Apache對(duì)PHP支持比較簡(jiǎn)單,Nginx需要配合其他后端用

選擇Nginx的優(yōu)勢(shì)所在

作為Web服務(wù)器: Nginx處理靜態(tài)文件碟案、索引文件愿险,自動(dòng)索引的效率非常高。

作為代理服務(wù)器价说,Nginx可以實(shí)現(xiàn)無(wú)緩存的反向代理加速辆亏,提高網(wǎng)站運(yùn)行速度。

作為負(fù)載均衡服務(wù)器鳖目,Nginx既可以在內(nèi)部直接支持Rails和PHP扮叨,也可以支持HTTP代理服務(wù)器對(duì)外進(jìn)行服務(wù),同時(shí)還支持簡(jiǎn)單的容錯(cuò)和利用算法進(jìn)行負(fù)載均衡领迈。

在性能方面彻磁,Nginx是專門為性能優(yōu)化而開(kāi)發(fā)的,在實(shí)現(xiàn)上非常注重效率狸捅。它采用內(nèi)核Poll模型(epoll and kqueue )衷蜓,可以支持更多的并發(fā)連接,最大可以支持對(duì)50 000個(gè)并發(fā)連接數(shù)的響應(yīng)尘喝,而且只占用很低的內(nèi)存資源恍箭。

在穩(wěn)定性方面,Nginx采取了分階段資源分配技術(shù)瞧省,使得CPU與內(nèi)存的占用率非常低。Nginx官方表示鳍贾,Nginx保持10 000個(gè)沒(méi)有活動(dòng)的連接鞍匾,而這些連接只占用2.5MB內(nèi)存,因此骑科,類似DOS這樣的攻擊對(duì)Nginx來(lái)說(shuō)基本上是沒(méi)有任何作用的橡淑。

在高可用性方面,Nginx支持熱部署咆爽,啟動(dòng)速度特別迅速梁棠,因此可以在不間斷服務(wù)的情況下,對(duì)軟件版本或者配置進(jìn)行升級(jí)斗埂,即使運(yùn)行數(shù)月也無(wú)需重新啟動(dòng)符糊,幾乎可以做到7×24小時(shí)不間斷地運(yùn)行。

同時(shí)使用Nginx和Apache

由于Nginx和Apache各自的優(yōu)勢(shì)呛凶,現(xiàn)在很多人選擇了讓兩者在服務(wù)器中共存男娄。在服務(wù)器端讓Nginx在前,Apache在后。由Nginx做負(fù)載均衡和反向代理模闲,并且處理靜態(tài)文件建瘫,講動(dòng)態(tài)請(qǐng)求(如PHP應(yīng)用)交給Apache去處理。

最后編輯于
?著作權(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)離奇詭異收擦,居然都是意外死亡贮配,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門塞赂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)泪勒,“玉大人,你說(shuō)我怎么就攤上這事宴猾≡泊妫” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵仇哆,是天一觀的道長(zhǎng)沦辙。 經(jīng)常有香客問(wèn)我,道長(zhǎng)讹剔,這世上最難降的妖魔是什么油讯? 我笑而不...
    開(kāi)封第一講書人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮延欠,結(jié)果婚禮上陌兑,老公的妹妹穿的比我還像新娘。我一直安慰自己由捎,他們只是感情好兔综,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著狞玛,像睡著了一般软驰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上心肪,一...
    開(kāi)封第一講書人閱讀 51,692評(píng)論 1 305
  • 那天锭亏,我揣著相機(jī)與錄音,去河邊找鬼硬鞍。 笑死贰镣,一個(gè)胖子當(dāng)著我的面吹牛呜象,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播碑隆,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼恭陡,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了上煤?” 一聲冷哼從身側(cè)響起休玩,我...
    開(kāi)封第一講書人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎劫狠,沒(méi)想到半個(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
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望腹暖。 院中可真熱鬧进陡,春花似錦、人聲如沸微服。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)以蕴。三九已至,卻和暖如春辛孵,著一層夾襖步出監(jiān)牢的瞬間丛肮,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工魄缚, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留宝与,地道東北人焚廊。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像习劫,于是被迫代替她去往敵國(guó)和親咆瘟。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355

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

  • ORA-00001: 違反唯一約束條件 (.) 錯(cuò)誤說(shuō)明:當(dāng)在唯一索引所對(duì)應(yīng)的列上鍵入重復(fù)值時(shí)诽里,會(huì)觸發(fā)此異常袒餐。 O...
    我想起個(gè)好名字閱讀 5,320評(píng)論 0 9
  • 手動(dòng)不易,轉(zhuǎn)發(fā)請(qǐng)注明出處 --Trance 數(shù)據(jù)庫(kù)系統(tǒng)命令: (1).查看存儲(chǔ)過(guò)程狀態(tài):show pro...
    Trance_b54c閱讀 1,663評(píng)論 0 8
  • pyspark.sql模塊 模塊上下文 Spark SQL和DataFrames的重要類: pyspark.sql...
    mpro閱讀 9,457評(píng)論 0 13
  • ORACLE自學(xué)教程 --create tabletestone ( id number, --序號(hào)usernam...
    落葉寂聊閱讀 1,083評(píng)論 0 0
  • 一. Java基礎(chǔ)部分.................................................
    wy_sure閱讀 3,811評(píng)論 0 11