ODPS基本概念

什么是ODPS择份?

開發(fā)數(shù)據(jù)處理服務(wù)(Open Data Processing Service徽职,簡稱ODPS)湾宙,2016年后更名MaxComputer。ODPS是一種由阿里云自主研發(fā)久锥,針對(duì)TB/PB級(jí)數(shù)據(jù)、實(shí)時(shí)性要求不高的分布式處理服務(wù)异剥。主要服務(wù)于批量結(jié)構(gòu)化數(shù)據(jù)的存儲(chǔ)和計(jì)算瑟由,可以提供海量數(shù)據(jù)倉庫的解決方案以及針對(duì)大數(shù)據(jù)的分析建模服務(wù)。

ODPS的組成對(duì)象

項(xiàng)目空間(Project)

項(xiàng)目空間是MaxComputer 的基本組織單元冤寿,它類似于傳統(tǒng)數(shù)據(jù)庫中的Database或者Schema的概念歹苦,是進(jìn)行多用戶隔離和訪問控制的主要邊界。一個(gè)用戶可以同時(shí)擁有多個(gè)項(xiàng)目空間的權(quán)限督怜。通過安全授權(quán)暂氯,可以在一個(gè)項(xiàng)目空間中訪問另一個(gè)項(xiàng)目空間中的對(duì)象。

表(Table)

表是MaxCompute的數(shù)據(jù)存儲(chǔ)單元亮蛔。它在邏輯上也是由行和列組成的二維結(jié)構(gòu)痴施,每行代表一條記錄,每列表示相同數(shù)據(jù)類型的一個(gè)字段究流,一條記錄可以包含一個(gè)或者多個(gè)列辣吃,各個(gè)列的名稱和類型構(gòu)成這張表的Schema。
MaxComputer的表格分為兩種類型:外部表及內(nèi)部表芬探。
內(nèi)部表的所有數(shù)據(jù)都被存儲(chǔ)在MaxComputer中神得。表中的列可以是MaxCompute支持的任意數(shù)據(jù)類型(Bigint、Double偷仿、String哩簿、 Boolean和Datetime)。MaxCompute中的各種類型計(jì)算任務(wù)(輸入酝静、輸出)的操作對(duì)象都是表节榜。用戶可以創(chuàng)建、刪除表以及向表中導(dǎo)入數(shù)據(jù)别智。
對(duì)于外部表宗苍,MaxCompute并不真正持有數(shù)據(jù),表格的數(shù)據(jù)可以存放在OSS中。MaxCompute僅會(huì)記錄表格中的Meta信息讳窟。用戶可以通過MaxCompute的外部表機(jī)制處理OSS上的非結(jié)構(gòu)化數(shù)據(jù)让歼,例如:視頻、音頻丽啡、基因谋右、氣象、地理信息等补箍。其主要流程包括:

  1. 將數(shù)據(jù)上傳至OSS倚评;
  2. 在RAM產(chǎn)品中授予MaxCompute服務(wù)讀取OSS數(shù)據(jù)權(quán)限。
  3. 自定義Extractor:用戶讀取OSS上特殊格式數(shù)據(jù)馏予。目前天梧,MaxCompute默認(rèn)提供CSV格式的Extractor,并提供視頻格式數(shù)據(jù)讀取的代碼樣例霞丧。
  4. 創(chuàng)建外部表呢岗;
  5. 執(zhí)行SQL作業(yè)分析數(shù)據(jù);
    注意:目前MaxCompute僅支持讀取外部數(shù)據(jù)蛹尝,即讀取OSS數(shù)據(jù)后豫,不支持向外部寫入數(shù)據(jù);
分區(qū)(Partition)

