国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

動態(tài)調(diào)整線程池參數(shù)實踐

共 19450字,需瀏覽 39分鐘

 ·

2021-05-02 11:03

點擊上方老周聊架構(gòu)關(guān)注我


一、線程池遇到的挑戰(zhàn)

我們上一篇 《一文讀懂線程池的實現(xiàn)原理 》已經(jīng)從線程池如何維護自身狀態(tài)、線程池如何管理任務(wù)、線程池如何管理線程三個維度來深入剖析線程池的底層原理與源碼剖析,這讓我們對線程池的原理有了較為深入的理解。這對我們多線程編程有很大的幫助,但在使用線程池時還是會面臨幾個棘手的問題。

  • 開發(fā)人員個人經(jīng)驗與水平參差不齊,配置線程池參數(shù)都是按照自己想法來,沒有統(tǒng)一的一個配置標(biāo)準(zhǔn)。

  • 線程池執(zhí)行情況與任務(wù)類型相關(guān)性較大,IO 密集型和 CPU 密集型的任務(wù)運行起來的情況差異非常大。

  • 當(dāng)你配置好線程池后,有的時間段流量高峰期,導(dǎo)致線程池忙不過來;有的時間段流量低峰期,線程池比較空閑。這就會導(dǎo)致資源調(diào)度失衡,降低了系統(tǒng)的穩(wěn)定性。

我們先來看下美團調(diào)研的業(yè)界一些線程池參數(shù)配置方案:


  • 第一種方案是出自《Java并發(fā)編程實踐》,顯然和業(yè)務(wù)場景有所偏離。

  • 第二種方案也不太合理,為什么呢?我們一個項目里一般來說不止一個自定義線程池吧?比如有專門處理數(shù)據(jù)異步持久化的線程池,有專門處理查詢請求的線程池,這樣去做一個簡單的線程隔離。但是如果都用這樣的參數(shù)配置的話,顯然是不合理的。

  • 第三種方案雖然考慮到了業(yè)務(wù)場景,但這是理想狀態(tài)。流量是不可能這么均衡的,就拿美團來說,下午 3、4 點的流量,能和 12 點左右午飯時的流量比嗎?

基于上面線程池的幾個痛點,那有沒有好的解決方案呢?有的,那就是動態(tài)調(diào)整線程池參數(shù)。

盡管業(yè)界沒有一些成熟的經(jīng)驗配置策略,那么我們是不是可以從修改線程池參數(shù)的成本入手?畢竟每次線上線程池故障的話,都得修改代碼里的線程池相應(yīng)的參數(shù),然后再部署上線,這個過程在對可用性要求極高的項目中那是極其慢的,可能給公司造成巨大的損失。

既然改代碼里的線程池相應(yīng)的參數(shù)并上線這個過程慢,那我們是不是可以把相應(yīng)的線程池參數(shù)配置到分布式配置中心上去?實現(xiàn)線程池參數(shù)可動態(tài)配置和即時生效,線程池參數(shù)動態(tài)化前后的參數(shù)修改流程對比如下:


二、動態(tài)化線程池

2.1 整體設(shè)計

動態(tài)化線程池的核心設(shè)計包括以下三個方面:

2.1.1 簡化線程池配置

線程池構(gòu)造參數(shù)有 7 個,但是最核心的是 3 個:corePoolSize、maximumPoolSize、workQueue,它們最大程度地決定了線程池的任務(wù)分配和線程分配策略。考慮到在實際應(yīng)用中我們獲取并發(fā)性的場景主要是兩種:

  • 并行執(zhí)行子任務(wù),提高響應(yīng)速度。這種情況下,應(yīng)該使用同步隊列,沒有什么任務(wù)應(yīng)該被緩存下來,而是應(yīng)該立即執(zhí)行。

  • 并行執(zhí)行大批次任務(wù),提升吞吐量。這種情況下,應(yīng)該使用有界隊列,使用隊列去緩沖大批量的任務(wù),隊列容量必須聲明,防止任務(wù)無限制堆積。

所以線程池只需要提供這三個關(guān)鍵參數(shù)的配置,并且提供兩種隊列的選擇,就可以滿足絕大多數(shù)的業(yè)務(wù)需求。

2.1.2 參數(shù)可動態(tài)修改

為了解決參數(shù)不好配,修改參數(shù)成本高等問題。在 Java 線程池留有高擴展性的基礎(chǔ)上,封裝線程池,允許線程池監(jiān)聽同步外部的消息,根據(jù)消息進行修改配置。將線程池的配置放置在平臺側(cè),允許開發(fā)同學(xué)簡單的查看、修改線程池配置。

2.1.3 增加線程池監(jiān)控

對某事物缺乏狀態(tài)的觀測,就對其改進無從下手。在線程池執(zhí)行任務(wù)的生命周期添加監(jiān)控能力,幫助開發(fā)同學(xué)了解線程池狀態(tài)。



2.2 功能架構(gòu)

動態(tài)化線程池提供如下功能:

  • 動態(tài)調(diào)參:支持線程池參數(shù)動態(tài)調(diào)整、界面化操作;包括修改線程池核心大小、最大核心大小、隊列長度等;參數(shù)修改后及時生效。

  • 任務(wù)監(jiān)控:支持應(yīng)用粒度、線程池粒度、任務(wù)粒度的 Transaction 監(jiān)控;可以看到線程池的任務(wù)執(zhí)行情況、最大任務(wù)執(zhí)行時間、平均任務(wù)執(zhí)行時間、P95/P99線等。

  • 負載告警:支持告警規(guī)則配置,當(dāng)超過閾值時(線程池隊列任務(wù)積壓到一定值、線程池負載數(shù)達到一定閾值)會通知相關(guān)的開發(fā)負責(zé)人。

  • 操作監(jiān)控:創(chuàng)建、修改和刪除線程池都會通知到應(yīng)用的開發(fā)負責(zé)人。

  • 操作日志:可以查看線程池參數(shù)的修改記錄,誰在什么時候修改了線程池參數(shù)、修改前的參數(shù)值是什么。

  • 權(quán)限校驗:只有應(yīng)用開發(fā)負責(zé)人才能夠修改應(yīng)用的線程池參數(shù)。


