全鏈路壓測經(jīng)驗

前言

隨著業(yè)務(wù)的快速發(fā)展我們?nèi)粘S龅降南到y(tǒng)性能壓力問題也逐漸出現(xiàn)沽损,甚至在部分場合會遇到一些突發(fā)的營銷活動拓售,會導(dǎo)致系統(tǒng)性能突然暴漲,可能導(dǎo)致我們系統(tǒng)的癱瘓。最近幾年隨著電商的各種促銷活動亿遂,有一個詞也漸漸進入我們眼簾--“全鏈路壓測”阻问。全鏈路壓測被眾多互聯(lián)網(wǎng)公司的程序員定義為核武器姻僧,傳統(tǒng)性能測試更多的是以事務(wù)為核心镜豹,更多的是由單個或者多個事務(wù)構(gòu)成業(yè)務(wù)場景進行壓測。那全鏈路壓測到底是什么甸鸟?一般指完全引入相關(guān)聯(lián)的系統(tǒng) 真實模擬線上硬件環(huán)境惦费,更多的是以請求為核心,完全模擬真實請求流量抢韭,通過引流等方式進行場景的模擬進行壓測薪贫,更多的適用于業(yè)務(wù)鏈路較長的交易。

筆者以前只是一直聽說全鏈路壓測刻恭,但是并沒有真正經(jīng)歷過后雷,對全鏈路壓測的理解也不是很全面,前年在互聯(lián)網(wǎng)電商公司雙11的時候參加過一次全鏈路的壓測吠各,當時全公司第一次做大范圍的全鏈路壓測,整個架構(gòu)部也是第一次牽頭來完成了整個全鏈路壓測勉抓,經(jīng)過大家1個月的努力贾漏,最后在活動期間完全扛住了壓力,并且還有性能過剩藕筋。當時做完后因為忙的太累纵散,沒有進行過總結(jié),最近新的公司正好在壓測隐圾,借此也總結(jié)下全鏈路壓測伍掀。

1. 為什么需要全鏈路壓測

我們在整個業(yè)務(wù)流程中,最大的困難在于評估從用戶登錄到完成全部交易的整個鏈條中暇藏,核心頁面和交易關(guān)鍵交易的實際承載能力蜜笤。如果得到了各個系統(tǒng)的實際承載能力,就可以在路由網(wǎng)關(guān)進行相關(guān)交易限流控制盐碱,來防止在大并發(fā)來了以后系統(tǒng)出現(xiàn)宕機把兔,我們都知道一旦系統(tǒng)宕機就會導(dǎo)致災(zāi)難性的后果沪伙,而且就算運維短時間重啟了起來恢復(fù)了運行,但是可能過了一會兒過程系統(tǒng)承載量又出現(xiàn)宕機县好,早期阿里在雙十一的時候就發(fā)生過這樣的問題围橡,系統(tǒng)在0點,出現(xiàn)大面積癱瘓缕贡,重啟后又癱瘓翁授,為什么會出現(xiàn)這個問題,就是因為大家對整個全交易鏈條上的各個環(huán)節(jié)的系統(tǒng)承壓能力不清楚晾咪,所以在出現(xiàn)了全鏈路壓測收擦,一方面能夠讓各個產(chǎn)品知道自己的承壓極限在哪?有的同學(xué)會問了通過單系統(tǒng)壓測不是也可以知道各個系統(tǒng)的承壓能力嗎禀酱?但是實際情況不可能那么簡單炬守,那么順利,在活動開始的瞬間剂跟,從CDN减途、網(wǎng)關(guān)接入、前端曹洽、緩存鳍置、中間件、后端服務(wù)送淆、數(shù)據(jù)庫整個交易鏈路都會面臨巨大的訪問壓力税产,這個時候系統(tǒng)服務(wù)除了受自生的影響,還依賴于其他關(guān)聯(lián)系統(tǒng)的情況偷崩,并且影響會一直蔓延辟拷,只要有一個節(jié)點出現(xiàn)故障,那么故障在上下游系統(tǒng)經(jīng)過層層累加后會造成的影響誰都說不清楚阐斜,所以最好的辦法就是模擬完全的真實情況來做到提前心里有數(shù)衫冻。驗證的最好辦法就是讓事件提前發(fā)生,通過全鏈路壓測就可以提早發(fā)現(xiàn)問題谒出。