分區(qū)表指的是在創(chuàng)建表時(shí)指定的分區(qū)空間突那,即指定表內(nèi)的某幾個(gè)字段作為分區(qū)列挫酿。大多數(shù)情況下,用戶可以將分區(qū)類比為文件系統(tǒng)下的目錄愕难。MaxCompute將分區(qū)列每一個(gè)值作分區(qū)(目錄)早龟。用戶可以指定多級(jí)分區(qū),即將表的多個(gè)字段作為表的分區(qū)猫缭,分區(qū)之間正如多級(jí)目錄的關(guān)系葱弟。在使用數(shù)據(jù)時(shí)如果指定了需要訪問的分區(qū)名稱,則只會(huì)讀取相應(yīng)的分區(qū)猜丹,避免掃描全表芝加,提高處理效率,降低費(fèi)用射窒。

create table src (key string, value bigint) partitioned by (pt string);     

目前藏杖,MaxCompute僅承諾String分區(qū)。且目前最多支持六級(jí)分區(qū)

自定義函數(shù)(User Defined Functuon脉顿,簡稱UDF)

MaxCompute為用戶提供了SQL計(jì)算功能蝌麸,用戶可以在MaxCompute SQL中使用系統(tǒng)的內(nèi)建函數(shù)完成一定的計(jì)算和計(jì)數(shù)功能。但是當(dāng)內(nèi)建函數(shù)無法滿足要求時(shí)弊予,用戶可以使用MaxCompute提供的Java編程接口開發(fā)自定義函數(shù)UDF祥楣,UDF又可以進(jìn)一步分為標(biāo)量值函數(shù)UDF、自定義聚合函數(shù)UDAF和自定義表值函數(shù)UDTF三種汉柒。


資源(Resource)

資源是MaxCompute的特有概念误褪。用戶如果想使用MaxCompute的自定義函數(shù)(UDF)或者M(jìn)apReduce功能需要依賴資源來完成。
例如用戶在編寫好UDF后碾褂,需要將編譯好的jar包以資源的形式上傳到ODPS兽间。運(yùn)行這個(gè)UDF時(shí),MaxCompute會(huì)自動(dòng)下載這個(gè)Jar包正塌,獲取用戶代碼嘀略,運(yùn)行UDF而無需用戶干預(yù)。上傳Jar包的過程就是在MaxCompute上創(chuàng)建資源的過程乓诽。

任務(wù)(Task)和作業(yè)(Job)

任務(wù)是ODPS的基本計(jì)數(shù)單元帜羊。SQL以及MapReduce功能都是通過任務(wù)完成的。
對(duì)于用戶提交的大多數(shù)任務(wù)鸠天,特別是計(jì)算型任務(wù)讼育,MaxCompute會(huì)將其進(jìn)行解析,得出任務(wù)的執(zhí)行計(jì)劃稠集。執(zhí)行計(jì)劃是由具有依賴關(guān)系的多個(gè)執(zhí)行階段(Stage)構(gòu)成的奶段。目前,執(zhí)行計(jì)劃邏輯上可以被看作一個(gè)有向圖剥纷,圖中的點(diǎn)是各個(gè)執(zhí)行階段痹籍,邊是各個(gè)執(zhí)行階段之間的依賴關(guān)系。在同一個(gè)執(zhí)行階段內(nèi)晦鞋,會(huì)有多個(gè)進(jìn)程蹲缠,也稱之為Worker,共同完成該執(zhí)行階段的計(jì)算工作悠垛。同一個(gè)執(zhí)行階段內(nèi)的不同Worker之間只是處理的數(shù)據(jù)不同吼砂,執(zhí)行邏輯完成相同。
作業(yè)(Job)是由一個(gè)或者多個(gè)Task以及表示其執(zhí)行次序關(guān)系的工作流(Workflow)鼎文,工作流是個(gè)有向無環(huán)圖渔肩。當(dāng)一個(gè)作業(yè)被提交到系統(tǒng)中執(zhí)行時(shí),該作業(yè)就會(huì)擁有一個(gè)作業(yè)實(shí)例(Instance)拇惋。另一方面周偎,部分MaxCompute任務(wù)并不是計(jì)算型任務(wù)。例如DDL SQL語句撑帖,這些任務(wù)本質(zhì)上只需要讀取修改MaxCompute的元數(shù)據(jù)蓉坎,因此這些任務(wù)不能被解析出執(zhí)行計(jì)劃。


工作流

