Apache Doris——簡介

1.概述

Apache Doris 是一個基于MPP架構(gòu)的高性能實時分析 OLAP 引擎,以其極快的速度和易用性而聞名。

它只需要亞秒的響應(yīng)時間即可在海量數(shù)據(jù)下返回查詢結(jié)果,并且不僅可以支持高并發(fā)點查詢場景,還可以支持高吞吐量復(fù)雜分析場景俩莽。

Apache Doris是一個現(xiàn)代化的MPP分析型數(shù)據(jù)庫產(chǎn)品。僅需亞秒級響應(yīng)時間即可獲得查詢結(jié)果乔遮,有效地支持實時數(shù)據(jù)分析扮超。Apache Doris的分布式架構(gòu)非常簡潔,易于運維蹋肮,并且可以支持10PB以上的超大數(shù)據(jù)集出刷。

Apache Doris可以滿足多種數(shù)據(jù)分析需求,例如固定歷史報表坯辩,實時數(shù)據(jù)分析馁龟,交互式數(shù)據(jù)分析和探索式數(shù)據(jù)分析等。令您的數(shù)據(jù)分析工作更加簡單高效濒翻!

MPP ( Massively Parallel Processing ),即大規(guī)模并行處理,在數(shù)據(jù)庫非共享集群中有送,每個節(jié)點都有獨立的磁盤存儲系統(tǒng)和內(nèi)存系統(tǒng)淌喻,業(yè)務(wù)數(shù)據(jù)根據(jù)數(shù)據(jù)庫模型和應(yīng)用特點劃分到各個節(jié)點上辽社,每臺數(shù)據(jù)節(jié)點通過專用網(wǎng)絡(luò)或者商業(yè)通用網(wǎng)絡(luò)互相連接讨衣,彼此協(xié)同計算育苟,作為整體提供數(shù)據(jù)庫服務(wù)议双。非共享數(shù)據(jù)庫集群有完全的可伸縮性饥臂、高可用腊敲、高性能找爱、優(yōu)秀的性價比惯驼、資源共享等優(yōu)勢清蚀。簡單來說匕荸,MPP 是將任務(wù)并行的分散到多個服務(wù)器和節(jié)點上,在每個節(jié)點上計算完成后枷邪,將各自部分的結(jié)果匯總在一起得到最終的結(jié)果 ( 與 Hadoop 相似 )榛搔。

Doris 主要解決 PB 級別的數(shù)據(jù)量(如果高于 PB 級別,不推薦使用 Doris 解決东揣,可以考慮用 Hive 等工具)践惑,解決結(jié)構(gòu)化數(shù)據(jù),查詢時間一般在秒級或毫秒級嘶卧。

Doris 由百度大數(shù)據(jù)部研發(fā) ( 之前叫百度 Palo尔觉,2018年貢獻到 Apache 社區(qū)后,更名為 Doris )芥吟,在百度內(nèi)部侦铜,有超過200個產(chǎn)品線在使用,部署機器超過1000臺运沦,單一業(yè)務(wù)最大可達到上百 TB泵额。

百度將 Doris 貢獻給 Apache 社區(qū)之后,許多外部用戶也成為了 Doris 的使用者携添,例如新浪微博嫁盲,美團,小米等著名企業(yè)烈掠。

Apache Doris 核心特性:

發(fā)展歷程

2012 年之前羞秤,Doris 的定位就是一個 NoSQL 數(shù)據(jù)庫。

2012~2020 年期間左敌,Doris 的定位是 NewSQL瘾蛋,也就是說除了要兼顧存儲海量數(shù)據(jù),也要具備 RDBMS 的 ACID 特性以及對于 SQL 的支持能力矫限。

2020 年以后哺哼,Doris 的定位是 Lakehouse佩抹。

關(guān)于 Lakehouse 請參考博客——湖倉一體(Lakehouse)是什么?

2.doris 架構(gòu)

