精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

消息積壓了100萬,除了加機(jī)器,還能干什么?

開發(fā) 前端
在深層分析上,這背后往往隱藏著系統(tǒng)瓶頸:消費線程池設(shè)計不當(dāng)、消息處理邏輯復(fù)雜、死信隊列未優(yōu)化、限流失效等。接下來,我通過這篇文章給大家介紹五種常見解決方案。

前言

有些小伙伴在工作中可能遇到過這種場景:某天早上起來,監(jiān)控告警響了——MQ隊列里突然積壓了100萬條消息,整個系統(tǒng)卡頓如蝸牛。

你第一反應(yīng)是不是“趕緊加機(jī)器,擴(kuò)容消費端”?

沒錯,這招能臨時救火,但成本高、見效慢,如果根源問題沒解決,積壓只會卷土重來。

我曾在一次餐飲大促中就處理過類似災(zāi)難:我們用的是RocketMQ,由于生產(chǎn)端批量發(fā)送了大量的消息,消費端出來不過來,消息堆積到了100多萬條。

當(dāng)時,團(tuán)隊想加服務(wù)器擴(kuò)容,但預(yù)算有限、時間緊迫,我們只能另辟蹊徑。

結(jié)果通過優(yōu)化代碼和策略,問題解決了!

為什么MQ會積壓100萬數(shù)據(jù)?

簡單來說,就兩個原因:

  • 消息生產(chǎn)太快了(Producer):比如業(yè)務(wù)高峰期,用戶瘋狂下單,生產(chǎn)者線程狂噴消息或者批量發(fā)送大量的消息。
  • 消息消費太慢了(Consumer):消費者處理邏輯卡頓,比如數(shù)據(jù)庫查詢慢、網(wǎng)絡(luò)延遲高或代碼bug拖累速度。

在深層分析上,這背后往往隱藏著系統(tǒng)瓶頸:消費線程池設(shè)計不當(dāng)、消息處理邏輯復(fù)雜、死信隊列未優(yōu)化、限流失效等。

接下來,我通過這篇文章給大家介紹五種常見解決方案。

方案1:優(yōu)化消費者邏輯,提高吞吐量

首先,別急著加機(jī)器,先從消費端下手:優(yōu)化消費者代碼能大幅提速消費過程。

常見問題包括CPU利用率低、線程池浪費資源。

舉個實戰(zhàn)例子:在我們團(tuán)隊,曾發(fā)現(xiàn)消費者線程池配置不合理,導(dǎo)致線程頻繁上下文切換,消費速度只有每秒1000條,遠(yuǎn)低于生產(chǎn)速率。

深度剖析:

為什么慢?

消費者通常用線程池(如ExecutorService)并行處理消息,但如果線程數(shù)過多(超過CPU核數(shù)),上下文切換開銷增大;太少,則CPU閑置。

同時,如果每處理一條消息都做一次耗時IO操作(如數(shù)據(jù)庫查詢),那整個系統(tǒng)會卡得像老牛拉車。

如何優(yōu)化? 

調(diào)整線程池參數(shù)(如corePoolSize、maxPoolSize),結(jié)合Batch處理(批處理消息),并異步優(yōu)化IO。

例如,使用Java的CompletableFuture做異步調(diào)用,減少阻塞。

假設(shè)我們用Spring Boot + RocketMQ集成。以下代碼優(yōu)化了一個批量消費者,使用線程池和批處理邏輯。

示例代碼如下:

import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.springframework.stereotype.Component;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.CompletableFuture;


@Component
@RocketMQMessageListener(topic = "orderTopic", consumerGroup = "orderGroup")
publicclass OrderConsumer implements RocketMQListener<String> {
    private ExecutorService executor = Executors.newFixedThreadPool(4); // 根據(jù)CPU核數(shù)優(yōu)化線程數(shù)
    
    @Override
    public void onMessage(String message) {
        // 傳統(tǒng)慢速方法:每條消息都同步查數(shù)據(jù)庫(耗時IO)
        // processSingleMessage(message);  // 替換為批處理優(yōu)化
        
        executor.execute(() -> batchProcessMessages(message));
    }


    // 優(yōu)化后的批處理方法:批量處理多條消息
    public void batchProcessMessages(String message) {
        CompletableFuture.runAsync(() -> {
            try {
                // 模擬復(fù)雜邏輯:先聚合消息(如緩存到內(nèi)存隊列)
                List<String> messages = loadBatchFromMemory(); // 從緩存批量取消息
                
                if (messages.size() >= 100) { // 批處理100條一次
                    // 批量數(shù)據(jù)庫更新(減少IO次數(shù))
                    for (String msg : messages) {
                        updateDatabase(msg); // 異步或并行執(zhí)行
                    }
                    messages.clear();
                }
                // 消息處理完成后,模擬異步日志
                log.info("Processed message in batch: " + message);
            } catch (Exception e) {
                log.error("Error processing batch", e);
            }
        }, executor);
    }


    private void updateDatabase(String msg) {
        // 假設(shè)數(shù)據(jù)庫更新操作(異步優(yōu)化可改用JDBC批處理)
        System.out.println("數(shù)據(jù)庫更新:" + msg);
    }
}

