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

ARTICLE DETAIL

資訊詳情

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

Java短信SDK接入與生產(chǎn)加固實(shí)踐

Java短信SDK接入與生產(chǎn)加固實(shí)踐 1. 短信接口是整個(gè)系統(tǒng)里最不像技術(shù)問題的技術(shù)問題做 Java 后端的人遲早會碰上一件事產(chǎn)品經(jīng)理在需求評審上說就加一個(gè)驗(yàn)證碼很簡單。然后你打開 SDK 文檔看著SendSmsRequest這個(gè)類心里想的是這不就三行代碼嗎。真正把 Java 版本的短信服務(wù) SDK 接進(jìn)去、上線跑上幾個(gè)月以后你會發(fā)現(xiàn)這條鏈路的代碼量確實(shí)很小但它牽扯的東西比很多核心業(yè)務(wù)模塊都多——涉及外部網(wǎng)絡(luò)、涉及錢、涉及用戶體驗(yàn)而且出問題的時(shí)候往往是在半夜。這篇東西不打算復(fù)述官方文檔而是把我在多個(gè)項(xiàng)目里接 Java 短信 SDK 的完整路徑攤開從依賴引入、客戶端初始化、發(fā)送封裝到錯誤碼分層、冪等設(shè)計(jì)、限流降級和監(jiān)控埋點(diǎn)把每一步為什么這么做講清楚。先說清楚范圍。這里討論的短信服務(wù) SDK 的 Java 版本指的是主流云服務(wù)商提供的那套 HTTP 客戶端封裝庫核心能力就三件事調(diào)用發(fā)送接口、解析返回結(jié)構(gòu)、附帶簽名鑒權(quán)。它不是什么重量級中間件本質(zhì)是一個(gè)帶重試和序列化的 HTTP 客戶端。但正因?yàn)楸举|(zhì)簡單大多數(shù)人接的時(shí)候很隨意直接在主線程里new一個(gè)客戶端發(fā)送方法裸調(diào)返回值打印一下就完事。這種寫法在測試環(huán)境永遠(yuǎn)不會出問題因?yàn)闇y試環(huán)境不會觸發(fā)流控、不會出現(xiàn)簽名不匹配、不會因?yàn)橐粭l長短信被拆成三條計(jì)費(fèi)。我見過一個(gè)挺典型的場景某公司的登錄模塊在活動期間被刷驗(yàn)證碼單機(jī) QPS 打滿短信接口開始返回觸發(fā)流控的錯誤碼業(yè)務(wù)代碼沒做任何判斷直接把異常吞掉用戶界面顯示驗(yàn)證碼已發(fā)送實(shí)際上一條都沒發(fā)出去。排查的時(shí)候日志里全是同一句send failed沒有錯誤碼、沒有手機(jī)號脫敏后的追蹤 ID、沒有耗時(shí)統(tǒng)計(jì)只能靠猜。這個(gè)坑的根本原因不是短信 SDK 難用而是接入的時(shí)候把調(diào)用當(dāng)成了集成。調(diào)用只要求你寫出一行能跑通的代碼集成要求你考慮失敗、重復(fù)、延遲、成本和可觀測性。1.1 為什么這條鏈路總在非工作時(shí)間暴露問題短信是典型的強(qiáng)外部依賴它跨越了你和運(yùn)營商之間的整條鏈路你的應(yīng)用 → SDK 的 HTTP 客戶端 → 云服務(wù)商網(wǎng)關(guān) → 運(yùn)營商通道 → 用戶手機(jī)。任何一段抖動都會以發(fā)送失敗或延遲到達(dá)的形式反映到你的業(yè)務(wù)層。而這條鏈路的穩(wěn)定性特點(diǎn)是平時(shí)很穩(wěn)波動很突然白天工作時(shí)段運(yùn)營商通道資源相對寬松夜間批量任務(wù)和營銷短信集中下發(fā)通道壓力大系統(tǒng)級錯誤出現(xiàn)的概率明顯上升。更麻煩的是很多團(tuán)隊(duì)把短信發(fā)送放在同步鏈路里。用戶點(diǎn)擊獲取驗(yàn)證碼請求線程一直阻塞等待短信接口返回讀超時(shí)設(shè)成了默認(rèn)值。一旦上游網(wǎng)關(guān)慢下來你的 Tomcat 線程池會以肉眼可見的速度被占滿然后整個(gè)登錄接口跟著掛掉——短信發(fā)不出去是小事把整個(gè)應(yīng)用的線程資源拖死才是大事。我在一個(gè)項(xiàng)目里就吃過這個(gè)虧壓測的時(shí)候沒模擬短信接口超時(shí)上線后遇到一次網(wǎng)關(guān)抖動二十幾個(gè)線程卡在 read 上接口平均響應(yīng)從 80ms 漲到 3 秒。所以這篇文章的第一個(gè)觀點(diǎn)很明確接短信 SDK 的第一步不是寫發(fā)送代碼而是想清楚它在你的系統(tǒng)拓?fù)淅锾幱谑裁次恢谩K鼞?yīng)該是可失敗、可降級、可異步、可觀測的邊緣依賴而不是一個(gè)同步阻塞的關(guān)鍵路徑節(jié)點(diǎn)。后面的所有章節(jié)無論是超時(shí)配置、異常映射還是限流降級都是圍繞這個(gè)定位展開的。1.2 三個(gè)反直覺的特性決定了代碼的寫法短信發(fā)送有三點(diǎn)和普通內(nèi)部 RPC 調(diào)用完全不同的特性理解了這三點(diǎn)很多設(shè)計(jì)選擇就變得順理成章。第一它是有成本的。每發(fā)一條都計(jì)費(fèi)長短信按條拆分計(jì)費(fèi)。這意味著你不能像調(diào)內(nèi)部服務(wù)那樣無腦重試一次網(wǎng)絡(luò)抖動觸發(fā)的盲目重試可能產(chǎn)生雙倍費(fèi)用更糟糕的是用戶會收到兩條一模一樣的驗(yàn)證碼體驗(yàn)和風(fēng)控都會出問題。第二它是不可撤回的。數(shù)據(jù)庫寫錯了可以改消息發(fā)錯了可以補(bǔ)償短信發(fā)出去就收不回來了。所以發(fā)送之前的校驗(yàn)必須做足手機(jī)號格式、模板參數(shù)合法性、頻率限制、內(nèi)容合規(guī)。所有這些校驗(yàn)都應(yīng)該在調(diào)用 SDK 之前完成把無效請求擋在外面既能省錢又能減少無效調(diào)用。第三它的返回結(jié)果不等于送達(dá)結(jié)果。發(fā)送接口返回成功只代表云服務(wù)商網(wǎng)關(guān)受理了這個(gè)請求不代表用戶手機(jī)收到了。真正的送達(dá)狀態(tài)要靠回執(zhí)上行/下行報(bào)告異步推回來。如果你的業(yè)務(wù)邏輯強(qiáng)依賴用戶一定收到那就得把回執(zhí)鏈路也接上這是很多項(xiàng)目遺漏的部分。2. 動手之前先把四個(gè)模型概念對齊憑證、簽名、模板、回執(zhí)很多人接 SDK 卡住不是因?yàn)?Java 代碼寫不出來而是因?yàn)闆]搞明白短信服務(wù)的四個(gè)核心概念之間的關(guān)系。這四個(gè)東西在控制臺里分散在不同菜單在 SDK 里又分別對應(yīng)不同的字段第一次接觸很容易混。概念控制臺里的位置SDK 字段是否必填常見誤解訪問憑證賬號安全/密鑰管理AccessKeyId / AccessKeySecret必填用主賬號密鑰圖省事簽名短信簽名管理SignName必填以為可以隨便填模板短信模板管理TemplateCode TemplateParam必填把整段內(nèi)容當(dāng)參數(shù)傳回執(zhí)消息回執(zhí)/事件訂閱回調(diào)地址可選以為返回 OK 就是送達(dá)2.1 憑證管理別用主賬號密鑰這是最容易埋雷的地方SDK 初始化需要一對密鑰通常叫 AccessKeyId 和 AccessKeySecret。我在不止一個(gè)項(xiàng)目里看到過有人直接拿主賬號密鑰寫進(jìn)配置文件然后提交到了代碼倉庫。這個(gè)習(xí)慣的風(fēng)險(xiǎn)等級很高主賬號密鑰往往擁有全量權(quán)限一旦泄露損失的不只是短信費(fèi)用。正確的做法是走子賬號RAM 用戶路線創(chuàng)建一個(gè)專用于短信服務(wù)的子賬號只授予短信發(fā)送相關(guān)的權(quán)限策略然后把這對密鑰注入到配置中心或環(huán)境變量里絕不進(jìn)代碼倉庫。密鑰的存放位置我一般按環(huán)境區(qū)分開發(fā)環(huán)境用配置中心的加密配置項(xiàng)測試和生產(chǎn)用 KMS 或配置中心的加密能力容器化部署的話直接用 Secret 掛載成環(huán)境變量。有一個(gè)細(xì)節(jié)容易被忽略密鑰輪換。密鑰不是設(shè)一次就永遠(yuǎn)不管的東西尤其是人員流動之后。我的做法是在配置里同時(shí)支持主密鑰和備用密鑰兩個(gè)字段SDK 客戶端初始化時(shí)優(yōu)先讀主密鑰發(fā)送返回鑒權(quán)類錯誤時(shí)自動切到備用密鑰并打告警。這樣輪換的時(shí)候可以先把新密鑰寫進(jìn)備用位觀察一段時(shí)間無異常后再把主密鑰替換掉實(shí)現(xiàn)無停機(jī)切換。2.2 簽名與模板上線前的兩道審批別等到發(fā)布前才想起簽名是你發(fā)給用戶的那條短信開頭的【某某系統(tǒng)】模板是預(yù)先審核過的內(nèi)容格式。這兩個(gè)東西都需要提前提交審核審核需要時(shí)間而且模板內(nèi)容有明確的規(guī)范限制。我遇到過最尷尬的情況是功能開發(fā)完了聯(lián)調(diào)也過了發(fā)布前一天才發(fā)現(xiàn)模板還沒審核通過硬生生拖了兩天。模板的變量用占位符表示發(fā)送時(shí)通過 TemplateParam 傳一個(gè) JSON 字符串。這里有兩個(gè)高頻錯誤。第一個(gè)是把整個(gè)短信內(nèi)容塞進(jìn)參數(shù)里比如傳{content:您的驗(yàn)證碼是123456}這會被直接拒絕因?yàn)槟0迨枪潭ǖ淖兞恐荒芴顑?nèi)容片段。第二個(gè)是 JSON 轉(zhuǎn)義問題參數(shù)值里包含引號、反斜杠、中文特殊符號的時(shí)候手工拼 JSON 字符串極容易出錯一定要用 JSON 序列化庫生成不要用字符串拼接。提示驗(yàn)證碼類模板的變量只放純數(shù)字不要放任何其他字符。營銷或通知類模板的變量內(nèi)容也要避免出現(xiàn)可能觸發(fā)內(nèi)容審核的詞否則會出現(xiàn)模板審核通過但發(fā)送時(shí)被攔截的情況。另外要提醒的是簽名的數(shù)量限制和命名規(guī)范。多數(shù)平臺對單個(gè)賬號下的簽名數(shù)量有上限簽名的名稱也有格式要求通常要求能體現(xiàn)業(yè)務(wù)歸屬。我的建議是按業(yè)務(wù)線劃分簽名而不是按項(xiàng)目劃分否則簽著簽著就超限了而且用戶手機(jī)上看到的簽名五花八門也不利于品牌統(tǒng)一。2.3 回執(zhí)發(fā)送成功和送達(dá)成功是兩回事發(fā)送接口返回的成功語義是請求已被受理。用戶手機(jī)有沒有收到取決于后續(xù)的通道投遞?;貓?zhí)機(jī)制就是把這個(gè)投遞結(jié)果異步推回給你通常是通過配置一個(gè)回調(diào)地址云服務(wù)商在狀態(tài)變化時(shí) POST 過來。回執(zhí)要不要接取決于業(yè)務(wù)對送達(dá)結(jié)果的敏感度。驗(yàn)證碼場景一般不接用戶沒收到會自己點(diǎn)重發(fā)。但如果是重要的通知類短信比如訂單狀態(tài)變更、審批結(jié)果業(yè)務(wù)可能需要對未送達(dá)的號碼做二次觸達(dá)這時(shí)候回執(zhí)就必須接。接回執(zhí)有兩個(gè)工程上的注意點(diǎn)。第一回調(diào)接口必須做冪等同一條消息可能被推送多次。第二回調(diào)接口必須快速返回不要在回調(diào)里做耗時(shí)業(yè)務(wù)邏輯正確做法是把回調(diào)數(shù)據(jù)落庫或丟進(jìn)消息隊(duì)列異步處理。第三回調(diào)接口要能防偽造多數(shù)平臺提供了簽名校驗(yàn)機(jī)制這個(gè)校驗(yàn)一定要開否則任何人都能往你的回調(diào)地址灌假數(shù)據(jù)。3. 第一行代碼依賴引入與客戶端初始化概念對齊了開始寫代碼。這一節(jié)講的是從零跑通第一條短信的完整路徑包括依賴、配置、初始化和調(diào)用以及那些文檔里不太強(qiáng)調(diào)但實(shí)際很關(guān)鍵的參數(shù)。3.1 依賴引入與版本選擇的取舍Java SDK 通常以 Maven 依賴的形式提供坐標(biāo)以廠商官方文檔為準(zhǔn)。引入的時(shí)候有一個(gè)常見糾結(jié)用最新版還是用穩(wěn)定版。我的經(jīng)驗(yàn)是跟隨官方推薦版本不要自己升到最新。短信 SDK 的版本迭代經(jīng)常涉及底層 HTTP 客戶端的替換比如從某個(gè) HTTP 庫換到另一個(gè)大版本升級可能帶來傳遞依賴沖突尤其是在你已經(jīng)引入了多個(gè)網(wǎng)絡(luò)庫的項(xiàng)目里。!-- 坐標(biāo)以官方文檔為準(zhǔn)這里僅示意結(jié)構(gòu) -- dependency groupIdcom.example.sms/groupId artifactIdsms-sdk-java/artifactId versionx.y.z/version exclusions !-- 如果項(xiàng)目已統(tǒng)一使用某 HTTP 客戶端可以排除 SDK 自帶的以減小包體 -- exclusion groupIdcom.example.http/groupId artifactIdhttp-client/artifactId /exclusion /exclusions /dependency排除傳遞依賴這件事要慎重SDK 內(nèi)部如果直接調(diào)用了被排除庫的類運(yùn)行時(shí)就會拋 NoClassDefFoundError。穩(wěn)妥的做法是先不排除用mvn dependency:tree看看有沒有版本沖突有沖突再針對性處理。我在一個(gè)老項(xiàng)目里就因?yàn)槊つ颗懦艘粋€(gè) JSON 庫導(dǎo)致 SDK 內(nèi)部序列化參數(shù)時(shí)報(bào)錯排查了半天才發(fā)現(xiàn)是依賴被剝掉了。3.2 客戶端初始化超時(shí)和連接池是重點(diǎn)客戶端對象應(yīng)該全局單例不要每次發(fā)送都 new 一個(gè)。SDK 內(nèi)部維護(hù)著 HTTP 連接池頻繁創(chuàng)建銷毀客戶端等于放棄了連接復(fù)用在高并發(fā)下會顯著增加延遲和文件句柄占用。正確的做法是用 Spring 的Bean或者靜態(tài)單例持有它。Configuration public class SmsClientConfig { Value(${sms.access-key-id}) private String accessKeyId; Value(${sms.access-key-secret}) private String accessKeySecret; Value(${sms.endpoint}) private String endpoint; Bean(destroyMethod shutdown) public SmsClient smsClient() { ClientConfig config new ClientConfig() .setAccessKeyId(accessKeyId) .setAccessKeySecret(accessKeySecret) .setEndpoint(endpoint) // 連接超時(shí)建連階段建議 2-3 秒 .setConnectTimeoutMillis(3000) // 讀超時(shí)等響應(yīng)的階段建議 5 秒左右 .setReadTimeoutMillis(5000) // 連接池上限按你的并發(fā)量估 .setMaxIdleConnections(50) .setMaxConnections(200) // 開啟自動重試要謹(jǐn)慎見下一節(jié) .setAutoRetry(false); return new SmsClient(config); } }這幾個(gè)參數(shù)值得展開說。連接超時(shí)設(shè)短一點(diǎn)因?yàn)榻ㄟB失敗通常是網(wǎng)絡(luò)層面的問題等再久也沒用快速失敗對業(yè)務(wù)更友好。讀超時(shí)設(shè)長一點(diǎn)但也不能太長5 秒是個(gè)比較平衡的值——太短會誤殺正常但稍慢的請求太長會把調(diào)用線程拖住。連接池上限要根據(jù)你的實(shí)際并發(fā)估算假設(shè)峰值每秒 200 條每條平均耗時(shí) 200ms那么并發(fā)連接數(shù)大約是 200 × 0.2 40留兩倍余量設(shè)成 80 到 100 比較合適。setAutoRetry(false)這一項(xiàng)是我踩過坑之后的固定選擇。SDK 自帶的自動重試通常是針對網(wǎng)絡(luò)異常配置的但短信是外部副作用操作重試意味著可能重復(fù)發(fā)送。寧可自己在業(yè)務(wù)層做可控的重試也不要讓 SDK 在背后悄悄重試。后面第 5 章會講重試的正確邊界。3.3 跑通第一條短信與返回結(jié)構(gòu)的解讀public SendResult send(String phone, String templateCode, String paramJson, String bizId) { SendSmsRequest request new SendSmsRequest() .setPhoneNumbers(phone) .setSignName(signName) .setTemplateCode(templateCode) .setTemplateParam(paramJson) // 業(yè)務(wù)流水號用于對賬和追蹤強(qiáng)烈建議傳 .setOutId(bizId); SendSmsResponse response smsClient.sendSms(request); return SendResult.builder() .requestId(response.getRequestId()) .bizId(response.getBizId()) .code(response.getCode()) .message(response.getMessage()) .build(); }返回結(jié)構(gòu)里有四個(gè)字段值得關(guān)注。Code是業(yè)務(wù)狀態(tài)碼OK代表受理成功其余都是失敗具體錯誤碼見第 5 章。Message是描述信息給人看的不要用它做程序判斷。RequestId是本次請求的唯一標(biāo)識出問題找云服務(wù)商排查時(shí)必須提供這個(gè)。BizId是這條短信在服務(wù)端的回執(zhí) ID接了回執(zhí)鏈路的話回執(zhí)推送里會帶上這個(gè) ID用它來關(guān)聯(lián)發(fā)送記錄和送達(dá)結(jié)果。提示日志里一定要打 RequestId 和 BizId但手機(jī)號必須脫敏。常見做法是保留前三后四中間用星號替代或者干脆只打手機(jī)號的哈希值。手機(jī)號屬于敏感信息明文落盤在合規(guī)上是有問題的。4. 把裸調(diào)用封裝成可維護(hù)的發(fā)送服務(wù)直接調(diào) SDK 的代碼寫起來最快但三個(gè)月后維護(hù)起來最痛苦。我見過的所有短信相關(guān)的事故復(fù)盤里幾乎都有一條共性發(fā)送邏輯散落在各個(gè)業(yè)務(wù)模塊每個(gè)地方對返回碼的處理方式都不一樣有的判斷了有的沒判斷有的判斷了但把錯誤吞掉了。所以第二步是把發(fā)送能力收攏成一個(gè)服務(wù)層。4.1 校驗(yàn)前置把無效請求擋在調(diào)用之前調(diào)用 SDK 之前應(yīng)該做一輪完整的本地校驗(yàn)包括手機(jī)號格式、模板參數(shù)、頻率限制、黑名單。這些校驗(yàn)的意義不只是防止報(bào)錯更重要的是省錢——每一次無效調(diào)用都是白花花的費(fèi)用。手機(jī)號校驗(yàn)我一般分兩層。第一層是格式層用正則判斷位數(shù)和號段這個(gè)成本極低。第二層是歸一化去掉空格、橫線、加號前綴、國家碼前綴統(tǒng)一成純數(shù)字格式。我遇到過用戶從通訊錄復(fù)制號碼帶上了不可見字符導(dǎo)致發(fā)送失敗日志里看起來號碼一模一樣實(shí)際上是編碼不同。歸一化的時(shí)候順手把這類字符過濾掉。private static final Pattern CN_MOBILE Pattern.compile(^1[3-9]\\d{9}$); private String normalize(String raw) { if (raw null) return null; String s raw.replaceAll([\\s\\-()], ) .replaceAll(\\u00A0, ) // 不換行空格 .replaceAll(\\uFEFF, ); // BOM if (s.startsWith(86) s.length() 13) { s s.substring(2); } return CN_MOBILE.matcher(s).matches() ? s : null; }模板參數(shù)的校驗(yàn)同樣重要。驗(yàn)證碼類的參數(shù)必須是純數(shù)字長度和模板里定義的位數(shù)一致通知類的參數(shù)要檢查長度因?yàn)閰?shù)過長會導(dǎo)致短信被拆成多條長短信費(fèi)用翻倍用戶體驗(yàn)也差。我一般會在服務(wù)層設(shè)一個(gè)參數(shù)總長度的硬上限超過直接拒絕并打日志這樣可以及時(shí)發(fā)現(xiàn)調(diào)用方傳了異常內(nèi)容。4.2 異常映射把三種失敗區(qū)分開SDK 調(diào)用可能產(chǎn)生三類失敗這三類的處理方式完全不同混在一起處理是很多 bug 的根源。第一類是業(yè)務(wù)校驗(yàn)失敗比如手機(jī)號非法、模板不存在、簽名不匹配、余額不足。這類失敗重試也沒用必須把明確的錯誤原因反饋給調(diào)用方讓它去修正參數(shù)或提示用戶。第二類是觸發(fā)流控也就是短時(shí)間內(nèi)發(fā)送頻率超限。這類失敗是有可能自愈的等一會兒再發(fā)可能就成功了但絕不能立刻重試立刻重試只會讓情況更糟。第三類是系統(tǒng)級失敗包括網(wǎng)絡(luò)超時(shí)、服務(wù)端 5xx、網(wǎng)關(guān)異常。這類失敗是唯一值得重試的類別但必須有次數(shù)上限和退避策略。public enum SmsErrorType { BIZ_ERROR, // 參數(shù)/配置問題不重試 RATE_LIMITED, // 流控延遲后再試 SYSTEM_ERROR, // 網(wǎng)絡(luò)/服務(wù)端問題可有限重試 UNKNOWN } public SmsErrorType classify(String code) { if (code null) return SmsErrorType.UNKNOWN; if (OK.equalsIgnoreCase(code)) return SmsErrorType.UNKNOWN; if (code.startsWith(isv.)) { // 業(yè)務(wù)側(cè)錯誤多數(shù)不可重試 return code.toLowerCase().contains(limit) ? SmsErrorType.RATE_LIMITED : SmsErrorType.BIZ_ERROR; } if (code.startsWith(isp.)) { return SmsErrorType.SYSTEM_ERROR; } return SmsErrorType.UNKNOWN; }把錯誤分類邏輯獨(dú)立出來好處是后續(xù)所有調(diào)用方都復(fù)用同一套判斷不會出現(xiàn)有的地方重試有的地方不重試。這個(gè)分類方法建議配單元測試把每個(gè)錯誤碼對應(yīng)的分類固定下來將來錯誤碼有新增時(shí)至少能保證已有邏輯不被改壞。4.3 發(fā)送結(jié)果對象給上層一個(gè)穩(wěn)定的契約不要讓業(yè)務(wù)層直接接觸 SDK 的 Response 對象。這有兩層原因一是 SDK 對象字段多、含義雜業(yè)務(wù)層用不上二是將來換服務(wù)商的時(shí)候如果業(yè)務(wù)層到處引用了 SDK 類型遷移成本會非常高。我通常定義這樣一個(gè)結(jié)果對象public class SendResult { private boolean success; // 是否成功受理 private String requestId; // 請求追蹤 ID private String bizId; // 回執(zhí)關(guān)聯(lián) ID private SmsErrorType errorType; // 錯誤分類 private String errorCode; // 原始錯誤碼 private String errorMessage; // 原始錯誤描述 private long costMillis; // 本次調(diào)用耗時(shí) }這個(gè)對象里我特意加了耗時(shí)字段。短信接口的響應(yīng)時(shí)間分布很有參考價(jià)值正常情況下 P99 應(yīng)該在幾百毫秒內(nèi)如果某段時(shí)間整體拉長了往往意味著上游網(wǎng)關(guān)在承壓是個(gè)早期預(yù)警信號。把耗時(shí)打進(jìn)日志配合日志平臺做聚合比事后追查要省事得多。5. 錯誤碼逐個(gè)拆從返回字符串到可執(zhí)行動作錯誤碼是短信集成里信息密度最高的部分。文檔里通常給了一張大表但實(shí)際做的時(shí)候真正重要的不是背下來而是知道每個(gè)錯誤碼背后應(yīng)該采取什么動作。這一節(jié)按我實(shí)際遇到的頻率排個(gè)序。5.1 高頻錯誤碼與處置動作對照錯誤碼示意含義觸發(fā)原因處置動作OK受理成功正常記錄 bizId等待回執(zhí)isv.MOBILE_NUMBER_ILLEGAL號碼非法格式錯誤、空號段不重試提示用戶檢查isv.SMS_TEMPLATE_ILLEGAL模板不合法模板 ID 錯、未審核、已下線不重試告警檢查配置isv.SMS_SIGNATURE_ILLEGAL簽名不合法簽名未審核或拼寫不一致不重試告警isv.BUSINESS_LIMIT_CONTROL觸發(fā)流控單號碼或全局頻率超限延遲重試檢查限流配置isv.AMOUNT_NOT_ENOUGH余額不足賬戶欠費(fèi)不重試立即告警到人isp.SYSTEM_ERROR服務(wù)端異常上游系統(tǒng)抖動有限次重試這張表里最值得說的是BUSINESS_LIMIT_CONTROL和AMOUNT_NOT_ENOUGH。流控錯誤的坑在于它有可能是單號碼級別的也可能是全局級別的返回的錯誤碼是同一個(gè)但處理方式完全不同。判斷方法很簡單如果同一時(shí)刻所有號碼都失敗那就是全局流控需要檢查自己的賬號配額和發(fā)送速率如果只有某一個(gè)號碼反復(fù)失敗那就是針對這個(gè)號碼的頻控。我的做法是在限流邏輯里對號碼維度單獨(dú)計(jì)數(shù)發(fā)送失敗時(shí)先查本地計(jì)數(shù)能快速定位是哪一類。余額不足這個(gè)錯誤是最容易造成靜默失敗的。因?yàn)樗菢I(yè)務(wù)錯誤很多代碼邏輯會把它歸到不重試的類別里然后打一行日志就結(jié)束了。結(jié)果就是賬戶欠費(fèi)三天所有驗(yàn)證碼都發(fā)不出去直到有用戶投訴才被發(fā)現(xiàn)。我的建議是余額不足、簽名非法、模板非法這三個(gè)錯誤碼必須觸發(fā)即時(shí)告警通過釘釘、企業(yè)微信或者郵件推到值班人而不是只寫日志。5.2 排查一條發(fā)送失敗的正確順序線上反饋收不到驗(yàn)證碼的時(shí)候很多人的第一反應(yīng)是去翻應(yīng)用日志但更高效的做法是從外往里查。第一步看發(fā)送接口的返回碼。這是最快的一步直接決定問題在上游還是在下游。如果返回碼不是 OK按上表處置基本十分鐘內(nèi)能定位。如果返回 OK說明請求已經(jīng)被受理問題在投遞環(huán)節(jié)繼續(xù)下一步。第二步用 RequestId 或 BizId 去服務(wù)商控制臺查發(fā)送記錄。控制臺能看到這條短信的完整狀態(tài)流轉(zhuǎn)已提交、已發(fā)送、已送達(dá)、發(fā)送失敗。如果控制臺顯示發(fā)送成功但用戶說沒收到那問題在終端側(cè)可能是手機(jī)號輸錯了、手機(jī)裝了攔截軟件、或者用戶手機(jī)欠費(fèi)停機(jī)。第三步如果控制臺顯示發(fā)送失敗且原因是空號或停機(jī)這就是業(yè)務(wù)數(shù)據(jù)問題需要在注冊或下單環(huán)節(jié)加強(qiáng)對號碼有效性的校驗(yàn)。這個(gè)順序看起來簡單但實(shí)際排查的時(shí)候經(jīng)常被跳過。我見過有同事直接從檢查代碼邏輯開始查查了兩個(gè)小時(shí)最后發(fā)現(xiàn)是模板被下線了返回碼早就寫清楚了。5.3 重試的邊界到底在哪重試的設(shè)計(jì)有三條原則每一條都是踩坑換來的。第一只對系統(tǒng)級錯誤重試。業(yè)務(wù)錯誤重試是純粹的浪費(fèi)還會放大日志噪音。流控錯誤可以重試但必須延遲而且要區(qū)分是單號碼頻控還是全局頻控——單號碼頻控重試沒有意義用戶等一會兒自己會點(diǎn)重發(fā)。第二重試次數(shù)必須有硬上限。我一般設(shè) 2 次最多 3 次。每次重試間隔用指數(shù)退避比如 200ms、600ms、1.8s??偤臅r(shí)控制在讀超時(shí)的兩倍以內(nèi)避免線程被長時(shí)間占用。第三重試必須有冪等保護(hù)。這一條最容易被忽略。如果第一次請求實(shí)際上已經(jīng)成功只是響應(yīng)在網(wǎng)絡(luò)中丟失了你的重試會導(dǎo)致用戶收到兩條短信。解決辦法是給每次業(yè)務(wù)發(fā)送分配一個(gè)唯一的 OutId并且在下游做去重——但短信服務(wù)端一般不會基于 OutId 去重所以更實(shí)際的做法是在應(yīng)用層做重試之前先查一下本地發(fā)送記錄如果這條業(yè)務(wù)流水已經(jīng)標(biāo)記為成功就不再重試。public SendResult sendWithRetry(SmsCommand cmd) { SendResult last null; long backoff 200L; for (int i 0; i MAX_RETRY; i) { last doSend(cmd); if (last.isSuccess()) return last; if (last.getErrorType() ! SmsErrorType.SYSTEM_ERROR) return last; if (i MAX_RETRY) break; sleepQuietly(backoff); backoff * 3; } return last; }6. 生產(chǎn)加固冪等、限流、異步、降級跑通了、封裝了、錯誤碼也處理了代碼看起來沒問題了。但在真實(shí)流量下還差四道加固。這一節(jié)講的是從能用到敢在大促期間用的距離。6.1 冪等設(shè)計(jì)從業(yè)務(wù)流水號到發(fā)送記錄冪等的核心是給每一次用戶意圖分配一個(gè)唯一的業(yè)務(wù)標(biāo)識然后保證同一個(gè)標(biāo)識只會真正觸發(fā)一次發(fā)送。這個(gè)標(biāo)識通常由業(yè)務(wù)側(cè)生成比如登錄驗(yàn)證碼 用戶 ID 時(shí)間窗口的組合哈希或者直接用一個(gè)全局唯一的請求 ID。落地方式是在發(fā)送前先查一次記錄表發(fā)送成功后寫入記錄。這張表要能支撐高頻寫入字段包括業(yè)務(wù)標(biāo)識、手機(jī)號哈希、模板碼、狀態(tài)、RequestId、BizId、創(chuàng)建時(shí)間。狀態(tài)分為發(fā)送中、成功、失敗發(fā)送中的記錄要設(shè)過期時(shí)間避免因?yàn)檫M(jìn)程崩潰導(dǎo)致記錄一直卡在中間狀態(tài)。這里有個(gè)細(xì)節(jié)值得注意狀態(tài)表不能用手機(jī)號做唯一鍵要用業(yè)務(wù)標(biāo)識做唯一鍵。因?yàn)橥粋€(gè)手機(jī)號在不同業(yè)務(wù)場景下發(fā)送是允許的比如一分鐘內(nèi)既能收到登錄驗(yàn)證碼又能收到支付驗(yàn)證碼用手機(jī)號做唯一鍵會誤殺。6.2 限流三層限流缺一不可短信的限流要做三層少一層都可能出問題。第一層是賬號級限流防止整體用量超過配額導(dǎo)致被平臺限速。這一層通常用令牌桶實(shí)現(xiàn)速率按你的套餐額度和業(yè)務(wù)峰值設(shè)置。第二層是場景級限流登錄驗(yàn)證碼、注冊驗(yàn)證碼、通知類短信分別設(shè)置不同的速率上限。這樣即使某一類場景被刷也不會影響其他場景。這層是防止單點(diǎn)故障擴(kuò)散的關(guān)鍵。第三層是用戶級限流同一個(gè)手機(jī)號在時(shí)間窗口內(nèi)的發(fā)送次數(shù)限制這層既是成本控制也是風(fēng)控。常見的規(guī)則是同號碼 1 分鐘內(nèi)最多 1 條1 小時(shí)內(nèi)最多 5 條24 小時(shí)內(nèi)最多 10 條。// 用戶級限流示意用本地緩存或 Redis 計(jì)數(shù)器都行 public boolean allowSend(String phone) { String keyMinute sms:min: md5(phone); String keyHour sms:hour: md5(phone); String keyDay sms:day: md5(phone); if (counter.get(keyMinute) 1) return false; if (counter.get(keyHour) 5) return false; if (counter.get(keyDay) 10) return false; counter.incrementAll(keyMinute, keyHour, keyDay); return true; }用 Redis 做計(jì)數(shù)器的時(shí)候要注意過期時(shí)間的設(shè)置以及原子性。用INCR加EXPIRE兩步操作會有競態(tài)推薦用 Lua 腳本或者帶過期參數(shù)的原子命令。6.3 異步化把發(fā)送從用戶請求線程里挪出去這個(gè)改造對用戶體驗(yàn)的提升是最直接的。原來的流程是用戶點(diǎn)發(fā)送驗(yàn)證碼請求線程同步調(diào)用短信接口用戶要等接口返回才能看到已發(fā)送提示。改造后變成請求線程只做校驗(yàn)、限流、生成任務(wù)、投遞到線程池或消息隊(duì)列立刻返回后臺消費(fèi)者實(shí)際調(diào)用 SDK 發(fā)送。異步化之后短信接口的抖動就不會傳導(dǎo)到用戶請求上了。但異步也帶來了新的問題發(fā)送失敗怎么辦答案是把發(fā)送記錄的狀態(tài)維護(hù)好失敗時(shí)按策略重試或標(biāo)記失敗用戶點(diǎn)重新發(fā)送的時(shí)候能看到真實(shí)狀態(tài)。線程池的配置要單獨(dú)隔離不要和業(yè)務(wù)的公共線程池混用。核心線程數(shù)按發(fā)送峰值估算隊(duì)列要有界拒絕策略用 CallerRuns 或者直接丟棄并打日志——絕不能用無界隊(duì)列那等于把內(nèi)存當(dāng)緩沖出問題是遲早的。6.4 降級與多通道容災(zāi)單一服務(wù)商總有不可用的時(shí)候尤其是大促期間。降級方案有兩個(gè)層次。輕量級的做法是配置降級開關(guān)當(dāng)短信發(fā)送失敗率超過閾值比如連續(xù) 1 分鐘失敗率超過 30%自動切換到降級模式驗(yàn)證碼場景改為純語音播報(bào)或者干脆在頁面上給出明確提示短信通道繁忙請稍后再試避免用戶在那里干等。重量級的做法是雙服務(wù)商容災(zāi)同時(shí)接入兩家的 SDK主通道失敗時(shí)自動切到備用通道。這個(gè)方案的工程成本不低因?yàn)閮杉业哪0?、簽名都要各自申請返回碼體系也不同需要做一層統(tǒng)一的抽象。但對短信強(qiáng)依賴的業(yè)務(wù)來說這是必要的投入。實(shí)現(xiàn)上可以定義一個(gè)SmsProvider接口兩個(gè)實(shí)現(xiàn)類分別包裝兩家的 SDK用一個(gè)路由策略決定走哪個(gè)通道。7. 驗(yàn)證碼之外批量通知、可觀測性與成本接完主鏈路剩下的是一些容易被忽略但影響很大的工程細(xì)節(jié)。這一節(jié)講三塊批量發(fā)送的正確姿勢、監(jiān)控指標(biāo)怎么設(shè)計(jì)、成本怎么摳。7.1 批量發(fā)送不要用循環(huán)單發(fā)通知類短信經(jīng)常是批量場景比如給一批用戶發(fā)活動通知。最常見的錯誤寫法是 for 循環(huán)調(diào)用單發(fā)接口一千個(gè)用戶就是一千次 HTTP 請求耗時(shí)不說還容易觸發(fā)賬號級流控。SDK 一般提供了批量發(fā)送接口支持一次傳入多個(gè)號碼用逗號分隔但要注意三個(gè)限制。第一單次批量有號碼數(shù)量上限通常是幾百到一千個(gè)超過要自己分批。第二批量發(fā)送的模板參數(shù)是共享的如果每個(gè)用戶的內(nèi)容不同就不能用批量接口只能在應(yīng)用層并發(fā)單發(fā)。第三批量接口的返回是全成功或全失敗不提供逐個(gè)號碼的結(jié)果需要單獨(dú)查詢。所以實(shí)際做法是內(nèi)容相同的場景用批量接口分批調(diào)用每批之間加一點(diǎn)間隔避免瞬時(shí)壓力內(nèi)容不同的場景用單發(fā)但要控制并發(fā)度用一個(gè)固定大小的線程池或者信號量限流不要把下游打爆。7.2 監(jiān)控指標(biāo)四個(gè)必須埋的點(diǎn)短信鏈路的監(jiān)控我一般埋四組指標(biāo)缺一不可。第一組是發(fā)送量與成功率按場景、按模板、按小時(shí)聚合。成功率突然下跌是最直接的問題信號。第二組是錯誤碼分布尤其要關(guān)注幾個(gè)高危錯誤碼的出現(xiàn)次數(shù)余額不足、簽名非法、模板非法。這三個(gè)指標(biāo)應(yīng)該配置成零容忍告警出現(xiàn)一次就通知到人。第三組是調(diào)用耗時(shí)分布重點(diǎn)看 P95 和 P99。耗時(shí)的突然拉長往往預(yù)示著上游網(wǎng)關(guān)承壓是故障的早期信號。第四組是被限流攔截的請求數(shù)包括平臺側(cè)返回的流控錯誤和本地限流攔截的數(shù)量。本地?cái)r截?cái)?shù)量突增通常意味著有人在刷驗(yàn)證碼需要聯(lián)動風(fēng)控。這幾個(gè)指標(biāo)用 Micrometer 埋點(diǎn)接到 Prometheus 上看板就行成本很低但收益很大。我的經(jīng)驗(yàn)是有了這四組指標(biāo)絕大多數(shù)短信問題都能在用戶投訴之前被發(fā)現(xiàn)。7.3 成本控制長短信和無效號碼是最大的兩個(gè)坑短信成本有兩塊很容易失控。第一塊是長短信。一條普通短信的計(jì)費(fèi)長度是 70 字含簽名超過 70 字會按長短信拆分每 67 字計(jì)一條費(fèi)。如果你的模板參數(shù)里塞了 URL 或者長段文字很容易把一條變成三條成本直接翻三倍??刂品椒ㄊ窃谀0逶O(shè)計(jì)階段就把內(nèi)容控制在 70 字以內(nèi)參數(shù)只放必要信息URL 用短鏈。第二塊是無效號碼??仗枴⑼C(jī)、錯號發(fā)出去照樣計(jì)費(fèi)所以號碼有效性校驗(yàn)很關(guān)鍵。除了本地格式校驗(yàn)還可以接號碼檢測能力把明顯無效的號碼在入庫階段就過濾掉。另外對發(fā)送返回號碼非法的記錄做定期統(tǒng)計(jì)如果某個(gè)業(yè)務(wù)線的非法率異常高說明上游數(shù)據(jù)源有問題需要從源頭治理。第三塊是重發(fā)。用戶頻繁點(diǎn)重新發(fā)送會顯著增加成本前端應(yīng)該做按鍵倒計(jì)時(shí)后端要做頻控兜底。這兩道防線都必須在只靠前端是不夠的接口可以被直接調(diào)用。提示成本監(jiān)控建議做成日報(bào)把每日發(fā)送量、失敗量、拆分率、活躍號碼數(shù)做成趨勢圖。成本異常往往不是一天漲上去的而是慢慢爬坡日報(bào)能讓你在一周內(nèi)發(fā)現(xiàn)異常而不是一個(gè)月后發(fā)現(xiàn)賬單翻倍。8. 我在這條鏈路上交過的兩次學(xué)費(fèi)第一次是把發(fā)送放在了事務(wù)里。當(dāng)時(shí)的實(shí)現(xiàn)是注冊接口里先插用戶表再發(fā)驗(yàn)證碼兩個(gè)操作在一個(gè)Transactional方法里。短信發(fā)送失敗拋異常事務(wù)回滾用戶注冊失敗這看起來合理實(shí)際上非常糟糕短信已經(jīng)發(fā)出去了但數(shù)據(jù)庫回滾了用戶收到驗(yàn)證碼卻無法完成注冊重新注冊又會收到第二條。這個(gè)設(shè)計(jì)錯誤的本質(zhì)是把外部副作用和本地事務(wù)混在一起。正確做法是把發(fā)短信挪到事務(wù)提交之后用TransactionSynchronizationManager的 afterCommit 回調(diào)或者事務(wù)事件監(jiān)聽。第二次是被短信回執(zhí)坑了。當(dāng)時(shí)以為發(fā)送返回 OK 就萬事大吉沒有接回執(zhí)結(jié)果在一次通道故障中大量短信顯示發(fā)送成功但用戶普遍反映沒收到。事后追溯才發(fā)現(xiàn)那段時(shí)間該通道的下行投遞大面積失敗控制臺里有一堆已提交未送達(dá)的記錄但我們沒有任何告警。接了回執(zhí)之后這種情況就能通過提交成功但回執(zhí)失敗率上升及時(shí)發(fā)現(xiàn)。如果現(xiàn)在讓我重新接一遍我會按這樣的順序做先理清場景和模板把簽名和模板提前審核然后搭好服務(wù)層把校驗(yàn)、錯誤分類、結(jié)果對象、冪等和限流一次性做進(jìn)去接著配置監(jiān)控和告警確保余額、簽名、模板三類問題能第一時(shí)間知道最后才是異步化和多通道容災(zāi)這些優(yōu)化項(xiàng)。順序很重要因?yàn)榍皟刹绞堑鼗竺嫠袃?yōu)化都建立在它們之上。至于代碼本身有多簡單其實(shí)不重要——難的一直都不是那幾行調(diào)用。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
夜夜爽夜夜操| 精品久久久九九九孕妇| 91色s| jizzjizz欧美| 亚洲熟女乱综合一区二区在线-...亚洲国产日韩欧美一区二区三区,久久久久久精 | 日韩女优在线| 国产精品久久久久久亚洲色欲| 亚洲黑丝在线| 老司机深夜18禁污污网站| 精品v1区| 无码国产精品久久久久| 久久久久白虎| 亚欧中文字幕在线视频| 亚洲精品影视老司机| 屁股久久久久久久久| 亚洲 欧美日韩 另类| 亚洲图片 欧美电影| 日韩性爱播放| AA级电影三区| 欧美高清16| 狠肏骚人妻| 久操视频资源站公开| 91欧美网| 91九色蝌蚪在线观看| 国产精品宅男免费| h在线看免费版在线看| 99re免费| 麻豆AV一区二区天美传媒| AV天天综合| 777琪琪午夜免费A片| 97人妻人人躁人人玩人人| 97中文天堂| 九色在线熟女国产黑人| 一区二区免费电影久久| 精品女同一区二区三区| daxiangjiao你懂的| 欧亚综合一卡二卡中文字幕| 国产97视频免费观看| 亚洲国产美女久久久久| 啊啊啊爽爽| 97在线日韩中文字幕| 国产精品久久久久久夜夜夜| 亚洲综合小说另类图欧美视频激情小说色五月天 | 亚洲暴力强奸AV| 偷拍亚洲| 97超碰人人操人人操| 四虎在线视频| 亚洲少妇视频| 一本色道久久综合精品婷婷| 夫妻日逼| 亚洲综合电影| 欧美AAAA黄片| 亚洲中文字幕在线视频一区二区| 国产91 丝袜在线播放00-百度| 久久久精品视频欧州站| 97视频网站| 欧美72网页| 1769成人国产精品视频| 午夜超碰| 久久超碰日韩精品| 蜜桃av色偷偷av老熟女| 亚洲无码精品AV久久久| 高清无码久操视频| 天天操av懂色| 日韩成人免费电影| 欧日韩不卡视.频| 激情五月天婷婷| 日韩精品一二三四| 吉田爱美AV在线| 高清不卡一二三区视频......| 五月丁香六月| 麻豆影音天美视频| 无码精品啪啪啪一区二区三区三州| 啊啊啊要高潮了| 亚洲AV在线资源| 蜜汁欧美| 一级毛片久久久久久久女人18| 日韩高清黄片| 91日本在线观看| 狠狠干,狠狠操| 婷婷综合五月天| 久久国色天香香蕉| #NAME?| 啊啊啊啊好疼视频| 美女啊啊啊啊啊啊| 一二三区操逼国产91| 日本爽爽爽爽爽爽免费视频| 国产精品美女| 亚洲成人免费中文字幕| 中国人高清www色视频免费| 国产亚洲色婷婷99精品91| 五月色网| 婷婷五月天久久精品视频一区二区三区| 偷拍欧美激情| 91美女国产在线| 久久精品熟妇丰满人妻99| 国产高清亚洲日韩一区| 久久久久久AⅤ无码免费肉站| 中文字幕 国产 精品| 欧美精品在线观看| 久久久91福利姬| 国产老太乱伦一区| 最近的最新的中文字幕视频| 欧亚久久偷拍视频| 天天干人人乐| 伊人影院综合是一个与深夜成人在线| 91美女中出| 中文字幕人乱码中文字的预防方法 | 最新国产精品| 超碰av在线| SUV一区二区在线看| 精品熟女呻吟久久91| 国产精品一级毛片不卡视| 骚逼高潮久久精品| 国内一区二区三区| 免费伦费视频在线观看| 欧美在线官网| 欧美色蜜桃97| 99热这里只有精品地址| 日本成a人v网站在线观看| 美女黄站| 免费AV中文网在线观看| 后入美女国产| 9丨久久九九九| 被体育老师抱着c到高潮| 久久欧洲| 亚洲性爱免费电影| 亚州色图欧美| 亚洲国产成人精品无码专区| 国产乱码精品久久久久久| 91色综合| 男女激情中文字幕| 在线欧美69V免费观看视频| 亚洲国产精品久久久久婷婷青年| www.av家庭乱伦| 三级三级三级日本99| 综合色欧美| 东京热男人天堂| 中英熟女操女| 大香蕉 222| 91内射| 六九九九| 中文字幕日韩专区精品系列| 中文字幕第23区| 欧美性爱第一区| 天天综合欧美黑人| 欧美黑人猛交春色影视大全| 国产午夜福利电影免费在线观看| 欧美精品偷拍| 日本3级一区二区免费| 亚洲欧洲久久天堂| 亚洲男人bt天堂| 东京热天堂网| 国产亚洲色婷婷久久99精品91| 综合大香蕉美。| 亚欧中文字幕在线视频| 国产一级特黄大片处女| 2026国产精品视频| 99这里有精品| 亚洲乱码国产乱码精网站| 99久久99九九99九九九| 久久人人爽爽爽人久久久| 操操操日本的逼| 强乱老妇中文字幕| 91 丝袜在线观看| 九九色色| 中文字幕成人| 国产精品激情久久久久久久| 思思久热在线精品66| 超碰碰激情97+久| 成片免费播放| 91人妻精华帖| 亚洲日韩人妻中文字幕一区| 日本熟妇自慰性高潮一区二区三区| 亚洲少妇喷视频看| 欧美性暴力猛交XXXX| 少妇熟女一区二区三区| 欧美亚洲厕所精品偷拍91| 色婷婷丁香五月| 人妻丰满熟妇一区二区三| 高清视频一区| 久热网| 欧美日动态视频| 久久久久久精品免费看A级| 一级毛片久久久久久久女人18| 午夜福利 成人 91| 日韩毛片9| 色www精品视频在线观看| 精品乱子一区二区三区99| 天堂综合| 大黄片做爱的大的| 五月婷婷综合网| 国产女人操逼视频| 久干9操| 国产操伦| 国产精品成人久久一区二区三区 | 成人三一级一片aaa| 岛国在线免费视频| 日本一区二区不卡精品| 特级丰满少妇一级AAAA爱毛片| 一级二级三级黑人无码| 夜夜操美女| 日韩AV无码网站| 被操高清无码视频| 中文字幕一二区二三区人妻专区| 国产aⅴ无码片毛片一级网站| 26uuu成人影片| 亚洲欧美综合区自拍另类| 中文字幕一区二区三区高清| 97国产成人精品免费视频| 99热自拍| 五月天春色激情网| 日本高清加勒比| 色69大色97香蕉| 久久久精选| 亲子敌伦对白在线播放| 久久久久久日韩| www色色com| 在线女人91| 亚洲图片在线| 午夜亚洲WWW湿好大| 亚洲精品啪视频| 蜜桃久久综合视频| 青久久| 深夜福利黄片| 天天看高清麻豆| 91成人在线免费视频| 夜夜夜爽www精品视频| 免费视频一二三区| 色婷婷一区二区三区久久| 欲香欲色| 狼人久草| 91色人| 亚洲国产一级黄色视频| 少妇滛荡视频| 国产情色第一第二页在线观看| 国产日韩中文字幕欧美| 欧美精品一区二区少妇免费A片 | 干我久操| 综合影院亚洲| 大逼色网站| 丰满少妇乱子伦精品无| 欧美视频激情久久久久久| 中出欧美| 人妻少妇一区二区| 黑人在线91| 欧美强奸乱| 天天看特黄的免费网站| 久久国产在线一区二区| 丝袜美腿欧美| 久久天堂| 欧美亚洲国产自久久| 性综合网| 久久e6只有精品| 男人午夜天堂| 91在线页| 日欧操屄| 亚洲情色在线| 欧美顶级黄色大片免费| 国产精品一区二区后入| 国产操操日韩三级黄| 无码国产Av| 国产美女91视频| 青青草操逼逼视频| 日韩人成网站在线播放| 日本精品无码三级网站| 超碰在97| 9久精品| 91女日逼| 内射黑人| 伊欧美综合视频| 亚州精品人妻一二三区| 超碰在线看| 国产91 丝袜在线播放00-百度| 婷婷五月天补不补| 久久亚洲欧美中文字幕国语| 欧美一区二区三区黄色影视| 大香蕉黄色一区| 偷拍 亚洲 欧美| www四虎| AA特级绝黄| 亚洲色婷婷综合久久一区二区三区| 精品无码久久久久久国产浪潮| 天欧美在线| 激情六月婷婷| 婷婷丁香九月| 天天夜夜rb| 操B久久| 性色av婷婷久久一区二区点复制| 日韩兔费看黄片| 亚洲AV不卡在线观看尤物| 黄色片大香蕉| 91c色| 99热亚洲| 超碰日韩人妻| 欧美春色| 伊人午夜福利视频| 欧美性暴力猛交XXXX | 岛国黄片网站| 国语精品av| 欧美成人色| 97亚洲自在精品在线观看| AV丝袜东京热| 在线视频日韩欧美国产| 欧美三四五区| 小草av不卡亚洲二区 | 91福利网在线观看| 国产一区在线播放| 欧美少妇高潮视频| 男人成人黄色视频在线观看免费下载| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 青青草五月天| 日韩激情视频| 国产乱弄免费在线视频。 | 91狠狠综合久久| 国产男人又猛又粗又爽| 国产Aα| 国产无码精品久久久久久| 四虎av在线| rivers-china.com| 亚洲一区制服诱惑| 亚洲欧美视| 亚洲日韩久久精品一区| 久久久久久久国产| 亚洲性感丝袜诱惑在线观看| 日本精品九九九| 西西美女视频网| 99国产精品久久久久久久成人热| 麻豆av一区二区三区| 五月激情影院| 久久久蜜桃一区二区三区| 67914亚洲精品| 日本一区二区电影网站| 97色色国产视频| 91在线丝袜视频| 蜜屁Av| 亚洲电影91| 国产伦精品| 看日韩黄片| 日本不卡二三区| 啪啪综合网| 91国产精品在线看| 嗯阿好爽好紧| 久久6热精品99视频| 中文无线日韩一区| 另类图片综合| 亚洲一卡2卡3卡4卡乱码网站 | 亚洲九月丁香| 天天综合色电影| a片亚洲一本通视频| 999久久芭蕾| 亚洲春色欧美激情自拍| 欧美日韩国产中文精品字幕自在自线| 欧美黄片视频在线观看免费| 99久久com免费视频′| 亚洲欧美精品久| 蜜臀99久久国产| 国产亚洲精品无码三区| 一起草av| 日本性一区| 久操电影| 91中文在线| 欧美色日| 热热色中文无码| 亚洲成人免费中文字幕| 日本在线一二 | 激情综合二| 九九亚洲视频| 97色操| 综合五月婷婷亚洲一区| 强奸少妇AV导航网| 亚洲激情视频| 精品一区二区亚洲国产| 夜夜爽爽夜夜精品视频| 国产一级舔足在线观看| 九九综合| 伊人久久综合精品欧美| 91成人无码| 亚洲黄片免费在线播放| 亚洲不卡三级手机播放| 久久人妻视频网| 蜜臀Av一区二区三区| 色色色欧美| 一牛一区二区三区久久| 久久国产在线一区二区| 免费的av网| 欧美 亚洲| 亚洲va综合va国产va中文| 中文字幕精品专区搜索结果91| 91香蕉视频在线观看免费| 91蜜臀在线久久久久| 好吊色综合| 99热超碰| 五月天久久综合网| 欧美 青青草| 黄人人操人人操| 诱惑人妻欧美一区在线播放| 99久国产精品午夜性色福利| 亚州中文字幕超碰97| 国产高清精品一区二区三区毛片| 亚洲综合九| 亚洲天堂无码| 少妇久久久久久| 男人天堂站| 成人无遮挡毛片免费看| 骚逼自拍99| 少妇滛荡视频| 啪啪自拍九九综合| 成人在线午夜视频一区| 99综合网| 久久无码一区二区二三区性色| 91少妇香蕉久久精品| 日韩国产中文字幕| 亚洲欧美色图| 久久久久久久久久久久色网| 亚洲各类熟们中文字幕| 久久大黄片| 黄色免费网| 五十路熟女,国产欧美精品区一区二区三区| 激情第四色| 日本国产亚洲一区在线观看| 人人操人人插 - 百度 - 百度| 中文久久一区| 亚洲国产欧美中日韩成人综合视频| 人妻黑丝袜电影| 日本久久久久久久久| 国产亚洲中文不卡二区| 特色a在线上| 午夜无码熟妇丰满人妻| 天天综合AV| 91精品国产高清久久久久久,亚洲成人 | 亚洲一区二区三区麻豆传媒| 国产精品免费美女视频| 麻豆国产视频精品观看| 欧美性暴力| 亚洲交换| 屁股久久久久久久久| #NAME?| 亚洲精品亚洲人成在线麻豆| 久久久婷婷婷| 亚洲精品一区二区精品| 天天肏天天干| 男人的天堂va在线| 超碰97极品9| 亚洲日产专区婷婷| 蜜桃久久久久久久久久久久| 天天操天天射青青草| 日韩性爱播放| 开心五月婷婷激情| 午夜福利成人免费视频| 69视频入口| 无码高清操逼| 国产精品白领在线观看| 日韩av性爱在线播放| 国产肏逼网站| 男女无套 免费网站| 97这里有精品| 亚洲在线| 一级性爱视频免费观看 | 国产25页| 91五月天| 国产熟妇 码视频户外直播| 欧美亚洲影视| 国内亚洲精彩视频在线| 综合网天天| 欧洲特黄毛片免费看欧洲毛片| 国产精品网址| 黑人干亚洲| 日韩情色一区二区| 一道α片欧美| 日韩欧美午夜视频在线| 欧美综合区| 日韩免费人妻色情网站| 2025亚洲男人天堂| 色眯眯av| 亚洲欧美不卡线| 国产综合在线视频网站| 丁香五月天激情网站| 怡红院视频在线| 热久日综合| 日韩综合色图| 东北丰满熟女国产一区| 激情五月婷婷| 蜜屁Av| 亚洲熟女人妻中文字幕一区二区| 欧美欧美啪啪视频| 久久久久久国产无码精品| 色婷婷亚洲婷婷| 夜精品久无码| 欧美人妻少妇| 欧美人妻久久精品二区三区| 色噜噜精品一区二区三| 午夜天堂精品久久久久91| 骚熟女吞| 黄片视频观看| 五月婷婷色色| 久久久久久99999国产精品| 97国产伦理| 九九综合九九综合| 久9视频| Aa东京男人的天堂| 男女一进一出视频久久| 九九99久久| 日本高清加勒比| 99少妇| 综合婷婷| 成人开心网在线视频| 久久国产在线一区二区| 国产伦精品一区二区三区视频女| 精品九九淫乱男| 人妻精品一区二区三区| 天天cao在线| 欧美性爱另类综合| 日日AAvv| 免费一级毛片在线视频观看| 国产精彩女在线观看视频| 国产高清吃奶免费视频网站| 国模少妇一区二区三区| 91制服丝袜| 一区二区三区精品久久| 97天天插| 色999五月色| 日韩AV噜噜噜一区二区三区四区| 综合网久久| 青青三级视频| 日本色色色视频| 亚洲情色 自拍| 水野优香在线观看| 天天看天天干| 志村玲子视频一区二区| 欧美国产精品久久九九| 欧美另类自拍 | 夜色综合| 久久久久久久国产| 欧美成人性爱视频免费观看 | 亚洲第一二区另类图| 午夜寂寞欧美| 久久久夜夜夜| 青青草乱入乱欲视频在线观看| 九九热久久99精品re| 美女让帅哥通她小鸡鸡| 极品尤物在线观看| 91AV入口| 蜜臀99久久精品久久久久久| 人妻少妇久久久| 婷婷av在线中文字幕| 亚洲中亚日激情视频| 婷婷综合久久| 久久久久久一日韩字幕无码| 国产97av| 国产精品久久久久久久免牛肉蒲团| 欧美一区二区亚洲天堂| 人人操人人摸avav| 欧美综合综合| 久久999久| 超碰日本97美女人妻人人玩人人爱| 天天干夜夜鈤| 欧美色网| 久久国产精品一级二级三级| 人妻81p| 久久亚洲中文字幕视频| 中文字幕一区二区三区蜜桃视频| 超碰97爽| 大香樵伊人网| 99精品视频在线观看免费| 色激情综合网站| 99热线麻豆 | 欧美色老汉| 亚洲图片 激情小说| 麻豆久久久久久久久丝袜| 777奇米影视777四色| 国产对白刺激视频| 久久国产AⅤ| 男人午夜天堂| 欧美日韩97| K8久久久久| 九九九九九九综合| 精品熟妇视频一区二区| 限制级中的三级片中的黑粗大屌屌日人妻熟女| 欧美日日夜夜| 91大神电影天堂| 91neishe| 91女在线观看| 国产精品午夜成人福利| 久久久亚洲精品电影免费看| 男人亚洲91首页在线| 精品一啪| AV九九| 亚洲,欧美,春色,另类| 天天影视网综合少妇| 91美女中出| 天天看少妇| 麻豆乱码久久精| 久日91在线| 亚洲丰满很很操| 91劲爆| 伊人网高清| 又大又大又大又粗爽高潮观看| 成年无码动漫av片无尽在线| www国产无码| 91亚洲色人| 国产粉嫩出水在线播放| 天天爱天天韩国日本牛牛牛牛| 日韩美脚一区二区网站| 中文字幕综合人妻| 色色九区| 中文字幕五月婷婷免费| 91影库| 9久在线视频只有精品| 天堂69亚洲精品中文字| 国语精品内射在线观看| 日韩另类色图| 青草视频人妻在线观看| 91精品人妻一区二区三区蜜桃| 国产9 9在线 | 亚洲| 久久久国产成人一区二区三区在线| 色激情五月天| 97欧美色综合| 国产在线综合福利网站| 五月天黄色激情视频| 欧美性暴力猛交XXXX | 亚洲精品819| 国产第二页| 中文字幕在线免费观看2| 九九探花视频在线观看| 久久av色| 东北少妇高潮zzzz| 91综合在线| 色偷偷综合91久久噜噜| 亚洲97成人在线观看| 97干在线视频| 国偷自 一区| 伊人一区二区在线播放| 久久9久9久99久9久9| 一起草日韩| 七久久久| 熟妇女伦乱视频| 国产一级αv免费看片| 国产成人天堂| 高清无码人妻久久久一区二区三区aⅴ| 琪琪精品免费一区二区三区| 久久黄黄| 亚洲一区二区中文字幕| α√在线| 加勒比性爱成人在线| 在线岛| 青青草视频导航官网| 蜜臀AV秘一区翔田千里| 亚熟在线| 2019天天干天天操| 精品国产久久乱码| 婷婷综合久久| 天天综合~91| 97亚洲一区| 亚洲一卡二卡在线免费| 女人的天堂大香蕉网| 国产精品视频自拍在线| 天美传媒av一区二区| 日本一本道A级黄色毛片试看60分钟| 99无码狠狠久久| 天天插夜夜操| 亚洲 欧美日韩 另类| 亚洲欧美在线综合| 亚洲精品日韩国产欧美| 91在线/欧洲| 日本中文字幕在线视频 | 啪啪啪综合| 99中出在线| 一区二区三区四区姦女| 国产精品爆乳懂色蜜乳| 中文字幕超碰CAO| 日韩乱伦视频| 夜草网站| 色综合20p| 91neishe| av网页一区二区三区| 啊啊啊啊好爽好舒服一区二区易域| 伊人影院在线理论播放| 激情视屏国产乱伦强奸| 天美精品原创av片国产| 欧美,亚洲,日韩,v,天堂,手机在线观看 | 国产精品露脸在线观看| 超碰97人人乐| 亚洲一二三精品久久网| 影音先锋乱| 国产又黄又粗的视频| 男人天堂导航| 亚洲熟久久| 夜夜夜久久| 香蕉久久国产AV一区二区| 操屄日韩| 91这里只有精品| 91jk色拍| 色婷婷蜜臀av| AV天堂丝袜| 色婷婷电影网| 秋霞一级视频在线观看免费| 国产欧美日本亚洲精品| 夜夜躁狠狠躁日日躁av| 午夜操操操| 精品无码一区二区人妻久久蜜桃 | 久久精品欧美一区蜜桃| 99色天堂| 99只有精品| 制服乱伦| 婷婷久草一区二区三区| AAA久久| 97人人模人人爽人人| 日韩欧美俄罗斯A片| 久久五月天婷婷丁香中文字幕| 91美女视频| 私人尤物在线精品不卡| 亚洲欧美日韩偷拍色图| 免费视频97| 精品人体无圣光凹凸| 欧美性暴力| 97视频新免费| 亚洲麻豆18发?| 国产乱码久久久| 日本幼女18+| 深夜视频| a级免费在线观看| 思思视频免费看网站| 日韩视频精品在线观看| A 天堂在线观看视频| 91|九色|国产熟女| 九九视品黄色| 青青操在线亚洲视频观看欧美在线 | 久久精品久久久久久久久| 亚洲A曰本VA欧美VA视频| 精品无码久久久久久久杏吧| 久久久久久日韩| 激情五月天社区| http://qxhbdz.com| 日韩AV一区二区三区三州三州| 成人热久久精品| 亚洲色图第四色| 成年无码动漫av片无尽在线| 亚洲性爱免费电影| 国产免a费看黄片在线| 欧美1727免费观看视频| 97 超碰 人人做 人人爱| 久久原创中文| 国产毛片片精品天天看视频| 亚洲砖码砖专无区2023| 久久久久久性爱片| 安微少妇操BBB| 男人综合网| 欧美性爱伊人| 自拍视频大全亚洲专媒视频/一区二区三区 | 啊啊啊草死我| 狠狠干妹子| 欧美v亚洲v综合v国产v妖精| 91精品大奶人妻| 九九九九免费高| 熟妇乱伦一区二区| 99热久| 九9热伊人| 午夜无遮挡男女啪啪视频| 极品极品色影院| 丝袜无码a片| a男人的天堂久久一级A毛片| 久久香蕉国产传媒一区剧情天美| 色天使AV天堂| 18禁免费视频| 亚洲天堂日本| 少妇无码av专区线| 五十路熟女工口| 91久久九九精品国产综合| 99视频内射三四| 老熟乱一区二区三区四区| 人妻 中文 日韩| 人人澡综合涩| 亚州免费啪啪视频| 2019天天干天天操| 伦理日韩国产久久| 97视频在线观看网站| 情趣丝袜无码操逼视频| 99热超碰| 三级精品三级在线观看| 欧美少妇第一页| 无码精品久久久天天影视| 亚洲色图欧美色图制服丝袜| 操操操五月天婷婷丁香影院| 99国产在线绯色一区| 精品偷拍13p欧美dodk视频| 久久国语| 日本九九九九| 久久伦理视频久久大香蕉视频| 收看日本人日bb| 91久久午夜无码鲁丝片久久人妻| 啪啪啪精品| 亚洲综合九| 午夜一区| 日韩三级伊人| 国产精品视频在线播放| 色婷婷综合视频| 夜夜爽夜夜爽| 日韩一级二级三级免费看完整版国语版 | 亚洲精品国产精品乱码不99| 夜色91| 天天澡天天爽日日av| 91人妻中文| 亚洲欧美日韩激情不卡| 国产盗摄美女如厕大神作品在线观看| αⅴ天堂| 97久久综合网| 欧美78| 97中文超碰| 亚洲精品官网在线观看| 欧美九九九九九| 欧美情色贴图| 欧洲色色| 最新日产中文在线麻豆| 老外又粗又长一晚做五次| 96超碰网| 日韩噜噜69| 久草视频制服诱惑| 亚洲成人综合在线| 操操逼视频| 91人妻少妇| 欧美午夜熟妇黑人精品91| 区二区亚洲婷| 久久人妻四季| 色嘟嘟人妻天堂网| 色婷婷狠狠18禁| 大伊香蕉在线视频免费| 97硬碰| 亚洲国产精品久久久久久久久久| 十八禁视频一区二区| 伊人国产成人av网站| 亚洲情色视频| 夜夜爽夜夜高潮夜夜爽| 欧美啪啪天堂| 蜜汁欧美| 亚洲高清综合网| 91熟女丨91老女人| 欧美热图99| 操久久久久| 成人一道本免费视频| 欧美成人精品一区二区男人蜜臀| 99re69| 国产天美欧美| 久久黄黄| 成人网欧美风情| 久草色悠悠在线视频| 澳门人妻久久| 一级黄碟在线观看| 国模限制级电影| 啊啊啊好舒服好爽啊啊啊视频| 久都青青视频| 亚洲中文字幕日产无码久久| 夜夜综合| 啊啊啊 在线| 极品色综合| 欧美gv在线观看| 日韩av在线免费网站| 看一级黄色视频| 91色碰| 国产乱弄免费在线视频。 | 天天影视色香色欲| 男人下部插入女人下部| 亚洲精品不卡一二三区| 亚洲少妇自拍中文字幕懂色| 国产一区在线看| 97精品视频在线播放| 黄色网址久久精品欧美喷水| 天天操天天射青青草| 亚洲色香| 超碰色综合| 日韩卡一卡二卡三在线| 强奸乱伦αv片| 欧亚第一综合网| 97久久久久| 蜜桃视频成a人v在线| 五月丁香六月激情| 久久久久久久久久精| 校园春色 亚洲| 久久久亚洲高清不打码| 91xingse| 综合网少妇| 久久人妻精品| 丝袜美腿制服人妻二区中文字幕 | 日韩性爱再线视频| 男人天堂综合| www国产无码| 色播五月丁香| 久久久成人免费av电影| 浓厚中出中文字幕在线| 日韩人妻操B| 中文不卡视频| 无遮挡h肉动漫在线观看| 中文字幕视频免费| a男人的天堂久久一级A毛片| 成人综合色网| 久久老女人| 日韩精品99999| 久久精品一区一起草| 精品久久久久av影院| 色超碰综合| 97美日韩视频| 久操九九九九| 日韩免费簧片| 爱干爱射网啊啊啊| 久久亚洲中文字幕视频| av操操不卡| 国产欧美精选激情视频| 日韩精品99久久久久久中文字幕| 不卡中文字幕aⅴ在线| 91色图片| 韩国手机不卡无码三级视频| 亚洲第一综合| 日本一区二区三区午夜观看| 久久国产在线一区二区| 好湿好紧视频| 大香蕉黄色一区| 99999精品成人| 乱伦日本中文自拍| 亚洲第91页 | 色综合久| 女人久久久| 殴洲老熟女| 婷婷丁香熟妇综合网| 97在线视频免费看| 欧美高清性猛交| 欧美十八禁导航成人| 中文字幕第7页| 久久水蜜臀亚洲AV无码精品| 亚洲导航深夜福利| 欧美性夜| 国产精品suv一区| 丁香色婷婷| 亚洲性天堂| 欧美老妇女内射网址| 欧美疯狂做爰xxxx| 大香蕉乱级| 欧美一级二级三级| 91欧美丝袜| 欧美一二三区四五区| 日韩人妻一区二区精品| 超碰在线欧美性爱激情| 91精品国产91久久久久久久久久久久| 绯色AV粉色AV蜜臀AV| 亚洲色诱惑| 国产亚洲精品av一区| 成人性交免费视频| 玖玖爱伊人玖玖爱| 精品视频97| 日本一区二区电影网站| 国产欧美日韩在线不卡第一页| 国产又猛又粗又爽又黄| 78精品| 精品人妻高清麻豆av| 蜜桃在线观看一区二区三区| 人人扣人人操| hd成人一区二区在线| 天天影视色香欲综合网小说| 五月丁香激情四射| 久久久亚洲高清不打码| 久久国产逼| 成年人黄色视频免费| 麻豆AV一区二区天美传媒| 久久精品99| 亚洲性综合| 九九九九免费视频| 精品国产一区二区三区久久久蜜臀| 国产精品久久发布| 成人贴图日韩欧美| 天天看片天天爽| 天天操女人| 国模精品娜娜一二三区| 婷婷久久五月| 欧美图片偷拍| 日韩精彩免费| 麻豆性爱视频在线播放| 日日妻色网| 2020中文字幕在线| 青青操日韩| 久久国产精品m码| 日日夜夜精品视频| 激情小说图片亚洲首页| 国产一区二区三三视频| 亚洲va有码在线天堂| 国产网红精品| 婷婷激情五月综合| 北条麻妃99精品青青久久| 99re这里只有精品3| 欧美性综合| 好吊色综合| 2020中文在线一区二区三区| 婷婷影院入口| 韩国女主播青草福利视频| 99热这里只有精品9| 精品久久久久瑟瑟| 97精品久久久久中文字幕| 精品女同一区二区三区| 欧美亚洲自拍另类人妻| 国产人妻天天干精品| 日韩女优在线| 2003天天干夜夜操| 丁香七月婷婷| 99热官网| 婷婷人妻激情| 老鸭窝日丰县女人| 久久久久久AⅤ无码免费肉站 | 国语精品av| 秋霞一集毛片观看| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | 亚州男人的天堂| 208天天久久九九九| 国产毛片久久久久久久| 99久久com免费视频′| 亚洲一区制服诱惑| 亚洲高清无毛一区二区| 日韩熟妇二区| 久久久亚洲熟妇资源| 淫荡少妇免费| 图片区小说区| 丝袜狠狠草尤物人妻av91| 91女日逼| 国产欧美亚洲精品a第2页| 少妇69中文| 亚洲欧美伦综合| 婷婷五月天丁香花| 老鸭窝在线视频播放| 超碰人妻天天干| 亚拍在线| 亚洲情色中文字幕一区| 婷婷九月国产| 欧美日韩在线国产在线| 国产高清在线自在拍69| 91高清无码下载| 精品久久九| 日韩av一级黄片| 99少妇内射| 啊啊啊好爽快点啊啊啊嗯嗯| 久久97视频| 婷婷AV一区二区三区| 天天欲望网| 欧美日不卡| 草草电影院| 久久AV无码1区2区3区| 蜜臀AV秘一区翔田千里| 一二三四视频在线社区中文字幕| 亚洲天堂一区二区久久| 女人18精品一区二区三区| 717影院理论午夜伦八戒| 99少妇内射| 欧美美女啪啪视频| 欧美人与动性人交a| 99精品人人爽| 欧美性爱另类综合| 啪啪视频免费在线观看| 欧美色图 人妻| 91超级碰| 精品亚洲成人免费在线| 国产久久一区二区| 国产原创剧情在线丝袜| 亚洲男人电影天堂| 婷婷五月天无码| 大香网伊人久久综合| 国产无码高清操逼视频| 99精品无码| 无码heyzo高清一区| 欧美激情中文字幕另类小说| 啊啊啊啊啊啊好多水| 日韩精品9999| 日日夜夜狠狠| 亚洲一区二区三区欧美日韩| 国产女人视频三四五区| 啊啊啊啊啊啊啊在线| 日韩成人免费电影| 亚洲天堂人妻熟妇视频| 国产品精品自在在线午夜免费| 天美传媒av一区二区| 91网18| 丝袜六区| 欧亚在线视频| 一二三四视频中文字幕在线看| 久久久久99999| 人妻喷水| 91精品国产乱码| 国产a级精品| 色99在线| 久久九九99| 伊人色综合网电影| 成年女人18级毛片毛片免费观看| 欧美日韩免费性爱| 中文字幕在线免费观看2| 国产高清自拍视频| 69天堂| 超碰在线人人射| 精品美女久久一二三| 欧美亚洲成人在线一区二区三区| 婷婷国产精品九区| 日韩专区数据列表-第3230页-精品国产一区二区三区香蕉 久久99熟女人妻中文字 | 欧美性爱一区二区三区| 无码少妇精品一区二区60岁老人| 天天干人人乐| 亚洲精品视频在线播放| 在线色导航| 97爱爱爱| 成人小说另类在线| 日韩精品资源专区二区| 中文字幕日韩专区精品系列| 国产人妖的免费的视频| 天天插夜夜操| 性开放中文AV高清无码免费看| 少妇高潮流水av免费| 日韩免费在线视频观看| Blackedraw视频一区二区| 中国国国产一级特黄毛片| 色99视频| 青青草视频爽一爽| 试看福利| 啊啊啊操死我了| 欧州91高潮| 黑人白女精品一区| 久久久久九九九九| 强奸乱伦亚洲第一页| 久草网站免费在线观看| 中文字幕一区电影在线观看| 人人考人人摸人人干| 六月激情网| 免费网站观看www在线观| 亚洲男人的天堂网| 亚洲精品久久久久毛片A片拉屎| AVE乱伦| 精品国产精品一区二区| 嗯嗯啊啊用力视频免费| 亚洲91射| 一起草三级AV电影在线观看 | 日韩99神马视频播放片在线播放| 伊人一区二区三区| 久草资源在线| 亚洲第一狼人丝袜美女另类| 日本三级中国三级99人妇网站| 天天干一区二区| 草B在线| 强奸乱伦av电影| 蜜臀99999| 欧美激情高清性猛交| 热99这里只有精品| 亚洲三级网址久久最新| 啪啪视频免费在线观看| 精品亚洲俞拍视频一区| 久久有码视频| 亚洲最大AV网| 人妻黑丝袜电影| 国产无吗在线播放| 天天狠| 老熟女综合| 五月天黄色激情视频| 激情视频一二三| 成人性爱视频在线看| 日韩图区| 亚乱色| 久久久无码精品人妻二区| 日本一级二级三级网站| 天天综合网国产|