工作流是一個(gè)DAG圖(有向無環(huán)圖)胡嘿,其描述了作業(yè)中多個(gè)節(jié)點(diǎn)之間的邏輯(依賴關(guān)系)和規(guī)則(運(yùn)行約束)蛉艾。

節(jié)點(diǎn)

節(jié)點(diǎn)屬于工作流的子對(duì)象,也稱為任務(wù),是大數(shù)據(jù)開發(fā)平臺(tái)數(shù)據(jù)處理和分析過程最基本單元勿侯,每個(gè)任務(wù)對(duì)應(yīng)DAG圖中的一個(gè)節(jié)點(diǎn)拓瞪,其可以是一個(gè)SQL Query、命令和MapReduce程序助琐。

依賴關(guān)系

依賴關(guān)系是描述兩個(gè)或多個(gè)節(jié)點(diǎn)/工作流之間的語義連接關(guān)系祭埂,其中上游節(jié)點(diǎn)/工作流運(yùn)行可以影響下流節(jié)點(diǎn)/工作流的運(yùn)行狀態(tài),反之則不成立兵钮。

實(shí)例

在阿里與大數(shù)據(jù)開發(fā)平臺(tái)中蛆橡,節(jié)點(diǎn)任務(wù)在執(zhí)行時(shí)會(huì)被實(shí)例化,并以O(shè)DPS實(shí)例的方式存在掘譬。實(shí)例會(huì)經(jīng)歷未運(yùn)行泰演、等待時(shí)間/等待資源、運(yùn)行中葱轩、成功/失敗幾個(gè)狀態(tài)睦焕。

ODPS的基礎(chǔ)構(gòu)架

MaxCompute構(gòu)架分為四層,分別是客戶端酿箭、接入層复亏、邏輯層和計(jì)算層:


【客戶端】

ODPS以RESTful API方式對(duì)外提供服務(wù),用戶可以通過不同的方式來使用ODPS的服務(wù)缭嫡,包括直接通過RESTful API請(qǐng)求訪問缔御、ODPS SDK、ODPS CLT(Command Line Tool)妇蛀、Java集成開發(fā)環(huán)境和管理控制臺(tái)等耕突。


【接入層】

【邏輯層】

邏輯層又稱為控制層,是ODPS的核心部分评架【熳拢可以認(rèn)為是ODPS的大腦,負(fù)責(zé)項(xiàng)目空間纵诞、對(duì)象管理上祈、授權(quán)管理、命令解析浙芙、元數(shù)據(jù)五部分登刺。



請(qǐng)求處理器(Worker)

負(fù)責(zé)處理所有RESTful請(qǐng)求,本地處理一些作業(yè)嗡呼,提交分布式作業(yè)給調(diào)度器纸俭。
本地能處理的作業(yè)包括:用戶空間、表南窗、資源揍很、任務(wù)等的管理郎楼。
需要提交給調(diào)度器的作業(yè)包括:SQL、MR等分布式計(jì)算的任務(wù)窒悔。


調(diào)度器(Scheduler)

調(diào)度器負(fù)責(zé)Instance調(diào)度以及查詢計(jì)算集群的資源情況呜袁。
處理Instance的任務(wù)包括:

維護(hù)一個(gè)Instance列表。
把Instance分解成Task
生成Task的工作流(DAG 圖)
把可運(yùn)行的Task放到TaskPool中
定時(shí)對(duì)該優(yōu)先級(jí)隊(duì)列進(jìn)行排序蛉迹。


作業(yè)執(zhí)行管理器(Executor)

負(fù)責(zé)向TaskPool申請(qǐng)Task傅寡,生成任務(wù)描述文件提交給計(jì)算層放妈,監(jiān)控并反饋狀態(tài)給調(diào)度器北救。
作業(yè)執(zhí)行器的運(yùn)行細(xì)節(jié):
判斷自身資源是否充足。
主動(dòng)輪詢TaskPool,請(qǐng)求下一個(gè)Task芜抒,生成計(jì)算層的分布式作業(yè)描述文件珍策,提交給計(jì)算層。
監(jiān)控這些任務(wù)的運(yùn)行狀態(tài)宅倒,定時(shí)把狀態(tài)匯報(bào)給調(diào)度器攘宙。


