久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

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

從50ms到2秒:一次內(nèi)存隊(duì)列堵死引發(fā)的性能事故復(fù)盤(pán)

從50ms到2秒:一次內(nèi)存隊(duì)列堵死引發(fā)的性能事故復(fù)盤(pán) 事情是從一次大促前壓測(cè)開(kāi)始的。群里突然有人甩了張截圖說(shuō)訂單支付回調(diào)接口的RT從平時(shí)的50毫秒一路飆到了快兩秒后臺(tái)還有一堆訂單狀態(tài)卡在“支付中”不更新用戶(hù)開(kāi)始陸續(xù)收到重復(fù)的短信提醒。我當(dāng)時(shí)第一反應(yīng)是數(shù)據(jù)庫(kù)又抖了結(jié)果查了一圈發(fā)現(xiàn)問(wèn)題源頭居然是一個(gè)我們自己寫(xiě)的MessageQueue——更準(zhǔn)確點(diǎn)說(shuō)是我老大當(dāng)初“順手”寫(xiě)的一段隊(duì)列消費(fèi)代碼。這個(gè)標(biāo)題里的“Bug”其實(shí)不是那種讓你編譯都過(guò)不去的錯(cuò)誤而是一段看著沒(méi)什么毛病的代碼在流量稍微上來(lái)一點(diǎn)之后把整條異步鏈路活活拖垮了。這個(gè)復(fù)盤(pán)過(guò)程很有價(jià)值我把它完整記錄下來(lái)給所有在做業(yè)務(wù)異步化、內(nèi)存隊(duì)列、削峰填谷的團(tuán)隊(duì)一個(gè)參考。1. 先還原現(xiàn)場(chǎng)老大的“手藝”和半線(xiàn)上事故1.1 業(yè)務(wù)背景為什么需要一個(gè)隊(duì)列先說(shuō)業(yè)務(wù)背景。我們的訂單模塊在用戶(hù)支付成功之后要做一連串的“售后動(dòng)作”更新訂單狀態(tài)、發(fā)短信通知、加積分、推送消息給運(yùn)營(yíng)后臺(tái)、再通知倉(cāng)儲(chǔ)系統(tǒng)開(kāi)始備貨。最早這套邏輯是同步寫(xiě)在支付回調(diào)接口里的一個(gè)請(qǐng)求進(jìn)來(lái)挨個(gè)調(diào)用這些服務(wù)全部做完之后才返回結(jié)果給客戶(hù)端。同步方案在低峰期沒(méi)有大問(wèn)題但有兩個(gè)隱患一是接口耗時(shí)被下游系統(tǒng)拖累短信服務(wù)一抖動(dòng)支付回調(diào)就跟著超時(shí)二是支付成功瞬間的流量通常有尖峰比如整點(diǎn)秒殺、促銷(xiāo)活動(dòng)開(kāi)啟的幾分鐘內(nèi)回調(diào)請(qǐng)求會(huì)密集進(jìn)來(lái)如果每個(gè)請(qǐng)求都要走一遍外部IO數(shù)據(jù)庫(kù)和短信接口都可能被打爆。所以就有了這個(gè)異步改造支付回調(diào)只負(fù)責(zé)把“訂單支付成功”這個(gè)事件丟進(jìn)隊(duì)列立刻返回后臺(tái)再用消費(fèi)者線(xiàn)程慢慢處理。這正是MessageQueue在這個(gè)場(chǎng)景里最核心的價(jià)值——解耦和削峰。當(dāng)時(shí)的實(shí)現(xiàn)并不復(fù)雜也沒(méi)有引入RocketMQ或者Kafka這些重量級(jí)組件老大直接在應(yīng)用內(nèi)存里用ArrayBlockingQueue手寫(xiě)了一個(gè)輕量隊(duì)列。理論上只要消費(fèi)者處理速度夠快這套方案完全能支撐現(xiàn)有業(yè)務(wù)量。1.2 老大寫(xiě)的這段代碼到底長(zhǎng)啥樣我后來(lái)翻到最初的實(shí)現(xiàn)大概長(zhǎng)這樣public class OrderNotifyQueue { private static final int CAPACITY 1000; private static final BlockingQueueNotifyTask QUEUE new ArrayBlockingQueue(CAPACITY); private static final ExecutorService PRODUCER_POOL Executors.newFixedThreadPool(20); private static final ExecutorService CONSUMER Executors.newSingleThreadExecutor(); static { CONSUMER.execute(new NotifyWorker()); } public static void submit(NotifyTask task) { PRODUCER_POOL.execute(() - { try { QUEUE.put(task); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } }); } static class NotifyWorker implements Runnable { Override public void run() { while (true) { try { NotifyTask task QUEUE.take(); process(task); } catch (Exception e) { // 失敗就放回隊(duì)頭等下輪再處理 try { QUEUE.put(task); } catch (InterruptedException ie) { Thread.currentThread().interrupt(); } } } } private void process(NotifyTask task) { Order order orderMapper.selectById(task.getOrderId()); // 第一次IO查訂單 if (order ! null) { orderMapper.updateStatus(order.getId()); // 第二次IO更新?tīng)顟B(tài) smsClient.send(order.getMobile(), 您的訂單已支付成功); // 第三次IO外部短信 } } } }說(shuō)實(shí)話(huà)第一眼掃過(guò)去這段代碼并不算“丑”用了有界隊(duì)列防止無(wú)腦堆積用put()保證入隊(duì)安全消費(fèi)端單線(xiàn)程也不會(huì)出現(xiàn)并發(fā)修改問(wèn)題失敗重試也“照顧”到了。但它的問(wèn)題恰恰就藏在這些“看似合理”的細(xì)節(jié)里而且這些問(wèn)題在小流量下根本暴露不出來(lái)。1.3 問(wèn)題為什么沒(méi)在代碼評(píng)審時(shí)被發(fā)現(xiàn)這不是一句“評(píng)審不仔細(xì)”就能解釋的。我自己后來(lái)復(fù)盤(pán)發(fā)現(xiàn)這類(lèi)代碼在CR階段經(jīng)常被放過(guò)的原因有三個(gè)一是評(píng)審的重點(diǎn)放在“功能正確性”上。大家會(huì)盯著try-catch寫(xiě)沒(méi)寫(xiě)、空指針會(huì)不會(huì)出現(xiàn)、事務(wù)有沒(méi)有加卻很難靜態(tài)地看出一個(gè)“吞吐量不達(dá)標(biāo)”的問(wèn)題——消費(fèi)者單條處理、逐條打庫(kù)這些屬于性能設(shè)計(jì)范疇不是代碼審查能一眼識(shí)破的。二是沒(méi)有壓測(cè)環(huán)節(jié)。我們的測(cè)試環(huán)境數(shù)據(jù)量小隊(duì)列永遠(yuǎn)吃不飽生產(chǎn)者一扔消費(fèi)者馬上就消化了CPU、線(xiàn)程、隊(duì)列深度這些指標(biāo)全部正常導(dǎo)致問(wèn)題被完全掩蓋。等到大促壓測(cè)流量上來(lái)才徹底現(xiàn)出原形。三是對(duì)“隊(duì)列模型”缺少統(tǒng)一的規(guī)范。團(tuán)隊(duì)里沒(méi)有明確說(shuō)過(guò)“消息必須批量消費(fèi)”“重試必須退避”“入隊(duì)必須具備超時(shí)機(jī)制”老大按著他以前寫(xiě)同步接口的思路來(lái)寫(xiě)異步隊(duì)列自然就踩進(jìn)了這幾個(gè)典型陷阱。2. 排查過(guò)程從CPU飆高到揪出三宗罪2.1 線(xiàn)上現(xiàn)象接口超時(shí)和訂單狀態(tài)卡住壓測(cè)暴露出來(lái)的現(xiàn)象非常直接。支付回調(diào)接口的可接受響應(yīng)時(shí)間是1秒壓測(cè)開(kāi)始后P99直接飆到2秒以上同時(shí)后臺(tái)監(jiān)控發(fā)現(xiàn)訂單狀態(tài)更新出現(xiàn)大面積積壓積壓數(shù)量一度到了幾萬(wàn)條短信發(fā)送網(wǎng)關(guān)那邊則報(bào)了一堆限流。整個(gè)系統(tǒng)并沒(méi)有宕機(jī)但到處都在“排隊(duì)”一副快要被拖垮的樣子。這種“哪里都在排隊(duì)”的現(xiàn)象其實(shí)是個(gè)很好的排查起點(diǎn)。明明只是異步處理慢怎么連支付回調(diào)接口這種“只負(fù)責(zé)丟消息”的入口都變慢了這一問(wèn)就能順著生產(chǎn)鏈路摸到隊(duì)列本身。2.2 一步步定位top、jstack、Arthas排查第一步先看機(jī)器負(fù)載。top -Hp找出CPU占用高的線(xiàn)程發(fā)現(xiàn)有一組線(xiàn)程狀態(tài)很奇怪大量線(xiàn)程處于BLOCKED狀態(tài)堆棧全部卡在java.util.concurrent.ArrayBlockingQueue.put。這說(shuō)明什么說(shuō)明有一堆生產(chǎn)者在同一個(gè)隊(duì)列的入隊(duì)操作上互相競(jìng)爭(zhēng)、排隊(duì)等待。第二步用jstack抓線(xiàn)程棧重點(diǎn)看消息隊(duì)列相關(guān)的線(xiàn)程和業(yè)務(wù)回調(diào)線(xiàn)程。很快就能看到幾十個(gè)http-nio-exec-*線(xiàn)程都在put方法上等待鎖而真正干活的消費(fèi)者線(xiàn)程只有一個(gè)它正深度卡在orderMapper.selectById之后的等待里——準(zhǔn)確說(shuō)是在等短信服務(wù)響應(yīng)。單消費(fèi)者線(xiàn)程本身處理一條消息就要經(jīng)歷三次串行IO平均耗時(shí)80到100毫秒算下來(lái)吞吐量大概也就每秒12條。第三步我用Arthas做細(xì)化定位。thread -n 3再看線(xiàn)程CPU排行。接著用trace命令跟蹤NotifyWorker.process方法發(fā)現(xiàn)耗時(shí)大部分落在兩個(gè)地方一次訂單查詢(xún)SQL平均15毫秒、一次短信發(fā)送外部HTTP調(diào)用平均50毫秒。單條消息就要消耗掉70到80毫秒的處理時(shí)間而生產(chǎn)速率在峰值時(shí)一秒有三四百條這個(gè)隊(duì)列不堵才奇怪。2.3 壓測(cè)復(fù)現(xiàn)與根因確認(rèn)光看線(xiàn)程棧還不夠必須壓測(cè)復(fù)現(xiàn)。我們?cè)趬簻y(cè)環(huán)境重新搭了一套一模一樣的代碼用腳本模擬支付回調(diào)按峰值速率每秒400個(gè)請(qǐng)求往隊(duì)列里灌。10分鐘之后隊(duì)列長(zhǎng)度直接頂?shù)?000的容量上限隨后所有put請(qǐng)求開(kāi)始阻塞回調(diào)接口RT應(yīng)聲上漲。這一步把因果鏈坐實(shí)了生產(chǎn)速率大于消費(fèi)速率隊(duì)列開(kāi)始堆積堆積到容量上限后put無(wú)限期等待于是生產(chǎn)者線(xiàn)程——也就是支付回調(diào)的線(xiàn)程——全部被堵在隊(duì)列上回調(diào)線(xiàn)程被堵住接口RT自然飆升。整個(gè)過(guò)程層層傳導(dǎo)跟多米諾骨牌一樣。2.4 三宗罪隊(duì)列堵死的核心原因根因確認(rèn)之后我把問(wèn)題歸結(jié)為三宗罪第一宗罪入隊(duì)用put()無(wú)限阻塞。put()的語(yǔ)義是“隊(duì)列滿(mǎn)了一直等”這在低流量下沒(méi)什么但在峰值時(shí)段隊(duì)列一旦滿(mǎn)了所有回調(diào)線(xiàn)程都會(huì)無(wú)限期掛在入隊(duì)操作上。最要命的是這種等待沒(méi)有超時(shí)、沒(méi)有降級(jí)、沒(méi)有熔斷外部流量還在不斷增加線(xiàn)程池所有線(xiàn)程全部被占滿(mǎn)于是接口徹底失去響應(yīng)能力。第二宗罪消費(fèi)者單條處理全鏈路串行IO。每消費(fèi)一條消息就要查一次庫(kù)、更新一次狀態(tài)、發(fā)一次短信。這三個(gè)操作全是IO型操作單條耗時(shí)就接近百毫秒。一個(gè)單線(xiàn)程消費(fèi)者一天最多也就處理一百萬(wàn)條消息聽(tīng)著不少但頂不住秒殺瞬間的尖峰流量。隊(duì)列消費(fèi)端的設(shè)計(jì)完全不符合“批量”這個(gè)最基本的優(yōu)化思路。第三宗罪失敗重試直接放回隊(duì)頭。代碼里一旦process拋出異常就把任務(wù)重新放回隊(duì)列頭部。這個(gè)操作有兩個(gè)問(wèn)題第一如果某條消息持續(xù)失敗它會(huì)堵在隊(duì)首一直占著生產(chǎn)者的名額第二put操作本身也可能阻塞失敗的線(xiàn)程會(huì)把自己卡在重試入隊(duì)上。而且恢復(fù)正常順序會(huì)被打亂用戶(hù)收到的短信順序可能錯(cuò)亂業(yè)務(wù)上非常尷尬。2.5 一個(gè)隱藏的“背鍋位”單線(xiàn)程消費(fèi)者除了上面三條還有一個(gè)容易被忽略的設(shè)計(jì)問(wèn)題消費(fèi)線(xiàn)程只有一個(gè)。單線(xiàn)程消費(fèi)天然無(wú)法利用多核CPU遇到磁盤(pán)IO或者外部接口等待時(shí)CPU只能空轉(zhuǎn)。很多團(tuán)隊(duì)看到“單線(xiàn)程處理不存在并發(fā)問(wèn)題”就覺(jué)得安全卻忘了消費(fèi)能力一樣是硬指標(biāo)。增加合理的消費(fèi)線(xiàn)程數(shù)本來(lái)就是隊(duì)列設(shè)計(jì)的一部分。3. 優(yōu)化方案每一處改動(dòng)背后的理由3.1 把“按條消費(fèi)”改成“攢批消費(fèi)”第一個(gè)改動(dòng)也是最核心的一個(gè)消費(fèi)者不再一條一條處理而是“攢一批、處理一批”。這里用到了BlockingQueue的drainTo方法配合超時(shí)輪詢(xún)static class BatchNotifyWorker implements Runnable { private static final int MAX_BATCH_SIZE 500; private static final long POLL_TIMEOUT_MS 200; Override public void run() { ListNotifyTask batch new ArrayList(MAX_BATCH_SIZE); while (!Thread.currentThread().isInterrupted()) { batch.clear(); // 先嘗試拿到第一條最多等200ms NotifyTask first QUEUE.poll(POLL_TIMEOUT_MS, TimeUnit.MILLISECONDS); if (first null) { continue; // 隊(duì)列空閑避免空轉(zhuǎn) } batch.add(first); // 把當(dāng)前隊(duì)列里能拿的都拿出來(lái) QUEUE.drainTo(batch, MAX_BATCH_SIZE - 1); processBatch(batch); } } private void processBatch(ListNotifyTask tasks) { ListInteger orderIds tasks.stream().map(NotifyTask::getOrderId).collect(toList()); ListOrder orders orderMapper.selectByIds(orderIds); // 一次批量查詢(xún) orderMapper.batchUpdateStatus(orders); // 一次批量更新 smsClient.batchSend(orders.stream() .map(o - new SmsRequest(o.getMobile(), 您的訂單已支付成功)) .collect(toList())); // 一次合并發(fā)送 } }核心思路是把“三次串行IO”壓縮成“三次批量IO”。原來(lái)100條消息要查100次庫(kù)、更新100次庫(kù)、發(fā)100次短信現(xiàn)在變成1次批量查詢(xún)、1次批量更新、1次合并短信發(fā)送。數(shù)據(jù)庫(kù)批量操作的耗時(shí)并不是按條數(shù)線(xiàn)性增長(zhǎng)的100條的批量更新和1條的單條更新相比耗時(shí)可能只多了一倍不到但單位吞吐量翻了近百倍。這里有兩點(diǎn)要注意drainTo最大取499條加上前面那一條正好湊滿(mǎn)500而第一次poll設(shè)置200毫秒超時(shí)是為了在隊(duì)列空閑時(shí)不頻繁空轉(zhuǎn)同時(shí)保證只要隊(duì)列里有消息最多等200毫秒就能積攢出一批。3.2 入隊(duì)策略put換offer把無(wú)限阻塞改成有界等待生產(chǎn)端改動(dòng)也很關(guān)鍵put()換成offer()加超時(shí)超時(shí)之后走降級(jí)邏輯public static boolean submit(NotifyTask task) { // 隊(duì)列滿(mǎn)時(shí)最多等200ms再不行就降級(jí) return QUEUE.offer(task, 200, TimeUnit.MILLISECONDS); } // 使用處 boolean accepted OrderNotifyQueue.submit(task); if (!accepted) { // 降級(jí)策略寫(xiě)入本地文件或DB待重發(fā)也可以直接走同步處理 fallbackSave(task); }為什么不是把隊(duì)列直接改成無(wú)界無(wú)界隊(duì)列看起來(lái)“永遠(yuǎn)不會(huì)拒絕消息”但代價(jià)是內(nèi)存被無(wú)限占用最終觸發(fā)FGC甚至OOM。線(xiàn)上的資源是有限的削峰的本質(zhì)是“暫時(shí)存不下了就先擋住”而不是“有多少都硬接”。有界隊(duì)列加超時(shí)本質(zhì)上是一種背壓機(jī)制——當(dāng)下游處理不過(guò)來(lái)了上游也要感覺(jué)到壓力然后想辦法降級(jí)或者限流而不是把整個(gè)系統(tǒng)拖死。超時(shí)時(shí)間選200毫秒是和支付回調(diào)的可用性指標(biāo)對(duì)齊的回調(diào)本身還有一系列其他邏輯入隊(duì)最多占200毫秒再往上去就觸發(fā)降級(jí)保證接口不會(huì)被隊(duì)列拖到超時(shí)。3.3 重試隊(duì)列獨(dú)立出來(lái)用延遲隊(duì)列做退避重試邏輯的優(yōu)化核心原則是“失敗的消息不能回主隊(duì)列頭必須退避而且不能擠壓新消息”。我改成了獨(dú)立的延遲隊(duì)列private static final DelayQueueDelayItemNotifyTask RETRY_QUEUE new DelayQueue(); private static final long[] RETRY_DELAYS_MS {5_000, 30_000, 60_000, 300_000}; public static void retryLater(NotifyTask task, int retryCount) { long delay RETRY_DELAYS_MS[Math.min(retryCount, RETRY_DELAYS_MS.length - 1)]; RETRY_QUEUE.put(new DelayItem(task, System.currentTimeMillis() delay)); }消費(fèi)線(xiàn)程在處理完主隊(duì)列任務(wù)后會(huì)檢查延遲隊(duì)列是否有到期任務(wù)有就取出來(lái)重新放回主隊(duì)列。這樣既保證了失敗任務(wù)會(huì)重試又不會(huì)讓它們卡在主隊(duì)列里餓死后來(lái)的正常消息。分級(jí)退避從5秒到300秒逐級(jí)拉長(zhǎng)避免某條消息持續(xù)失敗的時(shí)候瘋狂重試打爆下游。為什么不用ScheduledExecutorService因?yàn)檠舆t隊(duì)列天然支持“按到期時(shí)間排序取出”而定時(shí)線(xiàn)程池更偏向“周期性任務(wù)”處理那種“到點(diǎn)觸發(fā)一次、不再管了”的邏輯還行要做“延遲之后重新入隊(duì)”這種動(dòng)態(tài)流轉(zhuǎn)DelayQueue更順手。3.4 消費(fèi)者線(xiàn)程數(shù)怎么算消費(fèi)線(xiàn)程從1個(gè)改成多個(gè)但線(xiàn)程數(shù)不能拍腦袋。我用的估算公式是這個(gè)對(duì)于IO密集型任務(wù)線(xiàn)程數(shù) ≈ CPU核數(shù) × (1 平均等待時(shí)間 / 平均計(jì)算時(shí)間)我們壓測(cè)環(huán)境是8核批量處理中數(shù)據(jù)庫(kù)批量IO加外部短信調(diào)用的等待時(shí)間大約占75%本地CPU計(jì)算和JSON序列化大約占25%。算下來(lái)等待時(shí)間和計(jì)算時(shí)間的比值大約是3。于是線(xiàn)程數(shù) ≈ 8 × (1 3) 32但這是理論上限實(shí)際并沒(méi)有直接配32——線(xiàn)程太多會(huì)導(dǎo)致數(shù)據(jù)庫(kù)連接池和短信網(wǎng)關(guān)連接數(shù)不夠用反而加劇競(jìng)爭(zhēng)。折中一下我配了4個(gè)消費(fèi)線(xiàn)程每個(gè)線(xiàn)程一次處理500條4個(gè)線(xiàn)程疊加起來(lái)峰值吞吐量已經(jīng)能達(dá)到每秒幾百條完全覆蓋當(dāng)前生產(chǎn)速率。多線(xiàn)程時(shí)代的“安全”不是單線(xiàn)程而是“可控?cái)?shù)量的多線(xiàn)程加上批量消費(fèi)”。3.5 更進(jìn)一步要不要直接上Disruptor或者專(zhuān)業(yè)MQ優(yōu)化完自家內(nèi)存隊(duì)列之后團(tuán)隊(duì)里也有人問(wèn)都這么費(fèi)勁了為什么不直接換Kafka或者RocketMQ這個(gè)問(wèn)題我認(rèn)真想了一下。結(jié)論是業(yè)務(wù)場(chǎng)景和成本決定架構(gòu)選型。我們這里只是一個(gè)訂單模塊的內(nèi)部異步通知數(shù)據(jù)量級(jí)遠(yuǎn)沒(méi)有到需要分布式消息隊(duì)列的水平引入專(zhuān)業(yè)MQ意味著要部署B(yǎng)roker集群、維護(hù)Topic、處理分區(qū)和消費(fèi)者組關(guān)系運(yùn)維成本和復(fù)雜度一下就上來(lái)了。Disruptor的核心優(yōu)勢(shì)是無(wú)鎖環(huán)形隊(duì)列適合超高吞吐的場(chǎng)景但對(duì)批量處理、重試退避這類(lèi)業(yè)務(wù)邏輯沒(méi)有直接幫助反而因?yàn)锳PI抽象更底層團(tuán)隊(duì)學(xué)習(xí)成本更高。所以最終保留了自己優(yōu)化的內(nèi)存隊(duì)列但加了一條規(guī)則如果未來(lái)積壓量持續(xù)超過(guò)內(nèi)存隊(duì)列上限的50%或者出現(xiàn)多機(jī)房部署需求就切換專(zhuān)業(yè)MQ。4. 壓測(cè)效果與上線(xiàn)驗(yàn)證4.1 壓測(cè)方案與測(cè)試腳本優(yōu)化完成后不能直接上生產(chǎn)必須先壓測(cè)。我們復(fù)用了之前那套腳本模擬支付回調(diào)接口每秒產(chǎn)生400個(gè)訂單通知任務(wù)持續(xù)壓測(cè)30分鐘。同時(shí)把生產(chǎn)者和消費(fèi)者的關(guān)鍵指標(biāo)隊(duì)列深度、消費(fèi)耗時(shí)、重試次數(shù)都打印到日志再配合監(jiān)控系統(tǒng)看趨勢(shì)。壓測(cè)腳本我寫(xiě)得很簡(jiǎn)單核心就是通過(guò)一個(gè)循環(huán)接口往隊(duì)列里塞數(shù)據(jù)再統(tǒng)計(jì)每秒成功入隊(duì)的數(shù)量和回調(diào)響應(yīng)時(shí)間。這個(gè)腳本的價(jià)值不在于代碼多精妙而在于它能夠真實(shí)逼近線(xiàn)上峰值速率讓問(wèn)題在“發(fā)布之前”暴露出來(lái)。4.2 優(yōu)化前后的核心指標(biāo)對(duì)比壓測(cè)結(jié)束后我把數(shù)據(jù)整理成了表格結(jié)論非常直觀(guān)指標(biāo)優(yōu)化前優(yōu)化后說(shuō)明消費(fèi)者吞吐量約12條/秒約600條/秒批量消費(fèi)帶來(lái)的數(shù)量級(jí)提升支付回調(diào)接口P99耗時(shí)2秒180毫秒入隊(duì)不再阻塞回調(diào)線(xiàn)程隊(duì)列積壓數(shù)打滿(mǎn)1000持續(xù)觸頂峰值不超過(guò)200消費(fèi)能力覆蓋生產(chǎn)速率系統(tǒng)CPU占用90%以上約35%線(xiàn)程等待減少、批量IO減少空轉(zhuǎn)短信發(fā)送調(diào)用次數(shù)每單1次HTTP合并批量發(fā)送下游限流問(wèn)題基本消失失敗消息重試回隊(duì)頭干擾正常消息延遲隊(duì)列分級(jí)退避不再影響正常消費(fèi)順序最顯著的變化是吞吐量從12條/秒提升到600條/秒整整50倍。這個(gè)結(jié)果并不夸張因?yàn)閮?yōu)化的核心不是“讓單條消息處理得更快”而是“一次處理一批消息”——單條處理耗時(shí)80毫秒批量500條處理耗時(shí)也就200毫秒相當(dāng)于單條均攤時(shí)間從80毫秒降到了0.4毫秒。4.3 灰度發(fā)布與監(jiān)控落地指標(biāo)好看也不能一股腦全量上。我們分了三個(gè)步驟灰度先切10%流量觀(guān)察半天重點(diǎn)看監(jiān)控面板上的隊(duì)列深度、消費(fèi)延遲、重試次數(shù)三個(gè)指標(biāo)有沒(méi)有異常。半天沒(méi)問(wèn)題再放到50%再觀(guān)察半天最后才全量。全量之后持續(xù)盯了72小時(shí)確認(rèn)短信發(fā)送量正常、訂單狀態(tài)更新無(wú)積壓、回調(diào)接口RT穩(wěn)定這次優(yōu)化才算真正閉環(huán)。監(jiān)控是比壓測(cè)更重要的東西。壓測(cè)只能驗(yàn)證“在那個(gè)時(shí)間點(diǎn)沒(méi)問(wèn)題”線(xiàn)上流量像潮水一樣隨時(shí)變化沒(méi)有監(jiān)控就只能靠用戶(hù)投訴來(lái)發(fā)現(xiàn)問(wèn)題。我后來(lái)專(zhuān)門(mén)給隊(duì)列加了三塊看板隊(duì)列實(shí)時(shí)深度、單條消息從入隊(duì)到消費(fèi)完成的端到端延遲、失敗重試的次數(shù)和級(jí)別。有了這三個(gè)指標(biāo)以后隊(duì)列再出問(wèn)題打開(kāi)監(jiān)控就能定位到是生產(chǎn)太快還是消費(fèi)太慢或者是重試風(fēng)暴。4.4 上線(xiàn)后的一點(diǎn)觀(guān)察上線(xiàn)后正好趕上一次小規(guī)模促銷(xiāo)業(yè)務(wù)流量比平時(shí)翻了3倍多系統(tǒng)穩(wěn)如老狗。對(duì)比之前壓測(cè)就崩的狀態(tài)差異非常明顯。銷(xiāo)售那邊還跑來(lái)問(wèn)“最近短信怎么發(fā)得這么快”我們只能笑笑說(shuō)“改了個(gè)Bug”。5. 常見(jiàn)問(wèn)題與排坑經(jīng)驗(yàn)速查5.1 內(nèi)存隊(duì)列參數(shù)速查表這次踩坑之后我把內(nèi)存隊(duì)列的參數(shù)整理成一張表發(fā)給團(tuán)隊(duì)所有人參考。如果你們也在自己寫(xiě)內(nèi)存隊(duì)列可以直接抄參數(shù)推薦值理由隊(duì)列容量按峰值積壓量的2到3倍設(shè)置太小容易觸發(fā)背壓太大可能內(nèi)存浪費(fèi)單批次大小200到500太大時(shí)單批處理時(shí)間過(guò)長(zhǎng)太小體現(xiàn)不出批量?jī)?yōu)勢(shì)入隊(duì)超時(shí)100到300毫秒與接口可容忍延遲對(duì)齊超時(shí)即降級(jí)消費(fèi)線(xiàn)程數(shù)CPU核數(shù)×(1等待/計(jì)算時(shí)間)再折半防止把DB連接池和下游連接數(shù)打滿(mǎn)失敗重試延遲5秒/30秒/60秒/300秒分級(jí)逐級(jí)退避避免重試風(fēng)暴批量poll超時(shí)100到200毫秒平衡積攢時(shí)間和空轉(zhuǎn)消耗5.2 消息丟失、重復(fù)、亂序怎么取舍消息隊(duì)列的本質(zhì)是異步和削峰它不可能同時(shí)保證“不丟失、不重復(fù)、不亂序”這是分布式系統(tǒng)的基本約束。你必須根據(jù)業(yè)務(wù)的容忍度做取舍。比如我們訂單狀態(tài)更新這個(gè)場(chǎng)景重復(fù)通知用戶(hù)是難以接受的所以消費(fèi)者端必須做冪等更新訂單狀態(tài)前先判斷當(dāng)前狀態(tài)已經(jīng)是“已支付”的就不再重復(fù)發(fā)短信短信發(fā)送接口也做了業(yè)務(wù)冪等鍵同一個(gè)訂單號(hào)在短時(shí)間內(nèi)不會(huì)重復(fù)發(fā)送。消息丟失的兜底則是靠降級(jí)落庫(kù)如果隊(duì)列滿(mǎn)了實(shí)在入不了隊(duì)就把任務(wù)寫(xiě)進(jìn)本地待辦表由一個(gè)定時(shí)任務(wù)每5分鐘掃一次重新提交進(jìn)隊(duì)列。這樣一來(lái)極端情況下最多延遲幾分鐘但不會(huì)丟。亂序問(wèn)題在我們場(chǎng)景里影響不大因?yàn)橛唵沃Ц冻晒νㄖ举|(zhì)上不依賴(lài)嚴(yán)格順序。但如果你的業(yè)務(wù)是“先改狀態(tài)再發(fā)短信”這種強(qiáng)順序鏈路那就需要在消息體里帶一個(gè)業(yè)務(wù)序列號(hào)消費(fèi)端按序列號(hào)做排序或者丟棄過(guò)期消息而不是單純依賴(lài)隊(duì)列的有序性。5.3 這次踩坑后總結(jié)的幾條團(tuán)隊(duì)規(guī)約這次事故給團(tuán)隊(duì)帶來(lái)的最大收益不是代碼優(yōu)化本身而是幾個(gè)流程性的改變第一所有涉及隊(duì)列、線(xiàn)程池、異步處理的代碼CR時(shí)必須有壓測(cè)記錄或者明確的性能指標(biāo)預(yù)估不能只聊邏輯正確性。第二使用內(nèi)存隊(duì)列必須遵守“有界超時(shí)降級(jí)”三件套不允許在生產(chǎn)代碼里出現(xiàn)裸的put()無(wú)限阻塞。第三重試邏輯必須和正常消息分離要么用延遲隊(duì)列要么用專(zhuān)門(mén)的待處理表禁止把失敗任務(wù)放回隊(duì)列頭部。第四條是我個(gè)人加上的——任何異步鏈路上線(xiàn)前必須有隊(duì)列深度的監(jiān)控告警和消費(fèi)延遲的監(jiān)控告警。沒(méi)有監(jiān)控就是睜著眼睛把系統(tǒng)交給運(yùn)氣。5.4 關(guān)于“Bug”這件事的一點(diǎn)感想說(shuō)到“Bug”網(wǎng)上總能看到類(lèi)似“codex磁盤(pán)bug”或者“winsxs bug”這類(lèi)聽(tīng)著就讓人頭大的問(wèn)題但說(shuō)實(shí)話(huà)這些離我們?nèi)粘i_(kāi)發(fā)太遠(yuǎn)了。真正讓我們寢食難安的往往是老大寫(xiě)的這段“當(dāng)時(shí)看起來(lái)沒(méi)問(wèn)題”的隊(duì)列代碼它不報(bào)錯(cuò)、不崩潰只是在你最需要它扛住流量的時(shí)候安靜地堵在那里把所有入口都堵死。排這種Bug最難的從來(lái)不是修復(fù)而是找到那個(gè)讓所有線(xiàn)索串起來(lái)的核心因果鏈——隊(duì)列滿(mǎn)了生產(chǎn)者的線(xiàn)程全被卡在入隊(duì)上回調(diào)接口才變慢背后是消費(fèi)端單條處理吞吐不夠。我個(gè)人在實(shí)際排查和優(yōu)化過(guò)程中最大的體會(huì)是遇到性能相關(guān)的線(xiàn)上問(wèn)題永遠(yuǎn)不要急著改代碼。先把線(xiàn)程棧抓下來(lái)把壓測(cè)復(fù)現(xiàn)跑出來(lái)把數(shù)據(jù)擺在桌面上再動(dòng)手。因?yàn)橹挥袛?shù)據(jù)能告訴你真正該優(yōu)化的是什么——而不是你“感覺(jué)”該優(yōu)化的是什么。這個(gè)習(xí)慣在代碼評(píng)審里同樣適用看到一段“能用”的代碼多問(wèn)一句“流量翻十倍它還扛得住嗎”很多線(xiàn)上事故就根本不會(huì)發(fā)生。最后再分享一個(gè)實(shí)用的小技巧排查完類(lèi)似問(wèn)題之后把當(dāng)時(shí)的線(xiàn)程dump、壓測(cè)腳本和優(yōu)化對(duì)比數(shù)據(jù)留在一個(gè)專(zhuān)門(mén)的問(wèn)題追蹤文檔里。下次再遇到隊(duì)列或者線(xiàn)程池相關(guān)的性能問(wèn)題先翻這個(gè)文檔大概率能省下半天排查時(shí)間。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
婷婷五月综合在线| 亚洲日韩美女丝袜美腿人妻视频| 久操精品网| 综合夜夜| 强乱老妇中文字幕| 超碰午夜| 熟女一区二区三区| 99re6久热只有精品6在线直播 | 三级片网站在线播放| 亚洲全色网| 91青青在线视频| 超碰这里只有精品| 免费农村成人少妇人妻Aa一区二区视频| 亚洲制服aⅴ中文字幕| 99热在线播放| 亚洲另类天堂| 性综合网| 乱性AV| 99re在线视频这里只有精品| 吉川爱美亚洲二区在线| 亚洲大色堂| 国产精品老熟女一区二区| 中日韩熟女| 爱妃国产亚洲视频中文字幕| 狠狠久久手机视频精品| 久久毛卡| 日韩无码黄色片| 黄片com.| 91精品久久久久久77777| 成人aⅴ一区二区三区| 岛国在线免费视频| 强奸乱伦大香蕉网| 精品中文字幕一区二区l - 百度| 国产宅男宅女在线观看| 成人午夜无码视频| 六九九九| 亚洲中文电影| 中国小夫妻勾搭露脸淫荡对白| 日韩精彩免费| 色欲人妻一区二区在线| 久草线上视频免费看| 天天插夜夜爽| 亚洲宗合网| 91丝袜美腿片| 久草精品在线| 亚洲欧美人妻| 亚瑟国产精品久久无码| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 超碰人人操97碰| 黑人美精品 A片| 国内毛片免费h片在线| 伊人女女资源在线观看| 91操人| 久久精彩视频| 日韩精品人妻中文字幕有码午| 用力操死我| 嗯嗯,啊啊,国产精品| 91色综合激情| 91插B网站| 97欧美精品| 欧美人人曰人人操人人射射| 性爱av在线免费观看| 久久精品性| 欧美福利视频啊啊啊啊| 久久97资源 网| 久久国产视频性吧| 欧美大香蕉97| 丝袜视频网国产90| 亚洲国产精品无码AV久久久| 老熟女乱子伦中文字幕一区二区| 综合色色婷婷| 中文乱码99| 欧洲大香蕉| 99久久免费看精品国产一区| 日韩免费福利在线观看| 国产剧情AV不卡在线观看| 欧美性爱精品一区二区| 欧美曰韩国产精品| 日韩91网| 日韩欧美一级特黄大片| 神马久久久久眼| 龙兴卡官方查询| 综合久久9| 久久激情婷婷| 亚洲精品国产精品乱码不99| 艾草av| 欧洲亚洲天堂精品| yw尤物av无码点击进入麻豆| 亚洲激情在线| 青青草国产一区二区三区| 99re超碰| 色优久久| 丝袜狂射91| 永久免费观看的毛片的网站| 五月天久久久| 91碰碰| 亚洲日韩在线a不卡99精品| 精品一区二区人妖| 国产不卡中文字幕免费avi| 色97欧美| 91九久| 日本ZZ高免费A级视频| 婷婷超| 丁香五月电影| 丝袜视频网国产90| aaaa少妇高潮大片| 碰人碰碰人人开房人肉| 思思热久久成人| 1024亚洲中文字幕久在线看片你懂的 | 日本免费一级AAA大片器| 亚洲有薄码区日本系列中文字幕| 91久久久久| 18禁美女裸体无遮挡啪啪| 69视频福利导航| 懂色av一区二区三区天美传媒| 久久久国产成人一区二区三区在线| 97色涩| 十八禁av无码免费网站APP| 久久久精品国产亚洲伊人| 一区二区不卡免费| 一区二区三区精品视频| 综合色久欲| 亚洲无码一二三区| 日韩精品资源| 久无码| 欧美综合自拍| 超碰在线综合97| 综合自拍| 久夜视频| 久久久久久性爱视频| 日韩欧美性爱电影在线观看| 美女AV一区二区| 八戒午夜福利理论片| 日韩av色图综合| 国产一区自拍欧美日韩| 97视频在线免费| 欧美一级色| 91白嫩| 黄页18禁| 欧美不卡二区| 九九热精品| 黑丝内射一区二区三区| 精品日韩人妻视频| 九九九九免费视频| 老熟女91av| 日韩簧片免费看| 熟女高潮合集-永久久久-成人AV | 精品国产网站| 日本亚洲熟女视频| 欧美影院一区二区三区| 校园春色综合香蕉| 开心激情婷婷| 日韩美女啪啪一区| 自拍啪啪视频| 激情图片亚洲色图| 亚洲欧美精品福利在线| 98人妻精品一区二区色欲| 国产精品suv一区| A片 AV一级在线播放观看免费| 男人天堂新| 日本欧美色| 天美麻花大全视频| 亚洲啪AⅤ永久无码| 婷婷久久久精品| 丝袜内射| 亚洲色诱惑| 思思热国产高清| 天天激色| 久久久久久久久久久久久久久乱码 | 欧美亚洲另类在线蜜桃| 一起草高清无码| 内射中国少妇高清视频免费视频 | 国产精品久久久久av| 免费视频一二三区| 亚洲精品国产熟女久久久| 亚洲 欧美都市激情| 欧美精品23| 美女网站91| 日韩 欧美 国产 麻豆| 天美传媒国产原创中文字幕亚洲欧美另类 | 色拍偷亚洲| 久久久久久久少妇| 五月天激情小说| 亚洲成人一区二区精品| 人人操肉肉| 天天做天天爱| 中文字幕激情小说| 夜夜操夜夜高潮夜夜爽国产精品区| 九九九久千久久激情蜜桃在线看 | 婷婷午夜清品久久久久久久性色视频观| 成人综合视频久久| 日本熟人妻中文字幕在线|...久久国产精品-国产精品_日本一区二区三区中文字幕 | 久草新在线| 免费男人的天堂| 极品后入免费视频| 欧州激情视频在线一区二区| 极品粉嫩一区二区| 亚洲熟妇图片| 狠狠干精品一二三四五六2022| 在线日韩视频| 激情婷婷| 韩国一区二区精品亚洲| 亚洲一区二区麻豆影院| 99免费在线视频| 成人综合久久精品色婷婷| 日韩欧美大力操| 色在线综合| 日韩性爱一级片| 亚欧美色| A片大香蕉在线| AVE乱伦| 国产一区二区三区高清视频| 日韩中文字幕视频| 99re国产精品视频| 99久久e免费热视| 国产 亚洲 丝袜 制服| 性色av蜜臀av色欲aV| 18禁美女裸体无遮挡啪啪| 人人艹亚洲| 亚洲精品尤物yw在线影院| 性饥渴少妇av无码毛片| 福利操逼| 操一区| 花野真衣| 亚洲天堂日本| 日韩欧视频| 美欧色综合| 91精品人| 少妇3P性爱自拍| 韩国一级AAA| 亚洲各类熟们中文字幕| 九九九九久久久| 熟妇艹鸡八| 试看福利| 精品久久久av无码免费| 日日碰狠狠添天天爽超| 一道本久久棕合爱| 国产精品久久久999| 爱妻综合网| 少妇熟女一区二区三区| 日韩一级性爱无码| 丰满人妻av一区二区三区| 色婷婷六月| 精品久久久久瑟瑟| 久肏视频字幕| 日韩一级久久毛片| 在线观看国产黄色| yazhousetuoumei| 爱丝福利| 日本人人操人人操| 97人妻色| 天天性射网| 亚洲欧美日韩偷拍色图| 999国产精品999| 久久精品亚洲东京热色播| 91n免费处女| 97超碰人妻| 日韩人妻中文视频| 欲色影视综合吧| 天天影视综合色| 国产JDAV无码视频在线观看| 天天操女人| 夜夜精品视频一区二区| 久操操AV电影| 成人资源中文字幕在线观看天天| 日韩中文字幕宗合在线| 国内毛片热久久思思热| www久久久| 玖玖爱一区在线| 亚洲资源站| www国产天美久久久| 国产女上位好爽在线| 少妇熟女视频一二三区| 中文字幕91页| 美女毛片999| 78久久| 自偷自拍的亚洲视频| 亚州色站 日韩电影| 男人的天堂VA| 日本在线一二| 青青草原伊人网| 午夜爽爽爽在线观看永久入口姬片| 日本天天人人狠狠在线日美女| 久久久精品,3| 在线播放中文字幕| 玖玖爱视频网站| 99久在线精品99re8热| 中精品一区二区三区| 人人操我人人干| 久草精品国产蜜臀| 2019精品国产无码成人| 日本不卡码黄色| 九九热AV| 蜜桃久久久久久久久久久久 | 超碰97男人| 欧美色亚洲| 三级三级三级日本99| 亚洲天堂少妇| 97色色色| 日韩熟女无码| 农村妇女精品一区二区| 18禁中文字幕| 不卡视频一区蜜桃视频 | 老鸭窝成人| 亚洲精品美女久久久久久久久| 亚洲极品| 人妻天天爽夜夜爽爽| 明星性猛交ⅹxxx乱大交| 97爱免费插| 韩国一级做a久久久久| 美女露胸露奶头| 无码人妻精品一区二区三区99不卡 | 久久綜合很很很| 国产亚洲精品无码三区| 青草影院内射高潮| 久久九九综合| 综合久久97| 欧美色图私拍91| 亚洲图片激情综合另类| 韩国嫰模上门援交视频| 色九区| 久久AV无码AV| 啊啊啊啊啊啊啊网址在线观看| 97国产高清视频在线观看| 亚州,欧美在线| 天美传媒国产原创中文字幕亚洲欧美另类 | 天美欧美国产| 曰韩欧美国产传媒麻豆第一区| 欧美视频一| 亚洲综合射| 欧美视频在线视频免费va| 91成人18| 久久亚洲日韩国产欧| 国产少妇肉丝在线观看| 欧美丰满少妇xx高潮| 超碰导航97| 曰本熟女视频| 色婷婷网| 人妻啪| 三级色影综合网| 97免费视频网| 欧美拳交在线播放| 思思热免费视频观看| 亚洲综合影院| 91高清欧美| 亚洲日韩青青草色月| 999岛国大片| 老外又粗又长一晚做五次| 日本精品一区二区三| 日韩在线视频1234| 操操啪| 日韩亚洲精品一区二区| 加勒比综合| 久久熟女嫩草成人片免费| 国产日韩精品一区二区三区| 九九av| 天堂中文日本在线观看| 中文字幕第9页萱萱影音先锋| 夜夜嗨TV| 超碰在线1234区| 丝袜喷水在线| 岛国小电影| 国产亚洲色婷婷久久99精品91| www.91逼逼.com| 精品无码久久久久久久杏吧| 91熟女在线| 女人天堂网| 黑人精品久久97| 91+欧美| 性感女人网页在线观看视频| 人人爱人人乐人人操| 青苹果影院男人的天堂| 午夜呻吟欧美| 肉丝网站91| 国产又黄又猛又粗又爽的网站| 91九色首页| 岛国精品视频在线观看| 婷婷亚洲天堂| 亚洲高潮少妇| 97国产超湿| 狠狠久久亚洲欧美专区| 欧美成人都市人妻| 色婷婷综合久久中文字幕雪峰| 五月天综合网| 亚洲色图久久精品蜜| 国产成人精品日本视频| 5月婷婷6月六月丁香| 亚洲暴力强奸AV| 色色色天美视频| 免费一级特黄特色大片在线观看看 | 综合av社区| 国产欧美日本亚洲精品| 亚川综合视频| 日韩激情中文字幕有码| 日韩性爱播放| 大奶啊啊好爽 | 狠狠干91| 无码高清操逼网址| 欧美一级黄片视频在线| 色综合av男人天堂| 五月丁香色综合| 人妻天天夜夜爽一区二区| 久99久视频精选| 强上我不卡卡| 屁股久久久久久久久| 超碰4A| 狠狠爱大香蕉| 久久伊人亚洲AV无码网站| 欧美一区二区三区四区综合| 中文字幕日本久久| 丝袜狠狠草尤物人妻av91| 秋霞午夜视频一区二区| 后入式五六区| 黄片免费日韩| 手机在线人成免费视频| 久久怡红院| 亚洲综合图文| 亚洲人妻久久久| 91天堂| 精品国产91内射久久| 三级AV入口| 亚洲Av无码成人精品国产| 亚洲宅男天堂| 色阁阁AV综合网| 久久久一区二区三区麻豆| 亚洲国产丝袜熟女av| 在线a v| 极品色社| 久久久熟女一区| 天天日天天干少妇日| 日韩乱伦AⅤ| www.夜夜| 超碰在线在公开超碰在线在公开| 色激情综合网站| 最新日韩黄片| 精品一区二区三区四区女 | 国产 日韩 欧美 人妻 熟女 中文 69人妻精品一区二区绯色 | 色色五月婷婷| 蜜桃久久久久久久久久久久| 神马久久久久久| 狠狠色噜噜狠狠狠狠狠色综合久久| 五月婷婷综合网| AV中文字幕剧情1区2区3| 日韩少妇无码| 五月激情视频| 欧美色图自拍| 中国一级操逼视频| 国产有码一区| 欧美激情专区| 99只有精品| 亚洲人人夜夜澡人人爽| 国产日韩无码一区二区三区久久区| 国产又爽又黄| 久久久久九九九九九| 亚洲黄色视频在线观看视频| 国产欧美伊人| 国产精品在线免费| 欧美日韩国产色图在线| 狠狠操狠狠燥| 中文字幕 国产区| 国产噜噜噜噜噜久久久久久久久| 亚洲天堂五月天国产| 成人AV素股で擦久久| 男人的天堂VA| 色色色综合网| 91性片| 91超级碰碰碰| 亚洲国产日韩精品久久久| 91干熟女| 中文字幕免费在线观看| 激情五月天色色网| 日曰骚久久精品| 91精品大奶人妻| 亚洲97网站| 日韩午夜精品一区二区三区电影| 青操影院| 亚洲午夜av| 加勒比色99999| 综合婷婷| 少妇高潮九九九九| 国产日韩精品一区二区三区| 国产精品又黄又猛又粗| 日日夜夜青青草母狗| 亚洲 小说 欧美 激情 另类| 国产精品视频| 日本高清一区二区在线| 一区二区三区一亚洲中文字幕、综合区灬 | 亚洲无吗在线视频| 日本性一区| 曰韩av中文字幕专区| 色97欧美| 歐美一級亂黃99在綫精品| 人人操人人干xxx| 亚洲欧美国产中文字幕| av天堂5| 久久久久久久久9| 婷婷丁香六月天| 偷拍精品一区二区三区| 欧美亚洲涩涩| 一区二区三区视频| 久久久久亚洲| 啊灬啊灬啊灬啊灬高潮奶出了免费视| 国产激情片在线观看| 久久久91| 91麻豆天美传媒HD| 久久男女激情视频网站| 亚洲影院成人| 国产超碰欧美| 欧美在线色图| 人人爱操| 国产精品久久久久久照片| 少妇蹲下买菜露大唇0| 天美精品av| 久久91视频| 啊啊啊啊免费视频| 免费网色网站| 亚洲图片欧美91N| 国产成人欧美一区二区三区的国产| 亚洲图片视频小说| 自拍视频大全亚洲专媒视频/一区二区三区 | 99re热有精品视频国产| 欧美亚洲首页| 久久精品高清无码一区| 69AV女优男人的天堂| 久久高清欧美国产| 国产丝袜欧美在线视频| 中文 人妻 制服| 老司机免费视频在线91| 日韩另类色图| 日韩av乱伦| 狠狠中文字幕| 水多多映视AV| 97精品一区二区三区免费| 欧美一区二区三区成人性生活| 欧美日日网| AV综合中文字幕干| 欧美强奸乱| 97在线精品观看视频| 97精品免费视频网站| 熟妇高潮二区三区| 午夜无码熟妇丰满人妻| 美女啪欧美一区| 无码欧美有限公司| 屌逼麻豆| 人妻嗯啊啊在线播放| 最新日韩黄片| 户外裸露刺激视频第一区| 国产日韩精品无码去免费专区国产| 国产精品操| 天天射天天色成人| 后入人妻无码| 黄色交缠性感爆操91国产精品免费一区二区三区 | 欧美九九九| 欧美综合传媒| 天天操天天日天天干| 97精品中文字幕| 亚州高清色综合| 亚洲 综合 第一页| 男女香蕉一区二区| 蜜区区视频79| 女生看匆91网站| 欲香欲色综合天天伊人| 91制服丝袜| 久 久无码人妻AV| 久久精品店| 欧美日韩中文字幕人妻| 97干97色| 亚洲av无码国产精品字幕| www.99色| 91人妻中文| 精品人妻美妇91job| 高清在线偷拍自拍视频| 色婷婷在线视频| 91美女丝袜诱惑视频| 丝袜美腿欧美| 精彩国产视频播放1区2区| 性生活无遮挡纯毛片在线看| 激情四射五月天| 激情文学亚洲| 国产精品熟女一区二区三区| 日本爽爽爽爽爽爽免费视频| 精品成人亚洲午夜电影| 韩国一级做A片免费的| 九九综合久久| 久久综合中文国产| 午夜精品久久久99热蜜桃的功能特点| 亚洲九九视频| 亚洲欧美另类激情小说| 曰韩操B| 国产麻豆一级精品视频| 91蜜臀熟女| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 九九aV| 蜜桃成人1区2区3区| 蜜臀AV成人精品蜜臀| 久久久久九九九九九| 性色A∨91| 亚洲精品一二区| 丁香五月大香蕉| 成人日本精品九区| 久久久青青草| 午夜一区二区三区国产| 五月天婷婷成人网| 2026国产精品视频| 亚洲图片欧美| 天天操天天舔| 亚洲综合小视频小说在线观看| 亚洲91射| 日韩操逼HD| 91neishe| 又黄又硬又粗又长国产视频| 丁香六月激情| 精品久久99| 0755午夜福利视频| 久草视频在线视频在线视频在线观看| 日日夜夜青青草母狗| 我想要 啊 啊 啊| 看日韩操逼| 青青草啪啪网| yw尤物av无码点击进入麻豆| 五月丁香影院| 97久久久久久久久久| 激情五月天插| 日韩国产十八禁| 日韩性爱长视频免费| 亚洲欧美中文日韩视频中国语| 色综和网| 人妻少妇被猛烈进入中| 蜜臀AV成人精品蜜臀AV久久| 国产深喉视频一区二区| 丁香六月婷婷久久综合| 99在线观看视频在线高清| 在线可观看的黄色网址| 亚欧美综合网。| 亚洲 日本 国产 综合| 99爱久久视频频| 日本操逼无码| 日韩AV中文字幕电影| 久久午夜色播影院免费高清| 口爆综合网| 久久久久久久精| 男人天堂久久精品| 国产精品扒开腿做爽爽爽视频| 丁香五月天啪啪| 欧洲人妻视频| 熟女人妻av在线资源,黄色的资源| 91国产丝袜白虎| 黄色av一区二区在线| 美女上床网站| 狠狠色综合网| 人人妻人人玩人人澡人人爽| 青青草九九九九九| 三男一女不戴套的A片| 800zy一区二区| 久久黄片国产一区二区| 日本久久综合| 一区二区视频在线播放| 欧美淫乱视频| 玖色AV| 东京热视频网| 91在线/欧洲| 人看人人摸人人操| 国产91 丝袜在线播放 | 五月天亚洲网| 亚洲综合激情五月久久| 日日夜夜摸| 精品乱子一区二区三区99| 欧美日韩黄片精品在线 | 中文字幕国产| 加勒比AV天堂| 午夜免费福利视频一区| 高清不卡一二三区视频......| 亚洲天堂在线怕怕视频 | 无遮挡一级毛片视频免费的| 嗯嗯啊好大| 午夜福利成人免费视频| 中文字幕成人乱码熟女精品国50 | 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 欧美香蕉视xxx| 岛国黄| 91欧美巨乳| AV 少妇 人妻 偷拍| 色五月AV| 尤物视频网 刘玥| 三级片网站在线播放| 中文字幕丰满子伦无码专区在线视频最新 | 天天爱天天韩国日本牛牛牛牛| 国产老太乱伦一区| 欧美在线啊啊啊| 久久99亚洲精品久久99果| 日韩99999| 樱花草社区www中国| 欧美丝袜制服久久| 91香蕉国产尤物视频| 亚洲成人色情五月天丁香花| 九九色色| 伊人丁香五月婷婷| 成人国产二区三区在线,男女精品。| 91无人区卡一卡二卡三乱码入口最新版:能让用户有更多选择的选择-经典说说-爱 | 国产精品高朝久久久久久久| 五月天综合在线| 免费试看60秒| 锕锕好爽 死我在线观看| 日韩无码AB| 色狠狠色| 在线可观看的黄色网址| 亚洲综合电影| 人妻娇喘 激情视频| 欧美性,亚州色| 男人的天堂不卡一区二区| 国产丝袜美女在线一区| 久久久久久综合久久伊人蜜月| 午夜精品久久久久| 一二三啪啪专区| 国产一区二区三区精品观看啪| 午夜亚洲WWW湿好大| 亚洲 中文 欧美 日韩 在线| 熟妇高潮一区二| 五月天婷婷激情| 国产 v乱码一区二| 欧美性爱精品七区| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区 | a男人的天堂久久一级A毛片| 日夜精品| 亚洲AV免费在线| 欧美综合站| 久久久免费的精品| 中文字幕乱在线伦视频中文字幕乱码在线| 加勒比色99999| 大香蕉2017| 中文字幕伊人| 日本三级韩国三级美三级91| 少妇同性| 一区二区不卡| 一区二区首页| 99re在线观看| 欧美亚男人的天堂| 天堂资源欧美| 91女人的网站| wwe 天天干.com| 91原创在线观看| 久久精品免费| 白丝1区2区3区| 国产av青草| 亚洲精品一二三四区| 久久不卡一区二区| 久久久久中出| 亚州久久9| 97这里只精品| 91美女色视频亚洲| 69丨亚洲丨精品丨入口免费播放| 97精品国产精品免费观看| 久久综合久色欧美综合狠狠 | 综合网色| 丁香五月色情| 亚洲激情综合| 成人五月香网在线| 天天日老熟妇| 精品-91人妻子系列| 97香蕉碰碰人妻国产欧美| 嗯嗯啊啊视频在线看| 91N欧美| 色偷偷色偷偷欧美日韩| 嗯嗯啊啊视频一区二区三区| 亚洲怡春院| 欧美97视频| 日韩在线观看AV| 欧美激情亚洲情色| 2017天天插| 热无码中文亚洲H一道本一区二区| 久久亚洲国产成人| 天天视频综合在线观看视频| 久久美女福利是上海美女| 熟妇人妻精品一区二区视频色欲| 曰韩欧美国产传媒麻豆第一区| 亚洲中文字幕日产无码久久| 超碰欧美在线欧美| 日逼97| 日本性爱视频一级| 久久久久久AⅤ无码免费肉站| 亚欧韩av| 91日日| 中文字幕免费看| 久久久久少妇| 国产 热久久久久国产精品| 日本大片日本一区二区免费高清| 九九热精品在线| 日韩人人精品| 日韩三级伊人| 亚洲综合中文字幕有码| 97超级久久强资源| 亚洲男人天堂视频 | 人妻精品4K4K4K4K4| 女人天堂网| 人人操人人色网| 国产美女高潮叫床视频| 91黑丝少妇| 殴美色网| 亚洲国产奇米影视久久| 亚洲人精品久久久喷水| 欧美影音在线| 欧美组图日韩亚洲中文字幕| 日本五十路熟女一区二区| 嗯……啊…嗯嗯…啊…好舒服| 天天内射| 麻豆视频国产一区二区| 免费一级黄色录像影片| 国产日本熟女顶级一区二区三区视频 | www.久久超碰| 伊人专区一区二区三区| 亚洲男人天堂Av| 九热超碰| 欧美性爱18观看| JULIA人妻风俗店中出电影| 久久↗↗| 国产久久av| 蜜桃在线观看一区二区三区 | 乱伦日本色图AⅤ| 精品亚洲俞拍视频一区| 天天色怡春院| 国产亚洲色婷婷久久99精品91 - 百度 | 少妇与黑人高潮在线| 国产精品午夜福利视频| 樱花蜜乳av| 粘花网06av视频| 亚洲日韩电影| 又黄又爽在线观看视频| 丰满熟女人妻一区二区三五十一路| 黄片国产精品一区二区| 熟妇熟女一区二三区| 极品国产内射| 口爆综合网| 超碰97欧美| 精品久热| 亚洲欧美在线丝袜| 色五月激情网| 清纯唯美综合| 五月天丁香| 日本在线15p| 色婷五月| 欧美激情 一区| 另类图片五月天| 亚洲少妇自拍中文字幕懂色| 性做久久久久久免费观看软件| 超碰98综合网| 天天射夜夜| 日本性爱网址| 大屁股国产在线视频| 国产亚洲色婷婷久久99精品91葵花宝典 | 91色欧美| 天天插天天干| 亚洲伊人成综合成人网| 成 人 影视 一区 二区 三区 四区 | 精品国产Av无码久久久伦古装| 人妻久久久久久久久久久久久久久| 熟女精品日韩一区二区三区| 激情第四色| 亚洲无码精品AV久久久| 日本三级日本三级三级人妇四虎| 黄片免费视频2019| 欧洲精品网| 极品色www影院| 火箭成精品视频884必出精品| 综合色图亚洲欧美| 日韩偷拍一区二区三区| 国产午夜视频| 日韩黄色电影网站| 91麻豆天美传媒在线| 97国伦国色| 青青青国产手线观看视频2| 熟女高潮合集-永久久久-成人AV | 欧美骚少妇| 天天操狠狠日夜夜干超碰撸com视频在线观看| 久久大香蕉97| 国产老熟女| 日韩一级特黄av毛片| 久久久91| 综合干干干av久久久综合网| 精品在线观看视频在线| 欧美裸体美女日麻屄| 成人老鸭窝人人在线视频| 亚洲欧美在线观看2021| 99热在线只有精品| 久久一二三四不卡| 亚洲女毛多水多21P| 国产老女人久久毛| 免费97视频| 九九性爱网| 欧美巨大性舒爽顶到了| 久久同城AV| 曰韩欧美国产传媒麻豆第一区| 国产精品ⅴ无码大片在线看.| 南澳成人一级片在线播放| 亚洲限制级| 美女自卫慰黄网站免费| 国产精品麻豆免费视频| 嗯~啊~轻一点 视频| 九九英色视频| 岛国精品视频在线观看| 偷拍亚洲熟女视频播放| 亚洲欧美首页| 骚逼自拍99| 欧洲精品一区二区三区| 99在线精品观看99| 久久久久亚洲Aⅴ无码| 26uuu国产亚洲综合| 欧美性第1页| 中文字幕日韩电影人妻| 99这里只有精品| 东京热不卡视频| 涩五月婷婷| 曰韩成人免费视频| 99精品欧美一区二区三区桃色| 精品人妻av区天天看片| 高潮9999外国| 蜜臀99999| 中文字幕亚洲欧美在线不卡| 亚州色交| 制服乱伦| www.色操逼| 久久亚洲AV无码专区国产精品| 激情熟女12P| 国产一级舔足在线观看| 校园春色美腿丝袜 | 明星性猛交ⅹxxx乱大交| 五月天久久人妻| 亚洲日本大香蕉1| 9长久久精品| 天天摸夜夜操视频| 亚洲精品819| 女人爽到高潮潮喷18禁网站| 岛国黄色大片网站| 国产精品爽爽v| 国产一级内射无挡观看| 亚洲成人激情小说视频| 呦呦一区| 999久久久免费精品国产牛牛| 青草成人免费视频一COm| 91美女精品| 四虎影视 亚洲无码| 亚洲丝袜二区在线| 91亚洲影视| 99999亚洲| 伊人影院日本| 色99999| 秋霞操逼片| 色就色综合| 成全在线观看免费观看| 在线a v| 亚洲乱伦图片视频| 久久精视频美日韩在线视频| 丰满的三级少妇欧美久久久| 亚洲美女自拍偷拍视频| 五月婷久久| 粉嫩不卡一区二区性爱| 国产熟女免费观看久久| 久久久久久国产精品免费网站 | 国产中文福利| 91嫩草欧美| 久久人妇| 亚洲色欧| 亚洲无线观看久久| 百度百度日本操逼| 可以在线观看的黄色网址| 色情乱伦AV| 亚洲五月婷婷| 麻豆AV一区二区| 久久111| 蜜臀va69| 国产精品美女久久久久久网站| 中国AAAAAA黄色片| 99性爱在线观看| 欧美日韩第一页| 桃色六月天| 久久久性少妇| 97碰久久| 麻花传媒免费网站在线观看| 色色色网站| 日本丝袜美腿人妻九九| 99re综合伊人| 午夜爽爽爽| 碰超人人在线一区二区三区| 免费视频观看60秒| 超碰97欧美| 国产乱码精品一区二区三区四川| 嗯啊不要在线| 97免费视频网| 欧美日韩另类激情图片| 大香蕉欧美| 在线性黄高清免费视频| 亚洲男人天堂2012| 99国内熟女露脸视频| 国产日本一区二区三区蜜臀在线观看| 五月婷婷六月丁香网址| 久久久久9| 久久久111| 蜜臀久久99精品久久久电影| 成人性爱AV在线免费观看| 大香蕉手机视频| 天天舔九色婷婷| 亚洲图片欧美| 中文字幕一区二区三区视频播放| 国产四虎在线| 丰满人妻-区二区三区免费看 | 精品亚洲一区在线观看| 1禁看欧美黄片免费看| 九一综合精品视品av| 3P丝袜熟女 色综合| 国产成年女人免费视频播放a| 色老汉玖玖爱| 96免费视频在线| 久久久久亚洲| 五月色综合| 97视频www| 最新日日夜夜天天干干| 四虎影库国产精品免费| 成人一区二区三区四区| 熟女人妻精品一区二区视频 | 婷婷10月天青娱乐| 九九视频黄色片| 欧美日韩99精品麻豆传媒| 久久九九97| 日韩精品 视频一区二区| 日韩精品9999| 九九精品无码专区免费| 欧美日韩岛国大片在线观看| 欧美A√综合网| 久久免费99精品久久久久久| 狠狠综合| 青青操国产夫妻| 婷色五月| 免费男人的天堂| 欧美性爱另类综合| 激情文学亚洲| 国产91乱伦| 中亚黄色三级大片| 黄片色区软件| 欧美色图天堂在线| 可乐操亚洲蜜911| 亚州国产成人精品女人久久| 激情四射婷婷六月天| 国产精品日日摸天天碰| 亚洲精品久久久久久久蜜桃臀| 伊人精品视频| 欧洲欧美视频一区二区| 台湾大香蕉99热| 日韩操啪| 综合色拍| 日本色色色视频| 国产第二页| 探花一区在线| 亚洲综合伊人无码久久| 国产精品久久久鸭无码的功能| 超碰色美女| 五月丁香啪啪啪| 亚洲中文丝袜美腿诱惑字幕| 久久精品人体AV| 精品人妻视频入口| 亚洲妇色| 色在线亚洲视频www| 欧美丝袜美女电影一二三四区| 国产毛片久久久久久久| 日本天天干天天日一区| 97在线精品| 亚洲三级。日韩三级| 亚洲成人一二三区| 欧美性爱第一区| 懂色av中文字幕一区二区三区天美| 国产免费久久久久| 一区二区三| 嗯嗯啊啊用力视频免费| 亚洲av综合色| 亚洲毛片久久| 成 人 影视 一区 二区 三区 四区| 久久久精品91八戒| 本道在线| 色婷婷基地| 日本韩国国产精品一区| 综合97久久| 丁香婷婷色五月| 性爱综合一区二区| 欧洲自拍第一页| 亚洲美乱| 欧美顶级黄色大片免费| 丰满人妻一区二区三区免费 | 久久香蕉影院| 天天夜躁日日躁狠狠2002| 久久中文字幕女同性恋一区| www.婷婷五月天| 最新亚洲人成网站在线影院| 骚货操死你| 粘花网06av视频| 亚洲成人免费电影| 国产一级特黄大片处女| 玖色av| 人妻少妇三级| 蜜桃成人1区2区3区| 免费超碰97在线观看| 欧美精品97| 91欧洲入口| 人夜夜精品网站香蕉嫩草| 五月丁香拍拍激情综合三级| av激情亚洲五月天| 国产熟码AV| 精品久一区免费| 99久久婷婷国产综合精品草原| 免费福利视频中文字幕| 麻豆天美在线| 少妇高潮喷水无套久久久久久| 亚洲 欧美 另类 综合 偷拍| 亚洲图片欧洲图片aⅴ| 亚洲一卡二卡在线免费| 欧美在线电影| 亚洲国产天堂| 日韩欧美蜜桃精品久久中文字幕久久| 天天添天天干电影| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 国产亚洲深夜激情| 久久精品电影在线| 精品制服美女中文一区二区三区| 九九热免费国产视频婷婷伊人| 国产成人无码久久精品| 脫衣舞一区二区三区| 91在线视频国产网站| 一区二区三区看视频| 久久久91福利姬| 国产农村妇女精品1区二区| 99久久9| 女人被添高潮免费视频| 日韩性爱免费视频在线网站| 男女性无套 免费九一| 啊啊啊啊啊啊啊啊视频| 超碰碰97资源站| 91久久精品美女高潮喷水| 精品视频久久区| 乱子伦一区二区三区国产精品| 99热aaa| 在线天堂999| 超碰97玖玖爱| 另类av天堂| 久久久不能久久久久| 小草精彩毛片| 久久久久中出| 97超碰色屌| 99re3这里只有精品| JULIA人妻风俗店中出电影| 久久色一区| 欧美精品另类人妖xxxx| 日本久久久久久久久| 91xingse| 嗯嗯啊啊亚欧精品| 青青爽| 日韩在线97| 日韩精品人妻中文字有码在线| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 欧美一级国产一级| 欧美强奸乱能| 欧美很很操视频| 夂久色| 亚洲人精|