代碼邏輯詳解:

線程池優(yōu)化: Executors.newFixedThreadPool(4) 設(shè)線程數(shù)為CPU核數(shù)(如4核),避免線程過多浪費資源。

批處理設(shè)計:不是每條消息觸發(fā)數(shù)據(jù)庫查詢,而是聚合到緩存(如內(nèi)存隊列),達(dá)到100條后才批處理。這減少了IO操作次數(shù)——傳統(tǒng)方式每秒100次IO查詢,可能耗時20ms;批處理后,每秒只1次查詢(100條/批),IO時間減半。

異步調(diào)用:用 CompletableFuture.runAsync() 做異步執(zhí)行,CPU核心資源不被阻塞,提高吞吐量。例如,數(shù)據(jù)庫更新放在異步線程,消費端主線程可繼續(xù)拉取新消息。

結(jié)果:通過此優(yōu)化,消費速率從1000條/秒提升到5000條/秒(根據(jù)我們的benchmark),成本幾乎為零!

消費者處理流程圖如下:

圖片圖片

生產(chǎn)者向MQ隊列發(fā)消息,消費者拉取消息并緩存到內(nèi)存中內(nèi)存緩存。

當(dāng)緩存滿100條時,觸發(fā)批處理邏輯執(zhí)行數(shù)據(jù)庫更新操作,減少IO調(diào)用。

方案2:調(diào)整消息隊列策略

優(yōu)化消費者后,我們看隊列本身。

默認(rèn)MQ是FIFO(先進(jìn)先出),但有時關(guān)鍵消息被淹死。

通過定制隊列策略,避免非必要消息堆積。

在我們團(tuán)隊的一個項目,曾因促銷消息和普通消息混在同一個隊列,導(dǎo)致核心支付消息被卡。

深度剖析:

問題根源:所有消息都平等入隊,如果生產(chǎn)者發(fā)送低優(yōu)先級消息過多(比如日志采集),會阻塞高優(yōu)消息(如支付通知)。積壓100萬條時,關(guān)鍵業(yè)務(wù)可能受影響。

解決方案:用優(yōu)先級隊列或分區(qū)功能,讓高優(yōu)消息優(yōu)先消費。例如,Kafka支持Topic Partitioning,RocketMQ支持Message Queue分級。Java中可通過API實現(xiàn)。

這里使用RocketMQ的API,創(chuàng)建一個帶優(yōu)先級的消費者。

示例代碼如下:

import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
import org.apache.rocketmq.client.consumer.listener.*;
import org.apache.rocketmq.common.message.MessageExt;
import java.util.List;
import java.util.concurrent.PriorityBlockingQueue;


publicclass PriorityConsumer {
    public static void main(String[] args) throws Exception {
        DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("priorityGroup");
        consumer.setNamesrvAddr("localhost:9876"); // MQ服務(wù)器地址
        consumer.subscribe("orderTopic", "*");  // 訂閱所有消息


        // 創(chuàng)建優(yōu)先級隊列(PriorityBlockingQueue)
        PriorityBlockingQueue<MessageExt> priorityQueue = new PriorityBlockingQueue<>(1000, 
            (m1, m2) -> m1.getPriority() - m2.getPriority()); // 基于消息優(yōu)先級排序
        
        consumer.registerMessageListener(new MessageListenerConcurrently() {
            @Override
            public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs, ConsumeConcurrentlyContext context) {
                for (MessageExt msg : msgs) {
                    int priority = Integer.parseInt(msg.getProperty("priority")); // 獲取消息優(yōu)先級屬性
                    priorityQueue.add(msg);  // 入隊到優(yōu)先級隊列
                }
                
                // 優(yōu)先處理高優(yōu)先級消息
                while (!priorityQueue.isEmpty()) {
                    MessageExt highPriorityMsg = priorityQueue.poll(); // 取最高優(yōu)先級
                    processMessage(highPriorityMsg); // 消費邏輯
                    if (highPriorityMsg.getPriority() > 5) { // 例如,設(shè)置支付消息優(yōu)先級高
                        // 加速處理,并跳過普通消息
                    }
                }
                return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
            }
        });
        consumer.start();
    }


    private void processMessage(MessageExt msg) {
        String body = new String(msg.getBody());
        System.out.println("處理消息: " + body + ", 優(yōu)先級: " + msg.getProperty("priority"));
    }
}