Doris主要整合了Google Mesa(數(shù)據(jù)模型)取董,Apache Impala(MPP Query Engine) 和 Apache ORCFile (存儲格式棍苹,編碼和壓縮) 的技術(shù)。

Google Mesa(數(shù)據(jù)模型)

  • Mesa是一種高度可擴展的分析數(shù)據(jù)存儲系統(tǒng)茵汰,用于存儲與Google的互聯(lián)網(wǎng)廣告業(yè)務(wù)有關(guān)的關(guān)鍵測量數(shù)據(jù)枢里。
  • Mesa滿足一系列復(fù)雜且具有挑戰(zhàn)性的用戶和系統(tǒng)需求,包括接近實時的數(shù)據(jù)提取和查詢能力蹂午,以及針對大數(shù)據(jù)和查詢量的高可用性栏豺,可靠性,容錯性和可伸縮性豆胸。但是Mesa本身不提供SQL查詢引擎所以借鑒了下面奥洼。

Apache Impala(MPP Query Engine)

  • Impala是一個非常好的MPP SQL查詢引擎,做更多的查詢優(yōu)化配乱,在速度上做到了很好溉卓。但是缺少比較完美的分布式存儲引擎,所以需要集成下面搬泥。

Apache ORCFile (存儲格式桑寨,編碼和壓縮)

  • 只訪問查詢涉及的列,能大量降低系統(tǒng)I/O忿檩;列數(shù)據(jù)相對來說比較類似尉尾,壓縮比更高;每一列由一個線索來處理燥透,更有利于查詢的并發(fā)處理沙咏。

因此選擇了這三種技術(shù)的組合。

Doris的系統(tǒng)架構(gòu)如下圖: 架構(gòu)很簡潔班套,只設(shè)FE(Frontend)肢藐、BE(Backend)兩種角色、兩個進程吱韭,不依賴于外部組件吆豹,方便部署和運維。

Doris 的整體架構(gòu)和 TiDB 類似理盆,借助 MySQL 協(xié)議痘煤,用戶使用任意 MySQL 的 ODBC/JDBC以及MySQL 的客戶端,都可以直接訪問 Doris猿规。

Doris 中的模塊包括 FE 和 BE 兩類:FE 主要負(fù)責(zé)元數(shù)據(jù)的管理衷快、存儲,以及查詢的解析等姨俩;一個用戶請求經(jīng)過 FE 解析蘸拔、規(guī)劃后师郑,具體的執(zhí)行計劃會發(fā)送給 BE,BE 則會完成查詢的具體執(zhí)行调窍。BE 節(jié)點主要負(fù)責(zé)數(shù)據(jù)的存儲呕乎、以及查詢計劃的執(zhí)行。

2.1 核心組件介紹

Doris 的架構(gòu)很簡潔陨晶,只設(shè) FE(Frontend)、BE(Backend)兩種角色帝璧、兩個進程先誉,不依賴于外部組件,方便部署和運維的烁。

  • 以數(shù)據(jù)存儲的角度觀之褐耳,F(xiàn)E 存儲、維護集群元數(shù)據(jù)渴庆;BE 存儲物理數(shù)據(jù)铃芦。
  • 以查詢處理的角度觀之, FE 節(jié)點接收、解析查詢請求襟雷,規(guī)劃查詢計劃刃滓,調(diào)度查詢執(zhí)行,* 返回查詢結(jié)果耸弄;BE 節(jié)點依據(jù) FE 生成的物理計劃咧虎,分布式地執(zhí)行查詢。

名詞解釋