另一方面也可以讓各個系統(tǒng)能夠有個明確的優(yōu)化目標并找出性能瓶頸隅俘,同時對于一些特殊環(huán)節(jié)可以通過臨時增加公有云的方式來提高整體的性能,一旦通過全鏈路壓測笤喳,了解了瓶頸所在就可以坦然的去按照壓測指標去申請公有云資源为居,活動結(jié)束后再歸還資源,這樣做到成本最低化杀狡。

2. 全鏈路壓測常常遇到的問題

如何開展全鏈路壓測蒙畴?在說這個問題前,我們先考慮下呜象,全鏈路壓測有哪些問題比較難解決忍抽。

1)涉及的系統(tǒng)太多八孝,牽扯的開發(fā)人員太多;

在壓測過程中鸠项,做一個全鏈路的壓測一般會涉及到大量的系統(tǒng)干跛,在整個壓測過程中,光各個產(chǎn)品的人員協(xié)調(diào)就是一個比較大的工程祟绊,牽扯到太多的產(chǎn)品經(jīng)理和開發(fā)人員楼入,如果公司對全鏈路壓測早期沒有足夠的重視,那么這個壓測工作是非常難開展的牧抽。

2)模擬的測試數(shù)據(jù)和訪問流量不真實嘉熊;

在壓測過程中經(jīng)常會遇到壓測后得到的數(shù)據(jù)不準確的問題,這就使得壓測出的數(shù)據(jù)參考性不強扬舒,為什么會產(chǎn)生這樣的問題阐肤?主要就是因為壓測的環(huán)境可能和生成環(huán)境存在誤差、參數(shù)存在不一樣的地方讲坎、測試數(shù)據(jù)存在不一樣的地方這些因素綜合起來導(dǎo)致測試結(jié)果的不可信孕惜。

3)壓測生產(chǎn)數(shù)據(jù)未隔離,影響生產(chǎn)環(huán)境晨炕;

在全鏈路壓測過程中衫画,壓測數(shù)據(jù)可能會影響到生產(chǎn)環(huán)境的真實數(shù)據(jù),舉個例子瓮栗,電商系統(tǒng)在生產(chǎn)環(huán)境進行全鏈路壓測的時候可能會有很多壓測模擬用戶去下單削罩,如果不做處理,直接下單的話會導(dǎo)致系統(tǒng)一下子會產(chǎn)生很多廢訂單费奸,從而影響到庫存和生產(chǎn)訂單數(shù)據(jù)弥激,影響到日常的正常運營。

3. 如何開展全鏈路壓測

其實進行全鏈路壓測對于整個公司技術(shù)要求還是很高的愿阐,如果沒有一定能力的公司最好不要貿(mào)然嘗試全鏈路壓測微服,因為如果沒做好可能會把生產(chǎn)環(huán)境搞宕,所以對于沒有一定科技能力的公司還是盡量不要貿(mào)然追潮流實施全鏈路壓測换况。對于科技能力不強的公司如果也想達到全鏈路壓測那該怎么辦?其實辦法也很簡單盗蟆,可以在壓測環(huán)境進行模擬戈二,做一個比例模擬,模擬1%-2%的訪問量在測試環(huán)境進行壓測喳资,得到數(shù)據(jù)后乘以對應(yīng)的倍數(shù)來得到總的壓測指標觉吭,這里的比例當然不是簡單的倍數(shù)相乘,需要各個系統(tǒng)得到系統(tǒng)線性擴展和單機壓測指標的一個線性值仆邓,因為一般來說的線性擴展都不可能是100%的鲜滩,一定會有一定擴展后的損失伴鳖。

