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

ARTICLE DETAIL

資訊詳情

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

IM系統(tǒng)用戶(hù)管理子服務(wù)架構(gòu)設(shè)計(jì)與踩坑實(shí)踐:從表結(jié)構(gòu)到緩存策略

IM系統(tǒng)用戶(hù)管理子服務(wù)架構(gòu)設(shè)計(jì)與踩坑實(shí)踐:從表結(jié)構(gòu)到緩存策略 做IM系統(tǒng)用戶(hù)管理子服務(wù)往往是看起來(lái)最簡(jiǎn)單、坑卻最多的那一塊。很多人一開(kāi)始會(huì)覺(jué)得無(wú)非就是注冊(cè)、登錄、改個(gè)昵稱(chēng)、拉個(gè)好友列表有什么好寫(xiě)的但真正上手做才發(fā)現(xiàn)一個(gè)IM系統(tǒng)里最基礎(chǔ)的用戶(hù)服務(wù)牽扯到數(shù)據(jù)一致性、在線(xiàn)狀態(tài)、增量同步、token安全、熱點(diǎn)緩存一堆問(wèn)題任何一個(gè)環(huán)節(jié)沒(méi)設(shè)計(jì)好后面消息推送和會(huì)話(huà)模塊全都跟著遭殃。這篇文章把我在實(shí)際開(kāi)發(fā)用戶(hù)管理子服務(wù)過(guò)程中涉及的架構(gòu)設(shè)計(jì)、表結(jié)構(gòu)、緩存策略、接口實(shí)現(xiàn)和踩坑實(shí)錄都整理出來(lái)適合正在做IM項(xiàng)目、或者準(zhǔn)備把用戶(hù)模塊獨(dú)立成微服務(wù)的朋友參考。1. 項(xiàng)目背景與總體設(shè)計(jì)思路1.1 IM系統(tǒng)里為什么用戶(hù)服務(wù)必須獨(dú)立拆出來(lái)很多單體項(xiàng)目里用戶(hù)模塊就是一個(gè)UserController加幾張表但在IM項(xiàng)目里用戶(hù)服務(wù)幾乎是整個(gè)系統(tǒng)的心臟。你想想看每一次消息發(fā)送都要查用戶(hù)關(guān)系、每一個(gè)會(huì)話(huà)列表都要拉取用戶(hù)資料、每一次好友操作都要變更關(guān)系鏈數(shù)據(jù)如果這些邏輯全部跟消息模塊耦合在一起后期幾乎無(wú)法維護(hù)。我參與的這個(gè)IM項(xiàng)目團(tuán)隊(duì)在一開(kāi)始就確定了微服務(wù)拆分方向。用戶(hù)管理子服務(wù)作為最底層的基礎(chǔ)服務(wù)獨(dú)立負(fù)責(zé)賬號(hào)體系、用戶(hù)資料、好友關(guān)系、在線(xiàn)狀態(tài)和通信錄同步其他所有服務(wù)都在它之上工作。這樣的好處非常明顯首先是解耦消息服務(wù)只管消息推送服務(wù)只管推送用戶(hù)服務(wù)只管用戶(hù)出了問(wèn)題各查各的日志其次是彈性伸縮比如做活動(dòng)拉新的時(shí)候注冊(cè)量暴漲只需要單獨(dú)擴(kuò)容用戶(hù)服務(wù)不必把整個(gè)系統(tǒng)都帶起來(lái)再有就是故障隔離用戶(hù)服務(wù)掛了已經(jīng)在線(xiàn)的人還能繼續(xù)收發(fā)消息不會(huì)導(dǎo)致全盤(pán)崩潰。不過(guò)獨(dú)立拆服務(wù)也帶來(lái)一個(gè)必須正視的問(wèn)題跨服務(wù)的用戶(hù)數(shù)據(jù)訪(fǎng)問(wèn)怎么辦。不可能每個(gè)服務(wù)都直連用戶(hù)數(shù)據(jù)庫(kù)那樣連接數(shù)先撐不住。所以實(shí)際架構(gòu)里消息服務(wù)、會(huì)話(huà)服務(wù)都要通過(guò)用戶(hù)服務(wù)提供的接口獲取信息同時(shí)用Redis緩存扛住熱點(diǎn)流量。這也是這次項(xiàng)目架構(gòu)設(shè)計(jì)里反復(fù)權(quán)衡的一個(gè)點(diǎn)。1.2 用戶(hù)管理子服務(wù)的職責(zé)邊界先把這個(gè)服務(wù)到底管什么理清楚。我梳理下來(lái)用戶(hù)管理子服務(wù)大概覆蓋六個(gè)核心域賬號(hào)注冊(cè)與登錄、用戶(hù)資料管理昵稱(chēng)、頭像、個(gè)性簽名、好友關(guān)系鏈管理添加、刪除、拉黑、在線(xiàn)狀態(tài)管理、用戶(hù)設(shè)置管理消息免打擾、加好友驗(yàn)證方式、增量同步多端登錄時(shí)的資料同步。邊界之外的東西堅(jiān)決不往里放。比如消息推送那是推送服務(wù)的事文件存儲(chǔ)那是對(duì)象存儲(chǔ)服務(wù)的事敏感詞過(guò)濾和審核那是內(nèi)容安全服務(wù)的事。這個(gè)邊界一開(kāi)始就要在團(tuán)隊(duì)內(nèi)部達(dá)成共識(shí)不然每個(gè)人都在用戶(hù)服務(wù)里順手加接口最后變成一個(gè)“大雜燴”。尤其是頭像上傳這個(gè)功能最容易被放在用戶(hù)服務(wù)里。我的建議是頭像上傳盡量走獨(dú)立的文件服務(wù)用戶(hù)服務(wù)只保存一個(gè)頭像URL和更新版本號(hào)。道理很簡(jiǎn)單文件上傳涉及大流量和存儲(chǔ)擴(kuò)容如果圖片流量把用戶(hù)服務(wù)的網(wǎng)絡(luò)帶寬占滿(mǎn)正常的查詢(xún)接口就直接變慢了。1.3 整體技術(shù)架構(gòu)與數(shù)據(jù)流向用戶(hù)管理子服務(wù)的技術(shù)棧選型比較常規(guī)但組合起來(lái)效果很穩(wěn)定。后端用的是Java棧Spring Boot對(duì)外提供接口內(nèi)部通過(guò)OpenFeign給其他微服務(wù)調(diào)用數(shù)據(jù)庫(kù)用MySQL存主數(shù)據(jù)Redis用來(lái)扛緩存和在線(xiàn)狀態(tài)消息中間件用的RocketMQ來(lái)處理注冊(cè)成功之后的異步事件比如初始化默認(rèn)設(shè)置、創(chuàng)建通信錄目錄、發(fā)送歡迎消息等。數(shù)據(jù)流向分兩條線(xiàn)。一條是寫(xiě)鏈路客戶(hù)端請(qǐng)求進(jìn)來(lái)先經(jīng)過(guò)網(wǎng)關(guān)鑒權(quán)然后到用戶(hù)服務(wù)接口層落庫(kù)MySQL同時(shí)同步更新Redis緩存再發(fā)MQ事件給其他下游服務(wù)。另一條是讀鏈路優(yōu)先查Redis緩存沒(méi)命中的時(shí)候查MySQL然后回填緩存。這套讀寫(xiě)分離加上緩存兜底的模式在百萬(wàn)用戶(hù)級(jí)別撐住日常流量問(wèn)題不大。有一個(gè)細(xì)節(jié)值得說(shuō)用戶(hù)服務(wù)作為基礎(chǔ)服務(wù)很多時(shí)候不是面對(duì)最終用戶(hù)而是面對(duì)其他微服務(wù)。比如消息服務(wù)要判斷兩個(gè)用戶(hù)是不是好友關(guān)系、會(huì)話(huà)服務(wù)要拉取群成員的昵稱(chēng)頭像這些內(nèi)部調(diào)用接口在設(shè)計(jì)時(shí)需要更高可用性不能因?yàn)槟骋凰查g的流量波峰就雪崩所以接口層做了統(tǒng)一熔斷和降級(jí)處理下游服務(wù)依賴(lài)用戶(hù)服務(wù)的時(shí)候也要做好容錯(cuò)。2. 技術(shù)選型與數(shù)據(jù)模型設(shè)計(jì)2.1 存儲(chǔ)選型MySQL加Redis加對(duì)象存儲(chǔ)的搭配用戶(hù)數(shù)據(jù)的存儲(chǔ)架構(gòu)我最終定下來(lái)的是MySQL做持久化主存儲(chǔ)Redis做緩存和在線(xiàn)狀態(tài)存儲(chǔ)頭像和文件類(lèi)的二進(jìn)制數(shù)據(jù)放在對(duì)象存儲(chǔ)里MySQL里只存元信息。把這個(gè)組合拆開(kāi)說(shuō)。MySQL的選擇幾乎沒(méi)什么懸念成熟穩(wěn)定事務(wù)支持好適合存儲(chǔ)用戶(hù)基礎(chǔ)資料和好友關(guān)系這類(lèi)強(qiáng)一致性要求高的數(shù)據(jù)。表引擎統(tǒng)一用InnoDB支持行鎖和事務(wù)好友關(guān)系變更這種高頻操作不會(huì)有鎖表問(wèn)題。Redis則是整個(gè)服務(wù)性能的主力注冊(cè)用戶(hù)資料、熱點(diǎn)用戶(hù)信息、好友關(guān)系列表、用戶(hù)在線(xiàn)狀態(tài)全都在Redis里有對(duì)應(yīng)緩存層。對(duì)象存儲(chǔ)解決的是頭像這類(lèi)大文件的存儲(chǔ)問(wèn)題下載走CDN數(shù)據(jù)庫(kù)不會(huì)因?yàn)殪o態(tài)資源被打爆。很多人會(huì)問(wèn)為什么不用MongoDB或者PostgreSQL代替MySQL說(shuō)實(shí)話(huà)IM系統(tǒng)的用戶(hù)數(shù)據(jù)量沒(méi)有大到需要引入太復(fù)雜的存儲(chǔ)方案MySQL在互聯(lián)網(wǎng)行業(yè)的成熟運(yùn)維經(jīng)驗(yàn)最豐富出問(wèn)題能找到的解決方案也最多。技術(shù)上夠用就好不必為了新而新。2.2 核心表結(jié)構(gòu)設(shè)計(jì)用戶(hù)基礎(chǔ)表和好友關(guān)系表是用戶(hù)管理子服務(wù)最重要的兩張表設(shè)計(jì)上花了很多功夫。用戶(hù)基礎(chǔ)表第一版設(shè)計(jì)的時(shí)候字段盡量精簡(jiǎn)核心就用戶(hù)ID、昵稱(chēng)、頭像URL、性別、個(gè)性簽名、手機(jī)號(hào)或郵箱作為登錄憑證。有一個(gè)很容易踩的坑是用戶(hù)ID到底用自增ID還是雪花ID。IM系統(tǒng)里用戶(hù)ID會(huì)出現(xiàn)在消息內(nèi)容、分享鏈接、好友添加等對(duì)外場(chǎng)景用自增ID容易被遍歷抓取而且MySQL自增主鍵在分庫(kù)分表場(chǎng)景下會(huì)沖突。所以最終用戶(hù)ID用了雪花算法生成的長(zhǎng)整型對(duì)外展示和內(nèi)部存儲(chǔ)都用同一個(gè)ID避免了兩套ID映射的麻煩。登錄憑證字段的設(shè)計(jì)也值得注意。手機(jī)號(hào)和郵箱都可以作為登錄憑證如果分開(kāi)建兩個(gè)字段并都允許為空會(huì)出現(xiàn)一個(gè)用戶(hù)既有手機(jī)號(hào)又有郵箱時(shí)數(shù)據(jù)冗余的情況。實(shí)際實(shí)現(xiàn)時(shí)建了一張登錄憑證表用戶(hù)ID、憑證類(lèi)型、憑證值三個(gè)字段一個(gè)用戶(hù)多條記錄靈活擴(kuò)展且查詢(xún)效率不差。好友關(guān)系表的細(xì)節(jié)更多。首先是雙向好友關(guān)系處理A加B為好友成功后關(guān)系鏈里同時(shí)存在A對(duì)B、B對(duì)A兩條記錄每條記錄都有一個(gè)狀態(tài)字段區(qū)分正常、已刪除、拉黑中。其次是好友備注名A給B備注的名字和B給A備注的名字可以不一樣這兩個(gè)字段必須分別保存不能只存一條關(guān)系一個(gè)備注名。最后是索引設(shè)計(jì)關(guān)系表上建了用戶(hù)ID加狀態(tài)的聯(lián)合索引查詢(xún)好友列表的語(yǔ)句走這個(gè)索引實(shí)測(cè)全表百萬(wàn)級(jí)數(shù)據(jù)量下響應(yīng)時(shí)間穩(wěn)定在幾十毫秒。用戶(hù)設(shè)置表同樣是獨(dú)立的一張表消息免打擾開(kāi)關(guān)、好友驗(yàn)證方式允許任何人添加、需要驗(yàn)證、不允許添加、被拉黑之后是否可見(jiàn)在線(xiàn)狀態(tài)等都放這張表里和用戶(hù)基礎(chǔ)表分開(kāi)的好處是不會(huì)因?yàn)樵O(shè)置項(xiàng)頻繁更新導(dǎo)致基礎(chǔ)表的緩存頻繁失效。2.3 緩存設(shè)計(jì)Key規(guī)范與數(shù)據(jù)結(jié)構(gòu)選擇緩存設(shè)計(jì)直接決定用戶(hù)服務(wù)的查詢(xún)性能這塊的規(guī)范在項(xiàng)目里是強(qiáng)制執(zhí)行的。Redis緩存的Key命名統(tǒng)一采用“服務(wù)名:業(yè)務(wù)域:用戶(hù)ID:內(nèi)容類(lèi)型”的格式比如用戶(hù)資料緩存是user:profile:10001好友關(guān)系緩存是user:friends:10001:list在線(xiàn)狀態(tài)是user:status:10001。統(tǒng)一規(guī)范看著是小事但等后面緩存幾十個(gè)業(yè)務(wù)域的時(shí)候排查問(wèn)題和避免Key沖突會(huì)方便太多。數(shù)據(jù)結(jié)構(gòu)的選擇上用戶(hù)資料緩存用Hash比用JSON字符串更合適。Hash類(lèi)型可以單獨(dú)修改某個(gè)字段而不需要整體重新序列化比如用戶(hù)只是改了個(gè)昵稱(chēng)直接hset一個(gè)字段就夠了其他字段的緩存不受影響。我之前用JSON字符串存整個(gè)用戶(hù)資料用戶(hù)修改昵稱(chēng)之后要對(duì)整個(gè)對(duì)象做讀寫(xiě)和緩存更新在高頻更新場(chǎng)景下浪費(fèi)了不少不必要的序列化開(kāi)銷(xiāo)。好友關(guān)系列表則用ZSet存儲(chǔ)把好友ID作為member成為好友的時(shí)間戳作為score這樣拉取好友列表天然按時(shí)間排序也能方便地做分頁(yè)。緩存過(guò)期時(shí)間也做過(guò)一個(gè)統(tǒng)一約定。用戶(hù)基礎(chǔ)資料這種變更頻率不高但又需要高可用的數(shù)據(jù)設(shè)置為24小時(shí)過(guò)期并主動(dòng)更新雙寫(xiě)在線(xiàn)狀態(tài)這種強(qiáng)時(shí)效數(shù)據(jù)不設(shè)置過(guò)期時(shí)間完全依賴(lài)狀態(tài)上報(bào)來(lái)覆蓋。項(xiàng)目里的原則是緩存必須有過(guò)期兜底防止極端情況下緩存和數(shù)據(jù)庫(kù)不一致時(shí)永遠(yuǎn)無(wú)法自愈。3. 核心接口與實(shí)操實(shí)現(xiàn)3.1 注冊(cè)流程服務(wù)端怎么防重復(fù)、防漏洞注冊(cè)接口是整個(gè)用戶(hù)服務(wù)流量最大的接口之一也是最容易被人搞的接口。我在實(shí)現(xiàn)注冊(cè)流程時(shí)把重點(diǎn)放在三個(gè)環(huán)節(jié)合法性校驗(yàn)、防重復(fù)提交、數(shù)據(jù)一致性。客戶(hù)端傳入手機(jī)號(hào)和驗(yàn)證碼之后先做格式校驗(yàn)然后用驗(yàn)證碼確認(rèn)手機(jī)號(hào)是真實(shí)在用的。服務(wù)端再根據(jù)手機(jī)號(hào)查登錄憑證表判斷這個(gè)手機(jī)號(hào)是否已經(jīng)注冊(cè)過(guò)這里要用唯一索引兜底因?yàn)槟呐麓a邏輯里判斷了不存在高并發(fā)下兩個(gè)人同時(shí)注冊(cè)同一個(gè)手機(jī)號(hào)還是可能插入兩條記錄唯一索引能保證數(shù)據(jù)庫(kù)層面不會(huì)出現(xiàn)臟數(shù)據(jù)。注冊(cè)時(shí)數(shù)據(jù)寫(xiě)入用了事務(wù)同時(shí)更新用戶(hù)基礎(chǔ)表、登錄憑證表和用戶(hù)設(shè)置表任何一個(gè)操作失敗都會(huì)回滾。注冊(cè)成功之后把新用戶(hù)ID和手機(jī)號(hào)的映射寫(xiě)入Redis方便后續(xù)登錄時(shí)快速反查同時(shí)發(fā)送一個(gè)注冊(cè)成功的MQ事件下游服務(wù)收到事件后初始化用戶(hù)通信錄目錄、發(fā)送好友推薦等。這里典型的坑是如果MQ發(fā)送失敗會(huì)導(dǎo)致下游服務(wù)收不到通知所以發(fā)送事件要失敗重試并記錄日志重試幾次仍然失敗就要走定時(shí)任務(wù)對(duì)賬補(bǔ)償。3.2 登錄與Token方案雙Token為什么是標(biāo)配登錄流程在IM項(xiàng)目里和普通網(wǎng)站登錄不一樣不只是為了拿到一個(gè)身份憑證更重要的是保證多端登錄互不影響、消息推送能定位到具體設(shè)備。每個(gè)設(shè)備獨(dú)立登錄所以登錄成功后生成的是設(shè)備級(jí)的會(huì)話(huà)憑證而不是用戶(hù)級(jí)。Token方案最終用了雙Token設(shè)計(jì)短期TokenAccess Token有效期兩小時(shí)用于實(shí)際接口調(diào)用的身份認(rèn)證長(zhǎng)期TokenRefresh Token有效期三十天用于短期Token過(guò)期后無(wú)感刷新。客戶(hù)端拿Refresh Token換新的Access Token這樣即使用戶(hù)長(zhǎng)期沒(méi)打開(kāi)App只要三十天內(nèi)打開(kāi)過(guò)一次就能自動(dòng)續(xù)期體驗(yàn)上不會(huì)出現(xiàn)頻繁要求重新登錄的情況。Access Token采用了JWT格式簽名密鑰單獨(dú)配置并且定期輪換JWT里只放用戶(hù)ID、設(shè)備ID、會(huì)話(huà)類(lèi)型幾個(gè)必要字段不放任何敏感信息。Refresh Token則不是JWT而是服務(wù)端生成的隨機(jī)串存Redis設(shè)置有效期并關(guān)聯(lián)設(shè)備ID每次刷新使用后輪換一次舊Token作廢發(fā)新Token。之所以不對(duì)稱(chēng)處理是因?yàn)镴WT無(wú)法服務(wù)端主動(dòng)作廢而Refresh Token需要支持踢人下線(xiàn)、強(qiáng)制注銷(xiāo)等操作必須能被服務(wù)端控制。登出操作要做的就是刪除Redis里的Refresh Token、清理設(shè)備在線(xiàn)狀態(tài)、發(fā)送下線(xiàn)通知給消息服務(wù)。這里有一個(gè)很容易被忽視的細(xì)節(jié)用戶(hù)賬號(hào)在別的設(shè)備上登錄或者被管理員封禁時(shí)需要做到強(qiáng)制下線(xiàn)那就得把所有設(shè)備對(duì)應(yīng)的Refresh Token全部刪除同時(shí)維護(hù)一個(gè)用戶(hù)維度的Token版本號(hào)存在Redis里Access Token校驗(yàn)時(shí)會(huì)檢查這個(gè)版本號(hào)一旦版本號(hào)變了舊Access Token就算沒(méi)過(guò)期也直接失效。3.3 增量同步與在線(xiàn)狀態(tài)管理多端登錄場(chǎng)景下一個(gè)手機(jī)端的用戶(hù)改了昵稱(chēng)另一個(gè)平板端要盡快看到更新。如果每次改完立刻通知所有在線(xiàn)端會(huì)制造大量推送如果完全依賴(lài)客戶(hù)端主動(dòng)拉取數(shù)據(jù)又不及時(shí)。最終的方案是版本號(hào)加增量同步機(jī)制。用戶(hù)基礎(chǔ)表加一個(gè)數(shù)據(jù)版本號(hào)字段任何資料變更都讓版本號(hào)加一??蛻?hù)端批量請(qǐng)求增量同步接口時(shí)帶上本地版本號(hào)服務(wù)端拉取更高級(jí)別的數(shù)據(jù)變化返回給客戶(hù)端。Redis里用一個(gè)ZSet保存用戶(hù)數(shù)據(jù)的版本歷史member存字段IDscore存版本號(hào)這樣斷線(xiàn)重連后只需要同步缺失的那一段版本不需要全量拉取傳輸數(shù)據(jù)量小受網(wǎng)絡(luò)波動(dòng)影響也小。在線(xiàn)狀態(tài)管理的設(shè)計(jì)經(jīng)歷了兩次迭代。最初是用推模式用戶(hù)上線(xiàn)上線(xiàn)都通過(guò)消息服務(wù)實(shí)時(shí)推給所有好友這樣做的好處是好友用戶(hù)看到在線(xiàn)狀態(tài)最及時(shí)但代價(jià)是消息量大——一個(gè)千萬(wàn)用戶(hù)級(jí)別的系統(tǒng)如果一個(gè)百萬(wàn)粉絲用戶(hù)頻繁上下線(xiàn)光狀態(tài)推送就能把消息服務(wù)打爆。后來(lái)改成拉模式用戶(hù)在線(xiàn)狀態(tài)保存在Redis里狀態(tài)變更只寫(xiě)Redis并通知自己的所有在線(xiàn)設(shè)備好友列表頁(yè)面加載或刷新時(shí)才主動(dòng)拉取好友的在線(xiàn)狀態(tài)。這樣把推送的扇出量降下來(lái)了代價(jià)是狀態(tài)展示有延遲但對(duì)于絕大多數(shù)IM使用場(chǎng)景這個(gè)延遲完全能接受。在線(xiàn)狀態(tài)的數(shù)據(jù)模型用的是Redis StringKey是用戶(hù)IDValue是設(shè)備列表加最新心跳時(shí)間的JSON結(jié)構(gòu)客戶(hù)端每隔60秒發(fā)一次心跳服務(wù)端記錄心跳時(shí)間。判斷下線(xiàn)的邏輯是如果某個(gè)設(shè)備超過(guò)90秒沒(méi)有心跳認(rèn)為該設(shè)備離線(xiàn)從設(shè)備列表里移除一個(gè)用戶(hù)所有設(shè)備都離線(xiàn)了整個(gè)用戶(hù)才標(biāo)記為離線(xiàn)。心跳報(bào)文越頻繁狀態(tài)越精準(zhǔn)但服務(wù)端壓力越大60秒心跳加90秒超時(shí)這個(gè)參數(shù)組合在線(xiàn)上跑下來(lái)是性能和準(zhǔn)確率的平衡點(diǎn)。4. 常見(jiàn)問(wèn)題與排查實(shí)錄4.1 用戶(hù)資料在不同端不一致改完昵稱(chēng)之后手機(jī)端顯示新昵稱(chēng)電腦端還是舊昵稱(chēng)這個(gè)問(wèn)題我們?cè)诨叶葴y(cè)試階段復(fù)現(xiàn)過(guò)很多次。排查下來(lái)無(wú)非兩種原因一種是某個(gè)端的本地緩存太久沒(méi)有過(guò)期沒(méi)有及時(shí)觸發(fā)增量同步另一種是服務(wù)端緩存更新失敗導(dǎo)致舊數(shù)據(jù)又返回給了客戶(hù)端。服務(wù)端緩存更新失敗這個(gè)原因比較隱蔽。當(dāng)時(shí)的實(shí)現(xiàn)是先更新MySQL再刪除緩存結(jié)果MySQL更新成功、刪除緩存時(shí)Redis剛好發(fā)生主從切換舊緩存沒(méi)被清掉后續(xù)讀請(qǐng)求又把舊數(shù)據(jù)回填了。解決方案是引入更新緩存時(shí)的版本號(hào)比對(duì)寫(xiě)入緩存的用戶(hù)資料版本號(hào)如果小于當(dāng)前版本就丟棄同時(shí)修復(fù)了緩存刪除失敗的重試機(jī)制。排查這個(gè)問(wèn)題時(shí)用了一個(gè)取巧的方法直接對(duì)比用戶(hù)在MySQL里的數(shù)據(jù)版本號(hào)和客戶(hù)端拿到的最新版本號(hào)版本號(hào)對(duì)不上順著鏈路查下去很快就能定位。4.2 登錄態(tài)突然失效用戶(hù)反映App用著用著突然被退出登錄這類(lèi)問(wèn)題的排查方向應(yīng)該放在Refresh Token的刷新流程上。最容易出問(wèn)題的是并發(fā)刷新場(chǎng)景客戶(hù)端多個(gè)請(qǐng)求同時(shí)發(fā)現(xiàn)Access Token過(guò)期同時(shí)拿同一個(gè)Refresh Token去刷新后發(fā)起的刷新請(qǐng)求把先發(fā)起的舊Refresh Token覆蓋掉導(dǎo)致其中一個(gè)請(qǐng)求拿到一個(gè)已經(jīng)作廢的Token然后用戶(hù)被判定為異常登錄強(qiáng)制下線(xiàn)。解決方式也簡(jiǎn)單Refresh Token的刷新接口要做并發(fā)控制同一個(gè)用戶(hù)同一個(gè)設(shè)備的刷新請(qǐng)求串行化處理Redis里用分布式鎖保證同一時(shí)間只有一個(gè)刷新請(qǐng)求在處理其他請(qǐng)求稍等一下復(fù)用同一個(gè)刷新結(jié)果就行。另外客戶(hù)端也做了配合在Token過(guò)期時(shí)全局只觸發(fā)一次刷新流程其他接口等待刷新完成后再重放業(yè)務(wù)請(qǐng)求從源頭避免了并發(fā)刷新的可能性。4.3 在線(xiàn)狀態(tài)誤判與抖動(dòng)用戶(hù)明明在線(xiàn)好友那邊顯示離線(xiàn)或者剛顯示在線(xiàn)過(guò)一會(huì)又變灰了過(guò)幾分鐘又亮了。這種抖動(dòng)的常見(jiàn)原因是客戶(hù)端網(wǎng)絡(luò)切換——比如WiFi切換到5G網(wǎng)絡(luò)時(shí)TCP連接斷開(kāi)重建心跳包發(fā)出去了但中間有一個(gè)短暫的斷檔超過(guò)90秒超時(shí)閾值后服務(wù)端誤判離線(xiàn)。針對(duì)這個(gè)情況做了兩方面優(yōu)化一是客戶(hù)端心跳不依賴(lài)網(wǎng)絡(luò)連接狀態(tài)每次進(jìn)后臺(tái)和回前臺(tái)的時(shí)候主動(dòng)補(bǔ)發(fā)一次心跳二是服務(wù)端收到心跳時(shí)如果發(fā)現(xiàn)用戶(hù)之前已被標(biāo)記為離線(xiàn)恢復(fù)在線(xiàn)狀態(tài)時(shí)不要立刻向好友端廣播上線(xiàn)通知而是延遲30秒等心跳穩(wěn)定后再?gòu)V播避免網(wǎng)絡(luò)切換導(dǎo)致的上線(xiàn)、下線(xiàn)通知風(fēng)暴。有一次線(xiàn)上觀(guān)察到某個(gè)用戶(hù)的好友端瘋狂收到上下線(xiàn)通知原因就是這個(gè)用戶(hù)在地鐵里頻繁進(jìn)出隧道導(dǎo)致網(wǎng)絡(luò)反復(fù)切換加上延遲廣播機(jī)制后這個(gè)現(xiàn)象基本消除。4.4 緩存穿透與熱點(diǎn)用戶(hù)問(wèn)題緩存穿透問(wèn)題在用戶(hù)服務(wù)里很容易被忽略因?yàn)榇蟛糠钟脩?hù)數(shù)據(jù)是存在的但偏偏注冊(cè)、查詢(xún)陌生人資料這些場(chǎng)景會(huì)頻繁查一個(gè)不存在的用戶(hù)ID。攻擊者可以偽造一批不存在的用戶(hù)ID批量請(qǐng)求資料接口請(qǐng)求全部穿透到MySQL。解決方法很直接用戶(hù)查詢(xún)接口緩存空結(jié)果空值也緩存5分鐘同時(shí)用布隆過(guò)濾器做第一層攔截盡快把不存在的ID擋在前面。熱點(diǎn)用戶(hù)問(wèn)題的典型場(chǎng)景是系統(tǒng)里某些達(dá)人賬號(hào)粉絲量特別大好友狀態(tài)被大量用戶(hù)同時(shí)輪詢(xún)一個(gè)ZSet緩存被高頻讀取單線(xiàn)程的Redis在這個(gè)Key上就成了瓶頸。臨時(shí)方案是熱點(diǎn)Key做多副本把同一個(gè)邏輯Key的數(shù)據(jù)復(fù)制到多個(gè)物理Key上讀請(qǐng)求通過(guò)hash分散到不同副本上能在不改變整體架構(gòu)的情況下把單Key壓力降下來(lái)。更長(zhǎng)期的方案是把這個(gè)讀取邏輯移出同步鏈路走異步批量聚合接口一次查詢(xún)批量合并多個(gè)熱點(diǎn)用戶(hù)的資料返回減少客戶(hù)端單用戶(hù)逐個(gè)請(qǐng)求的次數(shù)。4.5 好友關(guān)系數(shù)據(jù)不一致A給B發(fā)消息被提示“您還不是對(duì)方好友”但兩邊的好友列表里明明都顯示對(duì)方。這類(lèi)問(wèn)題多半是好友關(guān)系表的分庫(kù)分表策略和消息服務(wù)判斷好友關(guān)系時(shí)用的索引不一致造成的。我們的好友關(guān)系表是按用戶(hù)ID取模分片的消息服務(wù)判斷好友關(guān)系時(shí)調(diào)用用戶(hù)服務(wù)接口如果接口內(nèi)部查詢(xún)時(shí)沒(méi)有帶全分片鍵就會(huì)落到錯(cuò)誤的庫(kù)上把關(guān)系查丟了。排查下來(lái)發(fā)現(xiàn)是接口實(shí)現(xiàn)時(shí)在內(nèi)部方法調(diào)用加了一層防重邏輯把好友關(guān)系查詢(xún)參數(shù)做了緩存Key歸一化歸一化后丟失了分片鍵信息導(dǎo)致路由錯(cuò)庫(kù)。去掉這層錯(cuò)誤的緩存歸一化強(qiáng)制所有好友關(guān)系查詢(xún)必須攜帶用戶(hù)ID全文路由后問(wèn)題解決。這里也提醒我微服務(wù)接口對(duì)外暴露的入?yún)⒈仨殧y帶足夠的路由信息任何緩存Key的歸一化邏輯都要仔細(xì)評(píng)審不然很容易在這個(gè)環(huán)節(jié)上埋雷。4.6 發(fā)布與灰度用戶(hù)管理子服務(wù)這種基礎(chǔ)服務(wù)發(fā)布的時(shí)候稍微有點(diǎn)問(wèn)題就會(huì)影響全站。我們的做法是灰度發(fā)布分三步走先在灰度環(huán)境的網(wǎng)關(guān)層只放行內(nèi)部測(cè)試賬號(hào)的流量觀(guān)察半小時(shí)日志和錯(cuò)誤率然后把線(xiàn)上5%的流量切到新版本重點(diǎn)關(guān)注注冊(cè)、登錄、資料更新三個(gè)核心鏈路的錯(cuò)誤率和耗時(shí)曲線(xiàn)穩(wěn)定運(yùn)行一小時(shí)后逐步放量到20%、50%、100%。每個(gè)階段都有關(guān)聯(lián)告警任何一步指標(biāo)異常就自動(dòng)回滾到舊版本。上線(xiàn)前還會(huì)做一個(gè)核對(duì)任務(wù)把灰度時(shí)段內(nèi)用戶(hù)基礎(chǔ)表和好友關(guān)系表的變更數(shù)據(jù)導(dǎo)出和舊版本服務(wù)處理的結(jié)果做對(duì)賬確保兩邊的數(shù)據(jù)完全一致。這項(xiàng)工作多花半小時(shí)但能擋住很多潛在的邏輯錯(cuò)誤。有一次就是通過(guò)這個(gè)方法發(fā)現(xiàn)新版本在好友備注名更新時(shí)丟失了源備注字段全量發(fā)布前攔了下來(lái)。5. 項(xiàng)目復(fù)盤(pán)幾個(gè)值得堅(jiān)持的決策和踩坑總結(jié)做完這個(gè)用戶(hù)管理子服務(wù)有幾個(gè)決策我覺(jué)得堅(jiān)持得對(duì)第一是用戶(hù)基礎(chǔ)表和登錄憑證表分開(kāi)設(shè)計(jì)這讓后來(lái)增加郵箱登錄、第三方登錄都只需要在憑證表加記錄改動(dòng)成本非常低第二是緩存Key的規(guī)范化管理排查問(wèn)題時(shí)省了大量時(shí)間第三是狀態(tài)管理堅(jiān)持拉模型配合心跳的折中方案雖然狀態(tài)有秒級(jí)延遲但換來(lái)了系統(tǒng)整體的穩(wěn)定性。踩過(guò)的最大坑是在設(shè)計(jì)接口時(shí)沒(méi)有充分考慮到下游服務(wù)的異常場(chǎng)景。比如消息服務(wù)在用戶(hù)服務(wù)不可用時(shí)應(yīng)該返回降級(jí)數(shù)據(jù)而不是報(bào)錯(cuò)當(dāng)時(shí)沒(méi)有在客戶(hù)端做這層容錯(cuò)導(dǎo)致用戶(hù)服務(wù)一次短暫抖動(dòng)引發(fā)了消息模塊的連環(huán)超時(shí)。后來(lái)專(zhuān)門(mén)在所有下游調(diào)用方加了一組降級(jí)策略配置用戶(hù)服務(wù)不可用時(shí)直接返回緩存里的舊資料而不是等超時(shí)再去查數(shù)據(jù)庫(kù)?;A(chǔ)服務(wù)的穩(wěn)定性不是靠自身不犯錯(cuò)保證的而是靠上下游一起兜底保證的。如果讓我重新做一遍我會(huì)把用戶(hù)數(shù)據(jù)模型設(shè)計(jì)的重心再往前移一點(diǎn)在動(dòng)手寫(xiě)代碼之前做一輪更徹底的數(shù)據(jù)對(duì)賬和容量規(guī)劃比如幾個(gè)關(guān)鍵表的預(yù)期數(shù)據(jù)量、單Key緩存的大小上限、在線(xiàn)狀態(tài)Redis的持久化策略。這些在項(xiàng)目初期沒(méi)有被足夠重視中期都回來(lái)找補(bǔ)了代價(jià)。做底層服務(wù)設(shè)計(jì)上的預(yù)見(jiàn)性永遠(yuǎn)比寫(xiě)代碼的速度重要。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
骚人妻少妇视频| 国产精品不卡一区二区三区av| 人妻中文字幕日韩电影| 青青草依人大香蕉| 天天综合网久久ww| 色小视频蜜乳| 欧美亚洲素人制服精品| 99re黄| 997色在线| 狠狠色噜噜狠狠狠狠2018| 天天拍天| 亚洲色图美腿丝袜| 97超碰jingpin| 国产一区二区三三视频| 亚洲一区中文字幕| 天天干夜夜鈤| 久久噜| 婷婷色一区| 亚洲精品a人片在线观看视| 婷婷五月天激情四射| 黑人精品久久97| 日韩亚洲美州欧洲综三区一品在线| 天天操天天射天天日| 竹菊一区二区三区AV线| 天天舔天天日天天射| 95人妻爽爽人人做人人澡 | 在线观看亚洲成人精品| 啊啊啊轻点在线观看| 综合日韩激情另类图片| 天天插天天插| 亚洲中文字幕噜噜噜久久久| 色五月大香蕉| 久久99亚洲精品久久99果| 人人干黄色| 亚洲图片 欧美电影| 国产美女口爆吞精| 久久水蜜臀亚洲AV无码精品| 看看小穴| 日韩素人无码一区二区三区三州| 欧美综合站| 深田咏美亚洲精品福利社| 18禁美女裸体无遮挡啪啪| 中文字幕丰满子伦无码专区在线视频最新 | 亚洲色 国产 欧美 日韩| 国产熟女精品一区二区| 欧美在线播放| 热热色中文无码| 9精品久久| 亚州日韩97| 按摩中文字幕| 中文幕97| 东京热91| 五十路三区在线| 伊人国产AV| 亚洲麻豆18发?| 亚热日本熟女| 蜜臀无码一区二区| 综合自拍| 神马久久久久久| 密臀在线一区尤物| 啊啊啊网站| 四虎精品一区二区| 欧美呦呦性爱| 国产AV激情无码久久无码 | 视频国产成人精品日本亚洲18| 国产免费内射视频| 91丝袜美女视频| 99re黄| 日日爱99| 久草午夜| 国产a级午夜毛片| 91啪啪视频| 丰满人妻一区二区三区| 中文字幕一区二区三区人妻少妇在线| 操逼999| 久操精品网| 亚洲国产天堂| 91精品丝袜久久久久久| 亚洲春色一区二区三区| 囯产操逼片| 亚洲高清无码AAA久久久精品| 日韩精品在线观看网站| 日本大片日本一区二区免费高清| 亚洲区限制级| 老鸭窝成人免费毛片视频| 97视频在线| 九九碰九九爱97超| 国产性爱乱伦AV| 91狼人| 中文啪啪视频| 大香蕉宅男伊人| 青青草国产一区二区三区| 青女偷拍网| 日本成a人v网站在线观看| 成人无码在线视频网站| 成人日本视频人妻在线| 欧美一二三区四五区| 日日噜噜夜夜久久亚洲一区二区| 亚洲精品国产拍免费91在线| 校园春色 欧美| 日韩欧美成人午夜福利| 国产成人网| 高清不卡一二三区视频......| 伦理日韩国产久久| 国产亚洲精品A在线观看下载| 69精品久久久久中文字幕| 920日本午夜免费| 青青国产在线拍揄自揄拍| 亚洲精品国产拍免费91在线| AV网站高清无码在线观看| 精品射1999| 97欧美久久久久久久| 亚洲欧美人妻| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | 香蕉在线一区二区三区| 成人熟女视频一区二区三区| 少妇久久久久久| 国产综合永久精品日韩鬼片| 久久久久久久久久久久黄色 | 日韩有码专区| 91碰碰碰| 大屁股熟女一区二区三区| 亚洲无码偷拍| 人妻天天夜夜爽一区二区| 久久精品一区二区三区不卡| 91A欧美电影网站| 操逼不卡中文字幕| 青青草原成人| 天堂种子在线www网资源| 美女干逼2| 精品人体无圣光凹凸| 九九九午夜| 97天天| 偷窥自拍A片| 国产精品电| 5月婷婷6月六月丁香| 韩日巨乳美女免费视频在线观看| 精品视频免费在线一区| 中文久久96| 岛国毛片在线观看免费| 一本一首道人妻少妇免费久久| 精品久久久av无码免费| 日韩AV中文字幕电影| 国产黄色剧情影片麻豆免费播放| 麻豆一区二区三区精品| 操我无码| 日韩日韩日韩-国产乱码精品一区二区| 成人5码视频| 国产精品国产| 狠狠色丁香| 97手机日韩| 97精品国产97久久久| 91亚州| 天天综合精品| 国产欧美日本亚洲精品| 天天综合网~91综合网| 国产精品亚洲一区二区三区四区| 男人的天堂久久| 色欧美天天| 久操91视频| 蜜臀久久在线视频| 色女女女导航| 五月丁香影视| 思思热在线cao| 欧美精品三区| 亚洲天堂综合AV| 国产精品福利资源在线尤物| 激情黄色五月天| 91丨熟女丨丰满熟女| 欧美春色| 欧美日韩222| 91在线精品| 日韩有码专区| 歐美性天天| 操逼日韩无码| 久久久久亚洲熟妇熟女| 黄页网站成人免费| 日韩成人人妻网站| 九九九久千久久激情蜜桃在线看| 亚洲砖码砖专无区2023| 亚洲在线欧美| 天天影视91看看| 欧美美女啪啪视频| 国产精品无码AV网站| 夜夜嗨视频| 很很很很操| 婷婷六月色| 天天做天天爱夜夜爽毛片试看| 色婷婷一区二区三区久久午夜成人不| 97中文天堂| 国产亚州高清国产拍精| 青青在线视频日韩欧美| 亚州国产成人精品女人久久 | 香蕉免费一区二区三区不读 | 日本三级A片网站com| 美女网站黄页| 成人一区二区三区四区| 花野真衣| 五月天激情综合网| 人人插人人搞人人操| 无码久久国产| 天天操夜夜操| 精品对白久久不卡| 蜜桃久久一区二区| 老鸭窝日丰县女人| 人人噜夜夜操| 青草园大香蕉| 性性久久| 亚洲欧美日韩有码| 国产视频三区四区| 强上我不卡卡| 清纯唯美激情四射| 日本一本一区二区三区四区五区欧美日韩中文字幕 | 女人 A一级| 伊人网一本| 天天日少妇逼AV| 天天日天天干天天整| 最新岛国大片| 密乳AV免费观看| 无码不卡亚洲成?人片| 99热销国产这里有精品| 人妻美腿丝袜日韩| 伊人91| 97 国产精品| 大但人体久久久久| 无码粉嫩白虎一线天b区| 日本在线15p| 欧美大色交| 欧美少妇高潮久久91| 热久久99999| 九九九九久久久| 欧美综合自拍成人自拍第二十页| 99热精品在线观看| 日韩99神马视频播放片在线播放| 欧美AB在线观看| 黑丝91视频| 人人污日韩一区二区| 亚洲丝袜色| 中文高清一区二区的| 丰满欧美少妇| 精品国产72| 超碰97久久国| 综合色欧美| 天天综合网网欲色| 久久东京伊人一本到鬼色| 俄罗斯一区二区视频在线观看| 福利操逼| 日韩中文字幕二区| 久久色人体| 欧美婷婷久久| 天堂av最新电影网| 中文字幕日韩精品久久| 少妇高潮对白在线观看| 96精品在线| 精久久久91| 97资源站久久| 色激情综合网站| 影音先锋日本一区二区| 91干熟女| 内射黑人| 91亚洲欧美激情| 男女做爰猛烈动高潮A片免费应用| 五月婷婷丁香六月丁香| 91性高潮久久久久久久久| 久久久草成人网站久久久草成人久久久草久久久 | 日韩Va亚洲va欧美Ⅴa久久| 国产 丝袜 欧美中文 另类| 人妻AV 中文字幕的| 99www.bibizy香蕉资源国产一区二区三区高清 | 国产久久久久久久久一区二区 | 精品视频一区二区| 久久久久亚洲AV无码专区少妇 | 无码操逼天堂| 伦激情人妻另类人妻| 中文字幕精品资源在线| 超碰在线人妻不卡| 日韩天天综合| www.大香| 国产五码丝袜屁眼| 欧洲黄色网| 91久久久久久久| 人妻在线大香蕉| 99999国产精品| 人人射人人操人人摸| 一区麻豆 高清中文字幕| 2020天天色综合| 国产精品盗摄 偷窥盗摄| 91久久久久久| 天天操天天日天天干| 大学生美女口爆| 综合网色| 男人天堂导航| 婷婷中文网| 亚洲色图欧美另类在线| 岛国爱情动作片在国产AV无码专区亚洲AV漫画| 国产精品久久久鸭无码的功能| 91久久伊人婷婷青青草| 自拍偷拍草一草| 极品色社| 久久精品人妻一区| 青青11操操操操操操操操| 白嫩91在线亚洲| 色乱二区| 97久久国产精品| www.伪伪| 欧美日韩亚洲五月天婷婷| 国产在线综合网| 欧美日韩色图片| 亚洲欧洲日韩中文字幕一区| 激情五月天丁香| 破处bbq| 草草影院日本第一页| 97 国产一区| 亚洲欧美日韩免费观看| 蜜臀av中字字幕网站| 91丝袜美女视频| 亚码激情| 日本性爱视频一级| 国产精品毛片| 亚洲欧美激情另类色图| 国产久久久久久| 亚洲图片欧美91N| 97亚洲中文| 96精品在线| 水多多映视AV| 青青草视频导航官网| 9丨亚洲一区二区在线| 综合网,亚洲,欧美| 综合激情二| 9精品在线| 精品午夜福利国产一区二区在线观看| 亚洲素人网| 人人摸人人摸人人干| 亚洲精品 欧美97色色| www成人啪啪18秘 免费| 欧美97色| 欧洲一区二区三区免费| 国产成人自拍视频在线| 九九九九免费| 亚洲欧洲久久天堂| 国产精品秘 福利姬在线观看| 啊啊啊啊好疼| 欧美熟妇操操视频| 色九区| 亚州熟女乱伦| 欧美激情内射| 96免费视频在线| 国产树林里野战在线看| 丰满人妻-区二区三区免费看 | 大香蕉免费乱伦视频| 久久久青青草| 一区,二区,三区视频| 韩国一级做A片免费的| 久久久久9999| 国产乱不卡| 亚洲男人的天堂V| 男女激情黄色网址| 欧美日韩*字幕一区| 国产欧美黑人丰满在线| 久7色| 亚洲天堂7777| 诱惑网综合| 亚洲自拍一区夜夜操| 啊视频在线| 中文字幕丝袜国产第一页不卡| 欧美人妻制服| 操香逼| 99精品久久久久久久婷婷蜜桃| 免费A片三p视频| 欧美视频一区二区三区| 99精品高潮| 丁香久久| 1禁看欧美黄片免费看| 亚洲综合第一页| 青青草原成人| 亚洲国内精品成人不卡| 99热网站| 久久肏大逼| 免费1级a做爰片观看| 蜜臀久久99精品久久久久| 妇女乱色二区| 婷婷性网| 屌妞视频久久久久久久久久久久| 亚洲情色电影网| 久综合网| 中文字幕在线观看丝袜| 日本 欧美 国产一区| 草草影院最新网址| 日本成人A片网站| 97爱爱| 欧美在线天堂| 久久久久久久久一区二区三区| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 久久五十路熟女人妻| 春色综合网| 天天综合站| 国产女人9999| 日韩国产九九精品一区二区三区毛片| 午夜后入| 九九九精品色乱九九九| 国产传媒1234区| 色女网日韩| 大香蕉综合| 亚洲国产剧情少妇激情| 日韩在线人妻网站| 麻豆AV96熟妇人妻| 亚洲区限制级| 精品综合久久久久久97| 俺也射| 久草精品在线| 国产精品白丝| av爱爱爱| 浪人综合网| 欧美精品自慰系列寂寞少妇| 啊啊啊不要好疼视频| 蜜臀国产AV中文字幕| www.狠狠干.coom| 九久9热| 四虎884a| 天天综合站| 大鸡巴久久| 精品九九九| 秋霞一级A片黄色视频| 日韩欧美成人性爱在线| 日本在线视频导航| 日本在线一二| 中文久久96| 亚洲天堂久久| 神马麻豆福利院| 99re9| 欧美日韩亚洲一区二区在线观看| 国产97视频免费观看| 333kkkk·亚洲com久久| 免费精品99| 免费网站观看www在线观| 嗯嗯嗯啊啊啊干死我吧| 亚州综合在线| 久操com| 天天综合精品| 欧洲小说色图视频另类| 99热在线播放| 亚洲日本激情| 一本一道人妻久久一区二区三区 | 啊啊啊好大好深| 人妻偷拍一区二区三区| 日本一级性爱| 98精品国产乱码久久久久久| 亚洲无码日韩电影| 黄色小说亚洲| 亚洲色图第四色| 国产黄色 A 片免费看| 久久久久9| 97人人爱人人做人人乐| 亚洲熟女诱惑| 太久视频| 久久中出在线| 九九九网站| 欧美日韩香蕉| 一区 欧美 日韩 麻豆| 日本97久久| 亚洲精品自拍| 日本三级大片| 亚洲加勒比色图| 亚洲色系另类精品国产| 嗯嗯啊啊视频在线看| 中文字幕一区二区三四五区日日骚| 欧美日韩传媒| 国产大学生口爆吞精合集| 强奸少妇AV导航网| 欧美激情综合网| 操逼日韩无码| 亚洲激情深爱文学小说网站| 欧美性爱第一区| 极品白嫩福利在线| 国产白丝精品在线观看| 天天拍天天操| 超碰97男女| 国产麻豆一级精品视频| 伊人嫩草| 欧美精品久久久久久久久88| 蜜桃视频啊啊啊啊| 天天做日日做天天欢。| 不卡一区视频| 国产 亚洲 丝袜 制服| 99精品伊人| 免费1级a做爰片观看| 久久超碰、| 激情婷婷综合久久| 东京热av男人的天堂| 在线毛片片免费观看| 美女啊啊啊啊啊啊啊| 97爱爱爱| 情色av电影| 99久久亚洲精品无码毛片潘甜甜 | 蜜桃臀一区二区aV| 国产成人在线观看综合| 97亚洲自在精品在线观看| 中国亚洲呦女专区| 97超碰超| 69AV女优男人的天堂| 一级性爱视频免费观看| 97干天天| 看日韩操逼| 美女91网| 97一区二区蜜臀| 黄色激情电影在线观看| 日本一级不卡一二区| 精品人妻美妇91job| 夜夜夜爽www精品视频| 99视频只有精品| 九九九久久久| 大乔未久88一区| av资源在线观看少妇| 少妇的嫩逼图片| 天天看片天天爽| 夜夜天天噜狠狠爱2021| 亚洲色天堂九9| 偷拍伦理视频| 亚洲精品天堂久久A∨51成人漫| 狠狠躁天天躁日日躁97| 欧日韩不卡视.频| yaouchengrenav| 青青草女人天天干| 厕所偷拍在线| 日本国产高清色www视频在线| 新91视频.cmp| 色999偷自拍拍| 亚洲 欧美 手机在线观看| 91 天天综合| 欧美乱妇狂野欧美在线视频| 九色婷婷| 日逼视频日本| 91成人18| 色狠狠一区二区三区香蕉| 亚洲熟妇丝袜在线观看| 高清无码国产亚洲| 免费av在线播放二区| 黄色成年| 成人在线午夜视频一区| 91在线美女| 人人操人人摸人| 思思热在线视频免费| 精品少妇一区二区三区| 九九热在线精品视频| 激情五月天综合网| 亚洲AV无码国产精品久久久久| 熟女探花啪啪| 综合网97| 欧美72网页| 超踫中文字幕| 亚洲色啪| 91free福利| 新久久AV| 久久性爱精品一区| 日本阿v天堂在线观看| 中文字幕熟女人妻丝袜丝| 亚洲色堂免费视频| 中文字幕一区av| 日本理论在线| 96久久精品一二三区色欲| 不卡中文字幕aⅴ在线| 亚州一区二区| 久九色| 久久日韩肥臀| 婷婷10月天青娱乐| 日本精品一区二区三| 亚洲男人的天堂网| 蜜屁Av| 操一区| 久操在97| 嗯嗯啊好大| 日韩精品第3页| 久久天天躁日日躁狠狠躁| 亚洲国产欧美日韩人妻日中文| 91超级碰碰碰| 五月丁香色综合| 亚洲乱熟女一区二区三区大香蕉| 特级丰满少妇一级AAAA爱毛片| 曰韩精品视频一区二区| 国产日产精品久久快鸭的功能介绍| 国产91福利小视频在线观看| 小说区 图片区色 综合区| 超碰午夜| 久久透逼视频| 成人亚欧免费视频| 在线人人人人人人精品超| 嫖老熟女A片一二三区| 人妻中文字幕日韩电影| 欧美日韩性爱电影在线| 国产啊v在线免费播放| 高潮毛片无遮挡高清免费| 午夜无遮挡男女啪啪视频| 中字幕人妻一区二区三区| 南澳成人一级片在线播放| 风间由美日韩欧美久久| 少妇淫妇久久久久久久| 九月伊人中文字幕| 在线日韩精品一区二区三区| 人人人摸人人| 欧美片第一页| 欧美一区二区三区另类精品| 约操熟妇| 狠狠干综合| 亚洲一二三四区机械| 四虎国产成人精品免费一女五男| 久久精品国产精品| 亚洲中文字幕熟女少妇一区二区| A级片一区| 思思热久久成人| 中文字幕性感少妇av| 国产精品老熟女一区二区| 久插综合| 夜夜黄| 日韩国产精品人妻无码久久久| 欧美日韩另类在线播放| 日韩Va亚洲va欧美Ⅴa久久| 久久婷婷色| 偷拍亚洲高清图片| 久9久9久9久9久9久9| 在线视频97| 夜间福利片1000无码| 天天拍天天操| 使劲用力艹少妇视频一区二区| 五十路人妻在线| 91久久久久久久久18| 国产精品干干干| 丝袜 亚洲 偷拍| 东京热熟女亚洲视频网站| 91欧美经典| 夜夜操青青草| 欧美日韩国产中文精品字幕自在自线,| 久操 高清| 啊啊啊好舒服视频| 久久精品国产亚洲AV片多多 | 黑人干亚洲| 欧美精品久久96人妻无码| 亚洲码专区| 久久精品人体AV| 天天日日本| 欧美色视| www.丁香五月| 久久久中文版| AV乱伦国产| 发朗少妇买婬全视频中文| 97av,com| 免费的很黄很污的全部视频| 天天操女人| 精品一级| 亚洲色啪| 久久久999国产精品| 电影69乱码96| 曰本精品久久久| 五十路熟女人妻一区二区在线观看| 啪一啪免费视频| 日韩人妻精品中文字幕| 人妻9117c| 91狠狠综合久久久久久| 一起草视频在线| 亚洲午夜AV| 99re99视频在线免费观看| 天天久久| 一道本久久棕合爱| 美欧色综合| 欧美毛片在线网| 国产熟女无套内射| 91美女中出| 国产熟女一区二区| 五月丁香在线| 欧美色图电影| 天天影视网综合少妇| 97在线免费看视频| 清柠毛片| 12一15性XXXX粉嫩国产| 亚洲日韩青青草色月| 美日韩男女操屄视频| 97人亚洲综合字幕| 少妇久久| 国产精品欧美激在线| 国产美女自拍AV| 精品乱码久久久久| 激情小说成人日本无码一| 色爱欲亚洲| 久操com| 破处bbq| 久久99视频| 欧美色院| 久久中日麻豆| 一区二区三区在线美女| 久久久成人精品| 国产日韩欧美三级片| 五月情色天| 欧美成人亚洲精品| 五月丁香六月综合缴清无码| 97精品视频网站| 日本理论在线| 热99这里有精品综合久久 | 十八禁视频网站| 91天天综合日韩欧美| 精久久久91| 国产精品亚洲一区二区三区四区| 欧美性夜| 天天看高清麻豆| 超碰免费人人| 黑人精品XXX一区一二区| 久久久9品一区二区三区| 91人妻精华帖| 日日夜夜骑| 亚洲中文字幕日产无码久久| 五月婷婷激情网| 日韩操啪| 精品人妻一区二区三区视频在线| 亚洲 se图 欧美电影| 青娱乐日韩无码| 久久在线观看免费视频| 97国产精品在线观看| www老逼91| 亚洲av乱伦色图网站| 天天射天天操天天干天天吃2018 | 国产福利小视频高清在线观看| 中出欧美| 性高潮久久久| 丁香婷婷激情五月天无毒不卡 | 视频国产欧美在线播放| 欧美日韩另类字幕中文| 人人喜人人妻| 日日碰狠狠添天天爽超| 老司机深夜18禁污污网站| 午夜福利区| 久久精品小视频| 亚洲 欧美日韩 另类| 秋霞一级鲁丝片A片| 加勒比aⅴ| 大屁股熟女一区二区三区| 亚洲熟女综合| 99re这里只有精品中心播放| 牛黄色久午久| 黄色区免费观看中文字幕| 香蕉欧美| 2017天天插| 超碰97.com| 青青草精玖玖69精品| 欧美综合站| 超碰99热| 色色色999| 日本精品第一视频在'| 日韩无码三级影院| 日韩免费高清大片在线| 疯操AV| 学生妹天天看| 少妇色综合| 欧美人妻中出| 中文字幕78| 日本伦理一区二区| 麻豆av一区二区三区| 欧美制服网站美腿丝袜| 9久综合网| 天天色香欲综合网| 久久精品亚洲婷婷| 青青草九九九九九| 99天堂网| 九九色综合| 天天插天天插| 色欧美天天| 久久久久精| 中文字幕大片三级狠狠干| 六六久久日韩不卡| 天综合网| 麻豆AV96熟妇人妻| 青青草大香蕉在线视频| 97精品国产精品免费观看| 青女在线| 9997se| 97在线无精品| 超碰在线综合97| 人妻熟女一区二区三区视频| 久久久精精精| 欧美成97爱| 白丝av| 少妇熟女1区2区3区| 日日操免费视频| 一本一道波多野毛片中文在线| 日韩另类| 天天摸天天碰天天添青青| 亚洲熟妇综合久久久久久| 人妻少妇精品| 盗摄女人妻在线| 亚洲性爱高潮影院| 97超碰中文| 91美女在线观看| 色成人Www精品永久观看| 九九成人视频| 色偷综合| 老熟女乱伦片| 国产树林里野战在线看| 成人看片网站| 爽爽爽免费视频| 男人天堂最新手机版在线青青草| www欧美91| 中文字幕第9页萱萱影音先锋| 思思热久久成人| 天天爽天天| 日日夜夜青青草母狗| 超碰97资源网亚洲| 密乳视频在线| 色综合网1| 蜜臀久久99精品久久久久免费观| 欧美在线干| V A在线| 亚洲AV无码成人精品久久| 欧美日韩99精品麻豆传媒| 久久99草| 超碰97亚洲| 大色综合网| 欧美激情亚洲色图| 99精品综合久久久久五月天| 欧洲在线性爱视频| 大香蕉黄色一区| 伊人久久大香线综合无码| 久久精品操| 日韩无码a片| 久操B网| 亚洲人精品久久久| 久久欲| 人妻精品综合中文字幕在线| 免看60秒涩涩视频| 成人无码在线超碰网| 91粉芽高清在线一区二区| 中国的操老妇女| 国产老太乱伦一区| 五月大香蕉| 少妇一区二区三区在线观看| 久久精品电影在线| 亚洲欧美国产成人综合不卡| 日本女厕偷拍| 亚洲精品97| 大香网站| 97丝袜亚洲在线播放| 88xx成人精品视频| 国产蜜臀精品一区免费尤物| av久日| 三级特黄60分钟播放| 青青草亚洲一区| 亚洲熟妇白浆无码AV| 日本激情免费大片| 久久啊啊啊视频| 浓厚中出中文字幕在线| 神马精品视频| 国产一区在线播放| 亚洲婷婷五月天| 欧中美三级一区二区三区| 國產尤物AV尤物在線觀看| 动漫片子网站3黄| 揉揉日日日日| 亚洲色天堂日韩中| 亚洲无码 国产无码| 麻豆福利视频导航| 天天操天天干一区二区 | 思思热在线视频免费| 夜夜福利| 十八禁视频网站| 91人妻少妇| 久久久久9999妇女| 久久一区二区三区入口| 亚洲av资源| 97在线欧洲| 99精品成人免费看| 97色亚洲| 伊人久久蜜月| 五月激情综合网| 十八禁视频一区二区| 亚洲色图 图片| 99热这里是精品| 国产精品盗摄 偷窥盗摄| 大屁股熟女一区二区三区| 六月丁香网| 久久久久人妻二区精品叶可怜| 997色在线| 超碰亚洲欧美日韩无| 久久成人午夜精品影院| www.91视频网| 欧美日韩精品久久| 五月激情影院| 亚洲一曲日韩精品| 日少妇视频| 青青欧美| 香一区二区三区| www网站黄| 亚洲精品白浆高清久久久久久 | 日韩探花精品在线视频| 国产日韩久久| 精品欧美日韩在线观看| 久久久久久久九九九九九九| 欧美性爱伊人| 99e久久国产精品| 高清视频一区| 十八禁电影伊人网| 9超碰免费| 亚洲 欧美 91| 国产精品亚洲免费| 中国少妇XXXX做受| WWW.操逼.COM| 日韩精品一二三| 日韩色女精品| 老熟妇综合| 日本免费不卡二区| 激情婷婷| 亚洲图片偷拍视频区| 国产最新小视频在线播放下载| 亚洲激情视频| 乱人乱色一区二区三区免费| 在线小视频| 蜜臀AV成人精品蜜臀| 97AV爱| 免费夜夜爱黄色视频毛片| 欧美亚洲日本视频久久久| 日韩成人在线性爱视频| 免费岛国一级片| …亚洲黄色厕厕女女在线播…| 综合大香蕉美。| 欧美第一页| 欧美久久人妻少妇一区二区| 在线 亚洲 网爆 自拍| 鲁鲁色综合网| 这里有精品| 天天爽人人综合免费7799| 人人摸人人干人人拍97| 精品一区二区在线针对华人免费观看这里只有精品免费观看 | 91夜夜蜜桃臀1区2区3区| 艹我哪美一区无码| 99热思思| 屌逼麻豆| 极品色社| 欧美亚洲激情小说| AV色天香在线| 久视频在线观看| 久九干| 日韩在线人妻网站| a人欧美综合天堂麻豆| 欧美性,色九九| 亚洲综合小视频小说在线观看| 偷拍欧美激情| 欧美少妇一区二区三区| 国产白领连续中出在线观看| 久久手机好看网站| 4141514逼喷水三级片| 日日夜夜骚| 日本一天色道久久久精品视频| 九九拍拍精品视频在线播放 | 亚洲 国产 精品一区| 日本一区二区成人在线| 熟女视频久久| 九色97| 99热精品国产| 区自美91| 人人妻人人澡人人爽人人精品浪潮 | 91精品女厕偷拍视频| 69少妇一区二区| 国产福利小视频高清在线观看| 岛园激情| 男人亚洲91首页在线| 性色高清在线| 蜜臀th| 96一区二区| 国产高清午夜成人在线观看| 久久久久久久久久久免费精品| 中日亚韩免费视频| 久久性爱城| 欧美三级一级| 偷拍片久久| 91性情| 亚洲激情综合另类男同| 欧美一级黄片免费播放| 欧美78p| 欧美在线视频观看一二三四区高清| 夜夜国自区| 在线免费观看高清无码视频| 能在线播放的国产三级| 成人日韩欧美| 夜夜嗷嗷一区二区| 精品日韩产品在线,日韩在线不卡视频,欧美日韩免费专区/久, | 强上我不卡卡| 亚洲天天精品| 97在线免费观看| aaaa少妇高潮大片| 色av中文字| 少妇特黄一区二区三区| 17c嫩草51久久91嫩草| 在线观看AV片| 天天操女人| 国产av色网| 中文AV制服乱伦| 91Chinese在线| 性生活无遮挡纯毛片在线看| 97久久国产精品女不卡| www.91逼逼.com| 精品久久青青草| 亚州精品人妻一二三区| 成人26uuu| 欧美另类色图片| 在线电影亚洲色图| 亚洲色图尤物视频| 欧美性猛交美女自慰91| 99re6在线视频精品免费完整版安卓版| 欧美裸体美女日麻屄| 色欲日韩欧美在线一区| 丝袜综合| 亚洲人妻在线精品| 99视频自拍| 欧美日韩人妻少妇 一区二区三区| 久久久久亚洲Av无码专区老牛影视| 欧美性爱伊人| 色哟哟av网址| 久久久久亚洲AV无码专区少妇| 日本亚洲vr欧美不卡高清专区| 老熟乱一区二区三区四区| 国产精品极品美女视频| 日本不卡二三区| 日本成人免费一区二区三区| 丝袜熟女2P| 精品亚洲天堂| 婷婷五月色| 少妇色欲综合网2| 久久婷婷综合国际产色怕| 青木玲在线不卡| 性暴力欧美猛交在线直播| 日韩美脚一区二区网站| 亚洲资源一区| 九九伊人网| www.91视频网| 99免费在线视频| 91欧美经典| A V少妇特黄三级| 欧美性性性| 天天干天天拍| 日本色日夜干| 操九九九九九九| 成人羞羞视频国产| 中文字幕在线观看网页| 五月天婷婷在线看| 欧美性战999| 国产美女自拍AV| WWW.加勒比人妻一区不卡.com| 操操逼视频| 亚州综合AⅤ| 国产精品激情久久久久久久| 九七人妻在线| 欧美精品1区2区3区| 欧美丰满少妇交换91欧美精品| 91麻豆va国产精品| 91性网| 美国美女AV在线| 欧美 精品国产制服第一页| 区一二区日韩亚洲乱码av电影| 丰满美女一级毛片在线播放| 97天天操天天干| 国产精品久久久无码AV网站| WWW美腿丝袜香蕉中文| av一区二区三区 中文| 亚洲人综合19| 欧美性爱一内片一区二区三区| 情趣丝袜无码操逼视频| 欧美激情久久久久| 日韩精品一区二区三区色欲| 色综合天天爱去电影网| 久久久久性熟视频| 黄色视频60分钟| 9 1超碰九色| 9久综合网| 欧美日韩电影成人在线| 玖日综合网| 少妇蜜汁| 黄色免费网页无码| 伊人麻豆传媒| 媚薬在线视频麻豆| 中文字幕一区日韩精| 精品少妇999| 是还免费视频1727我| 色播五月丁香| 免费少妇一区二区| 97 国产精品| 97人亚洲综合字幕| av国产无码| 极品销魂美女一区二区| 精久久久| 不卡九肏| 国产超碰人人操| 人人看人人插| 一级AAA片一区二区三区| 天天日天天舔东京热 | 男人的天堂va在线| 操亚州| 亚洲 91 在线| 激情干在线| 日欧操屄| 人人妻人人爽| 久9久精品视频| 久久免费中文字幕在线观看| 97欧美性爱| 98人妻精品一区二区色欲| 91老妇女| 欧美伦乱爱| 啊a一区在线| 久久9视频| 日韩国产乱子伦App| a片自拍直播视频| 91女日逼| 天天躁夜夜躁狠狠躁AV| 综合干干干av久久久综合网| 激情AV| 五月丁香六月激情| 国产白领连续中出在线播放| 一级婬片120分钟试看| 欧美日韩啪啪电影| 中文字幕天天天天天| 乱色视频中文字幕| 操操操日本的逼| 20cm女自慰在线日韩欧美| 色吊丝 日日骚 清纯唯美| 色欲色香天天天综合网www-亚洲综合国| 人妻丝袜无 码视频专区| 国产成人精品日本视频| 欧美性爱91| 丰满人妻一区二区三区性色| 色五月AV| 欧美翘臀视频网站一区二区三区 | 欧美特大AA级黄片| 丰满人妻一区二区三区| 清纯唯美第一页| 99热国产精品| 欧美大色交| 亚洲熟女乱综合一区二区三区| 78久久久| 久久做97| 激情图片亚洲色图| 后入内射蜜桃臀| 啊啊啊好湿国产一二| 美国美女AV在线| 国产精品天美传媒| 嗯嗯嗯嗯啊啊啊好紧好大| 日韩精品.久久精品.AV女优.天美传媒| 婷婷综合网| 色婷婷丁香五月| 欧美躁死她一区二区| 99热在线观看| 亚洲情色电影网| 人妻在线臀日韩| 狠狠搞 亚洲91| 麻豆 亚洲 97| 日韩无码久久熟女一级片| 亚洲精品不卡一二三区| 亚洲男人综合网| 日韩精品一区,二区 九九...老司机| B049AV在线播放| 中出人妻中文字幕91在线| 欧美精品,四区。五区| 久久久久96| 欧美成人精品一区| 精品78| 欧美操人视频| 波多野结衣一级视频|