代碼邏輯詳解:

優(yōu)先級隊列:用 PriorityBlockingQueue 存儲消息,排序規(guī)則基于消息的優(yōu)先級屬性(如生產(chǎn)者在發(fā)送時設(shè)置"priority=10")。

消息分類:生產(chǎn)者發(fā)送消息時,添加優(yōu)先級標(biāo)簽(例如 msg.putUserProperty("priority", "10") )。Consumer端,通過 msg.getProperty 獲取。

消費邏輯:消費者不是按FIFO處理,而是優(yōu)先poll出高優(yōu)消息。例如,支付消息(priority>5)實時消費,日志消息(priority=1)可能延遲。

實戰(zhàn)好處:積壓發(fā)生時,高優(yōu)消息不被阻塞,減少業(yè)務(wù)損失。在測試中,這降低了處理積壓時間50%+, 無需新增服務(wù)器。

優(yōu)先級隊列流程圖如下:

圖片圖片

Producer發(fā)送消息時帶優(yōu)先級標(biāo)簽。

Consumer從MQ拉取消息后,存入內(nèi)部優(yōu)先級隊列,優(yōu)先挑高優(yōu)先級(如支付通知)處理低優(yōu)先級消息(如日志)排隊晚處理,確保關(guān)鍵業(yè)務(wù)不被積壓。

方案3:生產(chǎn)者限流控制

優(yōu)化了消費者和隊列后,還得看“源頭”——生產(chǎn)者。

很多時候,生產(chǎn)過猛是積壓主因。

通過限流,我們能動態(tài)調(diào)整生產(chǎn)節(jié)奏。

深度剖析:

為何限流重要?

如果生產(chǎn)者狂發(fā)消息(例如用戶活動秒殺),而消費者跟不上,“洪水”就會沖垮MQ。限流就是設(shè)置發(fā)送速率上限(如每秒5000條),避免生產(chǎn)過剩。

如何實現(xiàn)?

Java提供令牌桶或漏桶算法(如Guava的RateLimiter),或MQ原生能力(如RocketMQ的Delay Level)。

核心思想:生產(chǎn)者檢測隊列積壓狀態(tài)后自動降速。

集成Guava RateLimiter做生產(chǎn)者限流。

示例代碼如下:

import com.google.common.util.concurrent.RateLimiter;
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.common.message.Message;
import java.util.concurrent.TimeUnit;


publicclass ThrottledProducer {
    privatestatic RateLimiter rateLimiter = RateLimiter.create(100.0); // 限流100條/秒


    public static void main(String[] args) throws Exception {
        DefaultMQProducer producer = new DefaultMQProducer("throttleGroup");
        producer.start();
        
        for (int i = 0; i < 1000000; i++) {  // 準(zhǔn)備發(fā)送100萬條
            boolean acquired = rateLimiter.tryAcquire(1, 100, TimeUnit.MILLISECONDS); // 嘗試獲取令牌
            if (acquired) {
                Message msg = new Message("orderTopic", "tagA", ("Message " + i).getBytes());
                producer.send(msg); // 安全發(fā)送
            } else {
                // 隊列積壓時暫停生產(chǎn)(模擬MQ監(jiān)控回調(diào))
                if (checkQueueBacklog() > 50000) { // 自定義函數(shù)檢查MQ當(dāng)前積壓數(shù)
                    Thread.sleep(100); // 暫停100ms減發(fā)送頻率
                }
            }
        }
        producer.shutdown();
    }


    // 自定義函數(shù):監(jiān)控MQ積壓(偽代碼)
    private static int checkQueueBacklog() {
        // 通過MQ API獲取當(dāng)前隊列消息數(shù)
        return100000; // 返回值模擬實際場景
    }
}

代碼邏輯詳解:

限流機(jī)制:用 RateLimiter.create(100) 設(shè)生產(chǎn)速率上限為每秒100條。 rateLimiter.tryAcquire() 嘗試獲取令牌:成功就發(fā)送消息;失敗就暫停。