【計(jì)算層】

計(jì)算層開始真正執(zhí)行計(jì)算任務(wù)。



Pangu(盤古)文件系統(tǒng)存儲(chǔ)文件的格式如下:




一條ODPS SQL的執(zhí)行


權(quán)限管理

角色隔離

組織管理員

指組織的管理者拐迁,可新建計(jì)算引擎蹭劈、新建項(xiàng)目空間、新建調(diào)度資源线召、添加組織成員铺韧、為組織成員賦予組織管理員角色、配置數(shù)據(jù)類目等缓淹。

項(xiàng)目管理員

指項(xiàng)目空間的管理者哈打,可針對(duì)項(xiàng)目空間基本屬性、數(shù)據(jù)源讯壶、當(dāng)前項(xiàng)目空間計(jì)算引擎配置和項(xiàng)目成員進(jìn)行管理料仗。并為組織成員賦予項(xiàng)目管理員、開發(fā)伏蚊、運(yùn)維立轧、部署、訪客角色躏吊。

開發(fā)

開發(fā)角色用戶能夠創(chuàng)建工作流氛改、腳本文件、資源UDF颜阐、新建表平窘,同時(shí)可以創(chuàng)建發(fā)布包,但不能執(zhí)行發(fā)布操作凳怨。

運(yùn)維

項(xiàng)目空間但運(yùn)維人員瑰艘,由項(xiàng)目管理員/項(xiàng)目所有者分配運(yùn)維權(quán)限是鬼;擁有發(fā)布及線上運(yùn)維的操作權(quán)限,但無數(shù)據(jù)開發(fā)的操作權(quán)限紫新。

部署

部署角色與運(yùn)維角色相似均蜜,但是其沒有線上運(yùn)維操作權(quán)限。

訪客

訪客角色的用戶只具備查看權(quán)限芒率,而無權(quán)限進(jìn)行編輯工作流和代碼等囤耳。

角色管理

角色(role)是一組訪問權(quán)限的集合。
Owner:當(dāng)一個(gè)用戶創(chuàng)建了一個(gè)項(xiàng)目偶芍,他便自動(dòng)成為該項(xiàng)目的Owner充择。任何沒有被項(xiàng)目的Owner授權(quán)的人都無法訪問該項(xiàng)目。
如果Alice創(chuàng)建了一個(gè)項(xiàng)目WonderLand匪蟀,然后她要授權(quán)Bob訪問該項(xiàng)目的一些對(duì)象椎麦,那么:
首先,Bob要有一個(gè)合法的云賬號(hào)材彪。
其次观挎,Alice要把Bob的云賬號(hào)加到項(xiàng)目中來。
最后段化,賦予一些對(duì)象的權(quán)限給Bob嘁捷。
當(dāng)Alice要禁止Bob訪問該項(xiàng)目時(shí),則直接將其云賬號(hào)從項(xiàng)目中移除即可显熏,前提是Bob沒有被賦予任何角色雄嚣。
值得注意的是,Bob雖然被移除來項(xiàng)目佃延,但他之前被授予但權(quán)限仍保留在項(xiàng)目中现诀。一旦被Alice再次加入該項(xiàng)目,原有權(quán)限會(huì)被自動(dòng)激活履肃。
缺省角色(Admin):擁有該角色權(quán)限的用戶仔沿,可以訪問項(xiàng)目空間中所有對(duì)象,不能設(shè)定項(xiàng)目空間的安全配置和修改項(xiàng)目空間的鑒權(quán)模型尺棋;能進(jìn)行用戶與角色管理封锉,但是不能修改將Admin角色的權(quán)限或?qū)dmin角色賦給別的用戶,只能刪除沒有被使用的角色膘螟。

授權(quán)

授權(quán)有主體(Subject)成福、客體(Object)和操作(Action)三要素。
授權(quán)有ACL(基于對(duì)象的授權(quán))和Policy(基于策略的授權(quán))兩種方法荆残。