名詞 說明
FE Frontend计呈,即 Doris 的前端節(jié)點砰诵。以 Java 語言為主,主要負(fù)責(zé)接收和返回客戶端請求、元數(shù)據(jù)以及集群管理捌显、查詢計劃生成等工作茁彭。
BE Backend,即 Doris 的后端節(jié)點扶歪。以 C++ 語言為主,主要負(fù)責(zé)數(shù)據(jù)存儲與管理理肺、查詢計劃執(zhí)行等工作。
Tablet Tablet是一張表實際的物理存儲單元击罪,一張表按照分區(qū)和分桶后在BE構(gòu)成分布式存儲層中以Tablet為單位進行存儲哲嘲,每個Tablet包括元信息及若干個連續(xù)的RowSet。
Rowset Rowset是Tablet中一次數(shù)據(jù)變更的數(shù)據(jù)集合媳禁,數(shù)據(jù)變更包括了數(shù)據(jù)導(dǎo)入眠副、刪除、更新等竣稽。Rowset按版本信息進行記錄囱怕。每次變更會生成一個版本霍弹。
Version 由Start、End兩個屬性構(gòu)成娃弓,維護數(shù)據(jù)變更的記錄信息典格。通常用來表示Rowset的版本范圍,在一次新導(dǎo)入后生成一個Start台丛,End相等的Rowset耍缴,在Compaction后生成一個帶范圍的Rowset版本。
Segment 表示Rowset中的數(shù)據(jù)分段挽霉。多個Segment構(gòu)成一個Rowset防嗡。
Compaction 連續(xù)版本的Rowset合并的過程成稱為Compaction,合并過程中會對數(shù)據(jù)進行壓縮操作侠坎。

FE(Frontend)

主要負(fù)責(zé)查詢的編譯蚁趁,分發(fā)和元數(shù)據(jù)管理。

  • 1实胸、管理元數(shù)據(jù)(庫他嫡、表、分區(qū)庐完、tablet副本等信息)钢属,執(zhí)行SQL語句命令。
  • 2门躯、FE高可用部署署咽,使用復(fù)制協(xié)議選主和主從同步元數(shù)據(jù),所有的元數(shù)據(jù)修改操作生音,由FE Leader節(jié)點完成宁否,F(xiàn)E Follower節(jié)點可執(zhí)行讀操作。 元數(shù)據(jù)的讀寫滿足順序一致性缀遍。 FE的節(jié)點數(shù)目采用2n+1慕匠,可容忍n個節(jié)點故障。當(dāng)FE Leader故障時域醇,從現(xiàn)有的Follower節(jié)點重新選主台谊,完成故障切換。
    • Observer節(jié)點僅從 Leader節(jié)點進行元數(shù)據(jù)同步譬挚,不參與選舉锅铅。能夠橫向擴展以提供元數(shù)據(jù)的讀服務(wù)的擴展性。
  • 3减宣、FE的SQL layer對用戶提交的SQL進行解析盐须、分析、語義分析和關(guān)系代數(shù)優(yōu)化漆腌,生產(chǎn)邏輯執(zhí)行計劃贼邓。
  • 4阶冈、FE的Planner負(fù)責(zé)把邏輯計劃轉(zhuǎn)化為可分布式執(zhí)行的物理計劃,分發(fā)給一組BE塑径。
  • 5女坑、FE監(jiān)督,管理BE的上下線统舀,根據(jù)BE的健康狀態(tài)和存活數(shù)匆骗,維持tablet副本的數(shù)量。
  • 6誉简、FE協(xié)調(diào)數(shù)據(jù)導(dǎo)入, 保證數(shù)據(jù)導(dǎo)入的一致性绰筛。