1)分析需壓測業(yè)務(wù)場景涉及系統(tǒng)

在壓測前我們一定要首先分析清楚需要壓測的業(yè)務(wù)場景,只有分析清楚了業(yè)務(wù)場景才能梳理出來涉及的相關(guān)系統(tǒng)徙硅,分析清楚后也可以更快的找到性能瓶頸進行系統(tǒng)優(yōu)化榜聂。這個工作一般是由架構(gòu)師來梳理并確認涉及的相關(guān)系統(tǒng),梳理清楚后就可以反饋給總壓測負責人進行人員和資源的協(xié)調(diào)了嗓蘑。

2)協(xié)調(diào)各個壓測系統(tǒng)資源

在全鏈路壓測過程中须肆,最難的工作其實不是系統(tǒng)優(yōu)化、壓測環(huán)境搭建等技術(shù)工作桩皿,最難的是壓測資源的協(xié)調(diào)工作豌汇。這里的資源不單單指壓測硬件、公有云等資源泄隔,還包括了人力資源拒贱,在整個壓測過程中,需要各個相關(guān)產(chǎn)品的產(chǎn)品經(jīng)理和技術(shù)開發(fā)人人員參與進去佛嬉,這個工作可能不是架構(gòu)師或者一個牽頭產(chǎn)品的負責人能夠協(xié)調(diào)的動的逻澳,必須要有一個自上而下的推力去推動,需要一個有一定級別的領(lǐng)導(dǎo)做背書巷燥,我們當時是分管科技的老總召集了所有的產(chǎn)品經(jīng)理和各個產(chǎn)品技術(shù)開發(fā)負責人開了一個全鏈路壓測的方案討論會赡盘,這個會一方面說明了這個事情的重要性,讓各個產(chǎn)品都當場立下軍令狀缰揪,并且安排出支持的人員陨享,同時也授權(quán)給壓測負責人。這個搞定以后壓測負責人后續(xù)就可以光明正大的協(xié)調(diào)各個產(chǎn)品的配合人員了钝腺。

3)壓測環(huán)境

壓測環(huán)境也是個比較頭疼的問題抛姑,很多系統(tǒng)可能壓根就沒有壓測環(huán)境,所以全鏈路壓測有個和傳統(tǒng)壓測比較大的區(qū)別就是艳狐,全鏈路壓測是在生產(chǎn)環(huán)境定硝,這種做法其實是存在一定風(fēng)險的,一方面是系統(tǒng)風(fēng)險毫目,一方面是業(yè)務(wù)數(shù)據(jù)風(fēng)險蔬啡。對于全鏈路壓測系統(tǒng)風(fēng)險一定是首要考慮的問題,不能因為壓測把系統(tǒng)搞宕機影響到日常生產(chǎn)環(huán)境的正常運營镀虐,我們當時做的電商系統(tǒng)還好箱蟆,不涉及相關(guān)的監(jiān)管。但是在銀行業(yè)這樣做還是有很大的風(fēng)險的刮便,一旦生產(chǎn)系統(tǒng)出現(xiàn)關(guān)鍵交易系統(tǒng)的宕機可能導(dǎo)致一些金融事故空猜,會對金融市場造成恐慌,而且會被銀監(jiān)會通報,所以銀行的壓測還是不要進行全鏈路壓測辈毯,不過可以在測試環(huán)境盡量仿真的模擬全鏈路壓測坝疼。

