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

如何優(yōu)雅地開始研究一個新技術

共 17467字,需瀏覽 35分鐘

 ·

2021-05-14 03:04

低并發(fā)編程
戰(zhàn)略上藐視技術,戰(zhàn)術上重視技術

不講過多大道理,本文以我開始研究 rocketmq 為例,就最近的事。

大家不要嘲笑我,我對 rocketmq 一無所知,所以寫這篇文章剛好合適,正好也記錄下我開始學習 rocketmq 這個冷啟動階段,大家看看對自己是否有幫助。

這篇文章是我邊看邊寫的,力求還原一下我最真實的啟動過程,不了解 rocketmq 的不用擔心,甚至更好,因為本文不會涉及到 rocketmq 的細節(jié),只是突出從一無所知開始研究它的啟動階段。

開始吧。


先把源碼跑起來


第一步,先把源碼搞到手。

百度出來它的官方網(wǎng)站:

http://rocketmq.apache.org/

傻瓜式的首頁,非常友好,直接點擊最大的那個 Getting Started 按鈕。

然后就進入了 quick-start 文檔頁。

根據(jù)開頭給的 4.8.0 版本的 rocketmq 源碼地址 

https://www.apache.org/dyn/closer.cgi?path=rocketmq/4.8.0/rocketmq-all-4.8.0-source-release.zip 

把它下載了下來。

是個 Java 項目,還是 maven 構建的,那好辦了,直接 idea 打開!

緊接著人家就教我如何構建它。

> mvn -Prelease-all -DskipTests clean install -U
cd distribution/target/rocketmq-4.8.0/rocketmq-4.8.0

mvn 構建這一步就受挫了,好像是 maven 默認中央倉庫好多 jar 包下載不了,于是我把 maven 配置文件的中央倉庫改成阿里的,就好了。

<mirror>
  <id>alimaven</id>
  <name>aliyun maven</name
    <url>
http://maven.aliyun.com/nexus/content/repositories/central/</url>
  <mirrorOf>central</mirrorOf>
</mirror>

阿里云牛逼?。ù颂帒袕V告位)


體驗一下最簡操作


接著往下讀文檔,現(xiàn)在代碼已經(jīng)到手,也構建成功,接下來講的是如果體驗一下發(fā)個消息,再收個消息的過程。

我是 windows 系統(tǒng),就照著下面 windows 的教程來,就是這么任性。

嗯,配置一下環(huán)境變量而已。

接下來是四個啟動腳本,很清晰。

## Start Name Server
.\bin\mqnamesrv.cmd
## Start Broker
.\bin\mqbroker.cmd -n localhost:9876 autoCreateTopicEnable=true
## Send Messages
.\bin\tools.cmd  org.apache.rocketmq.example.quickstart.Producer
## Receive Messages
.\bin\tools.cmd  org.apache.rocketmq.example.quickstart.Consumer

我看了一下這些 cmd 文件,意思就是執(zhí)行這些類的 main 方法而已,于是我改在 idea 里分別執(zhí)行他們,大概長這個樣子。

???????

具體看下較為關心的兩個 main 方法。

Producer 的 main 方法,很簡單,簡化版如下。

DefaultMQProducer producer = new DefaultMQProducer("example");
producer.start();
for (int i = 0; i < 1000; i++) {
    Message msg = new Message(...);
    SendResult sendResult = producer.send(msg);
    System.out.printf("%s%n", sendResult);
}

執(zhí)行后,會看到一堆消息作為生產(chǎn)者被生產(chǎn)出來。

...
SendResult [sendStatus=SEND_OK, msgId=7F000001162C18B4AAC28D83A84C03DF, offsetMsgId=0AE84A8400002A9F00000000000F7133, messageQueue=MessageQueue [topic=TopicTest, brokerName=DESKTOP-Q6M76VI, queueId=2], queueOffset=1244]
SendResult [sendStatus=SEND_OK, msgId=7F000001162C18B4AAC28D83A84C03E0, offsetMsgId=0AE84A8400002A9F00000000000F71FE, messageQueue=MessageQueue [topic=TopicTest, brokerName=DESKTOP-Q6M76VI, queueId=3], queueOffset=1249]
SendResult [sendStatus=SEND_OK, msgId=7F000001162C18B4AAC28D83A84D03E1, offsetMsgId=0AE84A8400002A9F00000000000F72C9, messageQueue=MessageQueue [topic=TopicTest, brokerName=DESKTOP-Q6M76VI, queueId=0], queueOffset=1244]
SendResult [sendStatus=SEND_OK, msgId=7F000001162C18B4AAC28D83A84D03E2, offsetMsgId=0AE84A8400002A9F00000000000F7394, messageQueue=MessageQueue [topic=TopicTest, brokerName=DESKTOP-Q6M76VI, queueId=1], queueOffset=1251]
SendResult [sendStatus=SEND_OK, msgId=7F000001162C18B4AAC28D83A84D03E3, offsetMsgId=0AE84A8400002A9F00000000000F745F, messageQueue=MessageQueue [topic=TopicTest, brokerName=DESKTOP-Q6M76VI, queueId=2], queueOffset=1245]
SendResult [sendStatus=SEND_OK, msgId=7F000001162C18B4AAC28D83A84D03E4, offsetMsgId=0AE84A8400002A9F00000000000F752A, messageQueue=MessageQueue [topic=TopicTest, brokerName=DESKTOP-Q6M76VI, queueId=3], queueOffset=1250]
SendResult [sendStatus=SEND_OK, msgId=7F000001162C18B4AAC28D83A84E03E5, offsetMsgId=0AE84A8400002A9F00000000000F75F5, messageQueue=MessageQueue [topic=TopicTest, brokerName=DESKTOP-Q6M76VI, queueId=0], queueOffset=1245]
SendResult [sendStatus=SEND_OK, msgId=7F000001162C18B4AAC28D83A84E03E6, offsetMsgId=0AE84A8400002A9F00000000000F76C0, messageQueue=MessageQueue [topic=TopicTest, brokerName=DESKTOP-Q6M76VI, queueId=1], queueOffset=1252]
SendResult [sendStatus=SEND_OK, msgId=7F000001162C18B4AAC28D83A84E03E7, offsetMsgId=0AE84A8400002A9F00000000000F778B, messageQueue=MessageQueue [topic=TopicTest, brokerName=DESKTOP-Q6M76VI, queueId=2], queueOffset=1246]
...