三、Apollo 分布式配置中心

了解完動態(tài)化線程池的整體設(shè)計與功能架構(gòu)后,我相信你也可以設(shè)計出一款動態(tài)線程池組件出來的。下面跟著老周來實踐一下動態(tài)調(diào)整線程池參數(shù),可能不像上面設(shè)計的那樣那么全面,但會把動態(tài)調(diào)整線程池參數(shù)的核心給實現(xiàn)一下。

不難發(fā)現(xiàn)動態(tài)化線程池的核心是配置管理,那我們就得找一個分布式配置中心,這里老周用的 Apollo,還有其它的像 Spring Cloud Config、disconf、某些大型互聯(lián)網(wǎng)公司自研的分布式配置中心等,根據(jù)自己的項目情況以及使用場景來選擇就行。

3.1 Apollo 總體設(shè)計

Apollo(阿波羅)是攜程框架部門研發(fā)的分布式配置中心,能夠集中化管理應(yīng)用不同環(huán)境、不同集群的配置,配置修改后能夠?qū)崟r推送到應(yīng)用端,并且具備規(guī)范的權(quán)限、流程治理等特性,適用于微服務(wù)配置管理場景。

3.1.1 基礎(chǔ)模型

如下圖即是 Apollo 的基礎(chǔ)模型:

  1. 用戶在配置中心對配置進行修改并發(fā)布

  2. 配置中心通知 Apollo 客戶端有配置更新

  3. Apollo 客戶端從配置中心拉取最新的配置、更新本地配置并通知到應(yīng)用



3.1.2 架構(gòu)模塊




上圖簡要描述了 Apollo 的總體設(shè)計,我們可以從下往上看:

  • Config Service 提供配置的讀取、推送等功能,服務(wù)對象是 Apollo 客戶端

  • Admin Service 提供配置的修改、發(fā)布等功能,服務(wù)對象是 Apollo Portal(管理界面)

  • Config Service 和 Admin Service 都是多實例、無狀態(tài)部署,所以需要將自己注冊到 Eureka 中并保持心跳

  • 在 Eureka 之上我們架了一層 Meta Server 用于封裝 Eureka 的服務(wù)發(fā)現(xiàn)接口

  • Client 通過域名訪問 Meta Server 獲取 Config Service 服務(wù)列表(IP+Port),而后直接通過 IP+Port 訪問服務(wù),同時在 Client 側(cè)會做 load balance、錯誤重試

  • Portal 通過域名訪問 Meta Server 獲取 Admin Service 服務(wù)列表(IP+Port),而后直接通過 IP+Port 訪問服務(wù),同時在 Portal 側(cè)會做 load balance、錯誤重試

  • 為了簡化部署,我們實際上會把 Config Service、Eureka 和 Meta Server 三個邏輯角色部署在同一個 JVM 進程中

3.2 服務(wù)端設(shè)計

3.2.1 配置發(fā)布后的實時推送設(shè)計

在配置中心中,一個重要的功能就是配置發(fā)布后實時推送到客戶端。本文重點分析配置更新推送方式,下面我們簡要看一下這塊是怎么設(shè)計實現(xiàn)的。



上圖簡要描述了配置發(fā)布的大致過程:

  1. 用戶在 Portal 操作配置發(fā)布

  2. Portal 調(diào)用 Admin Service 的接口操作發(fā)布

  3. Admin Service 發(fā)布配置后,發(fā)送 ReleaseMessage 給各個 Config Service

  4. Config Service 收到 ReleaseMessage 后,通知對應(yīng)的客戶端

上圖的發(fā)送 ReleaseMessage 的實現(xiàn)方式詳情請往下繼續(xù)看:

Admin Service 在配置發(fā)布后,需要通知所有的 Config Service 有配置發(fā)布,從而 Config Service 可以通知對應(yīng)的客戶端來拉取最新的配置。

從概念上來看,這是一個典型的消息使用場景,Admin Service 作為 producer 發(fā)出消息,各個 Config Service 作為 consumer 消費消息。通過一個消息組件(Message Queue)就能很好的實現(xiàn) Admin Service 和 Config Service 的解耦。

在實現(xiàn)上,考慮到 Apollo 的實際使用場景,以及為了盡可能減少外部依賴,我們沒有采用外部的消息中間件,而是通過數(shù)據(jù)庫實現(xiàn)了一個簡單的消息隊列。



3.3 客戶端設(shè)計




上圖簡要描述了 Apollo 客戶端的實現(xiàn)原理:

  1. 客戶端和服務(wù)端保持了一個長連接,從而能第一時間獲得配置更新的推送。(通過 Http Long Polling 實現(xiàn))

  2. 客戶端還會定時從 Apollo 配置中心服務(wù)端拉取應(yīng)用的最新配置。

  3. 客戶端從 Apollo 配置中心服務(wù)端獲取到應(yīng)用的最新配置后,會保存在內(nèi)存中。

  4. 客戶端會把從服務(wù)端獲取到的配置在本地文件系統(tǒng)緩存一份。

  5. 應(yīng)用程序可以從 Apollo 客戶端獲取最新的配置、訂閱配置更新通知。

我們從基礎(chǔ)模型、服務(wù)端設(shè)計、客戶端設(shè)計三個維度來分析了 Apollo 總體設(shè)計,相信你對 Apollo 分布式配置中心有了全面且清晰的理解了。為了照顧沒有用過 Apollo 這款分布式配置中心的同學(xué),老周這里還是簡單給個 Apollo 開發(fā)樣例演示,希望對你后面的動態(tài)調(diào)整線程池參數(shù)實踐有所幫助。