動態(tài)調(diào)整:代碼中加了邏輯,當(dāng)檢測MQ積壓>50000條(函數(shù) checkQueueBacklog() 通過RocketMQ admin API實現(xiàn)),生產(chǎn)者暫停( Thread.sleep(100) ),減少發(fā)速度。

實戰(zhàn)效果:這避免了“雪崩效應(yīng)”。我們在測試中設(shè)限流,生產(chǎn)速度從10000條/秒降到800條/秒后,MQ很快恢復(fù)了正常。

積壓清理時間縮短到原1/3!

MQ限流流程圖:

圖片圖片

生產(chǎn)者試圖發(fā)送消息前,RateLimiter檢查令牌可用性。

如果獲取成功,發(fā)送消息到MQ隊列;失敗則檢查MQ積壓狀態(tài)(如積壓高),生產(chǎn)者等待100ms后重試。

方案4:死信隊列和錯誤處理機(jī)制

在MQ積壓中,很多消息是因處理失敗而被重試堆積的(例如網(wǎng)絡(luò)中斷)。

通過死信隊列(DLQ),我們能隔離壞消息,讓好消息流通。

深度剖析:

死信隊列是什么?

MQ中重試多次失敗的消息轉(zhuǎn)到DLQ,避免主隊列卡死(常見于RabbitMQ)。在積壓100萬條的場景,可能有1成消息因BUG或資源不足無法消費。

如何應(yīng)用?

DLQ不是垃圾桶,而是診斷工具:分析失敗消息根源,修正消費者邏輯。

使用Spring AMQP(RabbitMQ示例)實現(xiàn)死信隊列。

示例代碼如下:

import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.Map;


@Configuration
publicclass DLQConfig {
    // 定義主隊列和綁定
    @Bean
    public Queue mainQueue() {
        Map<String, Object> args = new HashMap<>();
        args.put("x-dead-letter-exchange", "dlqExchange"); // 死信路由到指定Exchange
        args.put("x-dead-letter-routing-key", "dlqKey");   // 死信Routing Key
        returnnew Queue("mainQueue", true, false, false, args);
    }


    @Bean
    public Binding binding() {
        return BindingBuilder.bind(mainQueue()).to(exchange()).with("mainKey");
    }


    // 死信隊列和綁定
    @Bean
    public Queue dlqQueue() {
        returnnew Queue("deadLetterQueue");
    }


    @Bean
    public DirectExchange dlqExchange() {
        returnnew DirectExchange("dlqExchange");
    }


    @Bean
    public Binding dlqBinding() {
        return BindingBuilder.bind(dlqQueue()).to(dlqExchange()).with("dlqKey");
    }
}

代碼邏輯詳解:

配置主隊列:在主隊列( mainQueue )參數(shù)中,設(shè) x-dead-letter-* 屬性,指向死信的Exchange和Routing Key(DLQ組件)。

死信處理:當(dāng)消息重試多次(默認(rèn)3次)失敗,MQ自動將其路由到死信隊列。之后,開發(fā)團(tuán)隊監(jiān)控DLQ,分析日志修復(fù)BUG。

實戰(zhàn)場景:在我們的系統(tǒng),曾發(fā)現(xiàn)5%消息因DB鎖超時失敗。通過DLQ隔離后,主隊列積壓從100萬降至950000條,消費速度提升10%。同時,日志告警幫助我們快速定位問題。

死信隊列工作原理:

圖片圖片

消息從生產(chǎn)者到主隊列消費者嘗試處理失敗后經(jīng)過重試機(jī)制(如3次重試),如果仍失敗轉(zhuǎn)入死信隊列監(jiān)控系統(tǒng)告警開發(fā)人員修復(fù)問題后消息可重新消費。

方案5:監(jiān)控告警與自動化修復(fù)

最后一個方案是“防患于未然”。持續(xù)監(jiān)控MQ積壓,配合告警和腳本自動化,避免100萬條積壓的災(zāi)難重演。

深度剖析:

為什么要監(jiān)控?

積壓不是一夜間發(fā)生的,早期預(yù)警能讓小問題不惡化。例如,監(jiān)控隊列長度、消費延遲率。

自動化修復(fù)

用腳本實時調(diào)整——積壓增時自動擴(kuò)容消費者(但避免盲目加機(jī)器),結(jié)合K8s或Ansible。