同樣,Consumer 的 mian 方法,也非常簡單。

DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("example");
consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET);
consumer.subscribe("TopicTest""*");
consumer.registerMessageListener(new MessageListenerConcurrently() {
    @Override
    public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs,
        ConsumeConcurrentlyContext context)
 
{
        System.out.printf("%s Receive New Messages: %s %n", Thread.currentThread().getName(), msgs);
        return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
    }
});
consumer.start();

執(zhí)行后會看到一堆消息被成功消費

...
ConsumeMessageThread_3 Receive New Messages: [MessageExt [brokerName=DESKTOP-Q6M76VI, queueId=3, storeSize=203, queueOffset=1239, sysFlag=0, bornTimestamp=1619580615742, bornHost=/10.232.74.132:55094, storeTimestamp=1619580615742, storeHost=/10.232.74.132:10911, msgId=0AE84A8400002A9F00000000000F5246, commitLogOffset=1004102, bodyCRC=493758879, reconsumeTimes=0, preparedTransactionOffset=0, toString()=Message{topic='TopicTest', flag=0, properties={MIN_OFFSET=0, MAX_OFFSET=1251, CONSUME_START_TIME=1619580616221, UNIQ_KEY=7F000001162C18B4AAC28D83A83E03B8, CLUSTER=DefaultCluster, WAIT=true, TAGS=TagA}, body=[72101108108111328211199107101116778132575350], transactionId='null'}]] 
ConsumeMessageThread_8 Receive New Messages: [MessageExt [brokerName=DESKTOP-Q6M76VI, queueId=3, storeSize=203, queueOffset=1238, sysFlag=0, bornTimestamp=1619580615740, bornHost=/10.232.74.132:55094, storeTimestamp=1619580615740, storeHost=/10.232.74.132:10911, msgId=0AE84A8400002A9F00000000000F4F1A, commitLogOffset=1003290, bodyCRC=1688269248, reconsumeTimes=0, preparedTransactionOffset=0, toString()=Message{topic='TopicTest', flag=0, properties={MIN_OFFSET=0, MAX_OFFSET=1251, CONSUME_START_TIME=1619580616221, UNIQ_KEY=7F000001162C18B4AAC28D83A83C03B4, CLUSTER=DefaultCluster, WAIT=true, TAGS=TagA}, body=[72101108108111328211199107101116778132575256], transactionId='null'}]] 
ConsumeMessageThread_5 Receive New Messages: [MessageExt [brokerName=DESKTOP-Q6M76VI, queueId=3, storeSize=203, queueOffset=1237, sysFlag=0, bornTimestamp=1619580615737, bornHost=/10.232.74.132:55094, storeTimestamp=1619580615737, storeHost=/10.232.74.132:10911, msgId=0AE84A8400002A9F00000000000F4BEE, commitLogOffset=1002478, bodyCRC=1830206955, reconsumeTimes=0, preparedTransactionOffset=0, toString()=Message{topic='TopicTest', flag=0, properties={MIN_OFFSET=0, MAX_OFFSET=1251, CONSUME_START_TIME=1619580616221, UNIQ_KEY=7F000001162C18B4AAC28D83A83903B0, CLUSTER=DefaultCluster, WAIT=true, TAGS=TagA}, body=[72101108108111328211199107101116778132575252], transactionId='null'}]] 
ConsumeMessageThread_4 Receive New Messages: [MessageExt [brokerName=DESKTOP-Q6M76VI, queueId=3, storeSize=203, queueOffset=1236, sysFlag=0, bornTimestamp=1619580615735, bornHost=/10.232.74.132:55094, storeTimestamp=1619580615735, storeHost=/10.232.74.132:10911, msgId=0AE84A8400002A9F00000000000F48C2, commitLogOffset=1001666, bodyCRC=1786477042, reconsumeTimes=0, preparedTransactionOffset=0, toString()=Message{topic='TopicTest', flag=0, properties={MIN_OFFSET=0, MAX_OFFSET=1251, CONSUME_START_TIME=1619580616221, UNIQ_KEY=7F000001162C18B4AAC28D83A83703AC, CLUSTER=DefaultCluster, WAIT=true, TAGS=TagA}, body=[72101108108111328211199107101116778132575248], transactionId='null'}]] 
ConsumeMessageThread_18 Receive New Messages: [MessageExt [brokerName=DESKTOP-Q6M76VI, queueId=3, storeSize=203, queueOffset=1235, sysFlag=0, bornTimestamp=1619580615733, bornHost=/10.232.74.132:55094, storeTimestamp=1619580615733, storeHost=/10.232.74.132:10911, msgId=0AE84A8400002A9F00000000000F4596, commitLogOffset=1000854, bodyCRC=1280920064, reconsumeTimes=0, preparedTransactionOffset=0, toString()=Message{topic='TopicTest', flag=0, properties={MIN_OFFSET=0, MAX_OFFSET=1251, CONSUME_START_TIME=1619580616221, UNIQ_KEY=7F000001162C18B4AAC28D83A83503A8, CLUSTER=DefaultCluster, WAIT=true, TAGS=TagA}, body=[72101108108111328211199107101116778132575154], transactionId='null'}]] 
ConsumeMessageThread_16 Receive New Messages: [MessageExt [brokerName=DESKTOP-Q6M76VI, queueId=3, storeSize=203, queueOffset=1234, sysFlag=0, bornTimestamp=1619580615731, bornHost=/10.232.74.132:55094, storeTimestamp=1619580615731, storeHost=/10.232.74.132:10911, msgId=0AE84A8400002A9F00000000000F426A, commitLogOffset=1000042, bodyCRC=1261735449, reconsumeTimes=0, preparedTransactionOffset=0, toString()=Message{topic='TopicTest', flag=0, properties={MIN_OFFSET=0, MAX_OFFSET=1251, CONSUME_START_TIME=1619580616221, UNIQ_KEY=7F000001162C18B4AAC28D83A83303A4, CLUSTER=DefaultCluster, WAIT=true, TAGS=TagA}, body=[72101108108111328211199107101116778132575150], transactionId='null'}]] 
ConsumeMessageThread_10 Receive New Messages: [MessageExt [brokerName=DESKTOP-Q6M76VI, queueId=3, storeSize=203, queueOffset=1233, sysFlag=0, bornTimestamp=1619580615729, bornHost=/10.232.74.132:55094, storeTimestamp=1619580615729, storeHost=/10.232.74.132:10911, msgId=0AE84A8400002A9F00000000000F3F3E, commitLogOffset=999230, bodyCRC=855266886, reconsumeTimes=0, preparedTransactionOffset=0, toString()=Message{topic='TopicTest', flag=0, properties={MIN_OFFSET=0, MAX_OFFSET=1251, CONSUME_START_TIME=1619580616221, UNIQ_KEY=7F000001162C18B4AAC28D83A83103A0, CLUSTER=DefaultCluster, WAIT=true, TAGS=TagA}, body=[72101108108111328211199107101116778132575056], transactionId='null'}]] 
ConsumeMessageThread_14 Receive New Messages: [MessageExt [brokerName=DESKTOP-Q6M76VI, queueId=3, storeSize=203, queueOffset=1232, sysFlag=0, bornTimestamp=1619580615727, bornHost=/10.232.74.132:55094, storeTimestamp=1619580615728, storeHost=/10.232.74.132:10911, msgId=0AE84A8400002A9F00000000000F3C12, commitLogOffset=998418, bodyCRC=994843245, reconsumeTimes=0, preparedTransactionOffset=0, toString()=Message{topic='TopicTest', flag=0, properties={MIN_OFFSET=0, MAX_OFFSET=1251, CONSUME_START_TIME=1619580616221, UNIQ_KEY=7F000001162C18B4AAC28D83A82F039C, CLUSTER=DefaultCluster, WAIT=true, TAGS=TagA}, body=[72101108108111328211199107101116778132575052], transactionId='null'}]] 
ConsumeMessageThread_11 Receive New Messages: [MessageExt [brokerName=DESKTOP-Q6M76VI, queueId=3, storeSize=203, queueOffset=1231, sysFlag=0, bornTimestamp=1619580615725, bornHost=/10.232.74.132:55094, storeTimestamp=1619580615726, storeHost=/10.232.74.132:10911, msgId=0AE84A8400002A9F00000000000F38E6, commitLogOffset=997606, bodyCRC=1008852596, reconsumeTimes=0, preparedTransactionOffset=0, toString()=Message{topic='TopicTest', flag=0, properties={MIN_OFFSET=0, MAX_OFFSET=1251, CONSUME_START_TIME=1619580616221, UNIQ_KEY=7F000001162C18B4AAC28D83A82D0398, CLUSTER=DefaultCluster, WAIT=true, TAGS=TagA}, body=[72101108108111328211199107101116778132575048], transactionId='null'}]] 
ConsumeMessageThread_1 Receive New Messages: [MessageExt [brokerName=DESKTOP-Q6M76VI, queueId=3, storeSize=203, queueOffset=1230, sysFlag=0, bornTimestamp=1619580615723, bornHost=/10.232.74.132:55094, storeTimestamp=1619580615724, storeHost=/10.232.74.132:10911, msgId=0AE84A8400002A9F00000000000F35BA, commitLogOffset=996794, bodyCRC=2121214082, reconsumeTimes=0, preparedTransactionOffset=0, toString()=Message{topic='TopicTest', flag=0, properties={MIN_OFFSET=0, MAX_OFFSET=1251, CONSUME_START_TIME=1619580616221, UNIQ_KEY=7F000001162C18B4AAC28D83A82B0394, CLUSTER=DefaultCluster, WAIT=true, TAGS=TagA}, body=[72101108108111328211199107101116778132574954], transactionId='null'}]] 
...

