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

ARTICLE DETAIL

資訊詳情

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

云開(kāi)發(fā)微信小程序圖書(shū)借閱系統(tǒng)設(shè)計(jì)與并發(fā)避坑實(shí)踐

云開(kāi)發(fā)微信小程序圖書(shū)借閱系統(tǒng)設(shè)計(jì)與并發(fā)避坑實(shí)踐 做圖書(shū)借閱類小程序的人不少但真正把借還閉環(huán)跑順、上線后不被并發(fā)和數(shù)據(jù)一致性坑到的并不多。我前后參與過(guò)幾個(gè)類似的項(xiàng)目最深的體會(huì)是基于云開(kāi)發(fā)的微信小程序圖書(shū)借閱系統(tǒng)難點(diǎn)從來(lái)不在“借書(shū)、還書(shū)、查書(shū)”這幾個(gè)頁(yè)面上而在于副本狀態(tài)怎么記、并發(fā)點(diǎn)擊怎么防、權(quán)限規(guī)則怎么配、配額怎么省。這篇文章就把這套系統(tǒng)的設(shè)計(jì)思路和我踩過(guò)的坑一次性攤開(kāi)講從技術(shù)選型的賬本到數(shù)據(jù)模型的三層拆分再到借還書(shū)的原子更新寫法、權(quán)限規(guī)則的隱藏陷阱、前端交互的細(xì)節(jié)打磨最后到上線后才暴露的超時(shí)和配額問(wèn)題。不管你是剛接需求的學(xué)生開(kāi)發(fā)者還是想快速交付一個(gè)小型借閱工具的一線同學(xué)都能從里面找到可以直接抄的部分也能提前避開(kāi)那些我花了幾個(gè)通宵才定位到的坑。1. 先把方案賬算清楚這個(gè)系統(tǒng)到底該不該用云開(kāi)發(fā)很多人一上來(lái)就開(kāi)始建集合、寫頁(yè)面寫到一半發(fā)現(xiàn)某個(gè)能力缺失推倒重來(lái)。圖書(shū)借閱這種業(yè)務(wù)規(guī)模通常不大但業(yè)務(wù)規(guī)則很密選型階段多花半天時(shí)間算賬后面能省掉一周的返工。1.1 圖書(shū)借閱的業(yè)務(wù)閉環(huán)其實(shí)很短把需求攤開(kāi)看一個(gè)最小可用的借閱系統(tǒng)要干的事就那么幾件錄入書(shū)目、給每本書(shū)生成可借副本、讀者掃碼或搜索發(fā)起借閱、管理員確認(rèn)或自動(dòng)放行、到期提醒、歸還入庫(kù)、逾期統(tǒng)計(jì)。整個(gè)閉環(huán)里真正復(fù)雜的不是功能數(shù)量而是狀態(tài)流轉(zhuǎn)——一本書(shū)可能處于“在架可借”“已借出”“預(yù)約中”“維修中”“下架”這幾種狀態(tài)每個(gè)狀態(tài)能做什么操作是固定的。這個(gè)特征決定了技術(shù)選型的核心訴求狀態(tài)更新的原子性比高并發(fā)吞吐更重要開(kāi)發(fā)迭代速度比峰值性能更重要。一個(gè)小型圖書(shū)室可能一天就幾十次借還但每一次借還都不能出現(xiàn)“同一本書(shū)借給了兩個(gè)人”這種事故。理解這一點(diǎn)你就明白為什么很多團(tuán)隊(duì)最終選了云開(kāi)發(fā)——它把賬號(hào)體系、數(shù)據(jù)庫(kù)、存儲(chǔ)、定時(shí)任務(wù)、消息推送全都打包好了省掉的是最耗時(shí)的基建部分。我在第一個(gè)項(xiàng)目里試過(guò)自建后端光是登錄態(tài)維護(hù)、文件上傳、定時(shí)任務(wù)這三塊就寫了一周多業(yè)務(wù)代碼反而只占三成。后來(lái)?yè)Q成云開(kāi)發(fā)同樣的功能兩天跑通。不是說(shuō)自建不好而是對(duì)于借閱這類“業(yè)務(wù)復(fù)雜、流量平緩”的系統(tǒng)基建投入的性價(jià)比確實(shí)低。1.2 三條技術(shù)路線的成本對(duì)照選型不要憑感覺(jué)把關(guān)鍵維度列成表答案會(huì)自己浮出來(lái)。下面這張表是我在幾個(gè)項(xiàng)目里反復(fù)驗(yàn)證過(guò)的對(duì)比成本估算按“一個(gè)人獨(dú)立完成”的口徑。維度云開(kāi)發(fā)一體化方案自建服務(wù)端 云主機(jī)純小程序本地存儲(chǔ)初始搭建耗時(shí)半天到一天三到七天兩小時(shí)登錄鑒權(quán)平臺(tái)自帶身份標(biāo)識(shí)直接可用需自行對(duì)接登錄態(tài)校驗(yàn)無(wú)無(wú)法區(qū)分用戶數(shù)據(jù)一致性單文檔更新原子支持事務(wù)完全自主可控僅本機(jī)有效換設(shè)備即丟多端共享數(shù)據(jù)天然支持需自行設(shè)計(jì)接口不支持定時(shí)任務(wù)平臺(tái)提供觸發(fā)器需自行部署調(diào)度不支持運(yùn)維負(fù)擔(dān)基本為零需要監(jiān)控、備份、擴(kuò)容零成本模型按調(diào)用量和存儲(chǔ)計(jì)費(fèi)小規(guī)??煽毓潭ǚ?wù)器成本零適合規(guī)模單館藏幾千冊(cè)、日借還百次級(jí)多館、萬(wàn)級(jí)用戶僅個(gè)人練手從表里能看出來(lái)純本地存儲(chǔ)那條路只能用來(lái)交作業(yè)一旦涉及“讀者和管理員看到同一份數(shù)據(jù)”就必須有服務(wù)端。自建方案的自由度最高但你要為這份自由付出運(yùn)維和安全的代價(jià)。云開(kāi)發(fā)站在中間犧牲了一部分底層控制權(quán)換來(lái)的是把精力全部放在業(yè)務(wù)邏輯上。這里有個(gè)容易被忽略的判斷點(diǎn)你有沒(méi)有穩(wěn)定的運(yùn)維能力。數(shù)據(jù)庫(kù)要備份、服務(wù)要監(jiān)控、出問(wèn)題要有人半夜爬起來(lái)看這些在自建方案里是硬成本。如果你的團(tuán)隊(duì)里沒(méi)有專門負(fù)責(zé)這塊的人那云開(kāi)發(fā)省下的不只是錢是整條責(zé)任鏈。1.3 云開(kāi)發(fā)明確做不了或者做起來(lái)很難的事選型不能只看好處邊界必須提前摸清。我在實(shí)際項(xiàng)目里遇到過(guò)幾個(gè)“以為能做、結(jié)果繞了大彎”的地方提前說(shuō)出來(lái)能幫你少走彎路。第一是復(fù)雜聚合統(tǒng)計(jì)。想要“按月份、按分類、按讀者類型三維交叉統(tǒng)計(jì)借閱量”用云開(kāi)發(fā)的聚合能力可以寫但可讀性和調(diào)試體驗(yàn)都不算友好一旦維度超過(guò)三個(gè)查詢語(yǔ)句會(huì)長(zhǎng)到難以維護(hù)。我的做法是把明細(xì)數(shù)據(jù)同步一份到表格類工具報(bào)表在那邊做小程序里只展示最近七天的簡(jiǎn)單統(tǒng)計(jì)。第二是大體量數(shù)據(jù)的批量導(dǎo)入導(dǎo)出??刂婆_(tái)的單次導(dǎo)入有數(shù)量限制幾千條書(shū)目要分批導(dǎo)還得處理好重復(fù)主鍵。我一般寫一個(gè)臨時(shí)的云函數(shù)做分批寫入每批兩百條寫完刪掉函數(shù)比在控制臺(tái)點(diǎn)一百次強(qiáng)。第三是精確到毫秒級(jí)的強(qiáng)一致事務(wù)。云開(kāi)發(fā)的事務(wù)能力在云函數(shù)里可用但事務(wù)內(nèi)可執(zhí)行的操作次數(shù)和可用的操作類型都有限制復(fù)雜邏輯硬塞進(jìn)事務(wù)會(huì)超時(shí)。涉及多步校驗(yàn)的借閱流程我更傾向于用“條件更新 狀態(tài)機(jī)”的方式替代大事務(wù)。提示判斷某個(gè)功能能不能做別只看文檔里有沒(méi)有這個(gè) API要看它在你的業(yè)務(wù)規(guī)模下會(huì)不會(huì)撞到限制。文檔寫“支持”和你實(shí)際能用得舒服是兩件事。2. 數(shù)據(jù)建模圖書(shū)、副本、借閱記錄這三張表決定后面所有麻煩數(shù)據(jù)模型一旦定錯(cuò)后面每一行代碼都在還債。我見(jiàn)過(guò)最常見(jiàn)的錯(cuò)誤是把“書(shū)目信息”和“實(shí)體書(shū)”混在一張表里結(jié)果一本書(shū)買了兩冊(cè)就不知道該怎么記最后只能用數(shù)量字段硬湊借出一冊(cè)就減一還回來(lái)再加一中間任何一次異常都會(huì)讓數(shù)量對(duì)不上。2.1 為什么“圖書(shū)”和“副本”必須拆開(kāi)打個(gè)生活化的比方書(shū)目信息相當(dāng)于身份證上的姓名和照片副本相當(dāng)于具體的每一個(gè)人?!度w》這本書(shū)的標(biāo)題、作者、封面只有一份但圖書(shū)室里可能有三本。你借走的是其中某一本實(shí)體書(shū)不是“《三體》這個(gè)概念”。拆成兩層之后books集合存書(shū)目元信息copies集合存每一冊(cè)實(shí)體書(shū)的唯一編號(hào)、所屬書(shū)目、當(dāng)前狀態(tài)、所在書(shū)架位置。這樣帶來(lái)三個(gè)直接好處一是可以精確知道哪一冊(cè)被誰(shuí)借走歸還時(shí)能定位到具體那本二是同一書(shū)目下不同副本可以處于不同狀態(tài)一本在架一本外借完全正常三是丟失或損壞時(shí)可以單獨(dú)標(biāo)記某一冊(cè)不影響其他副本可借。如果不拆會(huì)出現(xiàn)什么情況讀者頁(yè)面上顯示“可借 2 本”他點(diǎn)借閱系統(tǒng)隨便拿一條記錄改狀態(tài)改完發(fā)現(xiàn)那一冊(cè)其實(shí)已經(jīng)借出去了或者兩個(gè)讀者同時(shí)借同一冊(cè)。數(shù)量字段是最不可靠的狀態(tài)載體因?yàn)樗鼪](méi)有身份。2.2 借出狀態(tài)到底該存在哪拆開(kāi)之后緊接著一個(gè)問(wèn)題副本的“當(dāng)前是否借出”是記在copies表上還是只記在借閱記錄表里靠查詢推導(dǎo)兩種做法我都試過(guò)。純靠借閱記錄推導(dǎo)的做法是“只存事實(shí)狀態(tài)靠算”理論上最干凈——查某冊(cè)書(shū)是否可借就去借閱表里找有沒(méi)有“未歸還”的記錄。但實(shí)際用起來(lái)很痛苦每次列表展示都要帶一次關(guān)聯(lián)查詢列表一百條就是一百次查詢配額瞬間打光頁(yè)面還卡。最終我采用的是雙寫 主狀態(tài)字段copies表里放一個(gè)status字段作為權(quán)威狀態(tài)借閱記錄表里放完整流水。借出時(shí)用條件更新把status從“在架”改成“外借”同時(shí)插入一條借閱記錄。歸還時(shí)反過(guò)來(lái)。兩處數(shù)據(jù)理論上可能不一致所以我會(huì)加一個(gè)每天跑一次的校驗(yàn)任務(wù)比對(duì)狀態(tài)和流水發(fā)現(xiàn)不一致就告警。這個(gè)設(shè)計(jì)的核心思路是狀態(tài)字段用于快速展示和條件判斷流水記錄用于審計(jì)和對(duì)賬。兩者職責(zé)不同不要試圖只留一個(gè)。用狀態(tài)字段做展示查詢成本幾乎為零用流水做統(tǒng)計(jì)和追溯數(shù)據(jù)永遠(yuǎn)完整。2.3 字段清單與索引規(guī)劃下面是我現(xiàn)在這套項(xiàng)目實(shí)際在用的字段設(shè)計(jì)可以直接拿去改。books集合書(shū)目字段類型說(shuō)明_idstring系統(tǒng)主鍵isbnstring國(guó)際標(biāo)準(zhǔn)書(shū)號(hào)用于掃碼識(shí)別可為空titlestring書(shū)名必填authorstring作者publisherstring出版社categorystring分類用固定枚舉值coverFileIdstring封面在云存儲(chǔ)中的文件標(biāo)識(shí)totalCopiesnumber副本總數(shù)冗余字段availableCopiesnumber在架數(shù)量冗余字段createdAtdate錄入時(shí)間copies集合副本字段類型說(shuō)明_idstring副本主鍵同時(shí)作為條碼內(nèi)容bookIdstring關(guān)聯(lián)書(shū)目主鍵barcodestring可讀條碼建議簡(jiǎn)短statusstring在架/外借/預(yù)約/維修/下架shelfstring存放位置方便找書(shū)currentLoanIdstring當(dāng)前借閱記錄主鍵在架時(shí)為空updatedAtdate狀態(tài)變更時(shí)間loans集合借閱記錄字段類型說(shuō)明_idstring記錄主鍵copyIdstring副本主鍵bookIdstring書(shū)目主鍵冗余便于統(tǒng)計(jì)userIdstring借閱人身份標(biāo)識(shí)borrowAtdate借出時(shí)間dueAtdate應(yīng)還時(shí)間returnAtdate實(shí)際歸還時(shí)間未還為 nullstatusstring借閱中/已歸還/已逾期索引用得好查詢快十倍用不好等于沒(méi)建。我的經(jīng)驗(yàn)是給三類查詢建索引copies上按bookId和status建組合索引用于書(shū)目詳情頁(yè)展示可借副本loans上按userId和status建組合索引用于“我的借閱”loans上按dueAt單獨(dú)建索引用于逾期掃描任務(wù)。建索引的時(shí)候注意一點(diǎn)云開(kāi)發(fā)控制臺(tái)建索引是異步生效的剛建完立刻測(cè)可能還是慢等一兩分鐘再看。2.4 冗余字段為了查詢方便做的妥協(xié)嚴(yán)格范式的設(shè)計(jì)會(huì)把totalCopies和availableCopies去掉因?yàn)槎寄軓腸opies算出來(lái)。但真實(shí)項(xiàng)目里首頁(yè)書(shū)目列表要顯示“可借 2/3”如果每本書(shū)都去copies聚合一次一百本書(shū)就是一百次聚合查詢?cè)崎_(kāi)發(fā)的調(diào)用配額撐不住。所以我在books上冗余了這兩個(gè)數(shù)字代價(jià)是要維護(hù)一致性。維護(hù)方式很簡(jiǎn)單所有改變副本狀態(tài)的操作都走同一個(gè)云函數(shù)入口在里面順帶更新一次計(jì)數(shù)。關(guān)鍵在于只允許一個(gè)入口改狀態(tài)一旦有第二個(gè)地方也能改copies.status冗余字段遲早會(huì)漂。更新計(jì)數(shù)的寫法上有個(gè)細(xì)節(jié)。不要先查出來(lái)再寫回去那會(huì)有并發(fā)覆蓋問(wèn)題。用原子自增自減指令把“加一減一”交給數(shù)據(jù)庫(kù)引擎執(zhí)行// 借出成功后在架數(shù)量減一 await db.collection(books).doc(bookId).update({ data: { availableCopies: db.command.inc(-1) } })inc是原子操作不管多少個(gè)請(qǐng)求同時(shí)打過(guò)來(lái)結(jié)果都是準(zhǔn)確累減。這一點(diǎn)比“先 get 再 update”可靠得多后者在兩個(gè)請(qǐng)求同時(shí)到達(dá)時(shí)會(huì)讀到相同的舊值最終只減了一次。3. 借書(shū)還書(shū)那幾行代碼是并發(fā)問(wèn)題的重災(zāi)區(qū)整個(gè)系統(tǒng)里最不能出錯(cuò)的就是借閱動(dòng)作。用戶連點(diǎn)兩下、兩個(gè)人搶同一本書(shū)、網(wǎng)絡(luò)重試導(dǎo)致請(qǐng)求重復(fù)提交這幾種情況在真實(shí)使用中都會(huì)發(fā)生而且往往發(fā)生在你最不希望發(fā)生的時(shí)刻。3.1 一次借閱動(dòng)作背后要改幾個(gè)地方點(diǎn)一下“借閱”按鈕后端實(shí)際要做的事有校驗(yàn)用戶是否有未繳罰款、校驗(yàn)該書(shū)是否在架、把副本狀態(tài)改成外借、插入借閱記錄、給書(shū)目在架數(shù)量減一、記錄操作日志。六步操作只要中間斷一步數(shù)據(jù)就不一致。最危險(xiǎn)的是“副本狀態(tài)改了但借閱記錄沒(méi)插進(jìn)去”這會(huì)導(dǎo)致書(shū)顯示已借出但沒(méi)有任何人認(rèn)領(lǐng)等于憑空消失一本。反過(guò)來(lái)“記錄插了但狀態(tài)沒(méi)改”就是同一本書(shū)可以被無(wú)限借。所以這里的核心問(wèn)題不是代碼寫得多不多而是執(zhí)行順序和失敗補(bǔ)償。我的順序是先做條件更新改狀態(tài)成功后再插記錄。因?yàn)闂l件更新本身帶校驗(yàn)?zāi)芰Α率【驼f(shuō)明狀態(tài)不對(duì)直接返回錯(cuò)誤這時(shí)候還沒(méi)插記錄天然不會(huì)臟。如果插記錄失敗再補(bǔ)一個(gè)回滾把狀態(tài)改回在架加個(gè)重試。這個(gè)順序的好處是把“可能失敗”的操作放在前面后面的失敗可以回滾前面失敗直接終止。3.2 條件更新做樂(lè)觀鎖的具體寫法云開(kāi)發(fā)的數(shù)據(jù)庫(kù)更新接口支持在條件里帶上狀態(tài)判斷返回結(jié)果里的stats.updated會(huì)告訴你到底改沒(méi)改成功。這就是最輕量的樂(lè)觀鎖不需要額外加鎖字段。// 借書(shū)只有狀態(tài)仍是“在架”的副本才允許被借走 const copyResult await db.collection(copies).where({ _id: copyId, status: available }).update({ data: { status: borrowed, updatedAt: new Date() } }) if (copyResult.stats.updated 0) { // 更新了 0 條說(shuō)明條件不滿足要么副本不存在要么已經(jīng)被別人借走 return { code: 409, msg: 這本書(shū)剛被借走了換一本吧 } }這段代碼的價(jià)值在于把“判斷”和“修改”合并成了一個(gè)原子操作。傳統(tǒng)寫法是先get查狀態(tài)是不是在架再update這中間有個(gè)時(shí)間窗兩個(gè)人同時(shí)查到在架然后都執(zhí)行更新結(jié)果就是超借。而條件更新把判斷交給數(shù)據(jù)庫(kù)在執(zhí)行時(shí)完成中間沒(méi)有窗口。有個(gè)細(xì)節(jié)要提醒條件里的字段必須和數(shù)據(jù)庫(kù)里的值完全一致status如果存的是中文“在架”而條件里寫available更新永遠(yuǎn)返回 0 條你會(huì)以為是并發(fā)問(wèn)題其實(shí)是拼寫問(wèn)題。我第一次就栽在這上面排查了半小時(shí)才發(fā)現(xiàn)是枚舉值不統(tǒng)一。建議所有狀態(tài)值統(tǒng)一定義成常量前端后端共用一份。3.3 事務(wù)的適用邊界與實(shí)測(cè)限制條件更新能解決單文檔的原子性問(wèn)題但如果一次操作要改兩個(gè)集合比如“改副本狀態(tài)”加“改用戶借閱計(jì)數(shù)”就涉及跨文檔了。云開(kāi)發(fā)提供了事務(wù)能力在云函數(shù)里可以開(kāi)啟。事務(wù)的寫法大致是這樣const transaction await db.startTransaction() try { const copy await transaction.collection(copies).doc(copyId).get() if (copy.data.status ! available) { await transaction.rollback() return { code: 409, msg: 副本狀態(tài)不可借 } } await transaction.collection(copies).doc(copyId).update({ data: { status: borrowed } }) await transaction.collection(loans).add({ data: { copyId, userId, borrowAt: new Date(), status: borrowing } }) await transaction.commit() } catch (err) { await transaction.rollback() throw err }看起來(lái)很美但實(shí)際用起來(lái)要注意幾點(diǎn)。事務(wù)的存活時(shí)間有限里面操作步驟多了會(huì)超時(shí)事務(wù)內(nèi)能做的操作類型也有限制一些聚合類查詢?cè)诶锩嬗貌涣俗钜氖钦{(diào)試體驗(yàn)事務(wù)報(bào)錯(cuò)時(shí)的錯(cuò)誤信息往往很籠統(tǒng)你得靠日志一點(diǎn)點(diǎn)縮小范圍。我的實(shí)際策略是能用條件更新就不用事務(wù)。借還書(shū)這個(gè)場(chǎng)景把校驗(yàn)邏輯前置先確認(rèn)用戶資質(zhì)、確認(rèn)書(shū)目存在真正需要原子的那一步用條件更新解決最后再補(bǔ)記錄配合一次失敗重試基本能覆蓋 99% 的情況。事務(wù)留給那種“必須嚴(yán)格同時(shí)成功或同時(shí)失敗”的場(chǎng)景比如批量調(diào)撥、庫(kù)存盤點(diǎn)這類低頻高一致性要求的操作。3.4 逾期的處理定時(shí)觸發(fā)器踩坑逾期提醒看起來(lái)簡(jiǎn)單——每天掃一遍未歸還記錄看應(yīng)還日期是不是過(guò)了。做起來(lái)有幾個(gè)坑。第一個(gè)坑是時(shí)區(qū)。數(shù)據(jù)庫(kù)存的是時(shí)間對(duì)象觸發(fā)器配置的也是時(shí)間表達(dá)式兩邊時(shí)區(qū)不一致就會(huì)出現(xiàn)“凌晨該跑的任務(wù)中午才跑”或者“跑兩次”。我的做法是統(tǒng)一用時(shí)間對(duì)象存儲(chǔ)觸發(fā)器按平臺(tái)默認(rèn)時(shí)區(qū)配置業(yè)務(wù)邏輯里做比較時(shí)也用時(shí)間對(duì)象直接比大小絕不在字符串上比。第二個(gè)坑是單次掃描量。觸發(fā)器每次執(zhí)行都有超時(shí)限制一次拉全表再遍歷幾千條記錄直接超時(shí)。必須分批處理用分頁(yè)游標(biāo)每批處理一百條左右處理完記錄位置下次從斷點(diǎn)繼續(xù)。第三個(gè)坑是重復(fù)推送。任務(wù)重試機(jī)制可能導(dǎo)致同一條逾期記錄被提醒兩次用戶會(huì)覺(jué)得很吵。解決辦法是在loans上記一個(gè)lastNotifiedAt字段推送前判斷距上次推送是否超過(guò) 24 小時(shí)超了才推。// 分批掃描逾期記錄避免單次執(zhí)行超時(shí) let lastId null const pageSize 100 while (true) { const where { status: borrowing, dueAt: db.command.lt(new Date()) } if (lastId) where._id db.command.gt(lastId) const res await db.collection(loans).where(where).orderBy(_id, asc).limit(pageSize).get() if (res.data.length 0) break for (const loan of res.data) { // 逐條判斷是否需要推送提醒 } lastId res.data[res.data.length - 1]._id }4. 數(shù)據(jù)庫(kù)權(quán)限規(guī)則默認(rèn)配置基本等于把數(shù)據(jù)敞開(kāi)這一塊是我見(jiàn)過(guò)翻車最多的地方也是最容易被忽視的地方。很多人建完集合就不管權(quán)限了默認(rèn)配置下要么誰(shuí)都能讀要么連自己都讀不到兩個(gè)極端都很麻煩。4.1 四種權(quán)限模型的真實(shí)含義平臺(tái)提供四檔權(quán)限名字看起來(lái)都挺直觀實(shí)際含義差別很大。我按自己的理解重述一遍重點(diǎn)是“誰(shuí)”和“什么操作”。權(quán)限檔位誰(shuí)能讀誰(shuí)能寫適用集合僅創(chuàng)建者可讀寫只有創(chuàng)建這條記錄的人只有創(chuàng)建者本人個(gè)人筆記、私有配置所有用戶可讀僅創(chuàng)建者可寫所有登錄用戶只有創(chuàng)建者書(shū)目、副本這類公開(kāi)數(shù)據(jù)僅管理端可讀寫只有云函數(shù)等服務(wù)端身份只有服務(wù)端借閱流水、操作日志所有用戶可讀可寫所有人所有人幾乎不推薦用于生產(chǎn)看表格就明白了books和copies屬于“所有用戶可讀僅創(chuàng)建者可寫”但這里有個(gè)陷阱——如果這些數(shù)據(jù)是通過(guò)云函數(shù)寫入的創(chuàng)建者反而是云函數(shù)調(diào)用者本身也就是最終用戶。用戶 A 創(chuàng)建的書(shū)目用戶 B 就改不了這在多管理員場(chǎng)景下會(huì)出問(wèn)題。所以我的實(shí)際做法是所有寫操作全部走云函數(shù)集合權(quán)限統(tǒng)一設(shè)成“僅管理端可讀寫”。云函數(shù)里用服務(wù)端身份操作數(shù)據(jù)庫(kù)不受權(quán)限規(guī)則限制。前端只負(fù)責(zé)調(diào)函數(shù)不直連集合。這樣權(quán)限模型就只有一套心智負(fù)擔(dān)最小。代價(jià)是什么所有查詢也要走云函數(shù)前端一次列表請(qǐng)求變成一次函數(shù)調(diào)用。這時(shí)候就要注意配額和響應(yīng)速度能用一次函數(shù)返回的絕不拆成三次。4.2 openid 的傳遞鏈路和常見(jiàn)偽造誤區(qū)用戶身份標(biāo)識(shí)是權(quán)限體系的地基。在小程序端調(diào)用云函數(shù)時(shí)云函數(shù)可以從上下文里拿到調(diào)用者的身份這個(gè)是平臺(tái)保證的前端偽造不了。// 云函數(shù)內(nèi)獲取調(diào)用者身份 const wxContext cloud.getWXContext() const openid wxContext.OPENID關(guān)鍵在于永遠(yuǎn)不要在云函數(shù)入?yún)⒗锝邮涨岸藗鱽?lái)的用戶標(biāo)識(shí)。我見(jiàn)過(guò)這樣的寫法前端傳一個(gè)userId過(guò)來(lái)云函數(shù)直接拿去查記錄。這等于把身份驗(yàn)證交給了客戶端改個(gè)參數(shù)就能看別人的借閱記錄。正確的鏈路是前端只傳業(yè)務(wù)參數(shù)副本編號(hào)、操作類型云函數(shù)自己從上下文取身份用這個(gè)身份去查數(shù)據(jù)。如果確實(shí)需要處理“管理員幫別人操作”的場(chǎng)景就額外查一次角色表確認(rèn)當(dāng)前身份是管理員再做授權(quán)判斷。判斷管理員身份也要注意不要在云函數(shù)入?yún)⒗飩饕粋€(gè)isAdmin: true就信了必須查數(shù)據(jù)庫(kù)里的角色表。角色表本身也要設(shè)成只有服務(wù)端可讀否則前端能直接改自己的角色。4.3 一個(gè)越權(quán)讀用戶信息的真實(shí)案例說(shuō)個(gè)我實(shí)際遇到的情況。有個(gè)版本的“我的借閱”頁(yè)面為了讓列表顯示快一點(diǎn)前端直接查loans集合權(quán)限設(shè)成“所有用戶可讀”。功能上跑得很順直到有一次測(cè)試隨手用另一個(gè)賬號(hào)登錄頁(yè)面照樣能把別人的借閱記錄翻出來(lái)因?yàn)椴樵儣l件里只寫了按時(shí)間排序沒(méi)寫按身份過(guò)濾。問(wèn)題出在哪權(quán)限規(guī)則管的是“能不能讀這個(gè)集合”不管“讀的時(shí)候該不該過(guò)濾”。所有用戶可讀意味著任何人可以對(duì)整個(gè)集合做查詢雖然平臺(tái)會(huì)限制單次返回條數(shù)但翻幾頁(yè)就能把全量數(shù)據(jù)爬下來(lái)。修復(fù)方案很直接把loans權(quán)限改成僅管理端可讀寫前端不再直連改成調(diào)用一個(gè)getMyLoans云函數(shù)函數(shù)內(nèi)部強(qiáng)制用上下文里的身份做過(guò)濾條件。這個(gè)改動(dòng)讓列表接口多了一層調(diào)用但安全性提升是決定性的。我在這個(gè)坑之后定了個(gè)規(guī)矩凡是帶用戶身份字段的集合權(quán)限一律不開(kāi)放給客戶端直讀。書(shū)目、分類這類公共數(shù)據(jù)可以放開(kāi)讀涉及“誰(shuí)借了什么”的全部收到云函數(shù)里。這條規(guī)矩后來(lái)在好幾個(gè)項(xiàng)目里都救了場(chǎng)。5. 前端體驗(yàn)從“能跑”到“能用”之間隔著很多細(xì)節(jié)功能跑通只是及格線真正讓用戶愿意用的是那些看起來(lái)不起眼的小處理。圖書(shū)借閱小程序的用戶群體里學(xué)生和普通讀者占多數(shù)容忍度不高卡一下、錯(cuò)一次可能就不用了。5.1 掃碼借書(shū)的識(shí)別失敗率掃碼借書(shū)是最自然的使用方式但實(shí)際識(shí)別率受很多因素影響條碼磨損、貼紙反光、光線不足、鏡頭對(duì)焦慢。如果你的流程是“掃到碼直接借出”那識(shí)別錯(cuò)了就是借錯(cuò)書(shū)非常麻煩。我現(xiàn)在的流程改成兩步掃碼后先拿到條碼內(nèi)容立刻查詢副本信息并展示確認(rèn)卡片書(shū)名、作者、封面、存放位置用戶點(diǎn)確認(rèn)才真正發(fā)起借閱。多一次點(diǎn)擊少一堆糾紛。還有幾個(gè)實(shí)操細(xì)節(jié)值得說(shuō)。一是掃碼時(shí)手動(dòng)設(shè)置掃描區(qū)域和類型限定只識(shí)別條形碼避免誤識(shí)別二維碼內(nèi)容。二是加一個(gè)手輸條碼的兜底入口條碼破損時(shí)用戶還能輸入數(shù)字。三是識(shí)別失敗時(shí)不要只彈“識(shí)別失敗”要提示可能的原因和替代方案比如“條碼模糊可以手動(dòng)輸入書(shū)背面的數(shù)字編號(hào)”。5.2 分頁(yè)與20條上限這個(gè)問(wèn)題幾乎每個(gè)新手都會(huì)撞。小程序端直接查集合單次最多返回有限條數(shù)翻頁(yè)必須手動(dòng)處理。常見(jiàn)錯(cuò)誤是一次查完然后前端切片看起來(lái)能用其實(shí)第二頁(yè)開(kāi)始就是空的因?yàn)閴焊鶝](méi)請(qǐng)求到。正確的分頁(yè)邏輯有三個(gè)參數(shù)頁(yè)碼、每頁(yè)條數(shù)、是否還有更多。判斷“是否還有更多”最簡(jiǎn)單的方式是請(qǐng)求時(shí)多要一條返回?cái)?shù)量等于預(yù)期加一就說(shuō)明還有下一頁(yè)。// 分頁(yè)查詢多取一條用于判斷是否還有更多 const pageSize 10 const res await db.collection(books) .orderBy(createdAt, desc) .skip(pageIndex * pageSize) .limit(pageSize 1) .get() const hasMore res.data.length pageSize const list hasMore ? res.data.slice(0, pageSize) : res.dataskip在數(shù)據(jù)量大的時(shí)候會(huì)變慢因?yàn)閿?shù)據(jù)庫(kù)要跳過(guò)前面所有記錄。數(shù)據(jù)超過(guò)幾千條時(shí)改成用上一頁(yè)最后一條記錄的排序字段值做游標(biāo)性能會(huì)好很多。小規(guī)模數(shù)據(jù)用skip完全夠別為了優(yōu)化而優(yōu)化。5.3 封面圖與云存儲(chǔ)封面圖的處理有一個(gè)很實(shí)際的問(wèn)題圖片大了加載慢圖片多了存儲(chǔ)費(fèi)用上去了。我的處理是上傳時(shí)壓縮展示時(shí)用縮略。上傳環(huán)節(jié)用畫布能力把圖片壓到合適尺寸再上傳一般寬邊控制在 600 像素以內(nèi)封面圖用這個(gè)尺寸足夠了。存儲(chǔ)路徑按書(shū)目主鍵分目錄避免所有文件擠在一個(gè)層級(jí)里難管理。數(shù)據(jù)庫(kù)里只存文件標(biāo)識(shí)展示時(shí)通過(guò)臨時(shí)鏈接或者組件直接引用不要把外鏈地址寫死鏈接會(huì)過(guò)期。還有個(gè)小技巧默認(rèn)封面。很多老書(shū)掃不出條碼也找不到封面如果列表里全是空白圖觀感很差。準(zhǔn)備一張通用占位圖沒(méi)有封面時(shí)用它同時(shí)在前端用固定寬高比容器包住圖片避免圖片加載前后頁(yè)面跳動(dòng)。5.4 到期提醒的訂閱消息到期提醒是提升歸還率最有效的手段。平臺(tái)的消息能力需要用戶主動(dòng)授權(quán)所以時(shí)機(jī)很重要——最好在借書(shū)成功的那一刻就請(qǐng)求授權(quán)因?yàn)檫@時(shí)候用戶正在關(guān)注這本書(shū)同意率高等他退出去了再?gòu)椈径紩?huì)被拒。推送內(nèi)容要具體不要只寫“您有書(shū)即將到期”。寫清楚書(shū)名、應(yīng)還日期、續(xù)借入口用戶一眼就知道要干什么。推送時(shí)間也有講究提前三天的提醒比提前一天的有效得多因?yàn)橛脩粜枰獣r(shí)間安排。技術(shù)上有兩個(gè)注意點(diǎn)。一是模板字段要提前在后臺(tái)配置好字段順序和入?yún)㈨樞虮仨殗?yán)格對(duì)應(yīng)錯(cuò)一位就報(bào)參數(shù)錯(cuò)誤。二是推送失敗要有降級(jí)消息推不出去至少要在小程序內(nèi)留個(gè)紅點(diǎn)或者角標(biāo)讓用戶打開(kāi)時(shí)能看見(jiàn)。6. 上線之后才會(huì)暴露的問(wèn)題與排查路徑開(kāi)發(fā)環(huán)境和真實(shí)環(huán)境完全是兩回事。下面這幾個(gè)問(wèn)題我在本地測(cè)試時(shí)一次都沒(méi)復(fù)現(xiàn)過(guò)全都是上線后用戶反饋才發(fā)現(xiàn)的。6.1 云函數(shù)超時(shí)先分清是冷啟動(dòng)還是邏輯慢用戶反饋“點(diǎn)借閱轉(zhuǎn)圈半天然后失敗”第一反應(yīng)是代碼慢。但實(shí)際情況往往分兩種一種是函數(shù)很久沒(méi)被調(diào)用首次調(diào)用要初始化運(yùn)行環(huán)境這個(gè)耗時(shí)是固定的跟你的代碼沒(méi)關(guān)系另一種是你真的寫了慢查詢。區(qū)分方法很簡(jiǎn)單看日志里的執(zhí)行耗時(shí)。如果失敗請(qǐng)求集中在每天第一次訪問(wèn)而且耗時(shí)明顯高于平均值那就是冷啟動(dòng)。應(yīng)對(duì)辦法是減少函數(shù)體積把不常用的依賴做成按需引入或者給關(guān)鍵函數(shù)配置一個(gè)低頻的預(yù)熱觸發(fā)。如果是邏輯慢多半是查詢沒(méi)有走索引或者函數(shù)里串行調(diào)用了太多次數(shù)據(jù)庫(kù)。我的排查順序是先在日志里找到最慢的那次調(diào)用看它執(zhí)行了幾次查詢?cè)倏疵看尾樵兊暮臅r(shí)。串行改并行通常能帶來(lái)成倍的提升。// 串行寫法三次查詢依次執(zhí)行總耗時(shí)是三段之和 const a await getBook(bookId) const b await getCopies(bookId) const c await getMyLoans(userId) // 并行寫法三段同時(shí)發(fā)出總耗時(shí)取決于最慢的那段 const [a, b, c] await Promise.all([ getBook(bookId), getCopies(bookId), getMyLoans(userId) ])注意并行不是萬(wàn)能的如果后面的查詢依賴前面的結(jié)果就只能串行。別為了并行而并行把有依賴關(guān)系的請(qǐng)求硬拆開(kāi)只會(huì)寫出更亂的代碼。6.2 配額與調(diào)用次數(shù)云開(kāi)發(fā)的資源是按量計(jì)費(fèi)的個(gè)人開(kāi)發(fā)時(shí)的調(diào)用量看著不多上線后用戶一多賬單漲得比你想象的快。我見(jiàn)過(guò)一次事故某個(gè)頁(yè)面的下拉刷新沒(méi)做節(jié)流用戶手一滑連續(xù)觸發(fā)七八次一天下來(lái)的調(diào)用量翻了十倍。幾個(gè)降低消耗的習(xí)慣列表頁(yè)做本地緩存同樣的查詢短時(shí)間內(nèi)不重復(fù)請(qǐng)求下拉刷新加節(jié)流最短間隔設(shè)成一秒圖片用縮略圖不要每次加載原圖定時(shí)任務(wù)的掃描頻率按實(shí)際需要設(shè)別為了“實(shí)時(shí)”每分鐘跑一次一天一次完全夠用。另外要定期看資源用量面板關(guān)注趨勢(shì)比關(guān)注絕對(duì)值更重要。某天調(diào)用量突然翻倍一定是某個(gè)功能被異常觸發(fā)早發(fā)現(xiàn)早處理。6.3 開(kāi)發(fā)者工具正常、真機(jī)異常這類問(wèn)題最耗時(shí)間因?yàn)槟阍诠ぞ呃镌趺袋c(diǎn)都是對(duì)的。常見(jiàn)原因有幾種。一是網(wǎng)絡(luò)環(huán)境差異。工具走的是本機(jī)網(wǎng)絡(luò)真機(jī)走的是移動(dòng)網(wǎng)絡(luò)弱網(wǎng)下請(qǐng)求超時(shí)時(shí)間不夠表現(xiàn)就是偶爾失敗。解決辦法是把超時(shí)時(shí)間調(diào)大關(guān)鍵操作加重試并且給用戶明確的加載狀態(tài)和失敗提示別讓按鈕一直轉(zhuǎn)圈。二是基礎(chǔ)庫(kù)版本差異。用戶的客戶端版本參差不齊某些 API 在低版本上不存在。調(diào)用前先做能力判斷不支持就降級(jí)或者給提示別直接崩。三是緩存殘留。工具里改了代碼立刻生效真機(jī)上可能有舊緩存。測(cè)試新功能時(shí)記得清緩存或者用體驗(yàn)版重新進(jìn)入。排查這類問(wèn)題的順序我一般是這樣先看是不是所有機(jī)型都有還是特定機(jī)型再看是不是首次進(jìn)入有問(wèn)題還是每次都有然后對(duì)比網(wǎng)絡(luò)請(qǐng)求日志看請(qǐng)求到底發(fā)出去了沒(méi)有、返回了什么。三步下來(lái)基本能定位到是環(huán)境問(wèn)題還是代碼問(wèn)題。7. 一個(gè)可以直接抄的目錄結(jié)構(gòu)與上線前自檢清單項(xiàng)目結(jié)構(gòu)混亂是后期維護(hù)痛苦的主要來(lái)源。我現(xiàn)在的習(xí)慣是按“頁(yè)面 - 組件 - 工具 - 云函數(shù)”四層分開(kāi)云函數(shù)按業(yè)務(wù)域命名一個(gè)函數(shù)一個(gè)職責(zé)別把所有邏輯塞到一個(gè)大函數(shù)里。推薦的結(jié)構(gòu)大致是這樣頁(yè)面按功能分包書(shū)目、借閱、我的三大塊公共組件抽出來(lái)比如書(shū)籍卡片、狀態(tài)標(biāo)簽、空狀態(tài)占位工具層放請(qǐng)求封裝、格式化函數(shù)、常量定義云函數(shù)目錄下每個(gè)函數(shù)獨(dú)立文件夾各自帶依賴配置。上線前我會(huì)過(guò)一遍這份清單每一項(xiàng)都是真實(shí)踩過(guò)的所有集合權(quán)限是否已從默認(rèn)改成明確配置含用戶身份字段的集合是否已禁止客戶端直讀云函數(shù)里是否所有身份都取自運(yùn)行上下文有沒(méi)有殘留從前端接收用戶標(biāo)識(shí)的代碼關(guān)鍵操作是否都用了條件更新有沒(méi)有“先查再改”的裸寫法狀態(tài)枚舉值前后端是否統(tǒng)一有沒(méi)有中英文混用分頁(yè)邏輯是否處理了“還有更多”列表到底部能否正常加載定時(shí)任務(wù)是否做了分批和去重同一用戶會(huì)不會(huì)收到重復(fù)提醒圖片是否壓縮是否有默認(rèn)占位圖加載時(shí)頁(yè)面是否跳動(dòng)慢查詢是否都建了索引索引是否已生效是否有至少一條鏈路能在出問(wèn)題時(shí)快速定位日志里能否查到關(guān)鍵參數(shù)我個(gè)人在實(shí)際操作中的體會(huì)是這套系統(tǒng)真正的門檻不在功能實(shí)現(xiàn)而在“把狀態(tài)管住”。書(shū)目、副本、借閱記錄這三張表的關(guān)系理順了權(quán)限收口到云函數(shù)了并發(fā)用條件更新兜住了剩下的都是頁(yè)面上的打磨活。反過(guò)來(lái)如果一開(kāi)始圖省事把狀態(tài)塞成一個(gè)數(shù)量字段或者為了列表快一點(diǎn)把集合權(quán)限放開(kāi)后面補(bǔ)窟窿的時(shí)間會(huì)遠(yuǎn)遠(yuǎn)超過(guò)當(dāng)初省下的那點(diǎn)功夫。上面那些清單項(xiàng)你哪怕只落實(shí)前三條也能避開(kāi)大部分讓人半夜爬起來(lái)查日志的事故。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
成人精品欧洲亚洲| 中日无幕一二三四区| 综合97| 亚洲色人妻综合| 国产精品黑人一区二区三区| 日韩一级二级三级免费看完整版国语版 | 色婷婷综合久久久久中文一区二区| 无码人妻一区二区三区色欲aⅴ | 97AV爱| 2020久久免费视频| 91网站18+| 色婷网| 草草草视频| 精品人妻一区二区免费蜜桃| 中文字幕高清20页视频| 91高清无码下载| 亚洲久久久久| 99这里都是精品| 操死我了嗯嗯嗯| 九九热视频在线观看| 亚洲国产精品V?在线播放| 欧美日韩一二三| 蜜臀久久久| 欧美一级三级| 丁香成人五月天| 国产精品成人久久一区二区三区| 国内外内射高清视频| 伊人伊人LD| 91久久精品国产| 多乙久久久久久| 精品人妻一区二区三区免费视频| 97视频播放| 91性感网站| 久久99国产综合精品女同| xxx0国产在线播放| 亚洲欧洲中文日韩女优乱码| 性色亚洲| 久久精品国产亚洲AV清纯| 试看福利| 天天综合~91入口| 亚洲色欲天天人妻无码系列专区| 久久久久国产一区二| 国产精品日韩在线一区| 秋霞 色色| 在线日韩日本亚洲国产| 国产精品自拍视频| 国产v亚洲v日韩v欧美v片另类| 欧美淫乱视频| 国产热av| 天天综合网~91| 天天热精品| 99热97| 欧美综合站| 日本在线不卡123| 丁香五月婷婷啪啪| 欧美后进式| 五月天激情四射| 日本肉体xxxx裸交| 熟女人妻av在线资源,黄色的资源 粉嫩国产精品久久粉嫩 | 91GD.COM| 亚洲国男人的天堂| 欧美天天拍| 人人人人人人少妇| 日日天天久久啊啊aaa| 久久久人体| 少妇国产不卡| 夜夜夜夜爽| 亚洲视频小说| 美女毛片999| 色 亚洲 91| 91视频伊人| 思思久热在线精品66| 亚洲国产精品成人久久蜜臀| 国产精品无码久久久久2025| 亚洲中文字幕三级在线| 国产精品白虎| 亚欧美综合网。| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 丝袜综合| 97天天摸天天爽| 秋霞Av理论一级在线| 欧美一级美片在线观看免费| 久久伊人五月天| 欧美中字二区| 亚洲欧美人妻| 久草免费在线一区二区| 日本一二区免费| 久久成年精品| 九九九九亚洲| 密乳无码| 久久精品免费| 美女十八禁| 欧美性生活男人的天堂| 中文字幕一区二区日韩网| 国产三级多多影院2022国产AA一级毛片无码 | 中文字幕在线日亚洲9| 曰韩精品九九无码| 国产乱码久久久久久| 天天日天天干少妇日| 51久久夜色精品国产麻豆| 香蕉久久AⅤ...| 久热9| 五月天色电影| 精品人妻一区二区三区四区不卡在| 日韩三级在线观看网站| 国产人伦a片信息免费片| 乱老女人一区二区视频| 九九热在线视频| 330dv亚洲成年视频网| 精品国产乱码久久久影院| 无码久久国产| 男人的天堂亚洲| 殴洲老熟女| 色爱亚洲| 二对二中文字幕。| 亚洲色婷婷久久久综合日本 | 午夜久久一区二区无码中出| 欧美操逼录像国产黄色国产| 欧美人人曰人人操人人射射| 日韩一级二级在线| 香蕉热人人精品| 人妻天天操天天爽视频免费| 人人操人人肉久久精品| 婷婷五月天AV| 欧美日韩不卡传媒| 精品久久久亚洲AV成人网站| 天天综合网在线| 亚洲日韩国产精品| 色哟哟-国产专区| 日本女人久久久| 第一高清av中文字幕| 99re热| 丁香五六月啪啪| 91在线限制级| 狠狠色噜噜狠狠狠狠2018| 欧美 亚洲 制服 精品| 国产精品自拍视频| 天无日色综合| 亚洲爽图| 欧美熟女激情| 17c在线成人免费A片观看| 蜜臀99999| 亚洲麻豆av一区二区| 天无日色综合| 丰满人妻-区二区三区免费看| 牛牛aV| 日本2020一区二区| 成人无码专区精品视频| 日韩AV无码网站| 国产传媒美日韩av| 一级做a爰片性色毛片久久| 偷拍 精品另类 凸凹了四区| 国产久久成人| 97综合久久| 桃花色涩综合影院| 免费一级a毛片久久久久久鸭绿欲| 天综合网欧美| 中文字幕日韩精品一区二区三区| 激情综合网五月婷婷五月天| 日产操逼| 亚州性9| 国产日本熟女顶级一区二区三区视频 | 亚洲色色色| 色牛aV| 大香蕉在线视频重口味毛片在线| 国产免费操逼| 99热| 天天干人妻| 久色网| 香蕉黄色一级视频| 综合色好色| 97在线观视频免费观看| 欧美黄片欧美黄片xxx| 南澳成人一级片在线播放| 91大学精品激情戏| 日韩欧美tv一区二区在线观看| 婷婷九月国产| 日本一区二区电影网站| 无码人妻丰满热妇又大又粗| 亚洲精品久久久久毛片A片拉屎 | 青青草伊人久久| 91香蕉国产尤物视频| 狠狠夜色午夜久久综合在线| 色y情视频免费看| 福利五区| 国产一区二区久久| 国产黄a三级三级三级av在线看| 又大又长又粗又爽又黄| 欧美97| 久久久久921| 亚洲男人的天堂V| 成人性爱av.com| 亚洲综合91| 高清无码学生妹高潮| 精品国产72| 超碰在线看| 色综合av男人天堂| 日本伦乱九九九综合| 亚洲日韩黑丝| 欧美少妇第一页| 男人的天堂不卡一区二区| 日韩精品在线放| 久久日韩肥臀| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 色色99| 精品女人999| 99久久精品国产高潮| 操屄日韩| 伊人五月天婷婷| 嗯嗯啊啊操我| 色九久| 青娱乐91| 九九九久久久| 久久9精品| 青青草导航在线视频| 91人妻视频在线| 五月天综合网| 禁止观看美女黄| 久久女人一区二区三区| 亚洲日韩av一区二区三区百合| 狠狠狠狠狠| 嗯啊抽插大香蕉网页| 91 欧美| 强乱老妇中文字幕| 美女久久久| 五十路熟女人妻一区二区三区四区五| 国产精品禁久久久精品| 99热国产精品| 91美| 偷拍综合网| 欧美激情综合| 你懂的在线观看区国产| 亚洲青青青视频在线| 国产亚洲禁久一区二区| 超碰三级秋霞| 操久久久久久| 日韩另类色图| 综合网欧| 久久9999| 97超碰欧美| 精品国产一区二区三区在线播出| 自拍偷拍 高清无码| 国产69精品久久久久99尤物| 国产精品福利资源在线尤物| 久久久偷拍| 国产曰批免费观看久久久| 国产有码一区| 国产精品一区二区 尿失禁| 91日韩国产欧美亚洲另类精盘州至城都| 99热官网| 人妻无一区二区三区| 日韩精品人妻中文字有码在线| 色老汉色| 日本熟妇一区二区三区| 国产一区二区精品久久99| 日本羞羞的视频在线播放| 黄色片A级一区二区三区| 国产区91柔拿会所技师| www.99中文字幕| 欧美天天综合网| 国产成人亚洲精品无| 亚洲精品久久久久毛片A片拉屎| 国产无码精品久久久久久| 少妇熟女1区2区3区| 人妻中文字幕精品无码| 亚洲欧美日韩综合在线尤物 | 97精品在线| 人妻熟女一区二区在线视频| 丰满岳乱妇一区二区三区| 爱射综合| 婷婷探花久久精品一区| 日韩熟女精一区二区三区不卡| 无码久久亚洲高清,| 人人摸人人添人人操 | 第四色色综合91| 久久精品99| 欧美性爱综合,免费| 国产精品久久久无码AV网站| 久久久久久久久久久久久久久乱码| 欧美日韩人妻婷婷一区| 操逼网站网站| 亚洲欧美另类少妇精品| 欧美精品系列| 琪琪精品免费一区二区三区| 2011国产精品| 麻豆一区二区AV天美| 美女熟妇色| 超碰免费人人| 欧美综合自拍亚洲综合图| 91精品丝袜久久久久久| 日韩欧美中文| 天天日天天射天天干| 91色欧美| 一区二区三区视频在线观看免费| 欧美一区二区三区黄色影视| 国产精品色片一区二区| 亚洲女人毛茸茸91| 色播五月丁香| 婷婷人妻激情| 婷婷九月| 日本女人久久久| 亚洲精品天堂久久A∨51成人漫| 欧美拳交在线播放| 亚洲丝袜少妇在线| 婷婷久久五月天| 亚洲色综网| 欧美一级久久久久久久大片动画| 日夜干射色啊| 人人看欧美性爱| 人人澡综合涩| 在线看的av| 日产中文字幕2020| 国产成人自拍视频视频| 99啪| 91网站18| 91在线美女| 久久久四区| 亚洲成人av色网| 色欧美综合| 中文字幕二区日韩天堂| 三级日本一区二区三区| 亚洲永久AV无码精品秋霞| 国产精品久久久啊| 无卡一区=区| 日韩免费性爱视频在线观看| 学生妹天天看| 99久在线精品99re8热| 高清无码学生妹高潮| 综合久久婷婷| 91美女精品| 亚洲精品a人片在线观看视| 国产情色第一第二页在线观看| 久久直播国产| 亚洲久9| 欧苏综合色综合| 一区二区乱码福利| 久久偷偷色综合蜜桃| 婷婷AV一区二区三区| 伊人网高清| 久久九九一区二区三区成人| 精品一区二区成人| 精品人妻一区二区三区视频在线| 人人手机欧洲亚洲国产人妻| 囯戸精品高潮呻吟旡码| 中文字幕无码不卡啪啪| 99精品在线观看| 永久电影三级在线观看| 亚洲高清男人天堂| 久久精品欧美一区蜜桃| 国产无马视频| 超碰欧美| 蜜桃视频啊啊啊啊| 97 超碰 人人做 人人爱| 秋霞无码av鲁丝片一区| 人妻精品视频一区二区三区 | 精品日日人妻| 精品国产久久乱码| 亚洲熟妇丝袜在线观看| 性开放中文AV高清无码免费看| 欧美日日人人天天| 日韩成人高清一区二区| 97国产精品久久久久 | 色综合色| 免费看久久久性性| 久久久9视频| 免费国产电影一区二区| 久久国99999| 都市久久精品激情亚洲| 中文字幕丝袜| 五月天欧美色图| 五月婷色| 国产精品一区二区久久精品| 97超级久久| 天天综合网91入口| 中文字幕在线观看丝袜| 欧美成人一区二区三区在线播放| 久草这里只有精品 | 视频二区美腿丝袜制服人妻欧美| 国产99精品一区二区三区免费| 不卡二三区人妻少妇| 亚州高清色综合| 亚洲熟妇极品| 2019天天干天天操| 操婢日韩| 亚洲天天综合| 亚州性色| 好爽视频在线观看| 熟女一区二区三区四区| 熟妇高潮精品一区二区三区下载| 大香蕉99热| 亚码激情| 囯产精品一区二区三区线|亚洲人成无码网WWW动漫|国产精品免费一级... | 丁香五月性爱| 一区三区啪啪| 欧美天天综合网| 九九九久久久久| 日韩精品1区2区中文字幕| 爱妃国产亚洲视频中文字幕| 欧美中文综合| 久久人| 十八禁黄色| 久9爱精品| 亚洲欧美天| 嗯啊啊啊轻点视频| 欧美在线啊啊啊 | 久久综合九九| 国产乱码久久| 蜜臀亚洲中文| 超碰中文字幕人妻草一区| 欧美色图片91| 超碰在线97国产| 久久偷拍人| 日本东京热大香蕉a片| 一区 欧美 日韩 麻豆| 女优免费一区二区永久| 97蜜桃综合| 四虎 精品 WWW| 国产久久久9999| 麻豆久久视频在线地址| 精品人妻一区二区三区-国产| 色色国产| 一区二区三区 丝袜 高跟 美腿| 天天爱天天韩国日本牛牛牛牛| 日韩AV一区二区三区四四| 久久婷婷五月天| 美女人妻色网站| 四虎视频在线观看| 国产日韩中文字幕欧美| 99热| 岛国大片在线观看网站入口| 激情五月丁香五月| 91老司机在线视频免费观看 | 蜜臀一区二区三区在线| 男女做爰猛烈动高潮A片免费应用| 亚洲天堂男人天堂网| 欧洲黄色网| 逼逼逼逼操操操操操操操操操午夜剧场 | 国产蜜臀精品一区免费尤物| 亚洲永久AV无码精品秋霞| 天美精品一区二区三区四区在线观看| 香蕉一区二区三区在线视频| 久男人久久| 97精品免费| 欧美精品日韩久久久九| 亚洲天堂人妻熟妇视频| 美女露胸露屁股| 玖玖综合色| 日本高清一本二本免费不卡| 亚洲美女AV无码| 中国少妇XXXX做受| 欧美日韩性感| 日产精品久久久一区二区| 91热热色| 国产家庭乱伦网址| 亚洲情色1区| 麻豆区久久久久亚| 欧美综合网在线| A级毛片在线看免费| 天天躁日日躁AAA片李宗瑞| 精品夜夜澡人妻无码| 大香蕉日亚洲日本亚大| 91大神精品长腿在线观看网站| 欧美人妻久久精品二区三区| 91色综合激情| 这里都是精品| 18禁超污无遮挡无码免费网| 欧美A√综合网 | 久久久久久AⅤ无码免费肉站 | 国产日韩中文字幕欧美| 一本久道在线综合视频| 日韩操人| 综合亚洲情色| 91在线丝袜| 影音先锋视频在线| 欧美少妇第一页| 玖玖综合网| aaa一级黄片| 熟妇女人妻呻吟久久AV| 亚洲熟妇A V黑人| 日韩久久激情精品| 久操免费电影| 大香蕉免费乱伦视频| 蜜臀99999| 肏逼视频日本| 色女99一级片在线观看| 久久性爱视频免费看| 六月婷婷综合| 夜夜嗨一区二区三区直播内容| 日韩人妻一区二区精品| 亚洲天堂电影网| 久干9操| 日韩欧美偷拍美女视频| 少妇人妻好深太紧了vr91| 色九九九| 日日噜噜夜夜狠狠视频无| 丁香五月天久久精品视频一区二区三区| 激情小说亚洲| av凤凰久久久| 精品久久大胆人体| 浪人综合网| 丰满人妻一区二区中文| 欧亚无码视频| 91在线丝袜视频| 欧美性爱第一区| 91 国产丝袜在线播放-百度| aⅴ日韩成人电影av在线免费看av大全| 国产第二页| 人人干人人操人人..com| 无码人妻毛片丰满熟妇精品区| 多乙久久久久久| 97爱b| 26uuu国产日韩综合在线观看| 麻豆一区在线| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 男人的天堂午夜av| 97精选久久| 中国东北熟女老太婆内谢| 亚洲熟妇白浆无码AV| 久久久久人妻| 国产多人在线观看视频| 美女网站黄页| 亚洲图片 91| 中文乱码字幕观看视频| 亚洲色香| 丁香六月激情| 久久受www免费人成| 囯产精品强| 国产欧美一区激情交| 久久精品一区二区| 人妻美腿丝袜制服诱惑综合天堂-| 国产一区二区三区白丝| 在线电影亚洲色图| 丰满少妇一区二区三区四区观看| AV污污污污| 九九九久| 91总综合网| 眼镜人妻101.com| 无码操逼天堂| 国内精品不卡无毒99999| 插日本熟女视频| 九九热av| 超碰97首页| 狼人综合婷婷激情四射| 2020国产精品| 老熟女乱子伦中文字幕一区二区| 人妻精品一区二区三区| 91偷拍欧美亚洲| 日本九九九九| 在线观看色视频| 97AV在线观看| 国产伊人精品在线| AV99热18这里只有精品| 五月天激情综合网| 人人操人人操草草| 无码高清操逼网址| 97天天综合| 日本道日本道中文字幕日本道最新日本道在线观看 | 亚洲精品久久久久毛片A片拉屎| 蜜臀久久99精品久久久久久久久| 国产三区免费在线观看| 日韩性爱视频在线免费观看| 精品在线蜜臀| 亚洲丨在线| 加勒比久久av| 蜜桃久久一区二区三区| www.色综合| 人妻乱仑一区二区三区| 激情自拍 校园春色| 人人干人人操人人..com| 收看日本人日bb| 搡老熟女免费视频| 国产强奸乱伦无码视频| 日本精品五区| 91美女小视频| 青草精品视频-日本久久久久网站| 久久国99999| 日韩天堂av电影在线观看 | 宅男91视频在线播放| 日本特黄f c2| 精品人妻二区三区| 狠狠躁AV| 欧美日韩黄色片一区二区三区四区人与兽做爱| 99色在线| 久草精品热视| 日本一二区免费 | 久久久久深夜无码| 91男人综合| 亚洲限制级| 97一本大道亚洲一区| 欧美少妇性乱| 青操影院| 狠狠色五月亚洲91| 香蕉综合网| 欧美色涩| 国产精品一区二区亚洲人成毛片| 眼镜人妻101.com| 91在线限制级| 97中文综合| 日本亚欧爱爱| 久久久青青草| 亚洲不卡三级手机播放| 98人妻精品一区二区色欲| 久久久久九九九| 精品一区二区三区18| 97超碰色色| 一级片视频啪啪| 中国农村熟妇毛片视频| 国产操逼逼网| 大香蕉九九| 大香蕉久| 天天做天天爽| 亚洲色图 欧美热图 清纯唯美 另类自拍 | 精品丰满熟妇人妻一区| 午夜精品久久99蜜桃的功能章节| 久久狠狠色噜噜狠狠狠狠97| 日韩综合无码色欲vv| 五月天婷精品激情| 国产激情综合| 国产精品经典一卡久久久| 欧洲自拍色图gif在线| 天天干1区2区在线| 大JI巴好深好爽又大又粗视频| 亚洲图片激情综合另类| 亚洲av强奸乱伦| 熟女一区二区| 大香蕉手机在线| 国产精品69久久久久久久| 爱射综合| 国产盗摄美女如厕大神作品在线观看| 大香交| 呦呦一区| 黄色片大香蕉| 天天综合香 ld视频| 美女网站黄页| 歐美性天天| 青青欧洲黑| 美女爽到高潮91| 超碰免费人妻人人| 午夜丁香婷婷| 久久99精品国产| 91激情国产| 国产午夜在线观看视频| 亚洲操操操| 一区二区不卡免费| 天天干天天燥| 日韩AV色图| 国产精品伦理| 抽插无码高清一区| 黑人与人妻| 国产一区二区成人av在线播放| 五月丁香综合激情| 麻豆区久久久久亚| 日日操丁香五月天| 欧美色干| 国产欧美一级在线观看| 偷拍欧美综合| 免费黄色片子| 日韩激情视频| 91精品操美女| 色网1| 欧美天天在线| 国产传媒日韩欧美| 无码99| 国产黄片在线免费观看| 神马麻豆福利院| 色青青久久影视| 国产女同性恋视频| 99视频这有这里有精品| 嫩草 人人网精品| 日韩一级欧美一级国产一级台湾| 成人看片网站| 大香蕉男人的天堂| 中文字幕一区二区日韩网| 欧色综合| 欧美爆乳精品一区二区| 在线综合 亚洲 欧美中文字幕| 正宗无毛一线天嫩逼| 神马午夜久久| 激情小说五月天| 亚洲日精品| 午夜福利免费福利视频| 97超碰中文| 天天躁日日躁XXXXYY| 91黄射| 97人人射| 99re28在线观看| 大香蕉97久久| 久久婷婷电影网| 四虎视频在线观看| 黄色AAAAA欧美| 色悠久久久av| 欧美疯狂做爰xxxx| 天天欧美| 中文乱码99| 国产大陆天天艹| 国产精品国产| 91中文在线| 亚洲在线欧美| 伊人伊人LD| 性爱乱伦网址| 亚洲丝袜诱惑| 粉嫩AV一区夜夜嗨| 手机在线中文字幕国产| 噜噜噜噜天天狠狠| 丁香五月AV| 日韩精品资源专区二区| 亚洲性图91| 99久久婷婷| 91在线丝袜| 欧美日韩国产色图在线| av天堂电影网| 久色99999| 婷婷五月影院| 草莓精品视频在线免费观看| 欧美色图99| 丁香五月激情网| 极品欧美一区二区三区| 精品无码人妻一区二区免费蜜桃| 大香蕉五月天婷婷| 久久精品国产97欧美精品亚洲 | 色蜜AV| 欧美日韩黄片精品在线| 欧美少妇性乱| 国产11页| 91第一页| 少好三P| 亚洲中文字幕97久久精品少妇| 日本熟女不卡视频| 欧美在线亚洲| 97精品一二区| 大香蕉久| 91强奸乱轮| 久久国产熟女影院| 狠狠干2020| 97香蕉人人乳| 三级片网站在线播放| 久久亚州精品成人Av无| 婷婷五月天色网| 91AV天堂| 国产精品久久久久久夜夜夜| 国产精品无码在线| 国产精品视频自拍在线| 97这里只有精品| 麻豆国产成人精品| 香一区二区三区| 精品亚洲黄色片 国产精品导航一区二区 | 爱射综合| 淫妻综合网| www.色婷婷色综合| 久久一区二区三区入口| 一线黄色免费性爱片| 久久久久久久性爱| 亚洲系列欧美| 蜜桃丰满熟妇av无码区不卡| 丝袜综合| 久久夜嗨| 黄色十八禁网站| 操婷婷逼| 91亚洲色人| 2018天天日天天日| 男人的天堂视频精品乱在线| 91天堂丝袜美腿| 亚洲AV色图一区| 国产偷人妻精品一区二区在线| 成人aⅴ一区二区三区| 五月丁香啪啪网| 亚洲限制级| 日夜久久久九九九久| 亚洲 综合 欧美| 日本操嫩b网| 久草国产在线视频| 亚洲精品国产熟女久久久久久| 一区二区亚州激情久婷婷欧美| 亚洲激情色片| 激情文学 国产一二三aV| 久久伊人在线五区| 麻豆婷婷成人一二三| 日韩99神马视频片| 欧美少妇性乱| 91网站在线播放| 中韩中文字幕在线观看| 亚州国产成人精品女人久久| 午夜精品久久久久| 国产精品制服丝袜中文字幕日韩一区二区三区 | 欧美天堂亚洲电影院一区在线播放 | A V少妇特黄三级| 乱人伦 国语对白:视频直接看| 日日干日日| 久久9 9 9精品| 91操人| 五月天激情国产综合婷婷婷| 老鸭窝亚洲毛片| 91总综合网| 久久中文色图| 亚洲AV无码久久精品蜜桃小说| 日韩不卡网操逼中文字幕日韩| 六月婷婷一区二区三区| 九九热精品视频六| 成 人 A V免费视频在线观看| 91色人| 国产性爱强奸乱伦大全| 黄片色区软件| 9热9热综合网| 国产精品农村妇女| 精品无码不卡视频| 日韩人妻操B| 老司机福利社视频在线观看| 国产在线综合网| 国产AV久久野战精品| 蜜臀少妇一区二区| 极品后入免费视频| 97视频免费| 久操操AV电影| 五月天婷婷综合网| 啊啊啊com| 夜夜嗨一区二区三区三州加勒比| 91色图| 伊人色综合网电影| 九九英色视频| 78精品| 精品国产一区二区三区四区在线看| 亚洲图片欧洲图片aⅴ| 旡码电影特区| 五月天AV资源| 国产毛片毛片4p懂色| 91干熟女| 美美91成人国产精品欧美精品久久久久久久 | 懂色AV一区二区三区| 91在线/欧洲| 日本一级特级毛片视频| 熟妇的味道HD中文字幕| 大香蕉免费中文| 青草伊人久久| av天堂精品久久| 欧美日韩国产中文精品字幕自在自线, | 99性爱视频| 亚洲偷拍欧美激情| 岛国1区2区3区在线观看| 中国探花熟女| 国产精品久久久久久久久久久久久久久久| 亲子敌伦对白在线播放| 亚洲日韩精品在线播放| 久久夜夜夜夜| 女沟厕偷窥piss小便| 丁香婷婷久久| 中文字幕第二页| 少妇厨房愉情理伦片bd在线观看| 吻戏激情性巴克| 亚洲色婷婷综合久久久久中文| 日韩探花精品在线视频| 天天色香欲综合网| 亚洲美女精品九九视频| 国产精品老师| 亚洲欧美骚| 人妻中文字幕日韩电影| 二级毛片| 亚洲精品久久久久久久蜜桃臀| 久久九九精品一区二区| 免费看一级a性色生活片久久无| 欧美第五页| 五月婷婷啪啪| 啪啪视频免费在线观看| 久久久久久性爱视频| 国产无码精品高清| 亚州图片第一页| 国产精品秘 福利姬在线观看| 亚洲a色| 91丨国产丨白浆| 久久欲| 日韩特一级久久| 亚洲无码99| 黄人人操人人操| 人人妻天天做天天爽| 午夜大香蕉| a片在线播放| 日韩精品国模| 亚洲有码 欧美精品| 国产精品久久久无码aV去| 欧亚揄拍偷拍精品视频| 99精品视频在线观看| 人人人摸人人| 热热色综合网| 久久一二区四| 国产精品久久久久久片| 日本加勒比无码专区| 国产熟女一区二区丰满| 国产女生在线| 秋霞一级鲁丝片A片| 校园春色欧美| 99re6国产精品99re在线| 色情乱伦AV| 亚洲中字幕日本一区二区三区| 97爱碰| 国产日本熟女顶级一区二区三区视频 | 国产精品 久久久精品一牛| 性色高清..……| 91偷拍欧美亚洲| 免费看一级a性色生活片久久无| 男女性无套 免费九一| 日本 情色 1区2区3区| 日本97久久久精品| 超碰在线99| 成人精品一区二区91毛片不卡| 亚洲激情在线| 加勒比东京热五月天天堂网| 午夜久久一区二区无码中出| 澳门特级毛片免费观看| 天天懆天天日| 香蕉欧美| 自拍六区| nuu12国产麻豆精品| 天天做天天爱天天爽AV| av天堂影视中文在字幕在线中文 | 狠狠色噜噜狠狠狠狠狠色综合久久 | 欧美暴力猛交| 国产精品91一样| 激情综合五月丁香| 日韩欧美字幕亚洲一区二区| 国产精品日韩在线一区| 免费操逼91| 伊人麻豆传媒| 四虎影视国产精品| 人妻天天爽| 精品无码久久久久| 国产男女无套97| 97久久久久久久精| 激情婷婷丁香| 精品-91人妻子系列| 一本一道vs波多野结衣| av在线观看不卡网站| 久9re热视频这里只有精品| av天堂电影网| 天天射夜夜骑| 9久久精品| 久久久性爱| 欧美色另类| 变态综合色| 国产精品一区二区三区在线| 91天美免费| 97久久久网站| 九九九九精品视频| 久久人妻熟女一区二区| 奶水 人妻 哺乳 在线| 亚洲精品国产拍免费91在线| 久久风骚城市| 97ai亚洲| 蜜臀久久久99久久久久 | 免费在线看黄片av| 一起草三级AV电影在线观看 | 精品人妻一区二区三区在线视频不卡| 超碰天天操你比| 欧美中文狠| 91网站在线播放| 中文字幕欧洲有码| 欧色网址| 国产精品午夜AV完会免费| 沈阳熟女高潮对白视频| 国产精品高潮呻吟av久久4虎| 亚洲巨爆乳一区二区三区四季网| 蜜臀久久99精品久久久电影| 欧美色999| 精品日韩人妻精品一二三区| 少妇熟女1区2区3区| 无码精品久久| 最新中文字幕在线亚洲| www.91久久| 五月花婷婷| 欧美综合97www| 中 文字幕一区二区三四 五 区日 日 骚| 欧美精品双插| 亚洲 无码 有码 中文字幕| 四虎AV在线播放| a'v在线资源| 91午夜无码| 90后性网国产欧美| 日韩三级网址| 欧美 亚洲 综合 制服 另类| 免费视频观看60秒| 99久久国产精品免费高潮| 乱伦图一区| 99色在线| 久草综合视频| 青青草一区二区高清无码视频| av激情亚洲五月天| 日韩无码黄色片| 男人的天堂不卡一区二区| 国产高清不卡视频| 日本ZZ高免费A级视频| 亚洲麻豆av一区二区| 国产麻豆福利av在线播放| 欧美成人都市人妻| 熟女高潮合集-永久久久-成人AV | 9丨久久九九九| 成人免费看吃奶视频网站| 大香蕉九九| 国产精品亚洲日韩骚欢乐谷最新地址发布页huanieguty性屋娱乐妖精视频 | 色情婷婷| 亚洲成人一二三区| 一级免费精品| 欧美真人抽搐一进一出gif| 日本性爱少妇| 亚洲美欧999| 久久亚洲欧美一区二区三区-亚洲国产精品第一区二区 | 中文字幕乱亚洲美女精品一区| 91影库| 国产少妇与亚洲av| 久久久久九九九九九| 伦激情人妻另类人妻| 色色无码| 日韩综合色网| 久操com| 国产不卡片| 久久东京热成人| 久久直播国产| 少妇人妻无码| 日韩在线国产字幕| 一级黄色影片| 9.1小视频| 亚洲乱伦图片视频| 青青草吊丝| 精品九九九九九九| 久久丁香五月婷婷| 色偷偷人人玩人人舔人人操人人摸人人爽 | 中文精品一区二去| 韩国轻伦国内自拍一区| 亚洲中文丝袜美腿诱惑字幕| 色色色欧美| 伊人网在线观看| J?P?NESEHD熟女熟妇伦| 久久超碰爱| 这里只有精品97| 色婷婷综合网站| 97欧美色| 白嫩国模丰满一二三区| 欧美日韩人妻婷婷一区| 超碰无码加勒比| 中文字幕人妻色偷偷久久皮| 日韩视频中文字幕| 狠狠中文字幕| 亚洲欧美日韩偷拍色图| caorenqi shipin| 91精品久久久久| 天天拍天天操| 超碰色图| 天天日天天舔天天喷天天射| 72av视频| 亚洲精品一区中文字幕乱码| 青青在线视频免费| 国产亚洲一黄| 91欧美大片| 天天综和| 影音先锋乱伦资源| 蜜屁Av| 国产三级中文有码在线视频| 日本新免费二区三区| 中文字幕日韩人妻视频一区二区三区 | 俺去俺来也在线www| 日韩青久久| 99热精品在线| 欧美色女人| 综合网亚| 在线观看色视频| 在线啊啊啊| 最新欧美色网| 欧美在线永久天堂| 激情五月天校园春色网| 黑人黄片在线免费观看| 久热伊人| 丝袜制服字幕在线| 少妇一区二区三区高速| 伊人久久亚洲色欲综合网站| 高清国产av无码| 东京热天堂网| 大香蕉在线免| 男男H黄动漫啪啪无遮挡网站| 超碰97久| 久久亚洲骚逼综合| 夜夜天天噜狠狠爱2021| 狠狠97| 国产蜜臀精品一区免费尤物| www.久久制服糖| 欧美专区17页| 北条麻妃99精品青青久久| 国产精品女生av| 天天操天天干美女网址导航| 中文字幕99999| 亚洲春色一区二区三区| 人人搡人人肉久久精品| 国产精品久久久鸭无码的功能| 精品国产乱码久久久久久蜜臀| 熟女色图在线| 中文自拍欧美影视| 极品销魂美女一区二区| 国产中午字一暮区| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 日韩国产乱子伦App| 欧美色亚洲色| 第45页一区二区| 日韩另类| 蜜乳av一区二区| 97干在线视频| 欧亚日韩综合精品国产| 午夜精品99久久久久传媒| 影音先锋乱| 蜜臀无码视频在线观看| 国产又大又粗又长视频| 三上制服丝AV| 五月丁香综合网| 日韩不卡在线一区二区| 日本乱人伦片中文三区| 校园春色 亚洲| 老鸭窝黄色视频网站| 久都青青视频| 乱老女人一区二区视频| 欧美综合娱乐久久| 日韩成年人性爱视频| 九久久精| 国产中文日韩欧美一区二区三区人妻丝袜美腿 | 久久久久9| 欧美老妇曰批的视频| 99久久无码| 老熟女91视频| 人妻另类| 日本熟妇色熟妇在线视频播放| 日韩二三区| 99热综合在线| 屌逼麻豆| 无码伊人久久大杳蕉中文无码| 久草视频观看视频在线| 狠狠色伊人亚洲综合网站色| 一起草在线视频| 友优传媒精品在线一区二区| 无码人妻丰满熟妇区毛片| 婷婷15月天青娱乐| 啊啊啊不要啊啊受不了了视频在线 | a片久久久久久久久久久久 | 超AV色女| 懂色综合久久久| 午夜免费视频1000| 人人扣人人操| 免费一级毛片在线视频观看| 国产精品香蕉热久久新品| 大香蕉久| 91人妻素女| 欧美性爱十八禁| 久久久久成人亚洲国产| 成人三一级一片aaa| 伦伦成年午夜免费视频| 草莓精品视频在线免费观看| 国产精品日本无码A片| 三级日本一区二区三区| 国产午夜精品理论片一二三区区| 日本欧美中文字幕| 欧美亚洲天堂| av毛片aaaaa免费看| 亚洲 欧美 日韩 国产一区二区| 国产无码久久高清| 黄色大片免费在线| 啪啪AV导航| 一级A片女人高潮叫床|