查看權(quán)限
【查看當(dāng)前用戶的權(quán)限】
show grants;
【查看指定用戶的權(quán)限】
show grants for <username>;
【查看指定角色的權(quán)限】
describe role <rolename>;
【查看指定對(duì)象的授權(quán)】
show acl for <objectName>[on type <objecttype>];
ACL授權(quán)的語法
GRANT <privileges> ON <object> TO <subject>;
REVOKE <privileges> ON <object> FROM <subject>;
數(shù)據(jù)保護(hù)機(jī)制

設(shè)置ProjectProtection:數(shù)據(jù)只能流入奴艾,不能流出。默認(rèn)時(shí)内斯,ProjectProtection不能被設(shè)置蕴潦,需要手工開啟像啼。

ProjectProtection=true

如何在項(xiàng)目保護(hù)狀態(tài)下,進(jìn)行合規(guī)的數(shù)據(jù)流出操作潭苞。
辦法1:在設(shè)置項(xiàng)目保護(hù)(ProjectProtection)的同時(shí)忽冻,附加一個(gè)例外策略(exception)

set ProjectProtection=true exception <policyFile>;

辦法2:將兩個(gè)相關(guān)的項(xiàng)目空間設(shè)置為互信(TrustedProject),則數(shù)據(jù)的流向?qū)⒉粫?huì)被視為違規(guī)此疹。

add trustedproject=SecretGarden;
項(xiàng)目空間的鑒權(quán)模型

ODPS支持多種正交的授權(quán)機(jī)制僧诚,用戶可通過設(shè)置下列參數(shù)來定制項(xiàng)目空間的鑒權(quán)模型。

security.CheckPermissionUsingACL --> 激活/凍結(jié)ACL授權(quán)機(jī)制蝗碎,默認(rèn)為True
security.CheckPermissionUsingPolicy --> 激活/凍結(jié)Policy授權(quán)機(jī)制湖笨,默認(rèn)為True
security.ObjectCreatorHasAccessPermission -->允許/禁止對(duì)象創(chuàng)建者默認(rèn)擁有訪問權(quán)限,默認(rèn)為True衍菱。
security.ObjectCreatorHasGrantPermission --> 允許/禁止對(duì)象創(chuàng)建者默認(rèn)擁有授權(quán)權(quán)限赶么,默認(rèn)為True肩豁。
security.LabelSecurity --> 開啟/關(guān)閉LabelSecurity安全策略脊串,默認(rèn)為False。
ProjectProtection -->開啟清钥,關(guān)閉項(xiàng)目的數(shù)據(jù)空間保護(hù)機(jī)制琼锋,默認(rèn)為False。

【查看當(dāng)前鑒權(quán)模型】
show SecurityConfiguration;
數(shù)據(jù)的敏感等級(jí)分類

Project Owner需要定義明確的數(shù)據(jù)敏感等級(jí)和訪問許可等級(jí)劃分標(biāo)準(zhǔn)祟昭,默認(rèn)時(shí)所有用戶的訪問許可等級(jí)為0級(jí)缕坎,數(shù)據(jù)安全默認(rèn)等級(jí)默認(rèn)為0級(jí)。
LabelSecurity對(duì)敏感數(shù)據(jù)的粒度可以支持列級(jí)別篡悟,管理員可以對(duì)表的任何列設(shè)置敏感度標(biāo)記(Label)谜叹,一張表可以由不同等級(jí)的敏感數(shù)據(jù)列所組成。
LabelSecurity基本操作