一個生產(chǎn),一個消費,清晰明了,體驗很好。

嗯,至此為止,quick-start 就基本通了,也就知道這玩意的最簡單的用法了。


看看整體架構


此時已經(jīng)上手體驗了一把用法,來總結下。

1. 我啟動了一個 namesrv,暴露的端口是 9876。
2. 我又啟動了一個 broker,啟動時加了個參數(shù) -n localhost:9876,很明顯,就是指向了剛剛那個 namesrv。
3. 然后我啟動 produer 發(fā)了一堆消息。
4. 最后我啟動了 consumer,就神奇地收到了這個消息。

啟動 producer 和 consumer 時都必須使用一個環(huán)境變量叫 NAMESRV_ADDR=localhost:9876

OK 了,此時我已經(jīng)有了合理的猜測,producer 和 consumer 都是通過環(huán)境變量連接了 9876 這個端口,也就是 namesrv,然后通過這個 namesrv 能找到 broker,那我可以簡單畫出這樣的架構圖(這是我猜的,不一定對)。

嗯,有了這個自己的猜測,我去看了官方文檔中的架構部分:

https://github.com/apache/rocketmq/blob/master/docs/cn/architecture.md

上來就是一張圖。

哇塞,大差不差,只是官方文檔的圖是考慮到了集群情況,其實我反倒覺得開始的圖不應該整合太多內(nèi)容。

緊接著,下面就解釋了這四個東西都是啥,我簡寫下。

Producer:消息發(fā)布的角色,選擇相應的 Broker 集群隊列進行消息投遞。
Consumer:消息消費的角色,支持以 push 推,pull 拉兩種模式對消息進行消費。
NameServer:一個非常簡單的 Topic 路由注冊中心,支持 Broker 的動態(tài)注冊與發(fā)現(xiàn)。
BrokerServer:Broker 主要負責消息的存儲、投遞和查詢,包括以下幾個子模塊:

Remoting Module:整個 Broker 的實體,負責處理來自 clients 端的請求。

Client Manager:負責管理客戶端(Producer/Consumer)和維護 Consumer 的 Topic 訂閱信息。

Store Service:提供方便簡單的 API 接口處理消息存儲到物理硬盤和查詢功能。

HA Service:高可用服務,提供 Master Broker 和 Slave Broker 之間的數(shù)據(jù)同步功能。

Index Service:根據(jù)特定的 Message key 對投遞到 Broker 的消息進行索引服務,以提供消息的快速查詢。

嗯,又有了些新概念,BrokerServer 還分成五個子模塊,看著有些蒙,先不管。

再往下看,到了部署架構,有了部署步驟。

嗯,跟我們剛剛 quick-start 部分的部署順序一樣,只不過步驟三的創(chuàng)建 Topic,可以提前創(chuàng)建,也可以在發(fā)送消息時自動創(chuàng)建,我們剛剛用的應該就是發(fā)消息時自動創(chuàng)建啦!這里再拿個小本本記下來,如何提前創(chuàng)建 Topic,OK 不去管它。

再往下,就是最最最最重要的部分了,也就是設計原理。

地址是這個:

https://github.com/apache/rocketmq/blob/master/docs/cn/design.md

這也就是我們研究 rocketmq 的原理,閱讀源碼,最需要看的部分,當然,也包括面試,滋滋滋。

設計中包含六個部分,分別是消息存儲、通信機制、消息過濾、負載均衡、事務消息、消息查詢。

比如消息存儲,是整個設計部分的第一個版塊,上來就是一張勸退圖。

下面配上了文字講解。

之前的 quick-start 和整體架構的描述,可以被快速地理解,到這就不行了,就真得花時間開始細琢磨了。

但實際上呀,仔細看消息存儲版塊里面的內(nèi)容,包含三個部分:

1.1 消息存儲整體架構
1.2 頁緩存與內(nèi)存映射
1.3 消息刷盤

這里面包括 IO 模型,內(nèi)存映射,磁盤順序讀寫,PageCache,同步異步刷盤等通用的底層知識,如果這些都統(tǒng)統(tǒng)掌握,整個這一部分就跟拼積木一樣,很順利拼起來了。

這回知道底層知識有啥用了吧?起碼能讓你更深入和快速理解一個由它們拼起來的上層技術。

這塊就沒法完全展開啦,不然就成一篇講 rocketmq 原理的文章了,我拿出這里的一句話。

另外,RocketMQ 主要通過 MappedByteBuffer 對文件進行讀寫操作。其中,利用了 NIO 中的 FileChannel 模型將磁盤上的物理文件直接映射到用戶態(tài)的內(nèi)存地址中(這種 Mmap 的方式減少了傳統(tǒng) IO 將磁盤文件數(shù)據(jù)在操作系統(tǒng)內(nèi)核地址空間的緩沖區(qū)和用戶應用程序地址空間的緩沖區(qū)之間來回進行拷貝的性能開銷),將對文件的操作轉(zhuǎn)化為直接對內(nèi)存地址進行操作,從而極大地提高了文件的讀寫效率(正因為需要使用內(nèi)存映射機制,故 RocketMQ 的文件存儲都使用定長結構來存儲,方便一次將整個文件映射至內(nèi)存)。

這段話如果你對零拷貝這個底層概念了解,其實整段話一秒鐘就看完了,而且會覺得它是廢話,就像是在湊字數(shù)一樣。(當然這個我做不到哈,我對底層還沒有了解很透徹,所以用了 10 秒,理解到了一個馬馬虎虎的程度)


見仁見智


再接下來就是見仁見智的部分啦,如果是已經(jīng)有了非常多技術深入學習經(jīng)驗的大牛,直接根據(jù)設計文檔,再對照源碼即可,對大牛來說是最快的方式。
如果不是的話,可以先找一些市面上比較經(jīng)典的入門書籍,或者質(zhì)量高的視頻教程,過一遍,然后再配合設計文檔和源碼,基本就能把這個技術吃透了。
學多了之后你會發(fā)現(xiàn),好多底層的技術或中間件,和我們應用層一樣,也是有套路的,也是拼積木拼起來的。所以今后在你想學一門新技術時,別想著學它有沒有用,面試會不會考,起碼你看多了之后會發(fā)現(xiàn),越新技術越學越快,學到最后你會發(fā)現(xiàn)根本就沒有新技術,一切都是在拼積木。
好了不裝逼了,我是第二類人群,已經(jīng)卡在設計文檔那里,所以我現(xiàn)在去找視頻看了,有推薦的可以留言區(qū)評論下。
同時歡迎加我好友看我朋友圈的一驚一乍,就在公眾號菜單欄里可以找到哦。
瀏覽 60
點贊
評論
收藏
分享

手機掃一掃分享

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

手機掃一掃分享