前年在電商環(huán)境上做全鏈路壓測直接在生產(chǎn)上進行壓測,用生產(chǎn)環(huán)境最大的好處就是環(huán)境的真實性谆沃,通過生產(chǎn)環(huán)境能夠最高程度的還原生產(chǎn)環(huán)境不用額外準備壓測環(huán)境钝凶。但是使用生產(chǎn)環(huán)境進行壓測需要考慮將請求和訪問、業(yè)務(wù)數(shù)據(jù)處理都進行隔離管毙,防止影響到生產(chǎn)環(huán)境腿椎,具體如何實施,涉及到比較多的細節(jié)這里就不詳細描述了夭咬】姓ǎ總的思路就是在發(fā)起請求的時候通過請求報文頭中的壓測標示來進行區(qū)分處理,將壓測的流量都分流到指定的應(yīng)用服務(wù)器和指定的存儲進行數(shù)據(jù)保存和處理卓舵。

進行全鏈路壓測的時候南用,為了防止系統(tǒng)崩潰,可以選擇在凌晨用戶量最小的時候進行掏湾,這樣就算發(fā)生故障也可以將影響降到最低裹虫。

4)壓測數(shù)據(jù)

環(huán)境準備好了,可能就需要考慮造壓測數(shù)據(jù)了融击,壓測數(shù)據(jù)準備有兩方面數(shù)據(jù)需要準備筑公,一方面是壓測請求數(shù)據(jù)的準備,需要模擬請求數(shù)據(jù)尊浪,請求數(shù)據(jù)最好的辦法就是采用生產(chǎn)的真實數(shù)據(jù)匣屡,我們當時的做法是直接錄制3-5天的生產(chǎn)訪問請求流量,只需要對錄制的請求進行數(shù)據(jù)清洗就可以了拇涤,將某個用戶的請求替換成一個壓測虛擬用戶的請求捣作,請求的商品也替換成壓測虛擬商品,這個數(shù)據(jù)漂白替換的工作是比較復(fù)雜的鹅士,對于做數(shù)據(jù)漂白的的同學(xué)對系統(tǒng)的接口非常了解券躁,否則很可能造成業(yè)務(wù)數(shù)據(jù)的混亂,造成大量的業(yè)務(wù)報表和系統(tǒng)數(shù)據(jù)的臟數(shù)據(jù)掉盅;另一方面是測試數(shù)據(jù)的準備也拜,我們當時準備了壓測虛擬商品的數(shù)據(jù)、虛擬商品庫存數(shù)據(jù)趾痘、虛擬供貨商慢哈、虛擬用戶。

5)壓測數(shù)據(jù)隔離

因為是在生產(chǎn)環(huán)境做的壓測扼脐,壓測數(shù)據(jù)需要與正常的業(yè)務(wù)數(shù)據(jù)隔離開岸军,我們當時的方案是對于壓測的這些臟數(shù)據(jù)都做了特定標示,對于虛擬用戶瓦侮、虛擬商品艰赞、虛擬訂單、虛擬庫存都是有特殊標示的肚吏,這樣這類數(shù)據(jù)在統(tǒng)計的時候都不會進行統(tǒng)計方妖,在壓測后也會對這些數(shù)據(jù)進行清理,防止污染正常業(yè)務(wù)數(shù)據(jù)罚攀。

6)壓測數(shù)據(jù)實時監(jiān)控

在壓測過程中党觅,為了能發(fā)現(xiàn)性能問題,我們需要對壓測過程中各個系統(tǒng)的cpu斋泄、內(nèi)存杯瞻、磁盤io都進行系統(tǒng)層面的監(jiān)控,同時也需要對各個業(yè)務(wù)節(jié)點的耗時進行監(jiān)控炫掐,一方面從業(yè)務(wù)層面去監(jiān)控壓測事務(wù)性能魁莉,另一方面從系統(tǒng)層面監(jiān)控,這樣我們可以先從業(yè)務(wù)層面找到性能瓶頸募胃,再單獨分析各個系統(tǒng)的系統(tǒng)層面的瓶頸旗唁,最終找到優(yōu)化方案。