【打開LabelSecurity安全機(jī)制開關(guān)】
set security.LabelSecurity=<true|false>;
【設(shè)置用戶安全許可標(biāo)簽】
set label<number> to user<username>;
【設(shè)置數(shù)據(jù)敏感等級(jí)標(biāo)簽】
set label<number> to table <tablename[(column_list)]>;
【顯示授權(quán)低級(jí)別用戶訪問高敏感數(shù)據(jù)】
grant label <number> on table <tablename>[(column_list)] to user <username>[with exp <days>];
【撤銷顯示授權(quán)】
revoke label on table <tablename>[(column_list)] from user<username>;
【清洗過期的顯示授權(quán)】
clear expired grants;
【查看一個(gè)用戶能訪問哪些敏感數(shù)據(jù)級(jí)】
show label[<level>] grants [for user <username>];
【查看一個(gè)敏感數(shù)據(jù)表能被哪些用戶訪問】
show label [<level>] grants on table <tablename>;
【用戶對(duì)指定表上列級(jí)別的Label授權(quán)】
show label [<level>] grants on table <tablename> for user <username>;
【包安裝者對(duì)包中敏感資源許可訪問級(jí)別】
allow project <pjname> to install package <pkname>[using label <n>];

1.LabelSecurity安全機(jī)制開關(guān)必須由owner打開搬葬,admin角色沒有此權(quán)限荷腊。
2.用戶的安全許可標(biāo)簽和文件敏感等級(jí)取值均為0到9,兩者相互對(duì)應(yīng)急凰。
3.顯示設(shè)置的列的敏感等級(jí)優(yōu)先級(jí)高于表的敏感等級(jí)女仰,和順序、等級(jí)高低無關(guān)抡锈。
4.設(shè)置包時(shí)疾忍,若省略[using label<number>],則默認(rèn)級(jí)別為0級(jí)床三,即只可以訪問非敏感數(shù)據(jù)一罩。
5.跨項(xiàng)目訪問敏感數(shù)據(jù)時(shí),包安裝者的項(xiàng)目空間中的所有用戶都將使用此許可的訪問級(jí)別撇簿。

set label 1 to label t1;
set label 2 to table t1(id,name);
set label 3 to table t1;
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末聂渊,一起剝皮案震驚了整個(gè)濱河市推汽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌歧沪,老刑警劉巖歹撒,帶你破解...
    沈念sama閱讀 221,406評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異诊胞,居然都是意外死亡暖夭,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,395評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門撵孤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來迈着,“玉大人,你說我怎么就攤上這事邪码≡2ぃ” “怎么了?”我有些...
    開封第一講書人閱讀 167,815評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵闭专,是天一觀的道長奴潘。 經(jīng)常有香客問我,道長影钉,這世上最難降的妖魔是什么画髓? 我笑而不...
    開封第一講書人閱讀 59,537評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮平委,結(jié)果婚禮上奈虾,老公的妹妹穿的比我還像新娘。我一直安慰自己廉赔,他們只是感情好肉微,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,536評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蜡塌,像睡著了一般碉纳。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上岗照,一...
    開封第一講書人閱讀 52,184評(píng)論 1 308
  • 那天村象,我揣著相機(jī)與錄音,去河邊找鬼攒至。 笑死厚者,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的迫吐。 我是一名探鬼主播库菲,決...
    沈念sama閱讀 40,776評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼志膀!你這毒婦竟也來了熙宇?” 一聲冷哼從身側(cè)響起鳖擒,我...
    開封第一講書人閱讀 39,668評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎烫止,沒想到半個(gè)月后蒋荚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,212評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡馆蠕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,299評(píng)論 3 340
  • 正文 我和宋清朗相戀三年期升,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片互躬。...
    茶點(diǎn)故事閱讀 40,438評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡播赁,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出吼渡,到底是詐尸還是另有隱情容为,我是刑警寧澤,帶...
    沈念sama閱讀 36,128評(píng)論 5 349
  • 正文 年R本政府宣布寺酪,位于F島的核電站坎背,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏房维。R本人自食惡果不足惜沼瘫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,807評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望咙俩。 院中可真熱鬧,春花似錦湿故、人聲如沸阿趁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,279評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽脖阵。三九已至,卻和暖如春墅茉,著一層夾襖步出監(jiān)牢的瞬間命黔,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,395評(píng)論 1 272
  • 我被黑心中介騙來泰國打工就斤, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留悍募,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,827評(píng)論 3 376
  • 正文 我出身青樓洋机,卻偏偏與公主長得像坠宴,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子绷旗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,446評(píng)論 2 359