用Micrometer監(jiān)控積壓,并調(diào)用API自動擴(kuò)容

示例代碼如下:

import io.micrometer.core.instrument.Gauge;
import io.micrometer.core.instrument.MeterRegistry;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import javax.annotation.PostConstruct;
import java.util.function.Supplier;


@SpringBootApplication
publicclass MQMonitor {
    public static void main(String[] args) {
        SpringApplication.run(MQMonitor.class, args);
    }


    @PostConstruct
    public void setupMonitor(MeterRegistry registry) {
        Supplier<Number> backlogProvider = () -> {
            // 調(diào)用MQ admin API獲取當(dāng)前積壓數(shù)(e.g., RocketMQ broker stats)
            return100000; // 返回值模擬實時數(shù)據(jù)
        };
        
        Gauge.builder("mq.backlog.count", backlogProvider)
            .description("MQ消息積壓量")
            .register(registry);
        
        // 自動化腳本觸發(fā)器(定時檢查)
        Runtime.getRuntime().addShutdownHook(new Thread(() -> {
            int backlog = backlogProvider.get().intValue();
            if (backlog > 50000) {  // 告警閾值
                System.out.println("MQ積壓量高!啟動自動化修復(fù)...");
                autoScaleConsumers(backlog);  // 自動擴(kuò)容消費者
            }
        }));
    }


    private void autoScaleConsumers(int backlog) {
        // 調(diào)用K8s或Ansible API動態(tài)增加消費者實例
        // e.g., 每增加10000條積壓,啟動一個POD
        System.out.println("Auto scaling: added " + (backlog / 10000) + " consumers");
    }
}

代碼邏輯詳解:

監(jiān)控組件:使用Micrometer Gauge監(jiān)控積壓數(shù)量。 backlogProvider 函數(shù)調(diào)用MQ API獲取實時數(shù)據(jù)。

告警和自動化:通過線程定時檢查。如果積壓超過50000條(設(shè)定閾值),觸發(fā) autoScaleConsumers() 調(diào)用外部系統(tǒng)(如K8s)動態(tài)增加消費者Pod數(shù)。

實戰(zhàn)價值:在我們的生產(chǎn)環(huán)境,這方案讓90%的積壓事件在發(fā)生前被遏制。結(jié)合前面方案,能降低響應(yīng)時間到分鐘級——不再需要手動加班!

監(jiān)控告警自動化流程:

圖片圖片

MQ broker通過 API提供積壓數(shù)據(jù)監(jiān)控系統(tǒng)檢查是否超閾值如果是觸發(fā)告警并執(zhí)行自動化腳本(如增加消費者Pod)如果不是則持續(xù)循環(huán)監(jiān)控。)

總結(jié)

好了,小伙伴們,以上五種方案就是我們屢試不爽的MQ積壓處理秘籍,它們讓團(tuán)隊在加機(jī)器之外有了更多的選擇。

總結(jié)一下:

  • 優(yōu)化消費者邏輯(如批處理和異步IO):提高消費速度,降低資源損耗。
  • 隊列策略調(diào)整(優(yōu)先級或分區(qū)):保障高優(yōu)業(yè)務(wù)流暢。
  • 生產(chǎn)者限流:源頭控制,平衡生產(chǎn)消費。
  • 死信隊列機(jī)制:隔離壞消息,助力快速修復(fù)BUG。
  • 監(jiān)控告警與自動化:早期預(yù)警,主動防御。

這些方案不是孤立的,而是相互配合:先優(yōu)化本地代碼,再用監(jiān)控防患。

記得,積壓100萬條數(shù)據(jù)時,不要慌著加機(jī)器——花幾天優(yōu)化代碼,成本更低、效果更長久。

在實戰(zhàn)中,我見過通過這套組合拳,從8小時清理積壓降到1小時內(nèi)的案例。

責(zé)任編輯:武曉燕 來源: 蘇三說技術(shù)
相關(guān)推薦

2022-12-02 14:57:15

物聯(lián)網(wǎng)物聯(lián)網(wǎng)平臺

2023-10-07 14:51:46

物聯(lián)網(wǎng)物聯(lián)網(wǎng)平臺

2018-08-30 17:14:56

2020-10-13 13:54:19

AI人工智能5G

2024-01-11 09:53:16

Kafka中間件編程語言

2017-08-22 10:49:28

DNA存儲電影

2013-02-18 08:15:35

powershell

2019-08-09 16:01:18

Hadoop數(shù)據(jù)庫

2025-11-19 09:27:56