分享
舉報

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

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 人人操人人干人人爽| 高清无码免费在线观看| 91露脸熟女四川熟女在线观看| 精东av| 亚洲欧美激情小说另类| 性爱免费专区| 婷婷五月天电影| 亚洲AV秘无码苍井空| 免费无码蜜臀在线观看| 亚洲婷婷精品国产成人| 亚洲AAAAAA| 久久久精品人妻| 国产精品一区在线| 杨贵妃一级婬片90分钟| 亚洲精品美女| 99热99re6国产线播放| 天天添夜夜添| 久久99九九| 午夜无码在线| 亚洲无码高清一区| 在线观看的AV| 国产av小电影| 亚洲一道本在线| 国精产品一区一区三区四区| 男人的天堂在线视频| 一本道高清| 国产高清视频在线播放| 国产精品精品精品| 日韩国产三级| 无码视频免费播放| 天天干天天撸影视| 操逼在线观看| 无码人妻一区二区| 99精品人妻| 久久久久久久久国产精品| 99精品视频16在线免费观看| 综合合一品道| 日韩在线视频二区| 三级久久网| 国产精品久久AV电影| 欧美老妇性猛交| 久久午夜视频| 精品成人在线| AAA三级片| 91久久免费视频| 狼友自拍| 国产一区二区不卡亚洲涩情| 强奸五月天| 国产亚洲无码| 黑人无码一二三四五区| 一线天嫩穴少妇| 大鸡巴导航| 天天做天天爱天天爽| 丰满人妻精品一区二区在线| 97人妻精品一区二区三区图片| 自拍超碰在线| 4438黄色| 亚洲人人18XXX—20HD| 亚洲jizzjizz| 亚洲中文字幕日韩在线| 国产一级a毛一级a毛片视频黑人 | 中文av在线播放| 亚洲视频成人| 日本操逼片| www.插插| 亚洲第一无码| 亚洲三级av| 日本中文字幕在线免费观看| 国产熟妇搡BBBB搡BBBB搡| 少妇人妻一区| 亚洲A网站| 国产和日韩中文字幕| 国产一级婬女AAAA片季秀英| 国产福利视频在线观看| 无码中文字幕在线观看| av天天干| 99在线免费观看| 色色五月婷婷| 日韩人妻无码一区二区| 91成人一区二区三区| 天天天天天天操| 黄色网址在线免费观看| 无码人妻精品一区二区蜜桃91| 亚洲人妻系列| 不卡三区| 国产一级婬乱片AV片AAA毛片| 国产视频一二三| 亚洲无码色色| 久草麻豆| 天天干天天射天天爽| 五月乱伦| 老熟女伦一区二区三区| 操逼视频一级| 六月婷婷五月| 欧美特黄一级视频| 中文一线二线视频| 色婷视频| 日本一级婬片免费放| 黄片高清视频| 国产97在线视频| 国产白丝视频| 天堂a√在线8| 国产精品乱子伦| 夜夜撸天天干| 亚洲精品国偷拍自产在线观看蜜桃 | 日韩二级片| 手机无码在线播放| 久久婷婷热| 午夜无码久久| 色婷婷AV在线| 国产农村乱婬片A片AAA图片| 国产无码操逼视频| 热九九热| 无码国产精品一区二区视频| 日韩成人av在线| 欧美A片免费| 久久午夜无码鲁丝片主演是谁| 精品永久免费| 搡老熟女-91Porn| 麻豆激情视频| 国产成人性爱| 免费无人区一码二码乱码怎么办| 久久久久伊人| 97操逼| 91.xxxxx| 青青久草| 国产一级视频| 天堂资源地址在线| 日本高清中文字幕| 中文字幕精品久久久久人妻红杏Ⅰ | 日韩欧美高清第一期| 97色在线| 97久久精品国产熟妇高清网| 日本人妻视频| 另类av| 99re欧美激情| 很色很黄的A片一| 刘玥精品A片在线观看| 影音先锋色色| 亲孑伦XXXⅹ熟女| 日韩日批视频| 夜夜福利| 亚洲日韩视频在线播放| 蜜桃视频在线入口www| 人人草人人操| 成人AV毛片| 日逼一级片| 日本高清无码| 色香蕉视频在线观看| 91精品国产闺蜜国产在线闺蜜| www.伊人网| 亚洲内射无码| 丝袜三级片| 玖玖激情| 日韩精品人妻中文字幕第4区| 69看片| 亚洲,制服,综合,中文| 久草这里只有精品| 久久久三级片| 国产av一二三区| 精品女同一区二区三区四区外站在线| 国产色婷婷| 久久人妻无码中文字幕系列| 亚洲精品久久久久毛片A级牛奶| 东京热av一区二区| 亚洲一区翔田千里无码| 自拍偷拍精品视频| 91久久香蕉囯产熟女线看蜜桃| 国产欧美日本| 亚洲精品视频在线| 中文字幕在线观看a| 五月丁香视频在线| 日韩精品极品视频在线观看免费| 亚洲无码色色| 六月天婷婷| 国模吧一区| 操操操操操操| 四虎影院中文字幕| 日本少妇高潮喷水XXXXXXX| 在线播放高清无码| 日本乱伦网| 1024国产| 免费无码视频在线观看| 99在线观看视频| 久久久女女女女999久久| 韩国一区二区在线观看| 黃色一級片黃色一級片尖叫声-百度-百 | 黄色视频免费在线观看网站| 天天操天天操天天| 好吊看视频| 欧美干| 黄网免费看| 大香蕉久久精品| 99精品视频国产| 亚洲污| 成人AV毛片| 精品日韩| 国精产品一区二区三区在线观看| 日本成人一区二区三区| 欧美va在线| 成人肏逼视频| 国产精品一二三| 日韩一级无码毛片| 阿v视频在线观看| 9热精品| 国精品伦一区一区三区有限公司 | 97午夜福利| 中文无码在线视频| 麻豆成人91精品二区三区| 亚洲AV无码日韩AV无码导航| 97人妻精品一区二区三区软件 | 亚洲成人福利在线| 操逼视频试看| 成人免费视频网| 成人毛片在线| 无码免费观看| 天天日天天干天天爽| 日本黄色视频在线免费观看| 日韩有码在线观看| 91色欲| 免费AV观看| 久久久123| 日韩AV无码一区二区三区| 军人妓女院BD高清片在线播放| 丁香婷婷色五月| 翔田千里在线一区二区三区| 国产激情在线观看视频| 日本精品中文字幕| 亚洲无码三级| 国产精品亚洲一区| 日韩精品丰满无码一级A片∴| 中文字幕五月久久| 爱搞逼综合网| 日韩v欧美v日本v亚洲v国产v | 日韩a级片| 天天综合久久| 人妻在线无码| 秘亚洲国产精品成人网站| 手机看片1204| 日韩人妻无码精品| 久久久久久亚洲AV黄床| www三级片| 无码人妻一区| 麻豆MD传媒MD0071| 成人激情四射网| 北条麻妃无码一区二区| 伊人网址| 成人做爰黄级A片免费看土方| 少妇搡BBBB搡BBB搡造水多/| 东京热一区二区三区| 国产亚洲午夜久久久成人电影| 久久国产一区二区| 国产一级AV片| 日韩在线中文| 亚洲美女视频在线| 欧美熟妇一区二区三区| 特级西西44www无码| 久操播放器| 高清无码视频直接看| 亚洲日韩欧美在线观看| 日韩电影一区| 大鸡巴操小逼视频| 亚洲视频欧美| 国产性色| 天堂av中文字幕| 丁香六月综合激情| www.91久久| 五月天乱伦网| 蜜桃久久av一区| 91女人18毛片水多的意思| 青草伊人av| 夜操操| 99精品无码| 韩国高清无码60.70.80 | 激情五月婷婷| 日韩成人性爱网站| 中文字幕一区二区二三区四区| 五月婷婷欧美| 夜夜操夜夜撸| 色婷婷一区二区三区久久午夜 | 日韩一级中文字幕| 国产视频黄| 99热伊人| 黄色一级片在线看| 人人亚洲| 婷婷五月天色| 丰满熟妇高潮呻吟无码| 91亚洲国产AⅤ精品一区二区| 成人视频18| 亚洲一区二区免费视频| 免费v片在线观看| 91麻豆福利在线观看| 豆花成人视频在线观看| 久久男人网| 黄色视频日韩| 啊啊啊av| 操碰在线| 天天操夜夜操狠狠| 蜜桃视频成人app| 六月婷婷深爱| av影片在线播放| 91偷拍视频| 四川少妇搡BBw搡BBBB搡| 中国一级黄色毛片| 蜜桃91精品秘入口内裤| 丁香六月婷婷综合缴| 国产高清一区二区| 无码成人毛片| 九九九在线视频| 夜夜骚AV一二三区无码| 国内无码自拍| 神马久久午夜| 91人妻一区二区三区| 欧洲亚洲免费视频| 黄片免费网站| 国产a精品| 一级A片一毛片大全| 在线91网站| 18禁黄色免费网站| 久久永久免费精品人妻专区| 伊人黄色电影| 777777国产77777777| 亚洲内射无码| 亚洲日韩影院| 俺来了俺去也| 91蝌蚪在线观看| 色婷婷在线视频| 女人18片毛片90分钟免费明星| 国产精品一区二区三| 久久亚洲AV无码午夜麻豆| 性欧美69| 尤物一区二区| 囯产精品99久久久久久WWW| 免费v片| 成人五区| 久久精品熟妇丰满人妻99| 在线观看免费a片| 久久大| 日韩啪啪片| AV无码在线免费观看| 美妇肥臀一区二区三区-久久99精品国| 黄片视频在线播放| 精品视频一区二区三区| 免费黄色一级视频| 成人三级在线观看| 丁香五月激情啪啪| 国产毛片基地| 色久影院| 3344gc在线观看入口| 国产超碰免费| 欧美成人性爱网站| 午夜大黄片| 日本三区| AV无码不卡| 簧片网站在线观看| 北条麻妃一区二区三区在线 | 黄色免费高清视频| 日本99热| 看欧美黄片| 影音先锋成人片| 久热9191| 在线观看成年人视频| A级黄色网| 九九精品视频在线观看| 亚洲高清无码久久| 天堂俺去俺来也www久久婷婷 | www.青草视频| 天天干B| 在线播放一区二区三区| 51妺嘿嘿午夜福利| 三级视频国产| 3D动漫啪啪精品一区二| 日韩一级片在线| 日韩成人无码一区二区| 美女国产精品| 男人的天堂在线视频| 伊人影院99| 99精品丰满人妻无码一区二区| 成人做爰黄片视频免费| 亚洲中文字幕第一页| 高清视频无码| 人人爱人人摸| 婷婷久久综合久| 欧美日韩视频一区二区三区 | 97超碰人人操| 久久老女人| 老女人的逼| 中文字幕乱码无码人妻系列蜜桃 | 夜夜欢天天干| 丁香六月婷婷综合缴| 丁香五月网| 大香蕉性爱网| 丰满人妻一区二区三区视频在线不卡| 久久久久无码国产精品不卡| www,操逼| 久草中文网| 久久艹精品视频| 欧美性猛交XXXX乱大交蜜桃| 国产精品秘国产精品88| 91蜜桃视频| 国产高清中文字幕| 欧美日韩视频一区二区三区 | 山东wBBBB搡wBBBB| 黄色一级片免费| 午夜婷婷| av午夜激情| 欧美大香蕉伊人网| 国产精品久久久久久久久夜色| 99精品一区二区| 日本中文字幕电影| 蜜桃人妻无码| 欧美三级片网站| 亚洲www在线观看| 人人操人人透| 尻屄网| 中文字幕国产在线观看| 99re这里只有| 亚洲免费毛片| 欧美aaaaaa| 国产精品成人无码| 丁香婷婷五月基地| 成人午夜福利| 欧美激情影院| 日本黄色精品| 国产成人91| 香蕉成人网站| 猫咪视频大全视频| 精品成人一区二区三区| 日本在线不卡视频| 欧美色道| 日韩一级免费看| 操人| 正在播放国产精品| 蜜桃Av噜噜一区二区三区四区| 日本无码在线观看| 亚洲黄色成人| 午夜人妻无码| 久草视频网站| 亚洲视频91| 污视频在线观看免费| 七十路の高齢熟妇无码| 免费无码婬片aaaa| 91精品综合久久久久久五月丁香| 色汉综合| 四虎亚洲无码| 婷婷五月天激情网| 思思热在线观看视频| 午夜一级| 亚洲无码电影在线| 国产不卡在线观看| 三级无码视频在线观看| 日本日韩欧美| 国产一区二区电影| 干欧美女人| 二区视频| 免费国产A片| 人人人人干| 久久久国产精品视频| 亚洲AV播放| 国产1024在线| 久久夜色精品| 九九九在线视频| 亚洲播播在线视频| 国产成人一区二区| 有码中文字幕在线观看| 无码高清视频在线观看| 大香蕉一区| 亚洲无码成人网| 久久先锋| 木下凛凛子AV888AV在线观看| 国产亚洲一区二区三区| 免费日B视频| 国产日韩欧美综合精品在线观看 | 久久免费国产视频| 午夜老司机福利一二三区| 美女av日逼| 亚洲日韩影院| 蜜臀久久99精品久久久| 爱插美女网| 蜜桃久久99精品久久久酒店| 一区二区无码精品| 91在线观看免费视频| 丁香激情五月| 免费看国产黄色视频| 色播视频在线观看| 短发半推半就AV| 成人色色网| 色香蕉影院| 国产成人精品毛片| 麻豆91麻豆国产传媒| 视色影院| 91美女在线视频| 91香蕉在线观看视频在线播放| 免费A片国产毛无码A片| 青青草精品在线视频| 成人免费一级视频| 亚洲色婷婷| 熟女91视频| 久一久久| 天天干天天色天天射| 天天综合久久| 国产精品18禁| 亚洲天堂网在线观看视频| 鸡巴在线观看| 国产欧美熟妇另类久久久| 色先锋av| 國產精品777777777| AV无码不卡| 欧美精品99| 久碰| 天天天天日天天干| 国产精品无码乱伦| 欧美999| 中文在线永久免费观看| 熟女国产| 亚洲天堂电影网| 无套影院| 超碰97人人操| 蜜桃精品视频在线观看| 日韩在线91| 西西444大胆无码视频| 69av在线播放| 激情黄色视频| 久久久精品网站| 色久影院| 加勒比无码人妻| 麻豆国产| 青青草手机在线观看| 亚洲中文字幕有码| 3DAV一区二区三区动漫| 国产操逼片| 亚洲无码专区在线| 日韩乱伦av| 成年人黄色在线观看| va色婷婷亚洲在线| 波多野结衣视频网站| 黄片在线免费观看视频| 人人操国产| 水蜜桃视频在线播放| 在线观看av中文字幕| 黄网站免费看| 干干日日| 日本成人电影在线观看| 亚洲无码av电影| AV无码资源| 亚洲无码久久| 成人免费观看视频| JLZZJLZZ亚洲女人| 色色色热| 成人欧美一区二区三区在线观看 | 青草无码视频| 无码1区| 中文字幕日韩AV| 艹B视频| 日韩欧美亚洲| 精品国产99| 日本a在线观看| 超碰人人操人人摸| 激情久久综合| 五月丁香婷婷开心| 高清无码色播| 蜜桃视频网站| 国产精品观看| 深夜福利av| 三级黄色免费网站| 丝瓜污视频| 国产乱伦精品视频| 天天爽夜夜爽夜夜爽精品视频| 免费黄色一级片| 一区二区视频在线| 一级a免一级a做免费线看内祥 | 日韩Av无码一区二区三区不卡 | 日本在线小视频| 精品无码一区二区三区免费| 二区| 337P大胆粉嫩银噜噜噜| 免费看一级高潮毛片| 国产精品美女| 精品国产无码怀孕| 婷婷五月情| 超碰在线观看免费| 北条麻妃波多波多野结衣| 欧洲综合视频| 内射视频免费看| 正在播放ADN156松下纱荣子 | 特级西西444WWW大精品视频 | 大地中文资源5页的更新内容| 久艹在线观看视频| 国精产品秘一区二区| 一区二区无码视频| 99人妻人人爽人人添人人精品| 日本特级黄A片免费观看| 国产不卡在线观看| 日韩AV乱伦| 国产乱码精品一品二品| 大香蕉玖玖| 日本乱码视频| 无码三级在线免费观看| 91人妻无码| 国产传媒在线观看| 成人特级毛片| 亚洲av播放| 波多野结衣视频一区| av中文无码| 亚洲中文字幕日韩| 色哟哟――国产精品| 中文字幕天天在线| 99成人电影| 无码中文字幕高清| 日韩无码不卡| 操逼逼网| 日韩城人免费| 亚洲午夜成人| 丁香五月激情五月| 内射视频免费观看| 91精品在线免费观看| 国产无码三级| 日韩AV中文字幕在线播放| av天堂中文| 黄色av网| 996精品在线| 亚洲高清无码在线观看视频| 国产黄片自拍| 99re视频播放| 色多多毛片| 高清无码免费视频| 超碰av在线| 欧美色图第一页| 山东wBBBB搡wBBBB| 亚洲精品一区二三区不卡| 嫩小槡BBBB槡BBBB槡漫画| 人妻熟妇乱子伦精品无码专区毛片 | 色综合网址| 91在线无码精品国产三年| 东京热久久综合色五月老师| 麻豆回家视频区一区二| 成人AV无码| 18XXX亚洲HD护士JD| 国产AV无码成人精品毛片| 五月精品| 另类罕见稀奇videos| 日老女人逼| av先锋资源| 专业操老外| 欧美日逼网站| 欧美精品人妻| 人妻熟妇乱子伦精品无码专区毛片 | 97中文在线| 一区无码视频| 久久久久久成人无码| 国产中文人人国际| 蜜臀av一区二区三区| 免费成人AV| 奶头和荫蒂添的好舒服囗交漫画 | 在线免费看A| 伊人666| 噼里啪啦免费观看视频大全| 久久艹骚逼| 人人操人人网站| 乱伦AV网| 久久免费9| 免费高清无码视频在线观看| 中国操逼电影| 国产91在线拍揄自揄拍无码九色| 韩国无码成人电影啊荒| 玖玖国产精品| 日韩无码视频播放| 亚洲黄色在线播放| 综合久久视频| 九九久久精品视频| 中文字幕+乱码+中文乱码视频在线观看 | www.黄色大片| 欧美足交视频| 豆花视频无码| 在线观看三级| 操亚洲| 亚洲成人在线观看视频| 蜜桃av无码一区三区| 亚洲A片电影| 免费成人三级片| 国产理论片在线观看| AV网站在线免费观看| 在线亚洲小视频| 在线免费看A片| 欧美一级大香蕉| 色婷婷视频在线播放| 91成人一区二区三区| 在线观看日本vs欧洲vs美洲| 成人精品三级AV在线看| 成人AV无码| 中文有码| 久久午夜无码鲁丝片午夜精品偷窥 | 国产97视频| 国产成人精品视频| 乳揉みま痴汉电车羽月希免费观看 | 亚洲成人黄色在线| 亚洲午夜福利视频在线观看| 欧美在线视频一区二区| www.AV在线| 婷婷激情视频| 国产一片黑夜内射| 九色自拍视频| 国产精品久久久久久亚洲影视| 伊人久久免费视频| 伊人成色| 波多野结衣视频网站| 江苏妇搡BBBB搡BBBB-百度| 国产成人宗合| 五月婷婷开心| 国产人妻中文字幕| 婷婷五月综合激情| 97超碰碰碰| 12—13女人毛片毛片| 人人操人人操人人操人人| 暖暖在线视频| 狠狠视频| 亚洲成人在线免费观看| 91人妻人人操| 韩国三级HD中文字幕2019年| 国产成人精品a视频| 国产精品黑人ThePorn| 9一区二区三区| 91看片看婬黄大片Videos | 97香蕉久久国产超碰青草专区 | 天天操嫩逼无套视频| 国产精品无码激情视频| 在线观看中文字幕亚洲| 一级特黄A片| 日韩第1页| 99热5| 午夜无码精品一区二区三区99午| 九九热精品视频在线观看| 中文字幕不卡+婷婷五月| 加勒比日日综合| 国产乱伦片、| 国产看色免费| 国产无码高清在线| 国产成人AV免费无码| 91在线无码精品秘入口国战| 久久e热| 大香蕉伊在线观看| 国产福利视频| 中文字幕线观看| 东京热第一页| 亚洲欧美日韩另类| 青草视频在线免费观看| 日韩免费三级片| 99精品免费视频| 亚洲视频日韩在线观看| 国产女人18毛片水真多18| 青春草在线视频免费观看| 亚洲视频福利| 中文字幕高清无码视频| 亚洲欧美性爱视频| 国产成人A片| 久久嫩草精品久久久久精| 91久久久久久久久久久| 免费看黄色AV| 刘玥一区二区三区| 天天综合网久久综合网| 免费一二区| 亚洲丝袜不卡| 国产老女人操逼视频| 亚洲免费大片| 中文字幕手机在线视频| 7777AV| 操碰视频| 国产美女精品久久AV爽| 日韩黄色视频在线观看| 狼友视频免费在线观看| 一二区免费视频| 69国产精品| 青青国产视频| 欧美日韩A片欧美日| 日韩AⅤ无码一区二区三区| 久操网在线| www.午夜| 久热精品视频在线观看| 欧美日韩中国操逼打炮| 超碰在线免费播放| 精品伊人久久| 黄色电影一级片| 成人影音先锋| 在线一区| 黄色a在线| 中文字幕少妇| 日韩三级成人| 西西444www| 色色网欧美| 黄色视频在线观看大全| 无码一二| 久99久热| 波多野结衣视频网站| 奇米影视av| 仓井空一区二区三区| 日韩成人精品在线| 欧美午夜成人| 九九草影院| 亚洲视频在线观| 翔田千里在线播放| 在线免费A片| 日韩城人网站| 国产人妖av| 中文无码在线观看中文字幕av中文 | 粗长哭叫打桩H体育生| 日韩人妻在线视频| 亚洲高清免费| 日日碰狠狠躁久久躁婷婷| 日日99| 99综合视频| 无码欧美| 蝌蚪窝视频网| 欧美国产综合在线| 欧美综合精品| 伊人免费| 免费A级| 国产午夜激情视频| 日本超碰在线| 欧美一级a| 特黄一级A片| 在线操b| av天堂亚洲| 四虎最新视频| 成人18视频| 激情深爱五月| 日日碰狠狠添| 欧美第一网站| 久久看片| 亚洲综合天堂| 亚洲AV无码乱码| 日本成人不卡| 亚洲免费观看高清完整版在线观 | 午夜a片| 欧美日韩中文| 国产成人久久777777| www.97超碰| 成人黄色电影在线观看| 亚洲美女网站在线观看| AV无码一区二区三区| 二区三区在线| 成人片成人网久久蜜桃臀| 91免费成人视频| 三级av无码| 天堂中文在线资源| 444444在线观看免费高清电视剧木瓜一| 高清无码爱爱| 日本不卡中文字幕| 亚洲影院中文字幕| 天天干,夜夜爽| 午夜福利剧场| 免费av网站| 精品成人av| 国产毛片一区二区| 天天操B| 大荫蒂精品另类| 欧美成人精品在线观看| 一级AV片| 亚洲色激情| 欧美AA视频| 色综合色| 国产1区在线观看| 国产乱伦内射| 国产乱妇无码毛片A片在线看下载| 亚洲精品鲁一鲁一区二区三区 | 欧美色大香蕉| 亚洲少妇人妻| 在线无码视频播放| 午夜成人福利视频| 桃花岛tⅴ+亚洲品质| 操碰人人| 男人天堂无码av| 成人亚洲欧美| 男女无码| 日本少妇bbw| 亚洲性爱在线视频| 豆花成人社区,视频| 欧美一级做| 婷婷五月无码| 国产成人在线播放| 日韩毛片在线免费观看| 福利精品| 日本爱爱视频| 久久无码专区| 黄色影片在线观看| 久久精品99视频| 欧美一本在线| 人妻互换一二三区免费| 伊人久久大香蕉视频| 久久免费在线视频| 午夜免费视频| 亚洲视频观看| 日韩a级片| 色人阁人妻中文字幕| 色噜噜人妻av中文字幕| 69人妻人人澡人人爽人人精品| 性毛片| 日韩久久人妻| 四川BBBB擦BBBB| 麻豆午夜福利视频| 国产综合久久777777麻豆|