我們當時公司內(nèi)部有個實時監(jiān)控平臺痹束,這個平臺是基于大眾點評開源的cat實現(xiàn)的多平臺監(jiān)控系統(tǒng)检疫,能夠?qū)崟r監(jiān)控各個系統(tǒng)的實時交易運行情況,這樣能夠在第一時間發(fā)現(xiàn)遇到大流量的情況后祷嘶,性能瓶頸在哪屎媳?然后進行針對性的優(yōu)化。

4. 全鏈路壓測優(yōu)化思路

性能優(yōu)化的核心在我看來其實就是一個充分利用系統(tǒng)資源并平衡IO的過程抹蚀。這句話怎么理解剿牺,首先在保證代碼沒有問題的情況下,充分利用系統(tǒng)的cpu环壤、內(nèi)存晒来、磁盤資源,一般來說在保證cpu郑现、內(nèi)存都消耗到80%以上基本上就達到了性能峰值了湃崩,但是我們在壓測過程中常常遇到的問題是cpu、內(nèi)存消耗都不高接箫,而是卡在了IO上攒读,IO包括了磁盤IO、數(shù)據(jù)庫IO辛友、網(wǎng)絡(luò)IO薄扁,我們需要根據(jù)監(jiān)控的數(shù)據(jù)從這3方面去找到瓶頸剪返,并去解決IO的問題。一般來說造成這種情況一般都是因為IO聚集導(dǎo)致了阻塞邓梅,可以考慮采用緩存脱盲、異步的方式去解決,對于一些關(guān)鍵交易的事務(wù)的完整性可以考慮采用先緩存最后通過緩存同步數(shù)據(jù)庫的方式來保證最終一致性日缨。

全鏈路壓測一般可以從3個層面去進行優(yōu)化:

1)優(yōu)化單個系統(tǒng)性能

就算不進行全鏈路壓測钱反,單個系統(tǒng)的性能優(yōu)化也是要考慮的問題,對單個系統(tǒng)的優(yōu)化匣距,其實方法有很多面哥,但是萬變不離其宗,就是在壓測過程中監(jiān)控系統(tǒng)各項指標毅待,從中挑出慢交易尚卫,針對慢交易進行優(yōu)化,對于聯(lián)機系統(tǒng)大部分都是因為各種IO問題導(dǎo)致性能上不去尸红』篮粒可以根據(jù)各種介質(zhì)IO訪問的性能來優(yōu)化(內(nèi)存緩存>文件>數(shù)據(jù)庫>網(wǎng)絡(luò)),基本上通過緩存和異步處理這兩顆銀彈就可以解決80%的性能問題驶乾。

當鏈路上的單個系統(tǒng)性能提升了邑飒,整體的全鏈路性能自然就提升了。

2)優(yōu)化關(guān)聯(lián)路徑

但是在優(yōu)化的過程中级乐,我們常常發(fā)現(xiàn)絕大部分系統(tǒng)性能都很高疙咸,但是總的TPS還是很低,這就需要去根據(jù)監(jiān)控了解下目前整個鏈路上的性能瓶頸到底在哪风科?通過全鏈路監(jiān)控可以發(fā)現(xiàn)整個業(yè)務(wù)流程在哪個節(jié)點耗時最長撒轮,那么這個耗時最長的節(jié)點就是我們需要優(yōu)化的地方,只要這些關(guān)鍵路徑的性能提升上來以后整體的性能就上來了贼穆。關(guān)鍵節(jié)點的優(yōu)化方式和單系統(tǒng)優(yōu)化思路一致题山。

3)優(yōu)化業(yè)務(wù)流程