四、動態(tài)調(diào)整線程池參數(shù)實踐

我們了解原理以及架構(gòu)后,那我們開始實踐了。

4.1 服務(wù)端安裝

請看官方文檔進行相應(yīng)的安裝:https://ctripcorp.github.io/apollo/#/zh/deployment/quick-start

執(zhí)行啟動腳本后,當(dāng)看到如下輸出后,就說明啟動成功了!



啟動成功后訪問地址:http://localhost:8070



默認(rèn)輸入用戶名:apollo、密碼:admin,進行登錄。



點擊 SampleApp,我們看到在 DEV 環(huán)境包含一個 timeout 配置項,100 是這個配置項的值,下面我們在應(yīng)用程序讀取這個配置項:



4.2 應(yīng)用程序

4.2.1 引入依賴

<dependencies>
    <dependency>
        <groupId>com.ctrip.framework.apollo</groupId>
        <artifactId>apollo-client</artifactId>
        <version>1.7.0</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>1.7.25</version>
        <scope>compile</scope>
    </dependency>
</dependencies>    

4.2.2 樣例測試

/**
 * 動態(tài)獲取Apollo配置
 * 注意要配置:-Dapp.id=myApp -Denv=DEV -Dapollo.cluster=default -Ddev_meta=http://localhost:8080
 *
 * @author 微信公眾號【老周聊架構(gòu)】
 */

public class GetApolloConfigTest {
    public static void main(String[] args) throws InterruptedException {
        Config config = ConfigService.getAppConfig();
        config.addChangeListener(new ConfigChangeListener() {
            @Override
            public void onChange(ConfigChangeEvent changeEvent) {
                System.out.println("Changes for namespace " + changeEvent.getNamespace());
                for (String key : changeEvent.changedKeys()) {
                    ConfigChange change = changeEvent.getChange(key);
                    System.out.println(String.format("Found change - key: %s, oldValue: %s, newValue: %s, changeType: %s", change.getPropertyName(), change.getOldValue(), change.getNewValue(), change.getChangeType()));
                }
            }
        });
        Thread.sleep(1000000L);
    }
}

我們現(xiàn)在把配置項默認(rèn)的值 100 改為 200 程序輸出結(jié)果如下:



控制臺會出現(xiàn)以下日志,表明動態(tài)獲取 Apollo 配置成功了。


4.3 動態(tài)線程池

上面我們把 Apollo 的動態(tài)監(jiān)聽修改配置的功能整明白了以后,再把線程池和 Apollo 結(jié)合起來構(gòu)建動態(tài)線程池那就方便多了。首先我們用默認(rèn)值構(gòu)建一個線程池,然后線程池會監(jiān)聽 Apollo 關(guān)于相關(guān)配置項,如果相關(guān)配置有變化則刷新相關(guān)參數(shù)。


代碼演示:

/**
 * 動態(tài)線程池工廠
 *
 * @author 微信公眾號【老周聊架構(gòu)】
 */

@Slf4j
@Component
public class DynamicThreadPoolFactory {
    /** 這里是你的namespace,我這里是默認(rèn)的application **/
    private static final String NAME_SPACE = "application";

    /** 線程執(zhí)行器 **/
    private volatile ThreadPoolExecutor executor;

    /** 核心線程數(shù) **/
    private Integer corePoolSize = 10;

    /** 最大值線程數(shù) **/
    private Integer maximumPoolSize = 20;

    /** 待執(zhí)行任務(wù)的隊列的長度 **/
    private Integer workQueueSize = 1000;

    /** 線程空閑時間 **/
    private Long keepAliveTime = 1000L;

    /** 線程名 **/
    private String threadName;

    public DynamicThreadPoolFactory() {
        Config config = ConfigService.getConfig(NAME_SPACE);
        init(config);
        listen(config);
    }

    /**
     * 初始化
     */

    private void init(Config config) {
        if (executor == null) {
            synchronized (DynamicThreadPoolFactory.class) {
                if (executor == null) {
                    String corePoolSizeProperty = config.getProperty(ParamsEnum.CORE_POOL_SIZE.getParam(), corePoolSize.toString());
                    String maximumPoolSizeProperty = config.getProperty(ParamsEnum.MAXIMUM_POOL_SIZE.getParam(), maximumPoolSize.toString());
                    String keepAliveTImeProperty = config.getProperty(ParamsEnum.KEEP_ALIVE_TIME.getParam(), keepAliveTime.toString());
                    BlockingQueue<Runnable> workQueueProperty = new LinkedBlockingQueue<>(workQueueSize);
                    executor = new ThreadPoolExecutor(Integer.valueOf(corePoolSizeProperty), Integer.valueOf(maximumPoolSizeProperty),
                            Long.valueOf(keepAliveTImeProperty), TimeUnit.MILLISECONDS, workQueueProperty);
                }
            }
        }
    }

    /**
     * 監(jiān)聽器
     */

    private void listen(Config config) {
        config.addChangeListener(new ConfigChangeListener() {
            @Override
            public void onChange(ConfigChangeEvent changeEvent) {
                log.info("命名空間發(fā)生變化={}", changeEvent.getNamespace());
                for (String key : changeEvent.changedKeys()) {
                    ConfigChange change = changeEvent.getChange(key);
                    String newValue = change.getNewValue();
                    refreshThreadPool(key, newValue);
                    log.info("發(fā)生變化key={},oldValue={},newValue={},changeType={}", change.getPropertyName(), change.getOldValue(), change.getNewValue(), change.getChangeType());
                }
            }
        });
    }

    /**
     * 刷新線程池
     */