2014-03-07 10:46:49

編程語言趣味

2023-12-08 17:24:14

Redis緩存服務(wù)器

2013-08-08 09:55:20

私有云DevOps方法虛擬機(jī)

2020-07-08 13:38:10

NginxApache服務(wù)器

2022-08-08 07:03:31

Docker場景Registry

2019-04-22 10:08:52

NginxApacheWEB服務(wù)器

2020-04-22 09:42:17

大數(shù)據(jù)機(jī)器學(xué)習(xí)技術(shù)

2013-01-22 16:39:44

NFC移動支付

2018-05-23 10:43:42

5G無限容量遠(yuǎn)程操作

2022-07-26 09:48:55

微服務(wù)服務(wù)AKF

2010-08-30 09:58:56

超算高科技
點贊
收藏

51CTO技術(shù)棧公眾號

欧美xxxx×黑人性爽| 婷婷亚洲婷婷综合色香五月| 日本中文字幕免费观看| 亚洲天堂日韩在线| 欧美日韩国产成人在线免费| 欧美黄色免费网址| 精品亚洲综合| 国产精品影视网| 日本精品视频网站| 青青草国产在线观看| 国产成人1区| 日韩欧美一区二区免费| 能在线观看的av网站| 中国av在线播放| 国产亚洲一区字幕| 国产精品久久波多野结衣| 成人免费一级片| 狠狠噜噜久久| 日韩一区二区三区在线播放| 97人妻精品一区二区三区免 | 艳妇臀荡乳欲伦亚洲一区| 欧美日本国产精品| 性做久久久久久久久久| 男女性色大片免费观看一区二区 | 日韩中文字幕在线不卡| 久久米奇亚洲| 不卡视频免费播放| 91免费国产网站| 姑娘第5集在线观看免费好剧| 欧美涩涩视频| 久久久91精品国产一区不卡| 亚洲自拍偷拍一区二区| 国产精品美女在线观看直播| 91麻豆精品国产| 美女在线视频一区二区| 免费观看成人性生生活片| 亚洲1区2区3区视频| 欧美 亚洲 视频| caopeng在线| 中文字幕亚洲在| 亚洲精品日韩精品| 成人精品一区二区三区免费| 久久夜色精品一区| 麻豆av福利av久久av| 特黄视频在线观看| 成人av网站免费观看| 成人黄色在线免费观看| 精品国产乱码久久久久久蜜臀网站| 日本不卡高清视频| 国产精品视频导航| 在线观看xxxx| 老司机午夜精品| 91久久国产综合久久91精品网站| 亚洲天堂国产精品| 精品一区二区综合| 国产在线视频欧美| 国产孕妇孕交大片孕| 青青草精品视频| 国产精品久久久精品| 特级西西444www高清大视频| 石原莉奈在线亚洲二区| 国产精品欧美日韩| 一级全黄少妇性色生活片| 激情深爱一区二区| julia一区二区中文久久94| 亚洲av无码乱码国产麻豆| 国产成人aaaa| 精品欧美一区二区久久久伦| 欧美孕妇性xxxⅹ精品hd| 久久综合狠狠综合| 亚洲一区影院| 天堂8中文在线| 婷婷开心激情综合| 亚洲视频在线a| 亚洲精品66| 精品美女一区二区| 一级性生活毛片| 97精品一区二区| 欧美激情亚洲综合一区| 五月天综合激情网| 麻豆91在线播放免费| 91在线无精精品一区二区| 亚洲欧美另类日韩| 久久网这里都是精品| 台湾成人av| 综合久久2019| 激情成人在线视频| 国产日韩欧美久久| 一区视频网站| 国产亚洲福利一区| 欧美日韩综合一区二区| 欧美专区18| 亚洲一区二区三区四区视频| 亚洲av毛片成人精品| 国产精品美女一区二区三区| 日本香蕉视频在线观看| 草莓视频成人appios| 日韩美女视频一区二区在线观看| 男生裸体视频网站| 亚洲精品国产成人影院| 欧洲成人性视频| 99视频国产精品免费观看a| 2020国产精品| 成年人视频网站免费| 秋霞国产精品| 日韩成人av网址| 国产午夜精品理论片| 先锋影音久久久| 999国产在线| 成人在线二区| 红桃视频成人在线观看| 亚洲第一色av| 国模精品一区| 2020久久国产精品| 精品人妻一区二区三区三区四区| 国产三级精品三级| 亚洲熟妇无码一区二区三区导航| 亚洲影视资源| 在线播放国产精品| 你懂的国产在线| 成人综合激情网| 国产三级中文字幕| 成人av集中营| 亚洲天堂免费视频| 国产乱国产乱老熟| 波多野结衣亚洲一区| 国产精品av免费观看| 四虎永久精品在线| 在线观看日韩av| 日韩人妻精品中文字幕| 91在线丨porny丨国产| 奇米777四色影视在线看| 日韩av黄色| 在线不卡国产精品| 成人午夜精品视频| 国产人伦精品一区二区| 欧美牲交a欧美牲交aⅴ免费真 | 精品国产乱码久久久久久图片| 日韩国产第一页| 麻豆一区二区99久久久久| 欧美日韩亚洲一区二区三区四区| 秋霞伦理一区| 亚洲精品成人网| 日韩激情在线播放| 99热精品国产| 亚洲熟妇无码另类久久久| 国内精品国产成人国产三级粉色 | 久久99国产综合精品免费| 成人高清视频免费观看| 真人抽搐一进一出视频| 一区二区三区欧洲区| 欧美激情一区二区久久久| 亚洲爱爱综合网| 亚洲成人精品一区二区| 黄色av网址在线观看| 欧美亚洲专区| 日韩成人在线资源| 四虎视频在线精品免费网址| 久久久极品av| 风流少妇一区二区三区91| 亚洲国产一区二区在线播放| 四季av综合网站| 天堂一区二区在线| 亚洲欧美99| 欧美久久一区二区三区| 国内外成人免费激情在线视频网站| 人妻偷人精品一区二区三区| 日韩欧美成人区| 呻吟揉丰满对白91乃国产区| 精品一区二区三区免费观看| 欧美乱做爰xxxⅹ久久久| 国产福利一区二区精品秒拍| 欧美亚洲国产成人精品| 成a人片在线观看www视频| 在线播放中文一区| 欧美不卡视频在线观看| 国产欧美一区二区精品性| 91小视频在线播放| 亚洲国产一区二区三区a毛片| 欧美亚洲免费高清在线观看 | 欧美亚洲一级| 99re99热| 日韩成人动漫在线观看| 国产美女久久精品| 波多野结衣中文在线| 亚洲三级黄色在线观看| 国产模特av私拍大尺度| 精品久久久久久中文字幕| 成人免费视频入口| 成人一区在线看| 国产精品无码av无码| 国产精品v亚洲精品v日韩精品 | 久久久久久久久久久久久久久久久久 | 五月天婷婷丁香| 国产免费久久精品| 色哟哟视频在线| 蜜桃一区二区三区四区| 精品久久久久久无码中文野结衣| 精品视频免费| 国产日韩精品一区观看| 亚洲ww精品| 欧美专区福利在线| 在线看女人毛片| 国产亚洲精品美女| 天天干在线观看| 欧美一区二区三区在线看| 无码人妻一区二区三区免费| 一区二区三区精品| 小向美奈子av| 国产日产欧美精品一区二区三区| 美女被爆操网站| 看国产成人h片视频| 1024av视频| 中文字幕一区二区三区久久网站| 奇米精品在线| 欧美男人操女人视频| 电影午夜精品一区二区三区| 日韩欧美激情| 国产精品日韩在线| 极品美女一区| 欧美亚洲第一页| 男人天堂视频在线观看| 欧美黑人巨大精品一区二区| caoporn免费在线视频| 日韩在线激情视频| 国产粉嫩一区二区三区在线观看| 亚洲精品视频二区| 黄色一级大片在线免费看国产| 51精品国自产在线| 中文字幕av网站| 在线欧美小视频| 亚洲 欧美 中文字幕| 狠狠躁天天躁日日躁欧美| 亚洲国产精一区二区三区性色| 一区二区三区高清不卡| 蜜桃av.com| 亚洲欧美怡红院| 亚洲天堂网av在线| 国产精品国产三级国产aⅴ原创| 在线小视频你懂的| 国产日产精品1区| 黄色av免费播放| 中文字幕成人网| 又嫩又硬又黄又爽的视频| 亚洲国产精品激情在线观看| 男人天堂av电影| 国产三级欧美三级日产三级99| 亚洲自拍偷拍一区二区| 国产偷国产偷亚洲高清人白洁| 蜜桃av免费看| 欧美高清在线视频| av最新在线观看| 亚洲日本乱码在线观看| 欧美日韩人妻精品一区二区三区 | a级免费在线观看| 激情久久五月| 99色精品视频| 日本视频在线一区| 草草草在线视频| 免费观看日韩电影| 国产毛片久久久久久| 成人妖精视频yjsp地址| 成人影视免费观看| 国产拍欧美日韩视频二区| 中文字幕第二区| 亚洲免费在线观看视频| 日产欧产va高清| 日韩欧美在线字幕| 夜夜嗨aⅴ一区二区三区| 制服丝袜亚洲播放| 欧美视频一二区| 亚洲欧洲一区二区三区久久| 麻豆视频免费在线观看| 欧美激情第99页| 欧美momandson| 国产一区二区丝袜| 国产suv精品一区| 欧美成人第一区| 欧美gvvideo网站| 成人毛片100部免费看| 在线亚洲自拍| 黄色永久免费网站| 成人小视频在线| 欧美丰满美乳xxⅹ高潮www| 亚洲日本电影在线| 午夜精品三级久久久有码| 欧美日韩在线播放| 欧美自拍第一页| 色哟哟亚洲精品一区二区| 麻豆av在线免费观看| 国产精品国模在线| 岛国精品一区| 亚洲一区精品视频| 99在线精品视频在线观看| 国产精品久久a| 99免费精品视频| 五月综合色婷婷| 欧洲中文字幕精品| 人妻精品一区二区三区| 久久精品国产亚洲精品2020| 在线最新版中文在线| 亚洲free嫩bbb| 精品久久久中文字幕| 日本丰满少妇xxxx| 久久99国内精品| 中文字幕高清视频| 亚洲一区在线视频观看| 亚洲天堂视频网| 亚洲人成电影网站色www| 美女日批视频在线观看| 国产日韩在线看片| 欧美猛男男男激情videos| 草b视频在线观看| 国产综合色在线| 99国产精品免费| 色域天天综合网| 日韩一级片免费看| 欧美国产精品va在线观看| 九九久久国产| 日本一区高清在线视频| 国产精品美女| 天天躁日日躁狠狠躁av| 亚洲欧美日韩一区| 依依成人在线视频| 在线国产精品播放| 人人视频精品| 免费久久99精品国产自| 宅男噜噜噜66国产日韩在线观看| 中国特级黄色片| 亚洲欧美日韩久久| 国产口爆吞精一区二区| 色偷偷av亚洲男人的天堂| 日韩一区二区三区在线免费观看| 久久久久久久久久久久久久一区| 亚洲精品麻豆| 精品夜夜澡人妻无码av| 精品欧美激情精品一区| 无码国产精品96久久久久| 国内精品400部情侣激情| 国产精品毛片久久久| 五月丁香综合缴情六月小说| 成人国产精品免费观看动漫 | 欧美性色aⅴ视频一区日韩精品| 四虎国产精品永远| 日本欧美一级片| 欧美丝袜一区| 色呦色呦色精品| 亚洲免费伊人电影| 亚洲精品一区二区三区蜜桃| 欧美激情a在线| 日韩精品丝袜美腿| 97在线播放视频| 国产免费成人在线视频| 中文字幕在线观看1| 精品国产一区二区三区久久| 色婷婷成人网| 亚洲国产一二三精品无码| www.欧美日韩| 日本中文字幕在线| 中文字幕亚洲无线码a| 国产精品久久久久久久久久久久久久久 | 影音先锋日韩资源| 无码人妻精品一区二区三区温州| 日本高清成人免费播放| 午夜精品一区| y111111国产精品久久婷婷| 亚洲高清不卡| 四虎影成人精品a片| 欧美日韩一区二区电影| 制服丝袜在线播放| 久久国产精品久久| 日韩不卡一区二区三区| 天天天天天天天天操| 精品福利在线导航| 欧美舌奴丨vk视频| 色呦呦网站入口| 成人h动漫精品| 午夜视频网站在线观看| 欧美插天视频在线播放| 日韩精品丝袜美腿| 欧美在线a视频| 欧美视频在线观看 亚洲欧| 淫片在线观看| 精品国产一二| 九色综合狠狠综合久久| 日韩成人高清视频| 国产亚洲精品久久久| 99ri日韩精品视频| 亚洲欧美另类动漫| 亚洲五月六月丁香激情| eeuss影院www在线播放| 99在线免费观看视频| 天堂av在线一区| 久久久精品91| 一区二区三区视频免费| 99久久香蕉| 青青草原国产在线视频| 精品久久久在线观看| 免费a级人成a大片在线观看| 玖玖玖精品中文字幕|