很多開發(fā)人員都會將優(yōu)化思路集中在技術(shù)層面,但是很多時候從業(yè)務(wù)流程上進行優(yōu)化效果可能更好故痊,而且提升的效果會非常明顯顶瞳。業(yè)務(wù)層面的優(yōu)化主要是從分散IO的角度去考慮,將實際業(yè)務(wù)場景中的用戶請求進行分散愕秫,例如常見的大秒系統(tǒng)慨菱、驗證碼系統(tǒng)、游戲工具等都是為了進行業(yè)務(wù)層面的IO分散來保證戴甩。這類業(yè)務(wù)流程的優(yōu)化首先要梳理清楚整個業(yè)務(wù)流程符喝,包括所有的細節(jié)。然后針對每個環(huán)節(jié)在保證用戶體驗的情況下分散用戶請求甜孤,這樣可以最大限度的保證體驗协饲。

總結(jié)

整個壓測優(yōu)化過程就是一個不斷優(yōu)化不斷改進的過程畏腕,通過長期的循序漸進的改進不斷發(fā)現(xiàn)問題,優(yōu)化系統(tǒng)茉稠,才能讓系統(tǒng)的穩(wěn)定性和性能都得到質(zhì)的提升郊尝。整個壓測優(yōu)化的思路其實和高并發(fā)架構(gòu)設(shè)計的思路是一致的,接下來也會寫一些關(guān)于高并發(fā)架構(gòu)的文章战惊,本篇的全鏈路壓測只是給大家做個入門介紹,其中涉及到的問題遠遠不止文中提到的這些扎即,而且問題的解決辦法也遠遠不是說的那么簡單吞获,造虛擬用戶、虛擬商品并不是隨便造的谚鄙,數(shù)據(jù)隔離也不是簡單加個前綴什么的就可以的各拷,也是有很多講究的,因為全鏈路壓測涉及到的內(nèi)容太多而且還涉及到各家公司的組織架構(gòu)闷营,所以這里就不展開了烤黍,只是給大家一個思路,按照這個思路結(jié)合自己公司的情況去實施傻盟,慢慢摸索總結(jié)出一套適合自己產(chǎn)品的全鏈路壓測速蕊。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市娘赴,隨后出現(xiàn)的幾起案子规哲,更是在濱河造成了極大的恐慌,老刑警劉巖诽表,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件唉锌,死亡現(xiàn)場離奇詭異,居然都是意外死亡竿奏,警方通過查閱死者的電腦和手機袄简,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來泛啸,“玉大人绿语,你說我怎么就攤上這事『蛑罚” “怎么了汞舱?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長宗雇。 經(jīng)常有香客問我昂芜,道長,這世上最難降的妖魔是什么赔蒲? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任泌神,我火速辦了婚禮良漱,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘欢际。我一直安慰自己母市,他們只是感情好,可當我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布损趋。 她就那樣靜靜地躺著患久,像睡著了一般。 火紅的嫁衣襯著肌膚如雪浑槽。 梳的紋絲不亂的頭發(fā)上蒋失,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天,我揣著相機與錄音桐玻,去河邊找鬼篙挽。 笑死,一個胖子當著我的面吹牛镊靴,可吹牛的內(nèi)容都是我干的铣卡。 我是一名探鬼主播,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼偏竟,長吁一口氣:“原來是場噩夢啊……” “哼煮落!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起踊谋,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤州邢,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后褪子,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體量淌,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年嫌褪,在試婚紗的時候發(fā)現(xiàn)自己被綠了呀枢。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡笼痛,死狀恐怖裙秋,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情缨伊,我是刑警寧澤摘刑,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站刻坊,受9級特大地震影響枷恕,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜谭胚,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一徐块、第九天 我趴在偏房一處隱蔽的房頂上張望未玻。 院中可真熱鬧,春花似錦胡控、人聲如沸扳剿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽庇绽。三九已至,卻和暖如春橙困,著一層夾襖步出監(jiān)牢的瞬間瞧掺,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工纷宇, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蛾方。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓像捶,卻偏偏與公主長得像,于是被迫代替她去往敵國和親桩砰。 傳聞我的和親對象是個殘疾皇子拓春,可洞房花燭夜當晚...
    茶點故事閱讀 45,435評論 2 359

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