    private void refreshThreadPool(String key, String newValue) {
        if (executor == null) {
            return;
        }
        if (ParamsEnum.CORE_POOL_SIZE.getParam().equals(key)) {
            executor.setCorePoolSize(Integer.valueOf(newValue));
            log.info("修改核心線程數(shù)key={},value={}", key, newValue);
        }
        if (ParamsEnum.MAXIMUM_POOL_SIZE.getParam().equals(key)) {
            executor.setMaximumPoolSize(Integer.valueOf(newValue));
            log.info("修改最大線程數(shù)key={},value={}", key, newValue);
        }
        if (ParamsEnum.KEEP_ALIVE_TIME.getParam().equals(key)) {
            executor.setKeepAliveTime(Integer.valueOf(newValue), TimeUnit.MILLISECONDS);
            log.info("修改線程空閑時間key={},value={}", key, newValue);
        }
    }

    public ThreadPoolExecutor getExecutor(String threadName) {
        return executor;
    }
}
@AllArgsConstructor
public enum ParamsEnum {
    CORE_POOL_SIZE("corePoolSize""核心線程數(shù)"),
    MAXIMUM_POOL_SIZE("maximumPoolSize""最大線程數(shù)"),
    KEEP_ALIVE_TIME("keepAliveTime""線程空閑時間"),
    ;

    @Getter
    private String param;

    @Getter
    private String desc;
}
/**
 * 動態(tài)線程池執(zhí)行器
 *  
 * @author 微信公眾號【老周聊架構(gòu)】
 */

@Component
public class DynamicThreadExecutor {
    @Resource
    private DynamicThreadPoolFactory threadPoolFactory;

    public void execute(String bizName, Runnable job) {
        threadPoolFactory.getExecutor(bizName).execute(job);
    }

    public Future<?> sumbit(String bizName, Runnable job) {
        return threadPoolFactory.getExecutor(bizName).submit(job);
    }
}
@Slf4j
public class DynamicThreadPoolExecutorTest {
    @Resource
    private DynamicThreadExecutor dynamicThreadExecutor;

    /**
     * 記得 IDEA VM options 要記得加下面的參數(shù)
     * -Dapp.id=SampleApp -Denv=DEV -Dapollo.meta=http://localhost:8080
     */

    @Test
    public void testExecute() throws InterruptedException {
        while (true) {
            dynamicThreadExecutor.execute("bizName"new Runnable() {
                @Override
                public void run() {
                    System.out.println("bizInfo");
                }
            });
            TimeUnit.SECONDS.sleep(1);
        }
    }
}

這里可以通過 JDK 自帶的 JVisualVM 工具可以查看到相應(yīng)的線程使用情況。

我們在配置中心修改配置項把核心線程數(shù)設(shè)置為 50,最大線程數(shù)設(shè)置為 100:



你會觀察到線程數(shù)顯著上升

這里還可以在代碼中通過打印相應(yīng)的線程狀態(tài),更加直觀的從日志上觀察到核心線程、最大線程數(shù)的修改情況。

private static void threadPoolStatus(ThreadPoolExecutor executor, String name) {
    BlockingQueue<Runnable> queue = executor.getQueue();
    System.out.println(Thread.currentThread().getName() + "-" + name + "-:" +
            "核心線程數(shù):" + executor.getCorePoolSize() +
            " 活動線程數(shù):" + executor.getActiveCount() +
            " 最大線程數(shù):" + executor.getMaximumPoolSize() +
            " 線程池活躍度:" + divide(executor.getActiveCount(), executor.getMaximumPoolSize()) +
            " 任務(wù)完成數(shù):" + executor.getCompletedTaskCount() +
            " 隊列大?。? + (queue.size() + queue.remainingCapacity()) +
            " 當(dāng)前排隊線程數(shù):" + queue.size() +
            " 隊列剩余大小:" + queue.remainingCapacity() +
            " 隊列使用度:" + divide(queue.size(), queue.size() + queue.remainingCapacity()));
}

這樣的話就可以實現(xiàn)動態(tài)調(diào)整線程池參數(shù),這就很好的解決了我們線程池現(xiàn)有的痛點,不至于線上出了問題還得改代碼部署那么漫長的修復(fù)時間了,動態(tài)線程池大大簡化了運維以及開發(fā)快速修復(fù)相關(guān)問題的難度。



歡迎大家關(guān)注我的公眾號【老周聊架構(gòu)】,Java后端主流技術(shù)棧的原理、源碼分析、架構(gòu)以及各種互聯(lián)網(wǎng)高并發(fā)、高性能、高可用的解決方案。

喜歡的話,點贊、再看、分享三連。

點個在看你最好看



瀏覽 81
點贊
評論
收藏
分享

手機掃一掃分享

分享
舉報
評論
圖片
表情
推薦
點贊
評論
收藏
分享

手機掃一掃分享