BE([Backend]

主要負(fù)責(zé)數(shù)據(jù)的存儲、以及查詢計劃的執(zhí)行

  • 1描融、BE管理tablet副本,tablet是table經(jīng)過分區(qū)分桶形成的子表衡蚂,采用列式存儲窿克。
  • 2、BE受驅(qū)動FE毛甲,創(chuàng)建或刪除子表年叮。
  • 3、BE接收FE分發(fā)的物理執(zhí)行計劃并指定BE coordinator節(jié)點玻募,在BE coordinator的調(diào)度下只损,與其他BE worker共同協(xié)作完成執(zhí)行。
  • 4七咧、BE讀取本地的列存儲引擎獲取數(shù)據(jù)跃惫,并通過索引和謂詞下沉快速過濾數(shù)據(jù)。
  • 5艾栋、BE后臺執(zhí)行compact任務(wù)爆存,減少查詢時的讀放大。
  • 6蝗砾、數(shù)據(jù)導(dǎo)入時, 由FE指定BE coordinator先较,將數(shù)據(jù)以fanout的形式寫入到tablet多副本所在的BE上。

MySQL Client

Doris借助MySQL協(xié)議悼粮,用戶使用任意MySQL的ODBC/JDBC以及MySQL的客戶
端闲勺,都可以直接訪問Doris

Broker

Broker為一個獨立的無狀態(tài)進程。封裝了文件系統(tǒng)接口扣猫,提供Doris讀取遠(yuǎn)端存儲系統(tǒng)中文件的能力菜循,包括HDFS申尤、S3子眶、BOS等

元數(shù)據(jù)

  • Doris 采用 Paxos 協(xié)議以及 Memory + Checkpoint + Journal 的機制來確保元數(shù)據(jù)的高性能及高可靠序芦。
  • 元數(shù)據(jù)的每次更新臭杰,都首先寫入到磁盤的日志文件中,然后再寫到內(nèi)存中渴杆,最后定期 checkpoint 到本地磁盤上宪塔。相當(dāng)于是一個純內(nèi)存的一個結(jié)構(gòu)磁奖,也就是說所有的元數(shù)據(jù)都會緩存在內(nèi)存之中,從而保證 FE 在宕機后能夠快速恢復(fù)元數(shù)據(jù)某筐,而且不丟失元數(shù)據(jù)比搭。* Leader身诺、follower 和 observer 它們?nèi)齻€構(gòu)成一個可靠的服務(wù)抄囚,這樣如果發(fā)生節(jié)點宕機的情況,在百度內(nèi)部的話穴亏,一般是部署一個 leader 兩個 follower重挑,外部公司目前來說基本上也是這么部署的。就是說三個節(jié)點去達到一個高可用服務(wù)蟆湖。
  • 單機的節(jié)點故障的時候其實基本上三個就夠了玻粪,因為 FE 節(jié)點畢竟它只存了一份元數(shù)據(jù),它的壓力不大伦仍,所以如果 FE 太多的時候它會去消耗機器資源很洋,所以多數(shù)情況下三個就足夠了,可以達到一個很高可用的元數(shù)據(jù)服務(wù)

Doris FE高可用方案:

  • 如果你是離線業(yè)務(wù)官脓,對高可用要求不是那么高可以使用 1 FE(Follower leader) + 1 FE(Observer)
  • 如果你是實時在線業(yè)務(wù)涝焙,對高可用要求很高,建議使用 3 FE(Follower)赤兴,會自動選舉出一個 leader

數(shù)據(jù)分布及可靠性

Doris 數(shù)據(jù)主要都是存儲在 BE 里面隧哮,BE 節(jié)點上物理數(shù)據(jù)的可靠性通過多副本來實現(xiàn),默認(rèn)是 3 副本陨帆,副本數(shù)可配置且可隨時動態(tài)調(diào)整,滿足不同可用性級別的業(yè)務(wù)需求采蚀。FE 調(diào)度 BE 上副本的分布與補齊搏存。

如果說用戶對可用性要求不高矢洲,而對資源的消耗比較敏感的話读虏,我們可以在建表的時候選擇建兩副本或者一副本。比如在百度云上我們給用戶建表的時候灾螃,有些用戶對它的整個資源消耗比較敏感揩徊,因為他要付費,所以他可能會建兩副本熄赡。但是我們一般不太建議用戶建一副本齿税,因為一副本的情況下可能一旦機器出問題了,數(shù)據(jù)直接就丟了词渤,很難再恢復(fù)串绩。我們在公司內(nèi)部的話,一般是默認(rèn)建三副本志笼,這樣基本可以保證一臺機器單機節(jié)點宕機的情況下不會影響整個服務(wù)的正常運作把篓。

3.doris內(nèi)部組件及周邊生態(tài)組件介紹

3.1 Frontend(FE)

