亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

REA模型實(shí)戰(zhàn):用資源事件代理建模積分結(jié)算系統(tǒng)

REA模型實(shí)戰(zhàn):用資源事件代理建模積分結(jié)算系統(tǒng) 做后端和架構(gòu)的同學(xué)應(yīng)該都對(duì)這種場(chǎng)景不陌生。業(yè)務(wù)方丟過(guò)來(lái)一句話“我們要上一個(gè)積分系統(tǒng)買(mǎi)東西得積分積分能抵現(xiàn)?!蹦愕谝环磻?yīng)是建表用戶(hù)表、訂單表、積分表、流水表。等上線三個(gè)月財(cái)務(wù)說(shuō)要對(duì)賬你發(fā)現(xiàn)積分流水里只有加減沒(méi)有“這筆積分來(lái)自哪筆訂單、對(duì)應(yīng)哪次消費(fèi)、被誰(shuí)消耗”問(wèn)題一下子全出來(lái)了。今天聊的REA模型就是專(zhuān)門(mén)用來(lái)解決這類(lèi)建模問(wèn)題的。REA全稱(chēng)是Resource-Event-Agent資源-事件-代理是一套面向經(jīng)營(yíng)活動(dòng)的領(lǐng)域建模框架不綁定任何框架和語(yǔ)言。這篇文章我會(huì)用一個(gè)積分結(jié)算系統(tǒng)的完整建模過(guò)程講清楚REA是什么、怎么建模、怎么落到存儲(chǔ)和查詢(xún)最后把實(shí)際踩過(guò)的坑一次說(shuō)清。適合正在做DDD落地、事件溯源以及賬戶(hù)、庫(kù)存、積分類(lèi)系統(tǒng)的開(kāi)發(fā)者參考。1. REA模型認(rèn)知為什么業(yè)務(wù)建模繞不開(kāi)它1.1 三個(gè)要素和一個(gè)中心關(guān)系REA模型的三個(gè)核心詞匯展開(kāi)來(lái)說(shuō)并不復(fù)雜。Resource資源凡是“有價(jià)值、可以衡量、能在業(yè)務(wù)中流動(dòng)”的東西都可以歸入這個(gè)范疇?,F(xiàn)金、庫(kù)存商品、積分、優(yōu)惠券、產(chǎn)能、維修工單中的工時(shí)都是資源。判斷標(biāo)準(zhǔn)很直接這個(gè)東西在業(yè)務(wù)里會(huì)不會(huì)被增加、減少、轉(zhuǎn)移如果會(huì)它就是Resource而不是什么普通實(shí)體或字典表。很多同學(xué)建模時(shí)把積分當(dāng)成“用戶(hù)的屬性”直接給用戶(hù)表加一個(gè)point字段這恰恰是問(wèn)題的起點(diǎn)。積分本質(zhì)上是一種可流轉(zhuǎn)、可消耗、有歸屬的資產(chǎn)應(yīng)該被當(dāng)成Resource來(lái)建模。Event事件是發(fā)生在資源上的經(jīng)濟(jì)活動(dòng)。用戶(hù)支付、商品出庫(kù)、積分發(fā)放、優(yōu)惠券核銷(xiāo)都屬于Event。它記錄的是“發(fā)生了什么”而不是“現(xiàn)在是什么狀態(tài)”。平時(shí)做CRUD的時(shí)候我們習(xí)慣把賬號(hào)狀態(tài)從待支付改成已支付這是狀態(tài)的覆蓋而在REA里我們記錄的是“誰(shuí)在什么時(shí)間做了什么動(dòng)作”這個(gè)動(dòng)作不會(huì)因?yàn)闃I(yè)務(wù)狀態(tài)變化而被抹掉。Agent代理是參與經(jīng)濟(jì)活動(dòng)的人、系統(tǒng)角色或組織。用戶(hù)、供應(yīng)商、平臺(tái)、渠道商甚至一個(gè)負(fù)責(zé)積分過(guò)期任務(wù)的定時(shí)程序都可以是Agent。在REA模型里Agent不是簡(jiǎn)單的標(biāo)簽而是資源流向的歸屬方。每一筆資源變動(dòng)都必須能回答“這個(gè)資源從哪個(gè)Agent流出流入哪個(gè)Agent”。三者的關(guān)系是一個(gè)Event至少連接兩個(gè)Agent同時(shí)連接流入和流出兩類(lèi)Resource。為什么必須有雙方因?yàn)槿魏我还P經(jīng)濟(jì)活動(dòng)要成立必然存在一方資源減少、另一方資源增加。如果模型中只看到一個(gè)Agent那說(shuō)明你記錄的很可能不是事實(shí)而是某個(gè)操作的結(jié)果快照。1.2 用一杯咖啡看懂REA用一個(gè)最生活化的例子來(lái)拆解比如“你花20元在咖啡店買(mǎi)一杯咖啡”。傳統(tǒng)建模會(huì)怎么寫(xiě)訂單表記錄商品、金額、訂單狀態(tài)支付表記錄支付結(jié)果庫(kù)存表扣減庫(kù)存??雌饋?lái)邏輯完整但對(duì)賬時(shí)就會(huì)遇到一個(gè)經(jīng)典麻煩訂單顯示已支付財(cái)務(wù)的銀行流水里卻沒(méi)有這筆錢(qián)或者支付成功但訂單狀態(tài)沒(méi)被更新你說(shuō)不清是哪一步發(fā)生的、責(zé)任在哪一方。用REA模型這次交易要被拆成兩個(gè)獨(dú)立的經(jīng)濟(jì)Event。第一個(gè)Event是顧客付款。此時(shí)支付錢(qián)包這類(lèi)Resource從顧客名下流出20元流入咖啡店的收款賬戶(hù)涉及到的Agent是顧客和咖啡店。第二個(gè)Event是咖啡交付??Х榷够蛞阎谱骱玫目Х瘸善窂目Х鹊甑膸?kù)存Resource中流出1杯轉(zhuǎn)入顧客名下涉及到的Agent同樣是顧客和咖啡店。這里一定會(huì)有人問(wèn)一筆交易為什么要拆成兩個(gè)Event因?yàn)楦犊詈徒桓侗緛?lái)就是兩個(gè)獨(dú)立事實(shí)它們可能不是同一時(shí)刻發(fā)生。顧客觀看菜單后可能先付款再取貨也可能先取走咖啡后補(bǔ)付錢(qián)更可能付款后商家倒閉跑路根本拿不到咖啡。如果把兩者揉在一個(gè)訂單Event里后續(xù)處理退款、掉單對(duì)賬、庫(kù)存損耗時(shí)就會(huì)非常痛苦。拆開(kāi)之后“顧客付了錢(qián)但沒(méi)拿到咖啡”可以定位到第一個(gè)Event已完成、第二個(gè)Event未發(fā)生“拿到咖啡但沒(méi)扣庫(kù)存”也可以從Event里直接查出來(lái)。這背后正是復(fù)式記賬的思路每一筆資源的流入必然對(duì)應(yīng)另一筆資源的流出兩邊都要有據(jù)可查。REA把這種會(huì)計(jì)思想搬到了軟件建模層面很多看似復(fù)雜的業(yè)務(wù)按這個(gè)邏輯梳理后核心關(guān)系會(huì)非常干凈。等等有人會(huì)問(wèn)“我開(kāi)發(fā)的是一個(gè)管理后臺(tái)不是財(cái)務(wù)軟件有必要這么較真嗎”確實(shí)不是所有系統(tǒng)都必要但凡是涉及資金、庫(kù)存、積分、兌換碼這類(lèi)“資產(chǎn)型”數(shù)據(jù)的模塊如果沒(méi)有這一層事實(shí)記錄將來(lái)對(duì)賬、審計(jì)、排查數(shù)據(jù)異常時(shí)代價(jià)會(huì)成倍增加。我見(jiàn)過(guò)太多系統(tǒng)因?yàn)樵缙谑×诉@一步后期專(zhuān)門(mén)開(kāi)發(fā)“審計(jì)模塊”“對(duì)賬系統(tǒng)”結(jié)果還是對(duì)不齊最后只能硬編碼各種補(bǔ)丁。1.3 傳統(tǒng)建模與REA建模的對(duì)照把傳統(tǒng)CRUD式的建模和REA建模放在一起對(duì)比區(qū)別會(huì)更直觀。對(duì)比維度傳統(tǒng)建模REA建模核心數(shù)據(jù)狀態(tài)字段比如訂單狀態(tài)不可變的經(jīng)濟(jì)事實(shí)流審計(jì)能力依賴(lài)操作日志經(jīng)常缺失環(huán)節(jié)事件天然全鏈路可回溯當(dāng)前余額/庫(kù)存直接查字段值通過(guò)投影計(jì)算可從事件推導(dǎo)業(yè)務(wù)擴(kuò)展需要改表結(jié)構(gòu)、加字段新增事件類(lèi)型舊事件不動(dòng)冪等保障依賴(lài)狀態(tài)校驗(yàn)和鎖依賴(lài)事件的業(yè)務(wù)唯一性財(cái)務(wù)對(duì)賬另行開(kāi)發(fā)對(duì)賬邏輯事件本身就是賬本傳統(tǒng)表結(jié)構(gòu)像給系統(tǒng)拍了一張又一張快照我們能看到的永遠(yuǎn)是當(dāng)前狀態(tài)REA更像一段完整錄像任何時(shí)間點(diǎn)的業(yè)務(wù)都可以被還原。數(shù)據(jù)庫(kù)字段里那個(gè)“訂單狀態(tài)已完成”更像一張抓拍照片而REA事件流里的“下單、支付、出倉(cāng)、簽收”是連續(xù)的事實(shí)序列。對(duì)需要追溯責(zé)任的業(yè)務(wù)來(lái)說(shuō)錄像比照片可靠得多。還不止如此。傳統(tǒng)建模中當(dāng)業(yè)務(wù)需求增加“積分可以跨訂單合并使用”的時(shí)候你要么給積分表加一大堆關(guān)聯(lián)字段要么再寫(xiě)一套合并邏輯。但在REA里積分合并本質(zhì)上是一筆資源重組Event把兩個(gè)積分賬戶(hù)的資源結(jié)余轉(zhuǎn)移到一個(gè)新賬戶(hù)事件不改變舊積分賬戶(hù)的事實(shí)只是做一個(gè)新事件。這種擴(kuò)展方式對(duì)新老邏輯都比較溫和。1.4 REA與DDD、事件溯源的真實(shí)關(guān)系DDD領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)這么多年都很火但很多團(tuán)隊(duì)落地時(shí)卡在同一個(gè)問(wèn)題上通用語(yǔ)言怎么定義聚合根怎么劃分領(lǐng)域事件到底應(yīng)該記錄哪些內(nèi)容REA恰好給了一套可落地的詞法規(guī)范。DDD的“領(lǐng)域事件”在REA里對(duì)應(yīng)的是真正的經(jīng)濟(jì)Event而不是系統(tǒng)的每一步操作。比如“用戶(hù)點(diǎn)擊了積分明細(xì)頁(yè)”這種操作不算Event因?yàn)樗簧婕叭魏蜶esource的流入流出“用戶(hù)用100積分兌換了一張5元優(yōu)惠券”才是Event因?yàn)樗婕皟蓚€(gè)Agent用戶(hù)和平臺(tái)、兩類(lèi)Resource積分和優(yōu)惠券。如果你的團(tuán)隊(duì)在做事件風(fēng)暴時(shí)總是吵不清楚哪些是領(lǐng)域事件引入REA的“雙Agent、雙Resource”校驗(yàn)一下子就能過(guò)濾掉大量噪音。事件溯源Event Sourcing落地時(shí)最常見(jiàn)的問(wèn)題也是事件庫(kù)亂。有些團(tuán)隊(duì)把“狀態(tài)變更”都當(dāng)成事件存進(jìn)去結(jié)果事件流里魚(yú)龍混雜重放時(shí)根本還原不出業(yè)務(wù)。REA的約束正好解決了這個(gè)問(wèn)題事件必須關(guān)聯(lián)資源、必須關(guān)聯(lián)雙向代理、必須描述經(jīng)濟(jì)活動(dòng)。不符合這三條的就不應(yīng)該進(jìn)事件庫(kù)。所以REA不是DDD的替代品也不是事件溯源框架的前置依賴(lài)而是它們之間的粘合劑。我個(gè)人的習(xí)慣是先用REA梳理領(lǐng)域詞表再做DDD的聚合設(shè)計(jì)最后用事件溯源來(lái)落地。順序?qū)α撕竺鏁?huì)順很多。2. 實(shí)操建模用REA給積分結(jié)算系統(tǒng)搭骨架2.1 從一個(gè)不過(guò)分的模擬項(xiàng)目開(kāi)始為了把REA落地過(guò)程講得具體我假設(shè)自己正在為某社區(qū)團(tuán)購(gòu)平臺(tái)設(shè)計(jì)一套結(jié)算模塊業(yè)務(wù)規(guī)則一共有四條用戶(hù)可以用微信充值獲得平臺(tái)余額用戶(hù)在商城下單時(shí)用余額支付同時(shí)按支付金額的一定比例獲得積分用戶(hù)可以用積分兌換優(yōu)惠券優(yōu)惠券在下一次購(gòu)買(mǎi)時(shí)核銷(xiāo)。需要注意的是充值渠道和商品提供方是外部角色平臺(tái)本身也需要作為Agent進(jìn)入模型。拿到這個(gè)需求第一步不是寫(xiě)代碼也不是畫(huà)架構(gòu)圖而是列事件清單。我把所有可能發(fā)生的經(jīng)濟(jì)活動(dòng)寫(xiě)下來(lái)用戶(hù)發(fā)起充值、充值成功到賬、用戶(hù)下單、支付成功、訂單完成出庫(kù)、積分發(fā)放、積分兌換優(yōu)惠券、優(yōu)惠券核銷(xiāo)。事件清單不需要一次就完美后續(xù)隨業(yè)務(wù)梳理不斷補(bǔ)充但第一版必須包含業(yè)務(wù)方最關(guān)心的幾件事尤其是錢(qián)和商品的流轉(zhuǎn)。第二步對(duì)每個(gè)事件確認(rèn)它涉及的Resource和Agent。這里直接給出我梳理后的關(guān)系表這個(gè)表本質(zhì)上會(huì)成為后面領(lǐng)域模型和數(shù)據(jù)庫(kù)設(shè)計(jì)的基礎(chǔ)事件流入Resource流出Resource涉及Agent充值成功余額用戶(hù)外部資金平臺(tái)用戶(hù)、平臺(tái)支付成功下單商品貨權(quán)用戶(hù)余額用戶(hù)用戶(hù)、平臺(tái)訂單完成出庫(kù)商品庫(kù)存平臺(tái)商品在庫(kù)平臺(tái)平臺(tái)、供應(yīng)商積分發(fā)放積分用戶(hù)積分池平臺(tái)用戶(hù)、平臺(tái)積分兌換優(yōu)惠券優(yōu)惠券用戶(hù)積分用戶(hù)用戶(hù)、平臺(tái)優(yōu)惠券核銷(xiāo)優(yōu)惠券核銷(xiāo)記錄平臺(tái)優(yōu)惠券用戶(hù)用戶(hù)、平臺(tái)注意這里“商品貨權(quán)用戶(hù)”與“商品在庫(kù)平臺(tái)”是兩個(gè)不同的Resource。REA模型鼓勵(lì)把貨權(quán)和庫(kù)存分開(kāi)看待因?yàn)橛脩?hù)下單后貨權(quán)雖然已經(jīng)轉(zhuǎn)移給用戶(hù)但商品仍然在平臺(tái)倉(cāng)管里直到出庫(kù)才減少庫(kù)存。很多庫(kù)存對(duì)不上的問(wèn)題正是因?yàn)榘沿洐?quán)轉(zhuǎn)移和庫(kù)存減少混為一談。這個(gè)點(diǎn)在實(shí)際做電商系統(tǒng)時(shí)非常重要。第三步確定聚合邊界。我的方案是把“經(jīng)濟(jì)事件”作為獨(dú)立的不可變聚合根每個(gè)Agent的每個(gè)Resource類(lèi)型對(duì)應(yīng)一個(gè)資源賬戶(hù)聚合比如UserAccount聚合里包含用戶(hù)的余額賬戶(hù)和積分賬戶(hù)平臺(tái)的資產(chǎn)品類(lèi)賬戶(hù)單獨(dú)再建一個(gè)聚合。事件聚合負(fù)責(zé)產(chǎn)生事實(shí)賬戶(hù)聚合負(fù)責(zé)校驗(yàn)和投影兩者職責(zé)分離不混在一起。2.2 領(lǐng)域模型代碼骨架事件與賬戶(hù)分離按照上面的設(shè)計(jì)核心代碼可以拆成三層。Resource層比較簡(jiǎn)單它包含一個(gè)ResourceType和一個(gè)數(shù)量字段。Event層承擔(dān)事實(shí)記錄必須不可變。Agent層負(fù)責(zé)資源賬戶(hù)的承載。我用接近Java的偽代碼把它寫(xiě)出來(lái)public class ResourceAccount { private AgentId agentId; private ResourceType resourceType; private long amount; // 以最小單位存儲(chǔ)比如“分” private int version; public void apply(EconomicEvent event) { // 先校驗(yàn)后變更 } } public class EconomicEvent { private EventId eventId; private EventType eventType; private Instant occurredAt; private ListEntry entries; public static class Entry { private AgentId agentId; private ResourceType resourceType; private long amount; // 流入記正數(shù)流出記負(fù)數(shù) private EntryDirection direction; } } public class Agent { private AgentId agentId; private AgentType agentType; private String name; }這里最核心的是EconomicEvent中的Entry列表。一個(gè)事件至少要有兩條Entry一條表示某Agent的某個(gè)Resource增加另一條表示另一個(gè)Agent的某個(gè)Resource減少。兩條Entry之間滿(mǎn)足金額守恒。比如充值成功事件一條Entry是用戶(hù)余額10000分另一條Entry是平臺(tái)外部資金-10000分。兩條金額加起來(lái)為0這個(gè)事件的完整性就初步得到保證。金額守恒看起來(lái)像會(huì)計(jì)學(xué)概念但它對(duì)系統(tǒng)質(zhì)量的作用非常直接。在傳統(tǒng)模型里一個(gè)不經(jīng)意的小Bug可能導(dǎo)致用戶(hù)余額憑空多出1分錢(qián)而在REA模型里事件本身自檢就能發(fā)現(xiàn)不平衡測(cè)試用例也更容易寫(xiě)。我經(jīng)常說(shuō)REA等于把會(huì)計(jì)的“借貸平衡”內(nèi)置到了業(yè)務(wù)系統(tǒng)的核心數(shù)據(jù)結(jié)構(gòu)里。當(dāng)然代碼只是骨架真正能不能落地還取決于底層存儲(chǔ)和并發(fā)控制這部分放到第3章細(xì)說(shuō)。2.3 為什么資源單位必須是最小單位這個(gè)坑我踩過(guò)必須單獨(dú)拿出來(lái)講。早期做一個(gè)優(yōu)惠券計(jì)算功能時(shí)我用浮點(diǎn)數(shù)表示折扣比如0.88折結(jié)果計(jì)算過(guò)程中出現(xiàn)了0.30000000000004這類(lèi)連自己都看不懂的數(shù)字后面所有對(duì)賬全部錯(cuò)位。這不是REA特有的問(wèn)題而是所有涉及金額、積分、數(shù)量類(lèi)業(yè)務(wù)都容易犯的錯(cuò)。在REA建模中所有Resource的數(shù)量都必須選擇整數(shù)類(lèi)型以最小不可分割單位存儲(chǔ)。金額以“分”存儲(chǔ)積分以1個(gè)為單位庫(kù)存以“件”為單位。打折、匯率換算這些計(jì)算放到入賬之前處理一旦進(jìn)入Resource賬戶(hù)全部是整數(shù)。這個(gè)設(shè)計(jì)同時(shí)解決了兩個(gè)問(wèn)題第一浮點(diǎn)數(shù)誤差從源頭消失第二審計(jì)時(shí)看到的每一筆事件都是完整的業(yè)務(wù)事實(shí)不會(huì)出現(xiàn)三條小數(shù)記賬記錄加起來(lái)不等于一條原始記錄的情況。另外Resource的流出方向我建議用direction字段而不是簡(jiǎn)單的正負(fù)號(hào)。正負(fù)號(hào)只有兩個(gè)方向但業(yè)務(wù)里還有“凍結(jié)”“解凍”“沖正”等狀態(tài)只用正負(fù)號(hào)表達(dá)很容易把數(shù)量與狀態(tài)混淆。庫(kù)存不足時(shí)如果系統(tǒng)錯(cuò)誤地產(chǎn)生一個(gè)負(fù)庫(kù)存光看數(shù)據(jù)根本判斷不出異常但如果direction明確標(biāo)記為“凍結(jié)失敗”異常就能被精準(zhǔn)定位。2.4 事件不可變與沖正機(jī)制很多同學(xué)第一次接觸REA時(shí)會(huì)問(wèn)如果事件寫(xiě)錯(cuò)了怎么辦用戶(hù)的余額被我用一個(gè)錯(cuò)誤事件扣掉了難道不能改掉那條事件嗎答案是原始事件永遠(yuǎn)不能改只能新增一個(gè)“沖正事件”來(lái)糾正。比如充值事件本來(lái)是100元結(jié)果系統(tǒng)錄入成了1000元你不能去修改那條充值事件而是要生成一條“充值沖正”事件把多出的900元從用戶(hù)余額里扣回來(lái)并關(guān)聯(lián)到被沖正的原事件ID。這個(gè)規(guī)則看上去死板卻保住了整個(gè)系統(tǒng)的底線。一旦事件可修改之前所有基于事件的審計(jì)、重放、對(duì)賬邏輯都會(huì)失去信任基礎(chǔ)。金融系統(tǒng)里為什么要求“記賬憑證不可涂改”因?yàn)閼{證一旦可改賬本就沒(méi)有意義了。REA在這個(gè)層面就是數(shù)字化時(shí)代的記賬憑證。事件不可變的另一個(gè)好處是可以在多系統(tǒng)之間可靠地同步數(shù)據(jù)。下游系統(tǒng)只需要按事件ID增量拉取不需要關(guān)心上游是否修改過(guò)數(shù)據(jù)即使下游處理失敗重新消費(fèi)冪等性也可以通過(guò)事件唯一ID保證。這是事件驅(qū)動(dòng)架構(gòu)中一個(gè)很實(shí)用的基礎(chǔ)設(shè)計(jì)。3. 從模型到落地事件存儲(chǔ)、快照與查詢(xún)投影3.1 事件存儲(chǔ)表結(jié)構(gòu)怎么設(shè)計(jì)模型最終要落到存儲(chǔ)。在數(shù)據(jù)量不大時(shí)完全可以用普通關(guān)系型數(shù)據(jù)庫(kù)來(lái)實(shí)現(xiàn)事件存儲(chǔ)而不必一上來(lái)就引入專(zhuān)門(mén)的事件溯源中間件。我用PostgreSQL風(fēng)格的表結(jié)構(gòu)來(lái)說(shuō)明但換成MySQL也成立。核心就兩張表一張保存事件流元數(shù)據(jù)一張保存每個(gè)具體事件的數(shù)據(jù)。CREATE TABLE event_streams ( id BIGSERIAL PRIMARY KEY, aggregate_type VARCHAR(64) NOT NULL, aggregate_id VARCHAR(64) NOT NULL, version INT NOT NULL, created_at TIMESTAMPTZ NOT NULL DEFAULT now(), UNIQUE (aggregate_type, aggregate_id, version) ); CREATE TABLE events ( id BIGSERIAL PRIMARY KEY, stream_id BIGINT NOT NULL REFERENCES event_streams(id), version INT NOT NULL, event_type VARCHAR(128) NOT NULL, event_id VARCHAR(64) NOT NULL UNIQUE, payload JSONB NOT NULL, recorded_at TIMESTAMPTZ NOT NULL DEFAULT now() );這里的event_streams表代表一個(gè)聚合的版本序列。version字段是遞增的整數(shù)每次追加新事件時(shí)必須指定基于哪個(gè)version寫(xiě)入。如果兩個(gè)并發(fā)請(qǐng)求都用version3去追加下一個(gè)事件數(shù)據(jù)庫(kù)的唯一約束就會(huì)讓其中一個(gè)失敗沖突在源頭被攔下來(lái)。events表的event_id是這個(gè)事件的業(yè)務(wù)唯一ID不是自增主鍵。比如支付成功事件的事件ID就是支付流水號(hào)充值沖正事件的事件ID就是沖正單號(hào)。加上唯一約束后即使消費(fèi)者重復(fù)投遞消息數(shù)據(jù)庫(kù)也會(huì)把重復(fù)事件擋在外面這是冪等性的最后一道保險(xiǎn)。我見(jiàn)過(guò)不少團(tuán)隊(duì)把事件和業(yè)務(wù)數(shù)據(jù)混在一起事件表里既存原始事實(shí)又存當(dāng)時(shí)算出來(lái)的余額結(jié)果重放時(shí)數(shù)據(jù)結(jié)構(gòu)混亂。記得原則Event只存事實(shí)數(shù)據(jù)比如數(shù)量、單價(jià)、關(guān)聯(lián)訂單號(hào)所有可推導(dǎo)的余額、庫(kù)存、狀態(tài)全部放投影不要放事件。3.2 快照策略與應(yīng)用恢復(fù)事件存儲(chǔ)解決了事實(shí)保存但性能上不能無(wú)限依賴(lài)“從頭重放所有事件”。假設(shè)一個(gè)用戶(hù)賬戶(hù)有10萬(wàn)條積分流水每次加載賬戶(hù)狀態(tài)都要重放10萬(wàn)次系統(tǒng)必然扛不住。這時(shí)候需要快照。快照就是聚合在某個(gè)版本時(shí)刻的完整存檔?;謴?fù)時(shí)只從最近的快照開(kāi)始重放后續(xù)事件而不是從零開(kāi)始。比如用戶(hù)賬戶(hù)已經(jīng)發(fā)生10萬(wàn)條事件系統(tǒng)每100條生成一個(gè)快照那么恢復(fù)時(shí)最多重放100條性能得到了數(shù)量級(jí)提升??煺盏纳刹呗砸骖檶?shí)時(shí)性和成本。我常用的方案是在追加事件的事務(wù)里判斷當(dāng)前版本號(hào)是否達(dá)到“上次快照版本100”如果達(dá)到了就在同一事務(wù)里把聚合狀態(tài)序列化后寫(xiě)入快照表??煺找部梢耘浜隙〞r(shí)任務(wù)做但要注意版本對(duì)齊避免快照版本與事件版本不一致導(dǎo)致重放重復(fù)或缺失。CREATE TABLE snapshots ( stream_id BIGINT NOT NULL REFERENCES event_streams(id), version INT NOT NULL, state JSONB NOT NULL, created_at TIMESTAMPTZ NOT NULL DEFAULT now(), PRIMARY KEY (stream_id, version) );讀取聚合狀態(tài)時(shí)先取版本號(hào)最大的快照再加載該版本之后的所有事件順序重放得到最新?tīng)顟B(tài)??煺兆鳛閮?yōu)化手段不能取代事件本身如果快照損壞最多重建一個(gè)空聚合重放全量事件不影響數(shù)據(jù)正確性。3.3 查詢(xún)投影別拿事件庫(kù)當(dāng)查詢(xún)庫(kù)事件庫(kù)和普通業(yè)務(wù)庫(kù)的查詢(xún)特性完全不一樣。事件表的寫(xiě)入是追加式?jīng)]有任何update拿它來(lái)做“查詢(xún)用戶(hù)當(dāng)前余額”這類(lèi)高頻業(yè)務(wù)請(qǐng)求非常不適合。正確做法是建立查詢(xún)投影用一份獨(dú)立的讀模型來(lái)服務(wù)查詢(xún)。還是說(shuō)積分系統(tǒng)的例子。我可以建一張賬戶(hù)余額讀模型表專(zhuān)門(mén)用來(lái)支撐業(yè)務(wù)查詢(xún)CREATE TABLE account_balance_read_model ( user_id VARCHAR(64) PRIMARY KEY, balance_amount BIGINT NOT NULL, total_points BIGINT NOT NULL, coupon_count INT NOT NULL, updated_at TIMESTAMPTZ NOT NULL );這張表的數(shù)據(jù)不直接寫(xiě)入業(yè)務(wù)邏輯而是由事件訂閱者異步更新。充值成功、支付成功、積分兌換等事件發(fā)布后訂閱者收到消息重新計(jì)算該用戶(hù)的最新余額和積分然后更新表中的記錄。查詢(xún)接口只讀這張表響應(yīng)速度很快。這個(gè)寫(xiě)模型與讀模型分離的思路本質(zhì)上就是CQRS。REA和CQRS天然合拍REA負(fù)責(zé)把寫(xiě)側(cè)變成一串不可變的事實(shí)CQRS負(fù)責(zé)把讀側(cè)變成面向業(yè)務(wù)場(chǎng)景的投影。在寫(xiě)側(cè)我們強(qiáng)調(diào)一致性、完整性和審計(jì)能力在讀側(cè)我們強(qiáng)調(diào)查詢(xún)性能和響應(yīng)速度。兩者互不拖累。需要注意的是投影更新存在“最終一致”窗口事件寫(xiě)入后到讀模型更新完成前用戶(hù)可能看到舊數(shù)據(jù)。對(duì)大多數(shù)積分、余額業(yè)務(wù)來(lái)說(shuō)這個(gè)時(shí)間差可以接受如果業(yè)務(wù)要求強(qiáng)一致可以在同一個(gè)事務(wù)里同時(shí)更新事件表和投影表代價(jià)是寫(xiě)入延遲升高。我剛落地REA時(shí)只顧著保證事件一致性忘了設(shè)計(jì)讀模型結(jié)果上線后接口響應(yīng)慢得沒(méi)法看后來(lái)補(bǔ)了投影表才解決問(wèn)題。3.4 冪等、并發(fā)控制與重試事件驅(qū)動(dòng)系統(tǒng)里的冪等性遠(yuǎn)比單體CRUD里需要考慮得多。同一個(gè)支付成功事件可能因?yàn)橄⒅虚g件重投、下游服務(wù)重啟等原因被處理兩次。如果沒(méi)有冪等保護(hù)用戶(hù)的300元可能被入賬兩次積分翻倍優(yōu)惠券重復(fù)發(fā)放。冪等的第一道防線在事件唯一鍵上。我用支付回調(diào)里的平臺(tái)流水號(hào)作為eventId數(shù)據(jù)庫(kù)對(duì)eventId加唯一索引重復(fù)插入必然失敗。第二道防線在賬戶(hù)聚合的版本號(hào)上。每個(gè)賬戶(hù)記錄當(dāng)前version更新時(shí)必須攜帶期望version如果version對(duì)不上說(shuō)明有其他事件已經(jīng)先入賬當(dāng)前請(qǐng)求需要重新加載最新?tīng)顟B(tài)再合并計(jì)算。這里給出一個(gè)典型的寫(xiě)入流程偽代碼public void processPayment(PaymentReceivedEvent event) { for (int retry 0; retry 3; retry) { AgentAccount account accountRepository.load(userId); if (eventStore.exists(event.getEventId())) { return; // 已經(jīng)處理過(guò)直接忽略 } try { account.apply(event); accountRepository.save(account, account.getVersion()); eventStore.append(event); return; } catch (VersionConflictException ex) { // 說(shuō)明有并發(fā)事件先寫(xiě)入重新加載重試 } } throw new RecoverableException(concurrent payment processing); }這個(gè)寫(xiě)法里事件唯一鍵保證了重復(fù)消息不會(huì)入賬版本沖突保證了并發(fā)更新不會(huì)互相覆蓋。我實(shí)際測(cè)試過(guò)即使兩個(gè)線程同時(shí)收到同一事件最終也只有一個(gè)線程能成功寫(xiě)入另一個(gè)會(huì)在下一輪重試時(shí)發(fā)現(xiàn)事件已存在并退出。這套機(jī)制簡(jiǎn)單可靠比分布式鎖輕量很多。4. 復(fù)盤(pán)避坑REA落地時(shí)最常踩的6個(gè)坑4.1 坑一把派生數(shù)據(jù)混進(jìn)事件里這是REA建模中最典型的錯(cuò)誤幾乎每個(gè)初學(xué)的人都會(huì)犯。有人設(shè)計(jì)“用戶(hù)支付”事件時(shí)除了記錄支付金額、訂單號(hào)還會(huì)加一個(gè)字段叫“支付后余額”目的是查詢(xún)方便。結(jié)果事件溯源重放到最后一筆時(shí)發(fā)現(xiàn)余額和真實(shí)余額差了10元。為什么因?yàn)樵缙诘哪硹l事件里的“支付后余額”算錯(cuò)了而這個(gè)錯(cuò)誤在之后的N條事件里被當(dāng)成基礎(chǔ)數(shù)據(jù)繼續(xù)疊加。正確做法是事件只記錄業(yè)務(wù)事實(shí)支付了多少錢(qián)、來(lái)自哪個(gè)訂單、發(fā)生于何時(shí)。用戶(hù)支付后的余額是多少由投影計(jì)算得出不能寫(xiě)進(jìn)事件。把這個(gè)原則記住你的事件流就能永遠(yuǎn)保持純凈和可重放。4.2 坑二漏掉系統(tǒng)自動(dòng)任務(wù)的Agent身份有一類(lèi)特殊Agent特別容易被遺漏——系統(tǒng)本身。比如平臺(tái)規(guī)定“90天未使用的積分自動(dòng)過(guò)期”這個(gè)定時(shí)任務(wù)每天掃描積分賬戶(hù)并執(zhí)行過(guò)期操作。很多建模者覺(jué)得它不是人就不給它Agent身份。結(jié)果積分過(guò)期后業(yè)務(wù)審計(jì)想查“誰(shuí)的積分被清了、為什么被清”時(shí)事件流里只有一個(gè)資源減少記錄沒(méi)有任何Agent承擔(dān)責(zé)任。正確做法是把“積分過(guò)期服務(wù)”或者“系統(tǒng)管理Agent”納入模型給它分配一個(gè)AgentId。事件里的雙向Agent就變成了“用戶(hù)”和“系統(tǒng)管理Agent”。這樣審計(jì)時(shí)才能回答這筆積分是用戶(hù)主動(dòng)兌換掉還是被規(guī)則自動(dòng)清理的規(guī)則歸屬哪個(gè)系統(tǒng)服務(wù)。4.3 坑三濫用浮點(diǎn)數(shù)處理金額和積分這個(gè)坑前面已經(jīng)提過(guò)但值得放進(jìn)避坑清單里再次強(qiáng)調(diào)。任何Resource的入賬和出賬都使用以最小單位為基準(zhǔn)的整數(shù)。打折、匯率、稅率等計(jì)算全部放在事件入賬之前計(jì)算結(jié)果必須四舍五入到最小單位后再進(jìn)入事件。如果某天計(jì)算結(jié)果出現(xiàn)0.1個(gè)積分業(yè)務(wù)上要么向下取整要么單獨(dú)生成一個(gè)“零頭積分”的Resource絕不能讓一個(gè)小數(shù)出現(xiàn)在賬戶(hù)流水里。4.4 坑四事件表膨脹查詢(xún)性能失控事件存儲(chǔ)的量級(jí)和普通業(yè)務(wù)表完全不一樣。一個(gè)用戶(hù)一年可能產(chǎn)生上千條積分流水一個(gè)平臺(tái)一年就是上億條。如果不做任何優(yōu)化任何一次加載聚合狀態(tài)都要掃描幾十萬(wàn)條數(shù)據(jù)系統(tǒng)會(huì)卡到?jīng)]法用。解決方案有分層第一層是快照把上千條事件壓縮到最多回放100條第二層是歸檔把超過(guò)3個(gè)月的舊事件歸檔到冷存儲(chǔ)業(yè)務(wù)查詢(xún)走投影表只在審計(jì)、對(duì)賬、糾紛處理時(shí)查冷數(shù)據(jù)第三層投影表本身也要定期清理和壓縮避免重復(fù)投影數(shù)據(jù)越來(lái)越多。記住一條事件庫(kù)是“真相”投影模型才是“讀接口”不要讓用戶(hù)請(qǐng)求直接親吻事件庫(kù)。4.5 坑五團(tuán)隊(duì)不認(rèn)可新模型方案被噴成過(guò)度設(shè)計(jì)REA落地最大的阻力往往不是技術(shù)而是團(tuán)隊(duì)協(xié)作。業(yè)務(wù)方會(huì)覺(jué)得你繞了一大圈明明一張訂單表就能解決的問(wèn)題你非要拆成幾個(gè)事件和賬戶(hù)開(kāi)發(fā)同事會(huì)覺(jué)得這套模型復(fù)雜要學(xué)新的概念還要寫(xiě)一套以前沒(méi)寫(xiě)過(guò)的代碼。我的建議是不要試圖一次性全面鋪開(kāi)。先挑一個(gè)最痛的點(diǎn)比如財(cái)務(wù)月結(jié)算對(duì)不上賬、積分明細(xì)查不清用REA做一個(gè)影子模塊和舊系統(tǒng)并行跑一段時(shí)間用報(bào)表比對(duì)新舊模型的結(jié)果。當(dāng)數(shù)據(jù)證明舊模型有缺失、新模型能精準(zhǔn)還原后團(tuán)隊(duì)自然會(huì)接受。技術(shù)方案存在的最終目的是解決問(wèn)題不是證明誰(shuí)更高級(jí)。如果想靠“這個(gè)模型很經(jīng)典很權(quán)威”來(lái)說(shuō)服團(tuán)隊(duì)阻力只會(huì)更大。4.6 坑六把REA當(dāng)成萬(wàn)能銀彈最后一條坑是反過(guò)來(lái)走向極端什么系統(tǒng)都往REA上套。一個(gè)簡(jiǎn)單的用戶(hù)配置管理系統(tǒng)只有查詢(xún)和修改既不涉及資源流轉(zhuǎn)也不需要審計(jì)對(duì)賬硬套R(shí)EA只會(huì)增加無(wú)意義的復(fù)雜度。判斷是否該用REA的標(biāo)準(zhǔn)很簡(jiǎn)單業(yè)務(wù)里是否存在多方資源流轉(zhuǎn)、是否存在審計(jì)追溯訴求、當(dāng)前狀態(tài)是否依賴(lài)歷史事實(shí)推導(dǎo)如果三個(gè)都否普通CRUD可能就夠用了。我自己的經(jīng)驗(yàn)是REA最適合的場(chǎng)景是“用戶(hù)持有資產(chǎn)型數(shù)據(jù)”的業(yè)務(wù)錢(qián)包、積分、優(yōu)惠券、庫(kù)存、配額。這類(lèi)業(yè)務(wù)中的數(shù)據(jù)不僅是一個(gè)字段更是一種有生命周期、有歸屬方、可流轉(zhuǎn)的資產(chǎn)。判斷清楚再上模型會(huì)給你帶來(lái)巨大回報(bào)判斷不清楚硬上就會(huì)變成過(guò)度設(shè)計(jì)。最后把六個(gè)坑整理成速查表方便排查時(shí)對(duì)照坑位問(wèn)題表現(xiàn)解決思路派生入事件重放結(jié)果與真實(shí)余額不一致事件只記錄原始事實(shí)漏掉系統(tǒng)Agent自動(dòng)過(guò)期等操作無(wú)責(zé)任方補(bǔ)建系統(tǒng)Agent浮點(diǎn)數(shù)量計(jì)算誤差導(dǎo)致對(duì)賬失敗全部使用整數(shù)最小單位查詢(xún)撞事件庫(kù)響應(yīng)越來(lái)越慢用快照投影歸檔團(tuán)隊(duì)阻力方案被質(zhì)疑影子運(yùn)行用數(shù)據(jù)說(shuō)話過(guò)度設(shè)計(jì)簡(jiǎn)單CRUD也套R(shí)EA先評(píng)估業(yè)務(wù)是否匹配寫(xiě)在最后一個(gè)實(shí)用體會(huì)。我最早接觸REA時(shí)也覺(jué)得一個(gè)訂單要拆成好幾個(gè)事件實(shí)在太繞。直到后來(lái)一次對(duì)賬財(cái)務(wù)要我說(shuō)清楚“某用戶(hù)1月5日20點(diǎn)03分用余額買(mǎi)了一箱牛奶之后余額去哪了、積分發(fā)了多少、是否存在資金漏洞”傳統(tǒng)模型里的訂單狀態(tài)和流水表根本理不清是REA幫助我從事件流里逐條還原把資金鏈路完整講了出來(lái)。從那以后凡是涉及錢(qián)、庫(kù)存、積分這類(lèi)模塊我都會(huì)先問(wèn)自己一句我建的是狀態(tài)還是事實(shí)如果只能給一條建議那就是在建模第一周先用Excel把所有事件、資源流入流出、Agent列成一張大表把關(guān)系徹底捋順了再寫(xiě)代碼。這個(gè)笨辦法比畫(huà)100張架構(gòu)圖都有效。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
老女人综合网| 熟女高潮合集-永久久久-成人AV | 综合啪啪| 91丨国产丨白浆| 久久蜜桃综合网| 久久99手机免费视频| 中文字幕视频免费| 97操| 国产成人亚洲精品自产在线| 亚洲资源网| 蜜乳成人AV| 欧美日韩97在线| 嗯嗯不要 视频| 一级毛片电影免费看| 亚洲一区二区三区播放在线| 超碰久久性爱| 黑人狂躁日本妞一区二区三区| 丁香婷婷啪啪| 歐美性天天| 久久久无码精品人妻二区| 色97干| 九九视频黄色片| 另类图片五月天| 夜夜骑天天燥| 国产女大学生AV| 免费啪啪一级视频| 日本一区99| 肥佬影院91| 国产黄片精品在线| 91亚洲欧美综合高清在线| 色黄污美女啪啪啪免费网站| 蜜桃久久综合视频| 国产偷拍网站| 夜夜夜久久| 内射黑丝袜| 淫淫综合网| 日韩欧美一级特黄大片| 久久华人网| 国产高清成人传媒影视| 碰人碰碰人人开房人肉| 神马视频久久久久久| 国产日韩精品suv| 日本狠狠干| 亚洲天堂男人的天堂| 色色色欧美| 亚洲男人的天堂V| 91N综合网| 欧亚乱色熟女一区二区| 天天干人人乐| 欧美白嫩女HD| 岛国网址国产| 97亚洲色图| 丰满欧美少妇| av网站免费看| 亚洲日韩欧美一区二区| 99久热| 91n欧美| 色婷网| 欧洲精品一级二级精品综合视频综合 | 久偷拍| 国产精品久久久久久久毛片1| 欧美色图人妻| 思思热免费视频观看| 日噜夜夜夜夜夜夜夜夜夜夜爽爽爽爽爽爽爽爽爽爽爽爽 | 91在线/欧洲| 在线v中文字幕一区二区三区 | 97人妻色| 久久香蕉国产线看观看猫咪av| 亚洲AV色图| 乱欲性色| 中文字幕av久久爽Av| 在线观看日韩av不卡| 日韩无限资源| 锕锕好爽 死我在线观看| 久久久久久久国产视频| 亚洲综合999| 夜夜操天天肏| 久久性爱视频| 性爱乱伦网址| 天天综合官网| 天天影视之亚洲综合网| 麻豆AV短剧| 99精彩视频| av在线免费一区二区| 一区二区中文| 成人性生活高清视频在线播放| 天综合网欧美| 啊啊啊好疼| 蜜奶av| 岛国毛片手机在线观看| 不卡中文字幕aⅴ在线| 美女诱惑一区| 岛国1区2区3区在线观看| 91狠狠综合久久| 久久华人网| 久久久∴| 久草在| 成人夜夜爽| 精品人妻免费观看| 手机看片91人妻| 高清孕妇孕交 交| 欧美洲精品一级| 少妇色综合| 99re热| 嗯嗯啊啊好大好爽| 1024午夜激情男人的天堂| 天堂日本亚洲欧美| 9999免费精彩视频| 亚洲日韩美国人妻| 欧美性爱日韩性爱| 中文字幕亚洲热播人妻| 日本福利二区视频| 天天摸天天插天天日| 亚洲少妇喷视频看| JULIA一区二区三区在线播放| 国产成人亚洲精品无码古代早漏男| 欧美97免费| 国产97av| 亚洲加勒比久久日本道| 东北丰满熟女国产一区| 操逼网站地址| 日本三级久| 综合日本女人伊人| 国产欧美后入| 久久精品国产97欧美精品亚洲 | 激情婷婷五月天| ′ !γ}丶。。久久精品欧美一区二区三区| 99精品久久| 日本性爱不卡视频| a在线视频免费观看| 日韩欧美女优电影| 午夜精品久久久久久久| 欧美成人免费在线观看| 超碰国产精品无码| 久久精品国产亚洲AV片多多| 在线一道啪| 中文久久爆乳| 日韩偷拍色图| 欧美日韩天堂| 色香综合| 国产人妖的免费的视频| 久综合国内精品自在自线| 国产无码成人无码| 乱欲视频| 激情小说五月天| 91在线限制级| 伊香蕉综合久久久久久久噜噜噜| 亚洲欧洲成人在线电影| 成人婷婷丁香| 青青草大香蕉在线视频| 精品一级| 亚洲中文字幕av| 日韩熟妇二区| 78超碰| 激情抓乳插进去啪啪啪日韩 | 新版天堂中文资源8在线| 91在线色综合| 日韩青久久| 九九九九九九综合| 97无码视频在线播放| 亚洲美女自拍偷拍视频| 800zy一区二区| 亚洲精品黑丝| 老熟妇一区二区三区…| 亚洲一区二区三区久久 亚洲一区二区| 高清肉丝中文无码| 成人羞羞视频国产| 国产激情综合| 久久噜噜噜精品国产亚洲综合| 综合网亚洲1| 成人精品无码| 人妻天堂综合网| 人妻熟女一区二区| 国产乱伦性爱区| 爆乳免费黄网站| 久久99国产综合精品女同| 亚洲丝袜在线观看| 欧美午夜视频免费观看| 日韩成人色图| 男同专区一区二区三区在线| 色999五月色| 天天操美美| 天天射夜夜操| 少妇一线天久久久久久| 桑老女人九区| 第一高清av中文字幕| 精品一二三区四视频| 国产精品久久久啊| 又黑又大又粗| 99re免费| 日本五十路熟女一区二区| 五月天久久人妻| 青青操综合网| 狠狠做深爱婷婷久久二区| 一级性爱网| 香蕉久久国产AV一区二区| 极品国产内射| 欧洲色色| 亚洲 中文字幕 精品| 天天激情干| 九九久久精品| 人妻熟妇一区二区三区| 国产成人网站在线观看| 亚州五月| 日本性交操一区二区不卡系列| 丝袜夫妻自拍| 黄色香蕉视频网站一区| 色超碰综合| 国产精品无套内谢| 91在线国产后入风骚翘臀美女素人| 国产精品人妻熟女aⅴ| www.高清无码诱惑一区.com | 操逼操网| 女人18精品一区二区三区| 人妻精品视频一区二区| 精产品久久| 日韩精品一区二区三区四虎影视| 深喉吞精| 久久久亚洲精品中文字幕人妻| 欧美日韩97在线| 亚一综合久久久久久久久久| 丰满熟女人妻一区二区三五十一路| 日韩激情中文字幕有码| 婷婷五月天激情网| 亚洲欧美成人网站AAA| 96AV精品| 亚洲国产欧美另类自拍| 亚洲好色人妻| 大香蕉碰碰| 亚洲无码精品AV久久久| 亚洲诱惑天堂 | av九九| 一区二区三区高清| 伊人大香蕉在线| 色操逼网| 久久久一区二区三区麻豆| 天天舔天天| 无码 黑人一区二区三区| 久久一本大香蕉 | 天操天操夜操夜月操月年年操| 人妻丰满熟妇一区二区三| 九九九九精品一区| 天天射,天天操,天天爽-国内精品一区二区三区-成人AV | 啊啊啊不要好爽日韩无码一区| 日本一本道A级黄色毛片试看60分钟| 久草色在线观看| 欧美久久九九| 成人免费福利网站国产| 欧美性爱第1 页| 91天射| 97色色网| 亚洲成人免费中文字幕| 亚洲欧美日韩偷拍色图| 亚州精品人妻一二三区| 中文字幕片| 成人片在线播放| 懂色中文一区二区三区| 91这里只有精品| 日韩熟女视频二区| 99黄页网站| 蜜臀少妇一区二区| 久久99午夜精品一区人妻| 欲香欲色| 熟女少妇视频| 欧美精品97| wuyechaopeng| 国产精品在线一区二区| 日韩精品高清资源在线| 五月丁香成人网| av日韩在线观看电影| 亚洲天堂五月天国产| 91爱啪| 97免费视频在线观看视频| 九九十八精品| 97操97色| 综合久久久久久久久91| 91中出| 少妇淫妇久久久久久久| 国产中文字幕在线观看| 九区国产| 日韩成人人妻网站| 亚洲欧美视| 久久少妇人妻| 九九亚洲色在线观看| 麻豆精品A片免费观看| 黄色大片一区二区密桃丝袜| 99热免费| 91伊人影视综合| 久久精品人体| 日本少妇va7777| 欧美性爱三区二区| 国产精品久久久鸭无码的功能| 日韩乱伦影音先锋| 欧美日韩国产高清在线一二三区| 色成人Www精品永久观看| 国产无码精品高清| 老司机天天操| 一级黄色视频网| se01国产在线视频| 色色香蕉| 7777欧美成是人在线观看| 操逼视频免费日韩无码| 丝袜熟女一区二区三区| 思思热免费视频观看| 成人免费不卡在线视频| 极品白嫩美女白浆成人福利在线看| 强奸乱伦中文字幕AV| 极品尤物女神在线观看| 色丁香久久| 久久天堂婷婷网| 精品免费1| 午夜成人福利影视| 97视频在线视频| 国产精品粉嫩福利在线| 欧美情色亚洲| 日本一区二区亚洲综合| 樱花蜜乳av| 性久久| 国产精品久久久久久 百度| 久久久97| 超碰 另类 欧美| 91久久18禁| 91成人久久| 欧美精品激情| 国产精品探花色| 太久视频| 日韩人体偷拍| 色婷婷久久综合超碰| 啊啊啊轻点在线观看| 少妇高潮九九九九| 久久久一区二区三区三州| 男女激情黄色网址| 98一区二区精品| 狠狠躁天天躁日日躁| 91熟女视频网| 翔田千里无码一区| 一区二区三区激情在线观看| 熟女日韩| 欧美综合色综合| 国产91 丝袜在线播放00-百度| 国产精品一区二区亚洲人成毛片| 国产精品一区二区黄片| 久久夜嗨| 97爱亚洲| 日欧操屄视频| 天堂亚洲精品久久老牛| 中文字幕97| 日韩性爱视频免费在线| 亚洲欧美国产中文字幕| 亚洲激情视频| 国产AV高清AV无码| 青青草色情网站视频| 亚洲资源站| 伊人五月天激情| 青青草原狼av| 四虎影视精品| 日韩成人电影AV| 国产少妇高潮| 性色av大全| 夜夜操天| 97天天日| 五月天婷婷小说| 五月开心久久AV官网| 亚洲黑人在线| 丁香九月激情| 欧美图片校园春色| 黄色性爱网网| 欧美,亚洲,日韩,v,天堂,手机在线观看 | 激情欧美日韩女同久久| 91超碰在线| 狠狠色综合网| 国产精品乱码久久久久| 啪啪啪综合网| 另类图片五月天| 久久毛卡| 新视频sss国产| 自拍偷拍草一草| 久久手机视直播| 97在线免费看视频| 大香交伊人网| 97色综合中文网| www久久99| 9久9久9久9久视频网站| 国产动漫操逼视频| 久久99九九九九6666免费观看软件| 十八禁啪啦拍视频无遮挡| 97视频新免费| 日韩av影片在线观看| 日韩 女同 综合| 日韩欧美国产一区二区三区四区| 色综合超碰超| 激情久久av一区av二区av| 毛片麻豆91糖心精品毛情片| 一级啊性爱在线视频| 97超级色碰碰| 亚洲色诱惑| 久久久久白虎| 97精品国产97久久久久久户外免费| 91熟女视频| 精品国产污一区二区三区| 国产无码久久高清| 青青国产在线拍揄自揄拍| 人人 操人人 操人人| 欧美天天综合站| 免费中文在线| 老司机香蕉久久久久| 亚洲人妻一区二区三区| 日韩欧洲操屄视频| 骚女高跟AV在线| 国产视频一区二区免费| 91色香| 蜜桃传媒一区二区亚洲| 成年人三级黄色片视频| 天美传媒精品久久视频| 啊啊啊啊视频免费| 亚洲蜜乳av| 精品无码一区二区三区| 天天操天天射青青草| 超碰色男人操熟女| 一二三卡欧美日韩人妻免费精品| 六九九九| 国产高清成人mv在线观看| 97在线播放 | 91碰碰碰| 精品成人亚洲午夜电影| 国产馆| 91美女在线视频| 国产日本久久免费精品| 日语五十路和六十路亚洲国产精品| 亚洲性少妇| 久久乐| 国产操逼视频在线观看| 欧美性爱超碰97| 久久精品国产99国产精品亚洲| 黄片在线免费在线观看| 国产成人99久久亚洲综合| 一区二区三区四区五区久久久久久| 久久久久13| 亚洲成人久久一区二区| 欧美视频一| 新91视频.cmp| 欧洲精品久久| 欧美少妇一区二区三区| 久热伊人| 日韩精品亚洲专区在线影视| 国产精品久久久久久久电影渣男| 午夜在线播放| 美女爽爽爽刺痛洞洞| 校园春色亚洲欧洲| 大香蕉碰碰| 精品人妻美妇91job| 夜夜操美女| 久久精品国产亚洲粉嫩| 蜜桃网熟妇| 欧美日韩大陆黑人少妇99| 少妇一线天久久久久久| 欧美精品99久久久| 在线视频日韩欧美国产| 日韩国产乱子伦App| 男女啪啪网站免费视频| 97超碰美女| 熟妇人妻一二三区免费| 日本精品一区二区三| 久久水蜜臀亚洲AV无码精品| 人妻碰碰碰碰碰碰| 男人的天堂啪啪| 成年女人18级毛片毛片免费观看| 欧美日韩 强奸乱伦| 99久久久久久亚洲精品不卡| 久久亚洲中文字幕视频| 亚洲国产美女久久久久| 国产综合日韩伦理| 97久久超碰| 91狠狠综合网| 97超碰人人模人人拍人人| 国产精品视频在线观看| 酒色综合网| 一区二区视频在看| 超清中文乱码字幕| 日日夜夜免费| 97超碰欧美| 欧美天天综合网| 日本一二区不卡| 国产传媒一区二区三区| 午夜在线播放| 亚洲天堂精品日韩电影| 亚洲日韩人妻中文字幕一区| 国产精品黑人一区二区三区| 免费一级性爱久久| 91爆操视频| 国产尤物AV尤物在线观看不卡| 國產尤物AV尤物在線觀看| 太久视频| 99热99色| 人妻天堂综合网| 91蜜臀在线久久久久| 99re这里只有精品中心播放 | 国产97色在线| 亚欧精品久久久久久久久久久| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | 夜夜操老骚逼视频网站| 爆操无码| 男人综合网| 天天综合网在线观看| 97免费视频在线观看| 日本操逼视频免费| 国产成人99久久亚洲综合| 人人操肉肉| 爆操无码| 乱理日韩中文| 色九九综合AV| 人爽不卡视频| 国产精品永久免费10000| 亚洲最大成人a毛毛片| 日韩欧美字幕亚洲一区二区| 五月丁香六月| 精品乱码久久久久| 久9爱精品| 亚洲精品97| 超碰在线观看av不卡| 国模精品一区二区三区苹果色戒 | 国产av强奸美女| 黑人黄片在线免费观看| 日本免费一区二| 久久宗合亚洲| 美女久久久| 一区二区三区黄色片a| 大香蕉丝袜一级片| 青青草在线视频欧美| 97中文综合| 51国产午夜精品视频| 免费中文在线| 亚洲棕合电彰| 91美女小视频| 日本性爱不卡视频| 在线 亚洲 网爆 自拍| 精久久久| 中文字幕日韩人妻视频| 97精品国产97久久久久久| 天天摸天天舔天天操| 国产熟妇 码视频户外直播| 最新国产亚洲精品精品国产亚洲综合| 爱欲AV| 色淫网站优优视频| 最近2019中文字幕国语免费版| 精品妇女一区二区三区| 五月天人妻综合| A级毛片在线看免费| 激情综合五月天| 热的中文 热的有码 热的国产| 色吧5亚洲| 一区二区日韩欧美久久| 日韩专区久久久| 伊人黄色片| 欧美三级一级| 欧美天天综合| 五月天色综合| 性生活性生大爱77AV国产| 久操凹凸视频| 日逼五月天| 国产成年女黄特黄| 超91综合网| 女人香蕉久久毛毛片精品| 国产精品久久久久久久黄无码| 久久一留热品黄| 99re在线| 麻豆亚洲Av成人无码一区精品| 精品日日人妻| 五月丁香大香蕉| 国产精品另类一区大香蕉| 亚洲天堂7777| 97超碰中文| 欧美顶级黄色大片免费| 97网址97| 亚洲第一无码播放立川理惠| 九九人妻| 国产情侣自拍在线播放| 91亚洲丝袜熟女| 香蕉人人操tv| 欧洲亚洲人妻无码久久三区四区| 无码自拍SM| 欧美三四五区| 男人的天堂2019AV| 久久午夜色播影院免费高清| 天天操女人| 日本孕妇一区二区视频操逼免费看| 天天综合AV| 欧美色www亚洲国产阿娇要播| 久久大香蕉手机高清视频| 一级黄色性爱裸体视频| 蜜臀99999| 亚洲无吗在线视频| 美女天天干| 天天日夜夜爽| 中文字幕av亚洲精品| 中文字日本乱码| 欧美亚洲色图另类国产| 亚洲AV色图一区| 丁香五月久久| 久久久久久久强迫| 做爱福利视频一区二区| 999国产精品999| 欧美激情精品| 国产不卡免费在线视频| 青青操综合网| 日韩人妻精品| 丁香激情五月| 尹人免费观看视频在线| 久久久免费懂色| 色五月婷婷色| 无码久久国产 | 久久肏大逼| 蜜臀久久99精品久久久久久婷婷 | 色97| 国产女人和拘做爰视频 | 91天射| 午夜大香蕉| 高清有码一区二区| 人人妻天天做天天爽| 男人的天堂,欧美亚洲另类国产日韩,日本高清一区二区 | 久久大黄片| 日本高清加勒比| 亚欧精品久久久久久久久久久| 人人操我人人干| 99re视频在线播放青草| 97色涩| www.色婷婷| 乱伦a片视频| 中日韓欧美高清| 97精品97久久| 精品视频日日夜夜| 高清在线偷拍自拍视频| 亚洲AV无码乱码| 超碰碰97资源站| 97网址97| 久久精品视频28| 依人大香蕉| 国产精品黄色三级av| 精品国产乱码久久久久久网站入口| 天天激色| 久久亚洲不卡一区二区三区| 亚洲欧洲另类| 中文字幕免费在线观看| 99精品欧美一区二区三区桃色| 久久99网站| 欧美成人黄网色网站| 日韩欧美俄罗斯A片| 精品人妻美妇91job| 久久人妻精品| 国产传媒1234区| 狠操91,com| 日本韩国五十路六十路七十路老熟女作爱视频网站 | xxxx网站亚洲精品| 久久人人看| 97人肏| 中文字幕视频免费| 亚洲熟女人妻中文字幕一区二区 | 97精品国产精品免费观看| av橘色网站| 欧美日韩性爱电影在线| 91free福利| 久久av网| 强奸乱伦亚洲第一页| 女人香蕉久久毛毛片精品| 涩涩久久精品| 狠狠入| 2019久久久久久久久福利| 日本久久99| 欧美日韩青操| 欧美人体性爱互联网第一页婷婷日本| 十八岁啪啪视频免费看| 99re这里只有精品3| 色网亚洲人| 亚洲精品影视老司机| 超碰97色色| 国产午夜在线观看| 夜夜操二区| 国产夫妻性生活视频| 亚洲天天自拍| 99国内熟女露脸视频| 久久久久精| 成人怡红院| 国产视频三区四区| 色欧洲| 日韩无码极品| 日韩精品熟妇| 丝袜大香蕉| 亚洲 小说 欧美 激情 另类| 国产精品日日摸天天碰| 亚洲色图片区| 中文字幕AV中出| 日天天九九天堂666| 欧美日韩狠狠爱| 一区二区三区一亚洲中文字幕、综合区灬 | 午夜天堂啪啪| 4399成人黄A片| 99色热| 五月婷丁香| 人妻天堂综合网| 青草青草久热| 骚逼一区二区| 中文字幕高清精品一区| 97久久资源| 久久久精精精| 人妻嗯啊啊在线播放| 欧美图片校园春色| 国产精品。| 国产女人极品高潮毛片| 91久久婷婷| 国产在线激情| 蜜桃无码AV一区二区| 亚洲综合九| 最新日本中文字幕| 综精品久久久aaaa| 亚洲av综合伊人久久| 欧美亚洲AN| 日本高清_区二区三区| 亚州高清色综合| 欧美亚洲高清不卡| 日本久久精品| 女人与公拘交酡2020视频| 色色福利| a天堂视频| 97最新在线播放视频| av九九| 久久黄色网址| 日夜啪电影| 日韩操呦呦影院在线观看| 国产野战露脸在线播放| 后入福利视频| 大香蕉伊人色偷偷在线| 精品人妻一区二区三区四区石在线| 中文字暮97| 乱欲一区二区| 探花精品 一区二区| 操逼999| 亚洲操操| 干干干天天| 亚洲91网| 激情四射婷婷六月天| 亚州操操穴网| 韩国一级做A片免费的| 国产成年免费大片黄在线观看| 午夜电影在线观看无码专区| 97在线看| 性影在线视频| 国产高清无码一区二区三区四区皇冠| 久操不卡视频| 久艹伊人精品综合在线| 四季AV一区二区凹凸精品小说| 夜夜操一区二区| 在线播放欧洲免费av| 亚洲国产综合图区中文字幕| 秋霞一集毛片观看| 911av网站免费观看| 国产精品无码AV网站| 婷婷五月花| 久久久禁| av网站免费看| 天美麻花大全视频| 青青草黑寡妇男人天堂| 美女上床网站| 国产1024在线播放| av婷婷色婷婷色六月| 嗯阿好爽好紧| 东京热,男人的天堂| 精品久久久久久无码| 看一级黄色视频| 青青11操操操操操操操操| 一区二区三区精品黑丝白丝酒店对鸡| 久久精品一区二区三区不卡| 欧美天堂日韩三级国产传媒| 午夜精品久久久久久久99| 五月天久久人妻| 欧洲特黄毛片免费看欧洲毛片| 亚洲综合另类| 亚洲天天艹| 精久久久| 日本成人电影资源网| 一区二区三区男女操逼黄色小电影| 久久精品成人一区二区三区蜜臀| 韩美日操逼| 亚洲夜色在线| 久久九九97| 亚欧性爱在线无码| 国产中文字幕在线观看| 性影在线视频| h色99999| 秋霞影音一区二区三区| 伊人aaa| 综合欧美激情网| 欧美亚洲高清不卡| 天天色综亚洲91污| 亚洲熟女中文字幕在线| 韩国嫰模上门援交视频| 综合久久六月久久婷婷| 美女骚尻视频| 去干网最新版| 国内伊人久久久久久网站视频| 久久国产三区| 黄色操人| 久久噜噜噜精品国产亚洲综合| 国产成人综合网| 欧美激情综合网| 久久精品亚洲东京热色播| 狠狠操官网| 久久九九精品一区二区 | 男人的天堂久久| 久久啊哟| 青青操轻轻| 久久男人的天堂| 干B| 67914亚洲精品| 97在线视频观看网站| 大香蕉2017| 精品人妻一区二区免费蜜桃| 日美免费黄片| 强奸乱伦免费网站| 亚洲图片小说欧洲| 美国久久一二三四| 伊人色综合网| 高跟丝袜AV专区国产| 精品一级毛片在线观看| 久久激情视频| 日本黄色天堂| 精品97久久综合| 欧美午夜精品久久久久久超碰| 97人人操人人摸| 日韩视频精品在线观看| 外国91| 日韩久射综合| 亚洲激情深爱文学小说网站| 偷拍综合亚洲| 强奸乱伦大香蕉网| 思思热一热婷婷热一热| 亞洲久久直播| 久操网视频| 岛国在线免费视频| 日本中文字幕不卡视频| 97色碰| 探花精品 一区二区| 超碰在线91| 国产精品乱码久久久久| 欧美综合网A| 美女啊啊啊啊啊啊| 中文字幕后石码四区五区| AV女优男人的天堂| 亚洲91在线| 老外又粗又长一晚做五次| 欧美区亚洲区偷拍区 | 日韩亚洲精品一区二区| 欧美中文字幕日韩在线| 三级特黄60分钟播放| 最新岛国大片| 久久美女国产| 97干在线视频| 久久天天性久久伊人| 国产欧美一区二区| 在线亚洲丝袜视频网站| 熟女久久久| 欧美很很操视频| 91精品成人www| 精品一区二区三区四区外站| 东北老熟女| 日韩字幕一区| 亚洲aV性爱| 亚洲网自拍| 亚洲双插| 欧美日韩免费性爱| 免费观看有码高清视频| 国产精品极品美女视频| 色色五月天婷婷| 97一区二区三区视频| 97综合激情| 亚洲免费在线探花| 天天日天天舔天天喷天天射| 怡春苑东京热| 91色拍| 欧美精品日韩一区二区| 91熟女综合| 亚洲一区日韩精品中文字幕| 一区二区娱乐网站| 丰满人妻一区二区中文| 无码137片内射在线影院| 国产亚洲国产超碰| 综合视频91| 蜜乳av一区二区| 久久久性爱视频| 9久久精品| 9久9久| 大色综合| 无码色| 亚洲欧美黄| 欧美综合站| 伦理第一页| 亚洲.欧美.丝袜.中文.综合| 精品美女少妇一区二区| 五月大香蕉| 伊人网高清| 高清不卡一二三区视频......| 国产老女人久久毛| 中文字幕国产精品1区| 成人精品无码| 97日视频| 国产精品一区二区三区,亚洲综合| 综合97亚洲| 中文字幕在线高清男人的天堂 | 国产精品久久久久久久久久久久| 丝袜AV一二三区| 内射老妇BBWX0C0CK| 色 亚洲 91| 久久精品性| 操屄日韩| 大香蕉日亚洲日本亚大| 精品视频久久久久九九九九9999| 91久久青青草原精品| 九九自拍伦理| 狠狠久久亚洲欧美专区| 另类TS人妖一区二区三区| 黑人综合色| 中文字幕视频2区| 思思性爱| 综合国产影视三级| 日韩综合97p| 亚洲诱惑| 啊好爽受不了无码| 中文字幕 码精品视频网站| 大香蕉视频一二三区| 97超碰欧美手机| 天天躁狠狠躁av| 偷拍亚洲高清图片| 国产超碰在线| wwwcaobibi| 久久久久亚洲?V片无码V| 久久97| 亚州综合色| 综合色欧美| 人伦四五区| 国产AV线| 亚洲诱惑天堂 | 蜜臀AV成人精品蜜臀| 91xingse| 四虎永久在线精品免费网址| 人妻啊啊人妻啊| 男人的天堂不卡一区二区| 激情久久av一区av二区av| 成人免费不卡在线视频| 91精品人妻电影| 久久久成人国产精品无码| 亚洲美女自拍偷拍视频| 综合欧美日韩在线观看| 国产黄色av大片网站| 国产视频不卡在线观看| 黄网色一区二区三区四区精品| 户外裸露刺激视频第一区| 久久久久久AⅤ无码免费肉站| 国模精品娜娜一二三区| 久久九九99| 91色黑人少妇| 神马久久69| 久久夜黄色无码A级大片| 免费在线黄片视频| 破苞ⅩXXX性无码动漫无码| 国产成人网站在线观看| 大香蕉色十月| 久久国模av| 啊啊啊啊嗯嗯在线久久久| 91色交| 无码人妻丰满热妇又大又粗| 午夜一区| 亚洲第一二区另类图| 丰满少妇精品一区二区| 中文字幕丰满人妻日本| 国产69精品久久久久99尤物| 欧美精品四区| 91n免费处女| A 天堂| 激情五月天婷婷| 精吧天堂| 自拍偷拍第26| 日本人体九九九九九九| 污电影在线观看| 精品久久久av无码免费| 欧美 亚洲 偷拍自拍| 麻豆一区二区三区精品| 欧美日韩中文视频播放| 亚洲欧美中文日韩视频中国语| 影音先锋一区二区在线资源| 欧美色欧美| 男人天堂2019亚洲| 91日产桃蜜| 欧美网站免费| 欧美,亚洲,日韩,v,天堂,手机在线观看 | 成 人 A V免费视频在线观看| 色婷婷狠狠| 91色欧美| 日韩精品99999| 欧美色网络| 五月婷婷综合网| 久久发布国产伦子伦精品| 中文字幕jul-617人妻熟女| 久久伊人青青草| 色就色综合| 亚洲青色欧美| 探花在线免费观看视频国产一区| 久久鲁夜| 国产 日韩 欧美 中文 另类,国产 欧美 另类 制服 变态,高清 日韩 欧美 中文,高 | 97精品97| 国产精品一级片在线看| 长久操视频| 精品国产精品一区二区| 另类欧美色| av操操不卡| 日人妻视频91| 久久一区二区蜜桃| 涩爱AV在线| 91三级理论片播放器| 久久97视频| 黄色小说亚洲| 日韩av在线免费网站| 怡春院久久| 97色色国产视频| 日本在线不卡一二区| 亚洲成a人v欧美综合天堂下载| 日本A级视频| 丁香六月啪啪| 日韩国产欧美伦理在线| 欧洲亚洲人妻无码高清久久三区四区| 国产精品天美传媒| 欧美顶级黄片AAAAA在线免费看| 欧美激情综合| 96国产精品| 国产吹潮女在线观看| 亚洲有码 视频一区| 亚洲成A∨人影院在线欢看| 久久久精品| 成人三级片一区二区三区视频| 狠狠热这里都是精品| 禁片 高清 在线观看视频网站| 久久无码电影| 亚川综合视频| 精品无码一区二区三区色欲| 久久粉色| 久操国产在线| 国产suv一区二区三区6| 97超碰中文字幕| 色制服丝袜夫妻av一区| 欧美日韩免费专区在线| 精品国产乱码久久久久久久久1| 四虎影院成年人片| 成人性爱电影网| 91黑人无码激情在线| 国产小u女在线观看| 91天堂色男人的天堂| www.av在线观看| 黄色一级视| 日本久久精品| 高清无码网址| 大香蕉伊人网WWWn0n| 亚洲精品一区二区三区新线路| 九九热男人天堂| 欧美超碰在线| 国产成人主播| 97伊人超碰| 久久极品一区二区| 亚洲乱色熟女一区| 97久久综合网| 97国产天堂岛| 95精品在线| 91在线精品| av网站免费线看| 久久久久久无码人妻中文字幕| 久久本道| 无码国产精品午夜不卡(| 小说区 图片区色 综合区| 欧美 日韩第一性色| 久久久久久久久久久999| 五月婷婷激情网| 探花熟女,姿勢到位,體驗感也到位| 男人的午夜天堂| 91欧美经典| 97色操| 加勒比性爱成人在线| 日韩精品人妻中文字有码在线| 观看视频图片一区二区三区| 中文字幕啊啊啊在线观看视频| 美女被艹尤物视频| 高清国产av无码| 久久久麻豆精品| 综合操逼| 久久一区二区三区入口| 国产亚州高清国产拍精| 亚洲美女自拍偷拍视频| 在线精品福利免费播放| 久久久久九九九| 色综合色欲色综合色综合色综合| 国产av美女被艹的乱叫| 一区二区三区激情在线观看| 牛牛aV| 丁香六月婷婷综合| 精品国产乱码久久久久久久久1 | 欧美色五月| 91女网站| 麻豆伊人网| 91成人亚洲色图| 日本天天干天天操一区| 日韩一级性爱无码| 性色av蜜臀av色欲aV| 婷婷五月天AV| 麻豆国产av网| 亚洲s色图| 94色色电影网| 九九热久久99精品re| 欧美网站免费| 精精夜夜| 99热日| 91香蕉国产尤物视频| 国产精品呦一区二区三区| 26uuu国产| 色网在线| 91天天综合日韩欧美| 啪啪免费| 亚洲 中文 女同| 俺去啦自拍| 你懂的在线观看区国产| 日韩性爱播放| 欧美精品 - 91爱爱| 亚洲熟妇A V黑人| 国产精品视频麻豆入口| 日本三级韩三级99久久| 激情人妻另类| 色吧5亚洲| 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 伊人影院在线理论播放 | 91三级理论片播放器| 黄色成品网站| 诱惑网综合| 人人天天干干| 日日妻色网| 为用户提供免费看黄网址在线观看| 婷婷中文字幕| 伊人欧美大香蕉视频| 约操熟妇| 激情综合网一盗摄| 亚洲?V无码专区在线电影| 91人妻丝袜无码| 女人久久久| 天天操夜夜操| 人妻熟女一区二区三区视频| 一级啊性爱在线视频| 午夜无码熟妇丰满人妻| 亚洲天堂中文字| 蜜屁Av| 国产中文精品一区二区在线观看| 麻豆AV短剧| 日本成人A片网站| av东京热男人的天堂| 美国一区二区三区视频| 夜夜骑操视频| 中文字幕av乱伦|