分享
舉報

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 日韩精品久久久久久久| 操逼第二页| 中文字幕有码视频| 国产精品a片| 国产精品成人免费久久黄AV片| 亚洲AV成人无码一区二区三区| 91AV在线观看视频| 亚洲乱码国产乱码精品天美传媒 | 人人操人人操人人操人人| 国产美女做爱视频| 无码另类| 亲子乱AV一区二区| caobi999| 亚洲一级二级| 香蕉综合网| 嫩BBB搡BBB槡BBB小号| 无码人妻精品一区二区三区蜜桃91 | 最新av资源| 亚洲一级电影| 野花av| 4438成人网| 丝袜人妻| 久久久夜夜夜| 人人妻人人玩人人澡人人爽| 精东av| 走光无码一区二区三区| 黄色网页免费观看| 99久久精品一区二区成人| 黑人内射人妖| 久久高清免费视频| 色人人| 九九国产精品| 91欧美日韩综合| 久久第一页| 国产丝袜av| 91麻豆精品在线观看| 台湾中文字幕网| 乱伦乱伦乱伦中文字幕| 5252a我爱haose01我愿| 黄色免费在线观看网站| 99久久99久国产黄毛片| 丁香婷婷色五月| 五月天黄色网| 亚洲一级内射| 亚洲第一色网站| 大香蕉手机在线视频| 国产成人视频免费观看| 日韩无码精品电影| 五月天婷婷激情网| 人人色人人看| 婷婷五月欧美| 国产精品国产三级国产专区53| a片免费观看视频| 国产精品v欧美精品v日韩| 青青成人视频| 无码人妻精品一区二区蜜桃网站| 国产—级a毛—a毛免费视频| 日逼无码视频| 香蕉国产精品| 国产在线色视频| 夜色福利在线看| 操逼视频国产91| 成人区色情综合小说| 日韩欧AV| 51XX嘿嘿午夜| 西西4444WWW无视频| 操屄国产| 久久精品水多多www| av玖玖| 人人操碰成人网| 成人在线网站| 久久久久国产| 日本高清一区二区高清免费视频| 亚州AV操屄| 色婷婷网| 三级片国产| 少妇无码| 亚洲中文字幕在线观看视频网站| 国产精品久久AV电影| 最近中文字幕高清2019中文字幕 | 羞羞午夜| 激情婷婷网| 91成人小视频| 欧美综合亚洲| 无码在线高清| 波多在线视频| 久久免费在线视频| 手机在线看A片| 农村老太HD肉HD| 久一视频| 日本在线精品视频| 一区二区三区成人电影| 丁香婷婷色| 韩日一区| 无码免费一区二区| 国产一级二级三级| www.狠狠操| 亚洲成人免费视频| 国产日韩欧美在线| 三级AV在线免费观看| 农村新婚夜一级A片| 成人视频欧美| 麻豆国产成人AV一区二区三区 | 自拍超碰在线| 日本精品黄色| 天天色天天色天天色| 黄色综合网| 伊人中文在线| 国产一级片在线播放| 特黄aaaaaaaa真人毛片| 国产无码高潮在线| 黄色三级片网站| av资源在线| 99久久99久国产黄毛片| 狠狠香蕉| 92自拍视频| 99免费视频在线| 在线免费观看成人视频| 成人丁香五月| 国产操逼免费视频| 亚洲色综合久久五月| 国产又爽又黄在线看| 天天干干| 强奸乱伦制服丝袜| 日韩另类| 青娱乐偷窥成| 一牛影视精品av| 黄色小说在线播放| 一色综合| 婷婷五月精品| www.亚洲精品| 嫩草亚洲小泬久久夂| 野花av| 正在播放李彩斐被洋老外| 乱子伦一区二区三区视频在线观看 | 内射毛片| 吴梦梦《女教师时间暂停》| 欧美精品毛片| 日韩精品一区二区三区在线观看免费| 日本一级特级毛片视频| 国产精品秘久久久久久一两个一起| 欧洲成人午夜精品无码区久久| 国产欧美综合在线| 91探花国产综合在线精品| 国产综合激情| 久久99精品国产| 亚洲性生活| 激情婷婷色五月| 黄色大片在线播放| 免费黄色视频网站大全| 福利在线| 一本道高清| 乱伦性爱视频| 亚洲AV在线人妻| 永久免费不卡在线观看黄网站| 成人免费一级视频| 亚洲成年人在线| 99色99| 亚洲小电影在线| 99热7| 麻豆AV96熟妇人妻| www.zaixianshipin| 福利老湿69| 久草网在线观看| 国内精品久久久久久久久久| 中文字幕国产精品| 欧美色图另类| 亚洲成人一区| 国产乱婬AV片免费| 亚洲无码乱码av| 三级中文无码| 农村一级婬片A片AAA毛片古装| 一区二区三区无码在线| 大香蕉伊人久久| 午夜福利av在线| 中文字幕一区二区三区人妻电影| www.污污污| 婷婷亚洲天堂| 17c精品麻豆一区二区免费| 国产大鸡巴| 久草黄色电影| 亚洲一本大道| 三级中文无码| 中文字幕+乱码+中文字幕在线| 97久久精品国产熟妇高清网| 欧美色成人免费在线视频| 安徽妇搡BBBB搡BBB| 久热人妻| AA片视频| 黑人操白人| 精品久久一区| 东京热AV在线| 影音先锋成人| 久艹在线观看视频| 学生妹一级片内射视频| 美腿丝袜中文字幕精品| 亚洲欧美一区二区三区在线| 91香蕉视频在线| 黄色视频在线| 欧美女人日逼视频| 无码囯无精品毛片大码| 一区色| 国产又爽又黄视频| 久久免费视频3| 亚洲小视频在线播放| 波多野在线视频| 爱爱打炮影院| 亚洲最新在线视频| 91精品啪| 蜜芽成人在线| 东京热免费视频| 无码一级A片| 91网站在线观看视频| AV日韩无码| 97人妻精品一区二区三区| 色欲国产精品欧美在线密| 无码国产精品一区二区性色AV| 婷婷五月国产| www中文字幕| 亚洲一级片| 一级免费爱爱视频| 一级a免一级a做免费线看内裤的注意事项 | 69国产| 婷婷久久综合| 麻豆视频在线播放| 91精品成人| ThePorn人妻白浆| 亚洲视频在线播放| 亚洲成人欧美| 在线观看的av网站| 亚洲福利视频在线| 久久久无码精品亚洲日韩男男| 一级黄色电影免费在线观看| 久久99久久99久久99| 91日韩欧美| 牛牛影视一区二区| 亚洲天堂在线观看免费视频 | 三须三级久久三级久久18| 成人无码免费一区二区中文| 欧美成视频| 精品国产免费观看久久久_久久天天| 天天干天天日天天干天天日| 自拍偷拍AV| 国产一级大片| 精品视频中文字幕| 熟女人妻ThePorn| 国产靠逼| 中文字幕88页| 亚洲免费看黄| 日韩乱伦电影| 国产最新在线| 18害羞勿进网站国产| 日韩午夜成人电影| 短发妹子双人啪啪秀| 免费国产黄色视频网站| 深爱五月激情| 一级黄片免费看| 欧美日韩中| 久久久久久久成人| 无码高清在线播放| 青青成人视频| 天天日夜夜添| 天堂在线视频| 伊人成人免费视频| 激情五月天网址| 在线免费黄片| 久久精彩免费视频| 婷婷五月天国产| 欧美日韩午夜福利视频| h视频在线观看网站| 无码狠狠躁久久久久久久91| 中文字幕av高清片,中文在线观看| 亚洲不卡一区二区三区| 91成人精品一区二区| 成人精品视频| 婷婷成人视频| 日韩中出| 三级无码AV| 婷婷操逼网| 免费乱伦| 久久久久人| 做爰视频毛片下载蜜桃视频| 精品国产无码怀孕| 婷婷视频导航| 色激情五月天| 99在线观看| 一级黄色A片视频| 自拍在线| 98无码人妻精品一区二区三区 | 91人妻人人澡人人爽人人精吕| 日本爱爱免费播放视频| 一起操在线| 日本中文字幕乱伦| 国产精品午夜福利视频| 久久成人免费视频| 人妻无码人妻| 制服丝袜强奸乱伦| 五月天婷婷在线播放视频免费观看 | 天天干天天上| 欧洲精品视频在线观看| 99精品视频在线| 亚洲精品白浆高清久久久久久| 亚洲无码电影网站| 狠狠狠久久久| 97亚洲综合| 日韩视频在线免费观看| 日韩在线二区| 午夜激情AV| 中文字幕www一区| 艳妇乳肉豪妇荡乳AV无码福利| 无码中文字幕| 亚洲色鬼| 激情六月天| 999久久久精品| 黄色小视频在线免费观看| 免费看A级片| 牛牛精品一区二区| 精品久| 欧美BBWBBWBBWBBWBBwBBW | 亚洲小电影在线观看| 1024在线| 大香蕉现在视频中心一| 亚洲字幕av| AV黄片| 久久人体视频| 波多野成人无码精品69| WWW亚洲视频| 色情电影网站| 国产一级A片视频| 操逼视频免费网站| 欧美成人看片| 日本久久视频| 欧美在线不卡综合| 熟妇熟女一区二区三区| 天天操夜夜骑| 99re国产视频| 黄色网页在线观看| 四色影视| 久久婷婷秘精品国产538| 精品a片| 九九热精品视频在线播放| 日本在线不卡视频| 国产理伦| 簧片网站免费| 91人妻人人澡人人| 夜夜嗨AV一区二区三区啊| 黄色成人网站在线播放| 亚洲一区免费| 第四色激情网| 欧美熟妇性爱视频| AV中文字幕在线播放| 日韩AV三级片| 久久黄色小视频| 成人AV婷婷| 国产黄色无码| 国产91一区在线精品| 高清无码视频观看| 蜜桃av秘一区二区三区| 韩日AV| 久草黄色电影| 五月婷婷无码| 97资源视频| 天天干人妻| 做爱视频91| 无码在线免费视频| 中文字幕成人在线播放| 人人操大香蕉| 91人妻人人澡人人爽人人DVD | 最新国产第一页| 2025av在线| 五月天色色小说| 激情无码国产| 国产成人精品国内自产拍免费看| 欧美性网站| 无码AV天堂| 国产又爽又黄A片| 尻屄视频网站| 青青草成人在线| 伊人久久精品| 偷拍99| 日韩成人一级片| 亚洲高清无码在线观看| 青青操久久| 无码av观看| 成人小视频18| 免费视频一二区| 日韩av免费在线观看| 六十路老熟女码视频| 中国老女人操逼| 自拍偷拍视频网| 蜜桃91精品秘入口| 人人色人人看| 国产九九精品| 亚洲精品成人7777777| 米奇色色色| 五月天婷婷在线观看| 欧美日韩婷婷| 黄色无码视频| 日韩成人网站在线观看| av色在线| 蜜桃视频一区二区| 91人妻人人澡人人爽人人DVD| 国产午夜成人福利在线| 97国产精品久久| 亚洲精品一区二区二区的游戏情况 | 天天操天天日天天操| 91久久精品无码一区二区三区| 亚洲精品伊人| 色99在线视频| 操欧美逼| 免费在线看A| 日韩欧美综合| www.国产| 三级成人av| 在线观看高清无码视频| 91黑人丨人妻丨国产丨| 五月婷婷俺來也| 色五月中文字幕| 成人高清在线| 殴美老妇BBBBBBBBB| 蜜臀久久久99久久久久久久 | 特級西西444WWw高清大膽| 精品多人P群无码视频| 午夜无码福利| 中文字幕人妻在线中文乱码怎么解决| 国产精品18进进出出17c| 成人在线免费网站| 国精品无码人妻一区二区三区| www.狠狠操| 欧美一级AA| 精品久久久999| 国产在线观看国产精品产拍| 久久aaaa| 黄色视频在线免费观| 最新在线中文字幕| 熟女高潮| 欧美性生活| 久久99嫩草熟妇人妻蜜臀| 国产精久久| 国产操屄视频| 天天色天天色天天色| 六月丁香综合| 在线观看亚洲视频| 安微妇搡BBBB搡BBBB| 444444在线观看免费高清电视剧木瓜一 | 一本色道久久综合无码人妻四虎| 免费一级黄色片| 国产在线视频一区二区三区| 免费高清无码视频在线观看| 丁香五月欧美| 亚洲.欧美.丝袜.中文.综合| 国产精品九九视频| 九九在线视频| 黄色99| 未满十八18禁止免费无码网站| 91工厂露脸熟女| 北条麻纪无码视频| av一二三区| 黄色操逼网站| 毛片黄色| 在线国产激情视频| 老熟女17页一91| 西西4444WWW无码精品| 亚洲婷婷在线视频| 欧美18禁黄免费网站| 成人三级片在线| 久久成人无码电影| 亚洲欧美国产另类| 人人操人人插| 国产做受91一片二片老头| 95四川乱子伦视频国产| 91成人免费视频| 日韩欧美123| 波多野结衣AV在线观看| 日韩美女毛片| 操大香蕉| 亚洲秘av无码一区二区| 久久国产一级片| 一区二区AV| 少妇高潮喷水| 国产精品国产三级国产AⅤ中文| 嫩草av在线| 欧美黄色片在线观看| 国产美女在线播放| 五月丁香婷婷开心| 天堂一区二区三区| 免费一级A毛片夜夜看| 成人精品一区日本无码网站suv/ | 成年人免费视频网站| 国产精品国产三级国产| 中日美朝美女一级片免费看| а√最新版天堂中文在线| 国产一级a毛一级a毛视频在线网站? | 久久91人妻无码精品蜜桃HD| 亚洲国产高清无码| 在线内射视频| 99久久性爱| 成人三级电影网| 日本不卡一区二区三区| 成人电影无码| 国产最新福利| 丁香五月激情中文字幕| 亚洲综合电影| 各国熟女HD合集| 免费三级怡红院| 密臀福利导航| 国产亚洲久一区二区^_^| 国产嫩BBwBBw高潮| 青青欧美| 亚洲综合网在线| 99这里只有精品| 丰满人妻一区二区三区不卡二| 亚洲乱码一区二区三区| 久久精品视频播放| 欧美伊人| 高清无码在线观看18| 密臀久久| 久久毛片基地| 成人影音先锋| 久久66| 国产激情综合五月久久| www日韩欧美| 操逼逼视频| 热久久久久| 色三区| 黑人毛片91久久久久久| 操日视频| 亚洲色图在线观看| 天天操b| 免费做a爰片77777| 午夜8050| 人与鲁牲交| 丁香婷婷男人天堂| 操B在线观看| 国产棈品久久久久久久久久九秃| 51妺嘿嘿在线电影免费观看| 亚洲无码伊人| 国外成人视频| 国产一区在线视频| 黄片大全免费看| 免费Av在线| 国产亚洲视频免费观看| 国产十欧洲十美国+亚洲一二三区在线午夜 | 99精品视频免费| 少妇搡BBBB搡BBB搡AA| 欧美激情一区二区A片成人牛牛| 成人国产精品在线观看| 青青av| 俺来也俺就去www色情网| 日韩AV无码一区二区三区| 九九九视频在线观看| 久久露脸国语精品国产91| 免费黄色视频在线观看| 足交在线观看| 3p绿帽黑人看自己老婆| 黄色片大全| 欧美亚洲视频在线观看| 麻豆传媒一区| 日本黄色视频电影| 91成人视频在线观看| 日本黄色一级视频| 精品久久成人| 日韩欧美成人在线视频| 国产乱子伦| 玖玖中文字幕| 人人操碰成人网| 日韩国产AV| 亚洲有码在线| 中文字幕无码日韩| а中文在线天堂精品| 国产91无码精品秘入口| 欧美成人精品一级| 国产精品乱码毛片在线人与| 天堂视频在线| 熟妇槡BBBB槡BBBB| 国产乱妇乱子伦视频免费观看让女人| 国产TS变态重口人妖| 色色三区| 亚洲一区二区视频在线观看 | av黄色在线| 在线观看无码av| 韩国三级HD中文字幕的背景音乐| 中韩日美免费看的电影| 北条麻妃A片在线播放| 黄色视频日韩| 亚洲色色频| 亚洲无码视频观看| 加勒比色综合| 日精品| 国产无码播放| 在线国产中文字幕| 伊人五月天| 一区二区三区无码专区| 婷婷视频网| 夜夜爽夜夜爽| 91逼逼| 亚洲中文字幕在线播放| 亚洲欧美精品| 中文字幕亚洲日韩| 欧一美一婬一伦一区二区三区黑人 | 少妇熟女视频一区二区三区| 大香蕉伊人在线手机网| 久久久天堂国产精品女人| 久久久国产精品视频| 91绿帽人妻-ThePorn| 911久久| 天天操天天操天天| 天堂俺去俺来也www久久婷婷| 色吊丝中文字幕| 国产人妻AV| 天天视频入口| 成人高清在线| 亚洲中文字幕免费观看视频 | 天天日天天干天天干| 亚人精品中文字幕在线观看| 大香久久| 男女黄网站| 美日韩精品| 欧美h在线观看| 探花一区二区| 中国毛片视频| www.蜜桃av| 一级色色| 欧美性爱a视频| 国产污视频| 蜜臀AV成人| 无毛片| 2019中文字幕在线| 中文字幕在线观看1| 99视频精品| 伊人大香蕉网| 91五月天| 蜜臀久久99精品久久久久久酒店| 人人看人人爽| 波多野结衣av无码| 日韩免费毛片| 久操视频网| 无码精品人妻一区二区三刘亦菲 | 久久黄色网络| 白白操白白干| 悠悠无码一区日韩妇女| 日韩三级电影| a在线观看| 蜜桃视频网| 亚洲天堂中文字幕| 大香蕉97| 丁香五月在线| 东京热视频在线观看| 国内精品国产成人国产三级| 国产精品久久777777| 日本二区| 毛片网页| 亚洲久久久| 丁香五月在线| 一级片在线播放| 久久九九99| 欧美国产日韩综合在线观看170 | 日本AⅤ在线观看| 特级西西444WWW视频| 天天日夜夜添| 一级特黄AA片| AV在线一区二区| 黄色二区| 亚洲免费观看高清完整版在va线观 | 国产无码一二三区| 91亚洲精品国产成人| 亚洲一区亚洲二区| 91人妻中文字幕| 国产三级一区二区| 欧美三级无码| 亚洲少妇熟女| 久久久精品欧美| 午夜AV在线免费观看| 91国产乱伦| 97少妇| 亚洲精品色图| 琪琪色在线观看| 操婊网| 国产精品女| 猫咪AV成人永久网站| 青青草无码成人天堂免费| 五月天激情婷婷| 91人妻成人精品一区二区| 性色网站| 日韩成人精品| 日韩欧AV| 操操操操一本到| 综合激情视频| 在线看的av| 天堂视频在线观看亚洲美女| 成人色色| 亚洲无码性爱视频| 久久男人| 草少妇| 91亚洲精品在线| 日韩无码激情| 中文字幕日韩人妻| 亚洲无码A片在线观看APP| 懂色成人Av| 免费黄片无码| 美女AV网站| 国产欧美日韩一区| 国产精品美女在线观看| 无码在线免费播放| 玖玖爱免费视频| 99热这里精品| 91在线无码精品秘蜜桃入口 | 亚洲小视频在线| 2014天堂网| 色情五月| 色哥网在线一区| 欧洲三级片网站| 日韩在线高清视频| 亚洲天堂在线免费观看视频| 第一福利导航大全| 日韩精品一区在线| 天天爽天天日| 伊人久久爱| 亚洲视频天堂| 亚洲无码视频观看| 大香蕉一级红色片青青河边草 | 全部视频午夜寂寞| 久久a久久| 色五月婷婷小说| 免费看黄色AV| 亚洲社区在线观看| 午夜精品影院| 国产精品久久精品| 久久久久久久国产精品| 亚洲视频免费| 久久久亚洲AV无码精品色午夜| 手机在线看片av| 欧美AAA大片| 亚洲黄色毛片| 无码秘人妻一区二区三-百度| 国产精品午夜成人免费| 男女av在线| 国产操逼视频| 亚洲性爱一区二区三区| 97精品超碰一区二区三区| 国产AV无码专区| 国产第56页| 国产无码Av| 欧美成人性爱网| 91爱爱| 熟女啪啪| 亚洲日本无码50p| 亚洲天堂男人天堂| 自拍做爱视频| 成人网| 大鸡吧在线| 一区二区三区四区不卡| 无码视频一二三区| 亚洲专区区免费| 自拍偷拍av| 天天操一操| 日韩在线小视频| 91白浆肆意四溢456| 51成人精品午夜福利| 麻豆成人精品| 午夜精品视频在线观看| 91乱子伦国产乱子伦海的味道| 少妇一级| 日日骚中文字幕| 大蕉伊人网| 国产成人无码精品| 1插菊花综合| 免费看一级无码成人片| 成人午夜精品福利免费| 网站av| 人人看,人人摸| 亚洲精品中文字幕乱码三区91| 性无码一区二区三区无码免费 | 在线国产福利| 久久久久性爱| 久久av电影| 性欧美成人播放77777| 国产欧美另类| 狼友综合| 久久久久久久久免费看无码| 九九大香蕉| 欧美色色影院| 激情视频在线播放| 天天看A片| 黄色美女视频网站| 日韩毛片在线| 久久久精品999| 久色亚洲| 男人天堂色| 人人操人| 91蜜桃传媒| 麻豆国产91| 久9视频| 久久精品视频免费观看| 亚洲男人综合| 天天干精品| 亚洲中文字幕2019| 精品无码在线| 色噜噜狠狠一区二区三区Av蜜芽| XXX日韩| 免费在线看A| 中文字幕四区| 欧美a在线| 亚洲一级av无码毛片精品| 日爽夜爽| 日韩一区二区在线视频| 欧美视频在线播放| C逼| 黄片高清无码在线观看| 69成人免费视频| 在线播放你懂的| 欧美A片免费观看| 免费人成视频在线| 亚洲国产婷婷香蕉A片| 欧美成人视频在线观看| 亚洲性爱一区二区三区| 亚洲日韩在线中文字幕| 国产成人无码在线| 波多野结衣无码视频| 成人视频黄片| 操逼操逼逼| 亲子乱AⅤ一区二区三区| 亚洲精品天堂无码AV片| 国产美女被爽到高潮免费A片软件| 大香蕉尹人视频| 91久久国产综合| 日韩AA视频| 免费在线观看一区| 少妇搡BBBB搡BBB搡造水多 | 日韩乱伦毛片| 欧美少妇做爱| 国产精品色视频| 超碰青娱乐| 加勒比综合无码| 真人无码| 97超碰在线免费观看| 影音先锋成人视频| 自慰影院| 国产免费黄色片| 成人在线观看AV| AAA精品| 国产成人a亚洲精品| 婷婷视频| 免费看黄视频| 又黄又爽的网站| 国产成人在线免费观看| 久久精品视频播放| www九九九| 免费无码国产在线观看快色| 亚洲国产成人自拍| 91丨九色丨老熟女探花| 国产精品一区在线| 欧美洲成人网站| 日本在线网站| 国产91精品在线观看| 亚洲高清无码在线观看| 91在线视频免费播放| 欧美性爱福利视频| 91视频亚洲| 操逼网123首页| 色噜噜AV| 福利一区二区| 欧美爱爱网站| 国产精品成人影视| 婷婷色网| 东京热日韩无码| 男人天堂色男人| 中文字幕久久播放| 色婷在线| 欧美夜夜爽| 就去色色五月丁香婷婷久久久 | 免费黄色成人网站| 成年片免费观看网站免费观看,亚洲+欧... | 手机看片日韩| 十八禁网站在线| 日韩欧美在线中文字幕| 久久无码一区| 欧美在线观看一区二区| 欧美伊人久久| 成人免费无码婬片在线| 成人一区二区电影| 国产精品s色| 久久亚洲视频| 中文字幕精品一级A片| 人人艹人人干| 日韩欧AV| 色婷婷播放| 四虎精品影院| 亚洲中文字幕第一| 国产三级片精品| 久久AV电影| 99热精品免费| 五月在线| 11孩岁女精品A片BBB| 亚洲天堂大香蕉| www.51av| 国精产品九九国精产品| 大香蕉超碰在线| 福利一区二区视频网| 好男人WWW社区在线视频夜恋|