Java語言開發(fā)韧掩,Doris 系統(tǒng)的元數(shù)據(jù)管理和節(jié)點調(diào)度疗锐。在導(dǎo)入流程中主要負(fù)責(zé)導(dǎo)入 plan 生成和導(dǎo)入任務(wù)的調(diào)度工作,請求接入等

3.2 Backend(BE)

C++語言開發(fā)口芍,Doris 系統(tǒng)的計算和存儲節(jié)點雇卷,執(zhí)行SQL計劃等关划。在導(dǎo)入流程中主要負(fù)責(zé)數(shù)據(jù)的 ETL 和存儲。

3.3 Broker

Broker 為一個獨立的無狀態(tài)進程裤翩。封裝了文件系統(tǒng)接口调榄,提供 Doris 讀取遠(yuǎn)端存儲系統(tǒng)中文件的能力,包括HDFS臼疫,S3烫堤,BOS等

3.4 Mysql Client

Doris 借助 MySQL 協(xié)議,用戶使用任意 MySQL 的 ODBC/JDBC以及MySQL 的客戶端拔创,都可以直接訪問 Doris

3.5 Doris on ES

Doris-On-ES將Doris的分布式查詢規(guī)劃能力和ES(Elasticsearch)的全文檢索能力相結(jié)合富蓄,提供更完善的OLAP分析場景解決方案:

  • ES中的多index分布式Join查詢
  • Doris和ES中的表聯(lián)合查詢立倍,更復(fù)雜的全文檢索過濾

3.6 ODBC External Table Of Doris

ODBC External Table Of Doris 提供了Doris通過數(shù)據(jù)庫訪問的標(biāo)準(zhǔn)接口(ODBC)來訪問外部表,外部表省去了繁瑣的數(shù)據(jù)導(dǎo)入工作变擒,讓Doris可以具有了訪問各式數(shù)據(jù)庫的能力寝志,并借助Doris本身的OLAP的能力來解決外部表的數(shù)據(jù)分析問題:

  • 支持各種數(shù)據(jù)源接入Doris
  • 支持Doris與各種數(shù)據(jù)源中的表聯(lián)合查詢材部,進行更加復(fù)雜的分析操作
  • 通過insert into將Doris執(zhí)行的查詢結(jié)果寫入外部的數(shù)據(jù)源

3.7 Spark Doris Connector

Spark Doris Connector 可以支持通過 Spark 讀取 Doris 中存儲的數(shù)據(jù)。

  • 當(dāng)前版本只支持從Doris中讀取數(shù)據(jù)苦丁。
  • 可以將Doris表映射為DataFrame或者RDD物臂,推薦使用DataFrame鹦聪。
  • 支持在Doris端完成數(shù)據(jù)過濾蒂秘,減少數(shù)據(jù)傳輸量姻僧。

3.8 Flink Doris Connector

Flink Doris Connector 可以支持通過 Flink 讀取 Doris 中存儲的數(shù)據(jù)。

  • 可以將Doris表映射為DataStream或者Table
  • 支持通過Flink table的方式使用doris數(shù)據(jù)
  • 可以通過Flink table 方式方便的將數(shù)據(jù)通過insert into select方式將數(shù)據(jù)插入到doris表中

3.9 DataX doriswriter

DataX doriswriter 插件赌莺,用于通過 DataX 同步其他數(shù)據(jù)源的數(shù)據(jù)到 Doris 中松嘶。

這個插件是利用Doris的Stream Load 功能進行數(shù)據(jù)導(dǎo)入的。需要配合 DataX 服務(wù)一起使用遵倦。

這個擴展可以很方便的將業(yè)務(wù)數(shù)據(jù)庫中的數(shù)據(jù)快速的抽取導(dǎo)入到doris數(shù)倉中

3.10 Doris output plugin

該插件用于logstash輸出數(shù)據(jù)到Doris官撼,使用 HTTP 協(xié)議與 Doris FE Http接口交互傲绣,并通過 Doris 的 stream load 的方式進行數(shù)據(jù)導(dǎo)入.

3.11 審計日志擴展

Doris 的審計日志插件是在 FE 的插件框架基礎(chǔ)上開發(fā)的。是一個可選插件续搀。用戶可以在運行時安裝或卸載這個插件顷链。

該插件可以將 FE 的審計日志定期的導(dǎo)入到指定 Doris 集群中嗤练,以方便用戶通過 SQL 對審計日志進行查看和分析。

4霜大、使用場景

報表分析可視化

  • 實時儀表板
  • 內(nèi)部分析師和經(jīng)理的報告
  • 高度并發(fā)的面向用戶或面向客戶的報表分析

ad-hoc

  • 以分析師為導(dǎo)向的自助服務(wù)分析战坤,具有不規(guī)則的查詢模式和高吞吐量要求残拐。

統(tǒng)一數(shù)據(jù)倉庫建設(shè)

  • 一個滿足統(tǒng)一數(shù)據(jù)倉庫建設(shè)需求和簡化復(fù)雜數(shù)據(jù)軟件堆棧的平臺溪食。
  • 流批一體
  • 實時數(shù)倉

數(shù)據(jù)湖查詢

  • 通過使用外部表聯(lián)合位于 Apache Hive、Apache Iceberg 和Apache Hudi 中的數(shù)據(jù)栅组,查詢性能大大提高枢析,同時避免了數(shù)據(jù)復(fù)制醒叁。

參考:
https://doris.apache.org/zh-CN/docs/dev/summary/basic-summary

https://zhuanlan.zhihu.com/p/400642016

https://blog.csdn.net/Shockang/article/details/127062897

https://blog.csdn.net/qq_43141726/article/details/120607561

https://blog.csdn.net/yy8623977/article/details/126072971

https://blog.csdn.net/Hello_Java2018/article/details/124806183

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市脱吱,隨后出現(xiàn)的幾起案子认罩,更是在濱河造成了極大的恐慌垦垂,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件间校,死亡現(xiàn)場離奇詭異憔足,居然都是意外死亡酒繁,警方通過查閱死者的電腦和手機州袒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門郎哭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人邦蜜,你說我怎么就攤上這事亥至√Т常” “怎么了关筒?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵蒸播,是天一觀的道長。 經(jīng)常有香客問我胀屿,道長宿崭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任奖蔓,我火速辦了婚禮吆鹤,結(jié)果婚禮上洲守,老公的妹妹穿的比我還像新娘梗醇。我一直安慰自己,他們只是感情好廊镜,可當(dāng)我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布嗤朴。 她就那樣靜靜地躺著虫溜,像睡著了一般衡楞。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上歧杏,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天犬绒,我揣著相機與錄音兑凿,去河邊找鬼。 笑死咐鹤,一個胖子當(dāng)著我的面吹牛祈惶,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播奸腺,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼突照,長吁一口氣:“原來是場噩夢啊……” “哼氧吐!你這毒婦竟也來了筑舅?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤版仔,失蹤者是張志新(化名)和其女友劉穎误墓,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體然想,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡变泄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年妨蛹,在試婚紗的時候發(fā)現(xiàn)自己被綠了蛙卤。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片颓鲜。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡甜滨,死狀恐怖衣摩,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情既琴,我是刑警寧澤泡嘴,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布酌予,位于F島的核電站,受9級特大地震影響松靡,放射性物質(zhì)發(fā)生泄漏雕欺。R本人自食惡果不足惜棉姐,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一伞矩、第九天 我趴在偏房一處隱蔽的房頂上張望扭吁。 院中可真熱鬧,春花似錦蝌诡、人聲如沸枫吧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽抢蚀。三九已至镰禾,卻和暖如春吴侦,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背劫樟。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工毅哗, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人捧挺。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓虑绵,卻偏偏與公主長得像,于是被迫代替她去往敵國和親闽烙。 傳聞我的和親對象是個殘疾皇子翅睛,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,592評論 2 353

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