日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > windows >内容正文

windows

又被夺命连环问了!从一道关于定时任务的面试题说起。

發(fā)布時(shí)間:2023/12/24 windows 55 coder
生活随笔 收集整理的這篇文章主要介紹了 又被夺命连环问了!从一道关于定时任务的面试题说起。 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

你好呀,我是歪歪。

定時(shí)任務(wù),大家在開(kāi)發(fā)的過(guò)程中肯定都是接觸過(guò)的。

歪師傅面試的時(shí)候關(guān)于定時(shí)任務(wù)一般都會(huì)問(wèn)這樣的一個(gè)問(wèn)題:在實(shí)際開(kāi)發(fā)的過(guò)程中,你們是如何避免定時(shí)任務(wù)重復(fù)執(zhí)行的呢?

什么意思呢?

我給你上個(gè)圖你就明白了。

假設(shè)我們有個(gè)訂單服務(wù)的微服務(wù),它部署在兩臺(tái)機(jī)器上:

這是一個(gè)再正常不過(guò)的部署方案了吧。

現(xiàn)在有一個(gè)需求來(lái)了:要從數(shù)據(jù)庫(kù)里面獲取前一日狀態(tài)為成功的訂單,然后把這些訂單一筆筆的調(diào)用其他服務(wù)的接口,通知給他們。

寫(xiě)代碼的時(shí)候很簡(jiǎn)單,基于 Quartz 框架,咔嚓幾下就能搞出一個(gè)定時(shí)任務(wù)來(lái),偽代碼如下:

//每天10點(diǎn)觸發(fā)一次
@Scheduled(cron?=?"0?0?10?*?*??")
public?void?sendOrder()?{
????//查詢前一日狀態(tài)為成功的訂單
????List<Order>?orderList?=?selectSuccessOrder();
????for?(Order?order?:?orderList)?{
????????//發(fā)送訂單到數(shù)據(jù)分析服務(wù)
????????sendOrder(order);
????}
}

測(cè)試的時(shí)候也非常的正常,看不出任何毛病。

但是一上生產(chǎn)就完?duì)僮恿耍瑸槭裁茨兀?/p>

因?yàn)闇y(cè)試環(huán)境一般來(lái)說(shuō)就只部署一臺(tái)服務(wù)器,但是生產(chǎn)環(huán)境是多臺(tái)呀:

每天 10 點(diǎn)一到,兩臺(tái)機(jī)器都跑起來(lái)了...

同樣的邏輯跑了兩次,一下就瓜起了澀,這肯定不是我們想要的結(jié)果。

問(wèn):這個(gè)情況你怎么處理?

在實(shí)際開(kāi)發(fā)的過(guò)程中,我理解大家理論上都會(huì)遇到這個(gè)問(wèn)題的。

歪師傅當(dāng)年還是一個(gè)小萌新,第一次遇到這個(gè)問(wèn)題的時(shí)候,是怎么考慮的呢?

摳了摳腦袋,想到一個(gè)自己覺(jué)得非常靠譜的解決方案。

各個(gè)微服務(wù)提供接口,接口內(nèi)部實(shí)現(xiàn)定時(shí)任務(wù)的業(yè)務(wù)邏輯。然后抽離出一個(gè)專(zhuān)門(mén)的定時(shí)任務(wù)微服務(wù),在這個(gè)服務(wù)中開(kāi)發(fā)定時(shí)任務(wù),來(lái)調(diào)用對(duì)應(yīng)的接口:

由于“定時(shí)任務(wù)微服務(wù)”只部署在一臺(tái)服務(wù)器上,所以當(dāng)定時(shí)任務(wù)的時(shí)間一到,只會(huì)發(fā)起一次 RPC 調(diào)用,具體調(diào)用哪一臺(tái)服務(wù),由 RPC 的負(fù)載均衡來(lái)決定。

從而規(guī)避了前面提到的“觸發(fā)兩次”的問(wèn)題。

當(dāng)時(shí)我還覺(jué)得微服務(wù)的思想還是真是厲害,這樣一抽離之后,業(yè)務(wù)代碼和定時(shí)邏輯徹底分離開(kāi)來(lái),橫向擴(kuò)展也不需要考慮“多次觸發(fā)”的問(wèn)題:

但是,問(wèn)題隨著就來(lái)了:定時(shí)任務(wù)服務(wù)只部署了一臺(tái),它有單點(diǎn)風(fēng)險(xiǎn)啊,它掛了,所有的定時(shí)任務(wù)不就都掛了嗎?

我知道在有的公司,實(shí)際情況就是這樣的,知道服務(wù)有單點(diǎn)風(fēng)險(xiǎn),但是評(píng)估下來(lái),覺(jué)得是可以接受的,大不了就是做好服務(wù)監(jiān)控,出了問(wèn)題就趕緊重啟一波服務(wù)。

所以遇到這個(gè)問(wèn)題的解決方案就是:不管它。

但是,朋友,面試的時(shí)候你能這樣回答嗎,你是去調(diào)侃面試官的嗎?

所以,該怎么辦?

單點(diǎn)問(wèn)題,很好解決,針對(duì)“定時(shí)任務(wù)服務(wù)”多部署一臺(tái)服務(wù)器就行了:

但是,調(diào)用關(guān)系怎么辦呢?

時(shí)間一到,咔的一下,兩臺(tái)“定時(shí)任務(wù)服務(wù)”都跑起來(lái)了,都對(duì)下游發(fā)起了 RPC 調(diào)用,這不又出現(xiàn)了前面這樣“調(diào)用兩次”的問(wèn)題嗎:

開(kāi)始套娃了,你說(shuō)怎么辦?

這個(gè)時(shí)候歪師傅又摳了摳腦袋,又想到一個(gè)自己覺(jué)得非常靠譜的解決方案。

關(guān)于這個(gè)問(wèn)題,我先換個(gè)殼問(wèn)你:如果有多個(gè)請(qǐng)求過(guò)來(lái),但是我們同一時(shí)間只想讓一個(gè)請(qǐng)求正常執(zhí)行,請(qǐng)問(wèn)你怎么辦?

一般來(lái)說(shuō)我們都會(huì)想到加鎖嘛。

單機(jī)的話,什么 synchronized,ReentrantLock 這些玩意就使勁兒往上懟。

多臺(tái)服務(wù)就上分布式鎖嘛,Redis、Zookeeper 拿出來(lái)秀一秀嘛,對(duì)不對(duì)?

比如,如果我們用 Redis,怎么做?

在發(fā)起 RPC 調(diào)用之前先從 Redis 里面拿鎖,多臺(tái)機(jī)器,誰(shuí)拿到了,誰(shuí)就可以執(zhí)行:

//每天10點(diǎn)觸發(fā)一次
@Scheduled(cron?=?"0?0?10?*?*??")
public?void?sendOrder()?{
????//獲取redis鎖
????if(SET?key?value?expireTime?nx){
????????//拿到鎖的才能調(diào)用訂單服務(wù)發(fā)送成功訂單邏輯的接口
????????callOrderRPC();???
????}
}

這樣即使某一臺(tái)服務(wù)器上的服務(wù)掛了,另外一臺(tái)也能確保定時(shí)任務(wù)按時(shí)觸發(fā),并表示非常開(kāi)心:很好,沒(méi)人和我搶鎖了。

或者說(shuō)基于 zookeeper 來(lái)做。

比如我們定時(shí)任務(wù)的服務(wù)啟動(dòng)的時(shí)候,以服務(wù)名稱維度向 zk 申請(qǐng)一個(gè)臨時(shí)節(jié)點(diǎn)。

誰(shuí)申請(qǐng)成功了,誰(shuí)就算加鎖成功了,雖然到點(diǎn)之后每個(gè)定時(shí)任務(wù)都會(huì)按時(shí)觸發(fā),但是和 Redis 同理,只有拿到鎖的實(shí)例才能執(zhí)行定時(shí)任務(wù)。

沒(méi)有拿到鎖的怎么辦呢?

監(jiān)聽(tīng)這個(gè)臨時(shí)節(jié)點(diǎn),處于隨時(shí)待命狀態(tài)。如果當(dāng)前持有鎖的服務(wù)掛了,那么臨時(shí)節(jié)點(diǎn)也就沒(méi)了,相當(dāng)于鎖就釋放了,就可以上手搶鎖了。

搶到鎖,就可以執(zhí)行定時(shí)任務(wù),這樣也能保證高可用。

如果是面試,針對(duì)“避免定時(shí)任務(wù)重復(fù)執(zhí)行”能回答到分布式鎖這里,我認(rèn)為就可以了。

但是,朋友,這可是面試,面試一般是出連招的。

如果我突然畫(huà)風(fēng)一轉(zhuǎn),順勢(shì)提出下一個(gè)問(wèn)題:

用分布式鎖,可以通過(guò)只讓一臺(tái)機(jī)器運(yùn)行的方式解決重復(fù)運(yùn)行的問(wèn)題。現(xiàn)在我換個(gè)場(chǎng)景,問(wèn)問(wèn)題,如果我昨日成功的訂單數(shù)據(jù)量比較多,假設(shè)有 100w 筆吧,如果只在一臺(tái)機(jī)器上跑,即使開(kāi)啟多線程,也需要很長(zhǎng)的時(shí)間,而且是一臺(tái)機(jī)器忙的不行,不太機(jī)器在旁邊閑的不行。如果我想要充分把機(jī)器利用起來(lái),讓兩臺(tái)機(jī)器都來(lái)處理這 100w 筆訂單,各自處理 50w 條,時(shí)間不就縮短了嗎?

就像是這樣:

請(qǐng)問(wèn),閣下又該如何應(yīng)對(duì)?

ElasticJob

好了,前面鋪墊了這么多,終于要引出 ElasticJob 這個(gè)玩意了。

這是官方文檔的地址:

https://shardingsphere.apache.org/elasticjob/current/cn/overview/

其中有一個(gè)章節(jié)叫做“彈性調(diào)度”:

彈性調(diào)度是 ElasticJob 最重要的功能,也是這款產(chǎn)品名稱的由來(lái)。 它是一款能夠讓任務(wù)通過(guò)分片進(jìn)行水平擴(kuò)展的任務(wù)處理系統(tǒng)。

從關(guān)于“分片”的描述中,我們知道也許能在這里找到問(wèn)題的答案。

雖然答案就在眼前,但是別猴急。按照歪師傅的風(fēng)格,還是得先上個(gè) Demo 作為引子,給你抽絲剝個(gè)繭。

這里順便吐槽一句官方文檔:

你這個(gè)“快速入門(mén)”寫(xiě)的是什么玩意,根本就不能用好吧?

quick start 不能拿來(lái)即用,對(duì)于本白嫖黨來(lái)說(shuō),是很難受的,好嗎。

害得我還得自己摸索一下,還好整體并不復(fù)雜,你按照歪師傅給你提供的“快速入門(mén)”,五分鐘足夠搭個(gè) Demo 了。

首先,新建一個(gè) Spring Boot 項(xiàng)目,在 pom 文件中加入相關(guān)引用:

<dependency>
????<groupId>org.apache.shardingsphere.elasticjob</groupId>
????<artifactId>elasticjob-lite-spring-boot-starter</artifactId>
????<version>3.0.1</version>
</dependency>

然后實(shí)現(xiàn) SimpleJob 接口,自定義一個(gè)定時(shí)任務(wù):

package?com.example.elasticjobtest;

@Slf4j
@Component
public?class?SpringBootJob?implements?SimpleJob?{

????@Override
????public?void?execute(ShardingContext?shardingContext)?{
????????log.info("SpringBootJob作業(yè),分片總數(shù)是【{}】,當(dāng)前分片是【{}】,分片參數(shù)是【{}】",
????????????????shardingContext.getShardingTotalCount(),
????????????????shardingContext.getShardingItem(),
????????????????shardingContext.getShardingParameter());
????}
}

接著在 application.yml 里面添加配置:

elasticjob:
??#?注冊(cè)中心配置
??regcenter:
????serverlists:?127.0.0.1:2181
????#?ZooKeeper?的命名空間
????namespace:?why-elastic-job
??#?作業(yè)配置
??jobs:
????springJob:?#?job的名稱
??????elasticJobClass:?com.example.elasticjobtest.SpringBootJob
??????cron:?0/5?*?*?*?*??
??????shardingTotalCount:?2
??????shardingItemParameters:?0=Beijing,1=Shanghai

就這幾行代碼,Demo 就算搭完了。

你自己說(shuō),這整個(gè)流程是不是五分鐘夠夠的了?

在把服務(wù)啟動(dòng)起來(lái)之前,針對(duì) application.yml 的配置,我先多 BB 幾句。

里面這兩個(gè)玩意是什么東西呢:

可以參考官方文檔中的描述:

https://shardingsphere.apache.org/elasticjob/current/cn/user-manual/configuration/

shardingTotalCount 叫做作業(yè)分片總數(shù),這個(gè)概念非常重要,理解了這個(gè)概念,就理解了 ElasticJob 的核心理念,先按下不表。

shardingItemParameters 叫做個(gè)性化分片參數(shù),我這里寫(xiě)的是 0=Beijing,1=Shanghai,看起來(lái)很奇怪對(duì)不對(duì),怎么突然冒出了北京和上海呢?

因?yàn)檫@也是官方文檔中的案例:

這只是實(shí)例而已,當(dāng)你理解了這個(gè)概念的用途之后,就可以按照自己的需求進(jìn)行“個(gè)性化”配置。

Demo 跑起來(lái)

這個(gè)是 ElasticJob 的架構(gòu)示意圖:

可以看到它選擇了 Zookeeper 做為自己的注冊(cè)中心,所以在啟動(dòng) Demo 之前,需要你把你本地的 Zookeeper 啟動(dòng)起來(lái)。

然后把 Demo 運(yùn)行起來(lái),觀察日志輸出:

你會(huì)發(fā)現(xiàn)每隔 5s 就會(huì)輸出這樣的日志:

2023-12-16?16:31:45.020?SpringBootJob作業(yè),分片總數(shù)是【2】,當(dāng)前分片是【0】,分片參數(shù)是【Beijing】
2023-12-16?16:31:45.020?SpringBootJob作業(yè),分片總數(shù)是【2】,當(dāng)前分片是【1】,分片參數(shù)是【Shanghai】

怎么樣,看到日志輸出之后是不是稍微品出了點(diǎn)淡淡的味道,就是那種雖然不知道怎么回事,但是總感覺(jué)馬上就摸到門(mén)道的感覺(jué)。

保持住這種感覺(jué),歪師傅馬上就讓你摸到門(mén)把手了。

為了模擬多個(gè)服務(wù)部署的情況,所以我們需要再多啟動(dòng)一個(gè)服務(wù)。

在 Idea 里面點(diǎn)擊這個(gè):

然后把“Allow multiple instances(運(yùn)行多實(shí)例運(yùn)行)”勾選上:

修改一下服務(wù)端口,避免端口沖突:

接著再次啟動(dòng) Demo,觀察一下日志:

標(biāo)號(hào)為 ① 的地方是僅一臺(tái)服務(wù)器運(yùn)行的情況,兩個(gè)分片都在這一個(gè)服務(wù)器上運(yùn)行。

標(biāo)號(hào)為 ② 和 ③ 的地方是兩臺(tái)服務(wù)器都運(yùn)行起來(lái)的情況,同樣的代碼、同樣的配置,跑在不同的端口而已。

一臺(tái)的日志輸出是這樣的:

SpringBootJob作業(yè),分片總數(shù)是【2】,當(dāng)前分片是【1】,分片參數(shù)是【Shanghai】
SpringBootJob作業(yè),分片總數(shù)是【2】,當(dāng)前分片是【1】,分片參數(shù)是【Shanghai】

另外一臺(tái)的日志輸出是這樣的:

SpringBootJob作業(yè),分片總數(shù)是【2】,當(dāng)前分片是【0】,分片參數(shù)是【Beijing】
SpringBootJob作業(yè),分片總數(shù)是【2】,當(dāng)前分片是【0】,分片參數(shù)是【Beijing】

可以看到,每隔五秒鐘兩臺(tái)服務(wù)器都同時(shí)觸發(fā)了定時(shí)任務(wù),但是一臺(tái)拿到的參數(shù)是 Shanghai,一臺(tái)拿到的參數(shù)是 Beijing。

這個(gè)時(shí)候我們?cè)倩厝タ疵嬖嚬俚倪@個(gè)問(wèn)題:

假設(shè)有 100w 筆吧,如果只在一臺(tái)機(jī)器上跑,即使開(kāi)啟多線程,也需要很長(zhǎng)的時(shí)間,而且是一臺(tái)機(jī)器忙的不行,不太機(jī)器在旁邊閑的不行。如果我想要充分把機(jī)器利用起來(lái),讓兩臺(tái)機(jī)器都來(lái)處理這 100w 筆訂單,各自處理 50w 條,時(shí)間不就縮短了嗎?

然后我再給你上個(gè)圖:

每個(gè)機(jī)器上運(yùn)行的代碼是一樣的,但是通過(guò) ElasticJob 能讓每個(gè)機(jī)器在運(yùn)行定時(shí)任務(wù)的時(shí)候,拿到不一樣的參數(shù)。

基于這個(gè)不一樣的參數(shù),我們就能搞很多事情了嘛。

比如 100w 數(shù)據(jù),分為兩組,一組 50w 條。假設(shè) ID 是連續(xù)自增的,是不是可以這樣判斷奇偶數(shù):

偶數(shù):id % 2 == 0
奇數(shù):id % 2 == 1

在這個(gè)表達(dá)式里面,每個(gè)數(shù)據(jù)的 id 是確定的,而這個(gè)“2”,你看它像不像是我們的“分片數(shù)”?至于這個(gè)“0”和“1”,是不是可以通過(guò)我們的“個(gè)性化分片參數(shù)”傳遞進(jìn)來(lái)?

id % 分片數(shù) == 個(gè)性化分片參數(shù)

比如我們寫(xiě)個(gè)這樣的代碼:

然后把作業(yè)配置改成這樣的:

然后啟動(dòng)兩個(gè)服務(wù),我們觀察一下日志輸出:

一臺(tái)機(jī)器處理的是 “1,3,5,7,9”,一臺(tái)機(jī)器處理的是“0,2,4,6,8”

剛剛面試官的問(wèn)題是啥來(lái)著?

兩臺(tái)機(jī)器處理 100w 筆訂單,各自處理 50w 條?

這不就實(shí)現(xiàn)了嗎?

再給你看一個(gè)神奇的東西,假設(shè)我在運(yùn)行時(shí)把 shardingTotalCount 修改為 3,即分片數(shù)變成 3,對(duì)應(yīng)的自定義參數(shù)也進(jìn)行對(duì)應(yīng)的修改,會(huì)發(fā)生什么事情呢?

按照我們之前的這個(gè)邏輯:

id % 分片數(shù) == 個(gè)性化分片參數(shù)

0 到 9 這十個(gè)數(shù)字分別對(duì) 3 取模,那么就會(huì)分成下面這三組:

  • 第一組:0,3,6,9
  • 第二組:1,4,7
  • 第三組:2,5,8

這個(gè)沒(méi)有任何毛病,對(duì)不對(duì)?

然后還需要特別注意的是,我說(shuō)的是“在運(yùn)行時(shí)”修改。

怎么修改?

很簡(jiǎn)單,ElasticJob 其實(shí)提供了對(duì)應(yīng)的管理后臺(tái)頁(yè)面可以進(jìn)行參數(shù)修改,但是我這里偷個(gè)懶,難得去部署對(duì)應(yīng)的管理后臺(tái),,準(zhǔn)備換個(gè)簡(jiǎn)單的思路。

因?yàn)榍懊嬲f(shuō)了,ElasticJob 使用的是 zk 做為自己的注冊(cè)中心,我直接用工具連接上 zk,然后修改 zk 節(jié)點(diǎn)就行了。

我是怎么知道修改 zk 的哪個(gè)節(jié)點(diǎn)的呢?

別著急,等下就講,歪師傅先帶你看效果。

我這里用的工具是 ZooInspector,修改之后直接點(diǎn)擊保存:

然后,朋友們,注意了,看日志輸出

為了讓你看的更加清楚,我把關(guān)鍵日志單獨(dú)拿出來(lái):

第一臺(tái)機(jī)器上的日志是這樣的:

分片總數(shù)是【3】,當(dāng)前分片是【1】,分片參數(shù)是【1】,處理的數(shù)據(jù) date=【1,4,7,】

第二臺(tái)機(jī)器上的日志是這樣的:

分片總數(shù)是【3】,當(dāng)前分片是【0】,分片參數(shù)是【0】,處理的數(shù)據(jù) date=【0,3,6,9,】
分片總數(shù)是【3】,當(dāng)前分片是【2】,分片參數(shù)是【2】,處理的數(shù)據(jù) date=【2,5,8,】

和我們前面推理的結(jié)果一模一樣。

好,到這里就可以解答我的一個(gè)“按下不表”了。

首先,shardingTotalCount 叫做作業(yè)分片總數(shù),在我前面的例子中,作業(yè)分片總數(shù)一共是 3 片:

  • 第一組(第一片):0,3,6,9
  • 第二組(第二片):1,4,7
  • 第三組(第三片):2,5,8

分成三片之后,Elasticjob 怎么知道每一片應(yīng)該處理哪些數(shù)據(jù)呢?

它不知道,它也不用知道。它只需要告訴每一臺(tái)服務(wù)器:“來(lái),哥們,給你一個(gè)號(hào)你拿著。你們這波一共有多少多少個(gè)人,你是第幾片。”

就完事了。

因?yàn)椤白蛉粘晒Φ挠唵巍边@個(gè)總的要處理的數(shù)據(jù)是不變的,所有每一臺(tái)服務(wù)器知道一共要把這批數(shù)據(jù)分成幾片,自己是第幾片后,通過(guò)代碼就能拿到對(duì)應(yīng)的該處理的數(shù)據(jù)。

然后你再去看官方描述中關(guān)于“分片項(xiàng)”你大概就能知道這到底是個(gè)啥玩意了:

有的哥們比較猛,一次拿到兩個(gè)號(hào),也沒(méi)關(guān)系,就是多處理一份數(shù)據(jù)嘛。這種情況就適用于兩臺(tái)機(jī)器的性能不一致的情況。

但是我用這個(gè)案例并不是為了引出“性能不一致”這種極少數(shù)的情況,而是為了這個(gè)...

當(dāng)我再啟動(dòng)一個(gè)新的服務(wù)器,當(dāng)?shù)谌_(tái)服務(wù)器加入之后,我們啥也沒(méi)干,它自己就開(kāi)始處理任務(wù)了。

3 個(gè)分片,一臺(tái)服務(wù)器處理一個(gè)分片的數(shù)據(jù)。

能自動(dòng)加入,就能自動(dòng)退出,所以假設(shè)我把一臺(tái)服務(wù)給關(guān)閉了:

從日志可以看出來(lái),數(shù)據(jù)并沒(méi)有丟。

第一臺(tái)機(jī)器把本來(lái)該在下線的這臺(tái)服務(wù)器上處理的數(shù)據(jù)給接管了:

分片總數(shù)是【3】,當(dāng)前分片是【2】,分片參數(shù)是【2】,處理的數(shù)據(jù) date=【2,5,8,】
分片總數(shù)是【3】,當(dāng)前分片是【0】,分片參數(shù)是【0】,處理的數(shù)據(jù) date=【0,3,6,9,】

好了,到這里,基本功能就算演示完成,可以適當(dāng)?shù)捻懫鹨恍┱坡暳恕?/p>

啥原理啊?

其實(shí)關(guān)于原理,官方文檔上也按照步驟進(jìn)行了比較詳細(xì)的說(shuō)明:

https://shardingsphere.apache.org/elasticjob/current/cn/features/elastic/

如果你不了解 zk 的大致工作原理、節(jié)點(diǎn)特性、監(jiān)聽(tīng)機(jī)制啥的,后面肯定會(huì)看得比較懵逼。

所以需要先去補(bǔ)一下這方面的信息,對(duì)于這部分的描述和源碼的解讀有很大幫助。

如果你能大致理解 zk 的工作原理,那么整體讀下來(lái)其實(shí)沒(méi)有什么特別難以理解的地方,如果要深入理解每一個(gè)步驟的話,那肯定要讀一下源碼的。

步驟都有了,去找對(duì)應(yīng)的源碼,不就是按圖索驥,手拿把掐的事情嗎。

在閱讀源碼之前,還有一個(gè)非常重要的東西要鋪墊一下,前面也說(shuō)了:基于 zk 做的注冊(cè)中心。

所以你必須要了解“注冊(cè)中心的數(shù)據(jù)結(jié)構(gòu)”是怎么樣的,每個(gè)節(jié)點(diǎn)是干啥的,才能理解代碼里面操作 zk 節(jié)點(diǎn)的時(shí)候,到底是什么含義。

關(guān)于注冊(cè)中心的數(shù)據(jù)結(jié)構(gòu),文檔上也有介紹:

我覺(jué)得這個(gè)還是非常重要的,所以我多啰嗦幾句,主要給你看看實(shí)際的數(shù)據(jù)是怎么樣的。

還是以我本地啟動(dòng)三個(gè)服務(wù)為例。

啟動(dòng)起來(lái)之后,看 zk 上注冊(cè)了這些節(jié)點(diǎn):

其中“why-elastic-job”和“springJob”分別是我們寫(xiě)在 application.yml 里面的 ZooKeeper 的命名空間和 Job 名稱:

config 節(jié)點(diǎn)

config 節(jié)點(diǎn)里面是作業(yè)配置信息,以 YAML 格式存儲(chǔ):

可以看到節(jié)點(diǎn)里面實(shí)際的值比我們配置的多,因?yàn)橛泻芏嗄J(rèn)項(xiàng)。每個(gè)默認(rèn)項(xiàng)是干啥的,就自己去研究吧。

前面我說(shuō)的“運(yùn)行時(shí)修改”,就修改的是這個(gè)地方信息。

我為什么知道改這里?

還不是官網(wǎng)告訴我的。

instances 節(jié)點(diǎn)

該節(jié)點(diǎn)是作業(yè)運(yùn)行實(shí)例信息,子節(jié)點(diǎn)是當(dāng)前作業(yè)運(yùn)行實(shí)例的主鍵。

作業(yè)運(yùn)行實(shí)例主鍵由作業(yè)運(yùn)行服務(wù)器的 IP 地址和 PID 構(gòu)成。

作業(yè)運(yùn)行實(shí)例主鍵均為臨時(shí)節(jié)點(diǎn),當(dāng)作業(yè)實(shí)例上線時(shí)注冊(cè),下線時(shí)自動(dòng)清理。注冊(cè)中心可以監(jiān)控這些節(jié)點(diǎn)的變化,來(lái)協(xié)調(diào)分布式作業(yè)的分片以及高可用。

具體到我們這個(gè)案例中,是這樣的:

instances 下面有三個(gè)子節(jié)點(diǎn),代表有三個(gè)微服務(wù)。

假設(shè)我停止運(yùn)行一個(gè)服務(wù),由于是 zk 的臨時(shí)節(jié)點(diǎn),這個(gè)地方就會(huì)變成 2 個(gè):

sharding 節(jié)點(diǎn)

作業(yè)分片信息,子節(jié)點(diǎn)是分片項(xiàng)序號(hào),從零開(kāi)始,至分片總數(shù)減一。比如我們這里就是 0 到 2:

分片項(xiàng)序號(hào)的子節(jié)點(diǎn)存儲(chǔ)詳細(xì)信息,每個(gè)分片項(xiàng)下的子節(jié)點(diǎn)用于控制和記錄分片運(yùn)行狀態(tài):

  • sharding-0-instance:192.168.2.16@-@4964
  • sharding-1-instance:192.168.2.16@-@2224
  • sharding-2-instance:192.168.2.16@-@4964

可以看到 0,2 分片是運(yùn)行在同一個(gè) instance 上的,這一點(diǎn)和日志是匹配的:

sharding 下除了 instance 節(jié)點(diǎn)外,可能還有其他的節(jié)點(diǎn),詳細(xì)信息說(shuō)明如下:

servers 節(jié)點(diǎn)

作業(yè)服務(wù)器信息,子節(jié)點(diǎn)是作業(yè)服務(wù)器的 IP 地址。

可在 IP 地址節(jié)點(diǎn)寫(xiě)入 DISABLED 表示該服務(wù)器禁用。

在新的云原生架構(gòu)下,servers 節(jié)點(diǎn)大幅弱化,僅包含控制服務(wù)器是否可以禁用這一功能。

為了更加純粹的實(shí)現(xiàn)作業(yè)核心,servers 功能未來(lái)可能刪除,控制服務(wù)器是否禁用的能力應(yīng)該下放至自動(dòng)化部署系統(tǒng)。

leader 節(jié)點(diǎn)

作業(yè)服務(wù)器主節(jié)點(diǎn)信息,下面有三個(gè)子節(jié)點(diǎn):

  • election:用于主節(jié)點(diǎn)選舉
  • sharding:用于分片
  • failover:用于失效轉(zhuǎn)移處理

除了節(jié)點(diǎn)介紹外,在官網(wǎng)描述上有這樣的一句話:

換句話說(shuō)就是,如果你想了解作業(yè),那這個(gè)節(jié)點(diǎn)是很重要的。看源碼的時(shí)候,需要特別關(guān)注對(duì)于 leader 節(jié)點(diǎn)下的操作。

在我們的案例中,instance 里面的信息是這樣的:

表示這個(gè)節(jié)點(diǎn)是主節(jié)點(diǎn)。

源碼

知道了 zk 上每個(gè)節(jié)點(diǎn)的用處,看源碼的時(shí)候比著看就行了。

源碼比較多,歪師傅這里只能帶著你做個(gè)非常簡(jiǎn)單的導(dǎo)讀。

首先,因?yàn)楹芏噙壿嫸际腔?zk 節(jié)點(diǎn)在來(lái)做的,所以最重要的是各種各樣的 zk 節(jié)點(diǎn)監(jiān)聽(tīng)器,ElasticJob 在啟動(dòng)時(shí),會(huì)執(zhí)行這個(gè)方法,開(kāi)啟監(jiān)聽(tīng)器:

org.apache.shardingsphere.elasticjob.kernel.internal.listener.ListenerManager#startAllListeners

比如前面說(shuō)的這個(gè)節(jié)點(diǎn):

如果這個(gè)節(jié)點(diǎn)存在,則說(shuō)明需要重新分片,對(duì)應(yīng)的監(jiān)聽(tīng)器是這個(gè):

shardingListenerManager.start();

那么什么時(shí)候會(huì)觸發(fā)“重新分片”呢?

  • 如果分片總數(shù)變化,或作業(yè)服務(wù)器節(jié)點(diǎn)上下線或啟用/禁用,以及主節(jié)點(diǎn)選舉,會(huì)觸發(fā)設(shè)置重分片標(biāo)記
  • 作業(yè)在下次執(zhí)行時(shí)使用主節(jié)點(diǎn)重新分片,且中間不會(huì)被打斷作業(yè)執(zhí)行時(shí)不會(huì)觸發(fā)分片

所以在 shardingListenerManager 監(jiān)聽(tīng)器里面我們可以看到這兩個(gè)邏輯:

滿足條件之后,就會(huì)執(zhí)行設(shè)置重新分片標(biāo)識(shí)的代碼:

shardingService.setReshardingFlag();

該方法里面,創(chuàng)建了一個(gè)新的節(jié)點(diǎn):

這個(gè)節(jié)點(diǎn),就是它:

再比如,看看這個(gè)方法:

org.apache.shardingsphere.elasticjob.lite.internal.sharding.ShardingService#shardingIfNecessary

這個(gè)方法是做對(duì)作業(yè)進(jìn)行分片邏輯的。

對(duì)作業(yè)進(jìn)行分片,首先我們要知道當(dāng)前有哪些實(shí)例在運(yùn)行,對(duì)不對(duì)?

那怎么才能知道呢?

instances 節(jié)點(diǎn)請(qǐng)求出戰(zhàn):

shardingIfNecessary 方法的第一行邏輯就是讀取 instances 節(jié)點(diǎn)下的數(shù)據(jù):

獲取到節(jié)點(diǎn)之后,是不是就可以分片了?

理論上是這樣的,但是別著急,你看源碼里面還有這樣一個(gè)判斷:

isLeaderUntilBlock,看方法名稱也知道了,看看 Leader 節(jié)點(diǎn)是不是到位了,如果沒(méi)到位,需要等一下 Leader 選舉結(jié)束。

怎么判斷 Leader 節(jié)點(diǎn)是不是到位了?

前面文檔中說(shuō)了,就是看這個(gè)節(jié)點(diǎn)是否存在:

對(duì)應(yīng)到源碼就是這樣的:

所以這就是我前面說(shuō)的,你看源碼的時(shí)候得結(jié)合 zk 節(jié)點(diǎn)的用途一起看,知道節(jié)點(diǎn)的用途就能理解源碼里面操作節(jié)點(diǎn)的目的是什么。

然后,在這里多說(shuō)一句。

shardingIfNecessary 這個(gè)方法是讀取配置,處理分片邏輯的。

但是這個(gè)方法在每一個(gè)實(shí)例中都會(huì)運(yùn)行,豈不是每個(gè)實(shí)例都會(huì)執(zhí)行一次分片邏輯?

這樣處理的話,由于多個(gè)地方執(zhí)行分片邏輯,就需要考慮沖突和一致性的問(wèn)題,導(dǎo)致邏輯非常的復(fù)雜。

雖然這個(gè)方法每個(gè)實(shí)例都會(huì)執(zhí)行,但是其實(shí)只需要有一個(gè)實(shí)例執(zhí)行分片邏輯就行了。

那么哪個(gè)節(jié)點(diǎn)來(lái)執(zhí)行呢?

你肯定也猜到了,當(dāng)然是主節(jié)點(diǎn)來(lái)干這個(gè)事兒嘛。如果當(dāng)前節(jié)點(diǎn)不是主節(jié)點(diǎn) return 就完事了:

怎么看當(dāng)前節(jié)點(diǎn)是否是主節(jié)點(diǎn)呢?

前面已經(jīng)出現(xiàn)多次了,zk 里面記錄著的:

如果當(dāng)然節(jié)點(diǎn)是主節(jié)點(diǎn),就接著往下執(zhí)行,就是“作業(yè)分片策略”了:

目前官方提供了三個(gè)不同的分片策略:

對(duì)應(yīng)的實(shí)現(xiàn)類(lèi)是這樣的:

邏輯都非常簡(jiǎn)單,上手 Debug 兩次就能摸清楚。

建議直接把項(xiàng)目拉下來(lái),然后從測(cè)試用例入手。

好了,源碼導(dǎo)讀就到這里了。

我覺(jué)得我已經(jīng)算是告訴你關(guān)于 ElasticJob 源碼閱讀的方式和注意點(diǎn),如果你掌握到了,留言區(qū)留言“清晰”二字,支持一波。

如果你還是云里霧里的,沒(méi)事,是我的問(wèn)題。大膽的說(shuō)出來(lái):什么玩意?看求不懂。呸,垃圾作者。

如果你是第一次接觸到 ElasticJob,那么讀到這里的時(shí)候,你的內(nèi)心關(guān)于 ElasticJob 應(yīng)該還有很多疑問(wèn)以及不清楚的細(xì)節(jié)。

很好,帶著你的問(wèn)題,去翻源碼吧。

源碼之下無(wú)秘密。

下面這個(gè)環(huán)節(jié)叫做[荒腔走板],技術(shù)文章后面我偶爾會(huì)記錄、分享點(diǎn)生活相關(guān)的事情,和技術(shù)毫無(wú)關(guān)系。我知道看起來(lái)很突兀,但是我喜歡,因?yàn)檫@是一個(gè)普通博主的生活氣息。

荒腔走板

這周終于是把《長(zhǎng)安三萬(wàn)里》看了,之前一直想看,但是又被三個(gè)小時(shí)的時(shí)長(zhǎng)勸退。

我個(gè)人覺(jué)得確實(shí)是值得豆瓣高分的。

看完之后,包括看的過(guò)程中,我老是想起之前在網(wǎng)上看到的一段話,關(guān)于“一顆子彈”和“教育閉環(huán)”的。

“一顆子彈”是指在《我與地壇》看到的一段書(shū)評(píng),其內(nèi)容是:一個(gè)人十三四歲的夏天,在路上撿到一支真槍?zhuān)驗(yàn)槟晟贌o(wú)知,天不怕地不怕,他扣下扳機(jī)。沒(méi)有人死,也沒(méi)有人受傷,他認(rèn)為自己開(kāi)了空槍。后來(lái)他三十歲或者更老,走在路上聽(tīng)到背后隱隱約約的風(fēng)聲。他停下來(lái)回過(guò)身去,子彈正中眉心。

“教育閉環(huán)”是指教育具有長(zhǎng)期性和滯后性,起初你只能理解表層的道理,直到多年后的某個(gè)瞬間,你才能真正領(lǐng)悟到書(shū)上知識(shí)的真諦,此時(shí)教育的任務(wù)才算真正完成。

我小時(shí)候讀到“兩岸猿聲啼不住,輕舟已過(guò)萬(wàn)重山”的時(shí)候,重點(diǎn)總是在“兩岸猿聲”上,想象著猿猴的叫聲是什么樣的,那是一番怎樣有趣的畫(huà)面。

后來(lái),甚至可以說(shuō)是今年,這個(gè)電影上映之后,我才明白當(dāng)年讀書(shū)的時(shí)候我忽略的“輕舟已過(guò)萬(wàn)重山”背后才是有更加蜿蜒曲折、激動(dòng)人心的故事。

這句詩(shī)就是當(dāng)年的那一顆子彈,命中了馬上三十歲的我,至此,教育才算完成了閉環(huán)。

今年,讓我產(chǎn)生同樣感受的,還有當(dāng)年完全忽略的這句話:孔乙己是站著喝酒而穿長(zhǎng)衫的唯一的人穿的雖然是長(zhǎng)衫,可是又臟又破似平十多年沒(méi)有補(bǔ),也沒(méi)有洗。他對(duì)人說(shuō)話,總是滿口之乎者也叫人半懂不懂的。

此外,電影中多次提到“長(zhǎng)安”,雖然我們學(xué)的是同樣的課本,讀的是一樣的詩(shī),但是每個(gè)人對(duì)與“長(zhǎng)安”的認(rèn)知和理解是不一樣的。

現(xiàn)在提到長(zhǎng)安,我腦海中出現(xiàn)的第一個(gè)畫(huà)面永遠(yuǎn)是當(dāng)年看《河西走廊》紀(jì)錄片的時(shí)候那一個(gè)畫(huà)面。

第一集《使者》,張騫出使西域,被匈奴*九年后同隨從堂邑父出逃,繼續(xù)西行。

靠強(qiáng)大意志力穿越塔克拉瑪干沙漠和帕米爾高原,到達(dá)西域。回程再次被俘,數(shù)年后帶匈奴妻子和堂邑父又一次出逃?xùn)|歸。

十三年后,終于再次望到長(zhǎng)安城,張騫匍匐在地,長(zhǎng)跪不起。

西北望長(zhǎng)安,可憐無(wú)數(shù)山。

這一跪,看的我眼淚婆娑。

總結(jié)

以上是生活随笔為你收集整理的又被夺命连环问了!从一道关于定时任务的面试题说起。的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

黄网站免费久久 | 中文在线字幕免费观看 | 久久久精华网 | 欧美另类成人 | 国产精品乱码久久久久久1区2区 | 激情视频亚洲 | 久久精品欧美日韩精品 | www.五月天婷婷.com | 三上悠亚在线免费 | 久久av中文字幕片 | 日韩中文字幕在线看 | 亚洲精品久久久久久国 | 国产在线观看黄 | 丝袜美女视频网站 | 亚洲 欧洲 国产 日本 综合 | 亚洲精品在线观看网站 | 日韩精品中文字幕在线不卡尤物 | 国产资源在线观看 | 中文字幕久久精品一区 | 亚洲狠狠婷婷综合久久久 | 精品影院一区二区久久久 | 在线看一级片 | 国产xx视频 | 免费观看的av| 五月天综合 | 亚洲欧美日韩一区二区三区在线观看 | 亚洲最新av在线 | 在线日本看片免费人成视久网 | 五月婷婷开心中文字幕 | 欧美超碰在线 | 丁香婷婷社区 | 毛片网站在线看 | 久久久久成人精品免费播放动漫 | 日韩av免费大片 | 手机av网站 | 国产精品成人在线观看 | 亚洲人成人99网站 | 国产精品久久久久久久久久三级 | 免费福利视频网 | 亚洲九九爱 | 一区二区精品视频 | 国产视频久久 | 亚洲精品一区二区三区在线观看 | 国产香蕉97碰碰久久人人 | 亚洲国产精品推荐 | 爱情影院aqdy鲁丝片二区 | 亚洲国产精品视频在线观看 | 国产色女 | 免费观看的黄色 | 99精品视频一区二区 | 久久福利在线 | 99这里精品 | 日本久久久久久科技有限公司 | 狠狠操操网| 在线中文字母电影观看 | 中文字幕三区 | 91中文字幕网 | 午夜美女网站 | 有没有在线观看av | 不卡av在线免费观看 | 国产五十路毛片 | 8x成人在线 | 国产在线精品一区二区不卡了 | 国产精品久久久久久久久婷婷 | 久久国产三级 | 国产精品女人久久久 | 中文字幕高清免费日韩视频在线 | 国产精品综合在线观看 | 免费观看日韩 | 中文字幕免费观看全部电影 | 九九免费视频 | 最近中文字幕完整高清 | 日韩精品免费在线播放 | 国产又粗又猛又色又黄网站 | 久久久久久久久福利 | 日韩三级视频在线观看 | 九九电影在线 | 天天草天天干天天射 | 免费美女久久99 | 91精品视频免费在线观看 | 成人午夜网 | 日韩中文在线视频 | 一区二区三区中文字幕在线 | 欧美激情h | 狠狠狠色丁香综合久久天下网 | 91大片成人网 | 成年人在线免费看视频 | 看污网站 | 国产亚洲精品成人av久久ww | 欧美日韩3p | 久久 国产一区 | 国产精品18久久久久久久 | 成人av片免费观看app下载 | 国产在线精品国自产拍影院 | 99热.com| 在线免费观看涩涩 | 久久精品一区二区三区国产主播 | 国产视 | 99热这里只有精品免费 | 久久国产精品小视频 | 国产精品福利视频 | 99精彩视频在线观看免费 | 亚洲永久精品国产 | 国产在线观看91 | 91在线视频精品 | 国产一区二区精品久久 | 黄色av大片| 婷久久 | 人人看人人做人人澡 | 久久伊人精品天天 | 美女久久久久久久久久 | 国产精品18久久久 | 中文字幕在线播放av | 精品九九九 | 国产九九热视频 | 久久精品3 | 午夜天天操| 日韩免费观看一区二区 | 成人a毛片 | 五月丁香 | 国产九九热视频 | 久久人人爽人人片 | 精品久久久影院 | 99精品视频在线观看免费 | 伊色综合久久之综合久久 | 免费三级影片 | 人人干97 | 国产一区二区精品 | 免费99精品国产自在在线 | 六月丁香婷婷网 | 国产精国产精品 | 96看片| 国产69精品久久99的直播节目 | 欧美先锋影音 | 麻豆国产露脸在线观看 | 午夜美女视频 | 久久成人午夜视频 | 正在播放久久 | 日日夜夜精品免费视频 | 国产精品刺激对白麻豆99 | 丁香激情综合国产 | 中文字幕电影在线 | 激情视频二区 | 最近在线中文字幕 | 日韩精品中文字幕在线不卡尤物 | 久久tv| 九九九九九九精品任你躁 | 黄色中文字幕在线 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 中文字幕超清在线免费 | 欧美精品久久久久性色 | 有码视频在线观看 | 玖玖999| 伊人亚洲精品 | 视频在线观看入口黄最新永久免费国产 | 天天爱天天插 | 国产一区视频在线观看免费 | 久久免费看av | 中文字幕在线播放视频 | 午夜精品久久久久久中宇69 | 超碰在线人人艹 | 91亚洲激情| 欧洲精品在线视频 | 国产人成一区二区三区影院 | 深夜激情影院 | 在线免费成人 | 久久婷婷开心 | 国产精品久久久久久一区二区 | 91丨九色丨丝袜 | 久久小视频 | 一级黄毛片 | 成人精品99 | 欧美一级性视频 | 99热在线精品观看 | 久久精品视频4 | 日韩综合视频在线观看 | 日韩在线三区 | 亚洲在线视频免费观看 | 在线播放视频一区 | 欧美精品久久久久久久亚洲调教 | 亚州欧美精品 | 91麻豆精品国产自产在线游戏 | 国产精品久久久久久久久蜜臀 | 五月婷婷免费 | avav片| 色人久久 | 99精品在线视频观看 | 五月天综合网站 | 欧美极品xxx | 欧美日产一区 | 国产不卡一二三区 | 久久久久免费精品国产 | 国产精品一区免费观看 | 久久综合给合久久狠狠色 | 免费在线观看不卡av | 久久免费视频观看 | 在线精品亚洲一区二区 | 国产精品18久久久久vr手机版特色 | 黄色视屏av | 日韩最新在线视频 | japanese黑人亚洲人4k | 四虎影视成人精品国库在线观看 | 成人久久久久久久久 | 色综合天天综合在线视频 | 91精品国产一区二区在线观看 | 人人操日日干 | 综合色在线观看 | 日本特黄一级片 | 999一区二区三区 | 日韩中文在线电影 | 天天爱天天爽 | 99精品视频在线播放免费 | 黄色电影网站在线观看 | 亚洲国产中文在线观看 | 天天综合在线观看 | 在线观看岛国 | 国产日本亚洲 | 久久免费视频网 | 一本一道波多野毛片中文在线 | 中文字幕一区二区三区在线观看 | 人人爽人人看 | 免费黄色a级毛片 | 色偷偷中文字幕 | a级片久久 | 99av在线视频 | 免费在线观看av的网站 | 97在线播放视频 | 91精品国产乱码久久 | 国产123区在线观看 国产精品麻豆91 | 成年人在线免费看视频 | 黄色影院在线免费观看 | 色综合久久88色综合天天人守婷 | 日韩av电影中文字幕 | 天天在线免费视频 | 在线观看视频一区二区三区 | 丁香久久五月 | 97国产在线播放 | 中文视频在线 | 国产剧情一区二区在线观看 | 久久综合天天 | 国产亚洲婷婷免费 | 一区久久久 | 久久免费播放视频 | 中文字幕大全 | 91久久久久久久一区二区 | 久草视频免费 | 欧美日韩在线免费观看视频 | 在线免费视频a | 国产精品完整版 | 免费91麻豆精品国产自产在线观看 | 欧美在线观看视频免费 | 久久私人影院 | 久久免费观看少妇a级毛片 久久久久成人免费 | 日本黄色免费大片 | 国产视频黄 | 国产视频精选在线 | 波多野结衣视频一区二区三区 | 久久久久免费视频 | 碰碰影院 | 久久久久久久久久久精 | a'aaa级片在线观看 | 国产在线毛片 | 在线看国产视频 | 久久9视频 | 亚洲日b视频 | 日日夜夜天天干 | 亚洲综合射| 99自拍视频在线观看 | 成人亚洲欧美 | 久久久久免费视频 | 亚洲欧美日本一区二区三区 | 成人福利在线观看 | 最新中文字幕在线资源 | 成年人黄色免费网站 | 国产五月婷婷 | 免费在线国产视频 | 免费黄色a网站 | 精品一区二区在线免费观看 | 久久视频国产 | 国产高清视频在线免费观看 | 96看片| 波多野结衣视频在线 | 欧洲在线免费视频 | 97网| 亚洲精品美女 | 韩国精品视频在线观看 | 手机版av在线| 干天天| 久久亚洲综合色 | 成人亚洲精品国产www | 久久久久五月天 | 丁香激情视频 | 成年人看片网站 | 日韩午夜在线观看 | 国产精品国产亚洲精品看不卡 | 91成人免费在线 | 国产成人精品一区二区三区福利 | 最近中文字幕mv | 国产亚洲亚洲 | 亚洲精品中文在线资源 | 亚洲天天摸日日摸天天欢 | 久久一区二区三区国产精品 | 四虎在线免费观看 | 夜色资源站国产www在线视频 | 91av视频在线免费观看 | 91av播放| 亚洲精品午夜视频 | 国产一区二区三精品久久久无广告 | 天天插天天射 | 亚洲高清国产视频 | 天天干婷婷 | 久久电影色 | 91中文字幕网| 婷婷色网址| 欧美坐爱视频 | 日韩大片在线免费观看 | 摸bbb搡bbb搡bbbb| 91资源在线 | 中文字幕乱码视频 | 久久久久久毛片精品免费不卡 | 国产精品久久久久久久久搜平片 | www.五月天婷婷.com | 91在线影视 | 中文一区在线 | 黄色一级大片在线观看 | 日韩美在线 | 午夜精品一二三区 | www.香蕉视频 | 国产精品一区一区三区 | 99久久激情视频 | 精品久久一 | 久久综合色影院 | 日本乱码在线 | 日韩高清毛片 | 久久国产精品久久w女人spa | 成人在线视频在线观看 | 99免费看片| 国产手机精品视频 | 欧美一区二区三区特黄 | 成人在线视频你懂的 | 中文有码在线视频 | 2021国产精品视频 | 国产高清不卡一区二区三区 | 久久久影片 | 欧美另类成人 | 97在线公开视频 | 欧美特一级片 | 久久国产欧美日韩精品 | 日韩在线观看视频网站 | 韩日精品在线观看 | 在线播放视频一区 | 成人av片免费观看app下载 | 国产一区国产二区在线观看 | 久久97久久97精品免视看 | 国产美女视频免费 | 欧美伦理电影一区二区 | 国产成人综 | 女人魂免费观看 | 天天干 天天摸 天天操 | 久热久草在线 | 一区二区精品久久 | 97在线播放| www.国产高清 | 五月天堂网| 激情五月婷婷网 | 视频91| 日韩一级电影网站 | 国产欧美精品一区二区三区四区 | 日日夜精品 | 在线国产99 | 中文字幕国产视频 | 久久字幕网 | 在线视频久 | 狠狠色噜噜狠狠狠狠2022 | 日本黄色一级电影 | 99久在线精品99re8热视频 | 五月婷婷操| 亚洲专区视频在线观看 | 欧美色图狠狠干 | 丁香av | 国产黄在线观看 | 久久久久久久久久久国产精品 | 在线天堂日本 | 亚洲国产中文在线 | 国产一区二区三区午夜 | 黄色成人av | 91插插插免费视频 | 中文视频在线看 | 在线播放 日韩专区 | 欧美成人久久 | 人人玩人人添人人 | www看片网站 | 亚洲色综合 | 国产中文字幕国产 | 51久久成人国产精品麻豆 | 国产精品毛片一区视频 | 欧美最猛性xxxx| 国产免费影院 | 欧美a级片免费看 | 天天躁天天躁天天躁婷 | 亚洲精品88欧美一区二区 | 久久综合狠狠综合 | 国产精品久久久久久久久久尿 | 国产成人黄色av | 成人黄色av网站 | 91九色成人 | 欧美一区免费在线观看 | 狠狠色狠狠色综合日日小说 | 伊人天堂久久 | www色网站| 久久久久久久久久久久亚洲 | 天天操天天拍 | 国产麻豆电影 | www久久com| 久久不射电影院 | 亚洲国产中文字幕在线观看 | 久久伊人免费视频 | www日韩在线 | 国产人成在线观看 | 国产激情小视频在线观看 | 日韩高清不卡一区二区三区 | www.com在线观看| 九九有精品 | 9热精品| 999视频精品 | 国产精品免费观看国产网曝瓜 | 午夜精品福利一区二区 | 91久久久国产精品 | 一区二区三区在线不卡 | 粉嫩av一区二区三区四区在线观看 | 久久只有精品 | 久久国产精品久久久 | 免费网站在线 | 国产小视频在线免费观看视频 | 精品国产一区二区三区久久久蜜月 | 亚洲成人国产 | 国产精品一区免费看8c0m | 国产精品二区在线观看 | 久久久久久久久久网站 | 国产美女视频网站 | 丁香在线观看完整电影视频 | 综合网五月天 | 丁香导航| 久久久久久久久久网站 | www.国产精品 | 精品美女国产在线 | 日韩成人精品一区二区 | 婷婷精品在线 | 在线 欧美 日韩 | 国产精品成久久久久 | 国产一区二区手机在线观看 | 久久av一区二区三区亚洲 | 97在线视频网站 | www最近高清中文国语在线观看 | 欧美日韩精品电影 | 狠狠躁日日躁夜夜躁av | 久久久精品99 | 成人av免费在线 | 成年人免费观看国产 | av在线免费不卡 | 中文字幕黄色网 | 日韩在线精品一区 | 日韩视频一区二区 | 亚洲精品tv久久久久久久久久 | 麻豆视频免费在线播放 | 国产精品99久久久精品 | 日韩av电影手机在线观看 | 天天干视频在线 | 97超碰色 | 亚洲电影av在线 | 成人动漫一区二区 | 亚洲日本va午夜在线影院 | 日韩免费三区 | 国产精品成人一区二区三区吃奶 | 色久av | 精品福利视频在线 | 九九精品在线观看 | 国产视频在线观看一区 | 色婷婷88av视频一二三区 | 激情av资源 | 精品视频成人 | 2019中文 | 久久久国产成人 | www日韩| 六月激情久久 | 日韩视频在线不卡 | 国产一区二区免费在线观看 | 毛片精品免费在线观看 | 制服丝袜一区二区 | 热久久视久久精品18亚洲精品 | 97国产精品久久 | 日韩毛片在线免费观看 | 欧美一二区视频 | 成人网中文字幕 | 美女天天操 | 久久成人国产精品免费软件 | 精品中文字幕在线观看 | 麻豆91精品91久久久 | www.av免费观看 | 激情五月***国产精品 | 天堂在线视频中文网 | 国产精品久久电影网 | 碰超在线97人人 | 国产成人高清在线 | 中文视频一区二区 | 看国产黄色大片 | 亚洲精品在线国产 | 欧美久久99| 色婷婷导航 | avcom在线| 国产精品久久久久久久久久久久久久 | 色婷婷综合久久久久中文字幕1 | 91精品免费在线观看 | 亚洲精品在线看 | 91精品啪在线观看国产 | 成片人卡1卡2卡3手机免费看 | 欧美视频一区二 | 久久久久欠精品国产毛片国产毛生 | 91麻豆精品久久久久久 | 成人av在线亚洲 | 91桃色免费视频 | 国产精品久久久久免费 | 国产精品尤物 | 在线免费观看视频a | 欧美性超爽 | 黄av免费 | 亚洲综合在线五月 | 麻豆高清免费国产一区 | 国产日韩在线视频 | 久久久黄视频 | 久久久国产一区二区 | 色综合天 | 久久综合欧美精品亚洲一区 | 久久综合九色综合欧美狠狠 | 成人毛片a| av在线专区 | 一级黄色片在线免费观看 | 成年美女黄网站色大片免费看 | 久久久天天操 | 欧美日韩中文视频 | 成人免费在线观看电影 | 麻豆视频在线播放 | av播放在线 | 欧美日韩视频网站 | 一区二区三区在线观看免费 | 欧美在线视频一区二区三区 | 久久久久国产精品午夜一区 | 人人添人人澡 | 久草国产在线观看 | 美女免费电影 | 在线免费黄色毛片 | 在线观看视频91 | 91在线视频免费 | 免费看黄的视频 | 超碰人人草人人 | 日韩免费播放 | 欧美日韩国产一区二区三区在线观看 | 99视频在线精品国自产拍免费观看 | av黄色免费网站 | 久久精品—区二区三区 | 午夜精品三区 | 青青草在久久免费久久免费 | 91成人网在线观看 | 国产黄在线观看 | 国产大陆亚洲精品国产 | 九九九热精品 | 欧美日本中文字幕 | 日韩久久精品一区二区三区 | 免费看的黄色 | 精品一区二区久久久久久久网站 | 中文字幕在线色 | 中文字幕乱在线伦视频中文字幕乱码在线 | 日韩在线观看你懂的 | 五月婷婷伊人网 | 欧美99热| 国内精品中文字幕 | 成年人看片 | 在线观看一 | 精品美女久久久久 | 字幕网资源站中文字幕 | 伊在线视频 | 中文字幕在线影院 | 日韩精品免费一区二区在线观看 | 日p视频在线观看 | 91大神精品视频 | 九九影视理伦片 | 亚洲精品视频在线观看免费视频 | 国产99久久久精品 | 色婷婷综合视频在线观看 | 色天天中文 | 在线黄网站| 国产女人18毛片水真多18精品 | 欧美日韩国产区 | 99精品热视频只有精品10 | 九草视频在线 | 国产免费一区二区三区最新6 | 日韩一区二区免费播放 | 九九免费精品 | 久草热视频 | 四虎欧美 | 成人一级片视频 | 欧美日韩精品影院 | 中文字幕在线观 | 97超碰在线久草超碰在线观看 | 男女拍拍免费视频 | 国产精品免费一区二区三区 | 国产福利av | 成人av电影免费观看 | 操操综合 | 六月丁香激情综合色啪小说 | 欧美一二三专区 | 天天综合网天天综合色 | 日本爱爱片 | 91免费看黄色 | 精品国产乱码久久久久久久 | 国产又粗又猛又色又黄网站 | 夜夜躁狠狠躁日日躁视频黑人 | 国产精品av久久久久久无 | 欧美婷婷色| 色婷婷视频在线观看 | 麻豆影视在线观看 | 精品人妖videos欧美人妖 | 波多野结衣电影久久 | 国产精品av久久久久久无 | 99热99re6国产在线播放 | 毛片一区二区 | a视频免费 | 久久a国产 | 国产精品一区二区你懂的 | 在线观看你懂的网站 | 精品美女久久久久 | a级一a一级在线观看 | 国产成人777777 | 久久视频免费在线观看 | 国产欧美日韩视频 | 国产99亚洲 | 国产一区二区在线观看视频 | 欧美人体xx | 日韩欧美亚州 | 日韩在线观看视频在线 | 成人精品视频久久久久 | 激情网在线观看 | 日韩精品免费一区二区在线观看 | 久久国产麻豆 | 久久国产视频网站 | 久久96国产精品久久99软件 | 在线观看视频h | 欧美精品久久久久久久免费 | 国产亚洲精品中文字幕 | 国产69久久精品成人看 | 色香蕉视频 | 一区二区三区韩国免费中文网站 | 懂色av一区二区三区蜜臀 | 欧美性久久久 | 97人人模人人爽人人喊网 | 久久人人爽人人爽人人 | 久草在线观看视频免费 | 九九有精品 | 亚洲 在线 | 国产精品字幕 | 91污污视频在线观看 | 天天操福利视频 | 99热.com| 国产不卡精品视频 | 97人人澡人人添人人爽超碰 | 91精品国产99久久久久久久 | 中文字幕色站 | wwwav视频| 亚洲综合精品视频 | 日韩特级黄色片 | 人人看人人爱 | 欧美成人高清 | 国产精品99久久久久久小说 | 精品国产aⅴ麻豆 | 中文字幕高清免费日韩视频在线 | 黄污网站在线观看 | 日本久久久久久 | 亚洲成人一区 | 国产不卡精品视频 | 色姑娘综合网 | 96av麻豆蜜桃一区二区 | 久久国产一区二区三区 | 国产精品一区二区免费看 | 中文字幕av在线电影 | 九九九九免费视频 | 中文字幕一区二区在线观看 | 亚洲专区路线二 | 亚洲区精品 | 国产福利免费在线观看 | 夜夜操天天摸 | 色噜噜日韩精品一区二区三区视频 | 国产精品久久久久久久99 | 成人久久视频 | av中文字幕不卡 | 黄色com| 韩日色视频 | 特黄特色特刺激视频免费播放 | avv天堂| 波多野结衣亚洲一区二区 | 亚洲精品免费观看视频 | 日本中文字幕久久 | 一区二区三区在线电影 | av播放在线 | 午夜精品久久久久99热app | 午夜久久福利 | 国产精品一区二区在线免费观看 | 国产午夜精品一区二区三区在线观看 | 久久久久国 | 日本精a在线观看 | 狠狠色狠狠色综合日日小说 | 国产精品99免视看9 国产精品毛片一区视频 | 久久国产精品成人免费浪潮 | 天天干夜夜爽 | 免费看av片网站 | 亚洲精品视频在线看 | 亚洲国产成人在线 | 丁香六月网 | 亚洲h在线播放在线观看h | 精品久久久免费视频 | 国产高清成人 | 中文有码在线 | 中文字幕乱码在线播放 | 国产精品二区在线 | 精品色999 | 在线天堂日本 | 91黄色在线看 | 成人午夜网址 | 亚洲国产999| 国产在线欧美在线 | 五月婷婷香蕉 | 国产高清精 | 国产精品不卡在线 | 欧美经典久久 | 96亚洲精品久久 | 成人午夜网 | 久久艹在线 | 欧美一区三区四区 | 一区二区在线不卡 | 国产午夜精品免费一区二区三区视频 | 国产黄色一级片在线 | 人人爽人人爽人人片av免 | 福利二区视频 | 国产无遮挡又黄又爽馒头漫画 | 久久精品国产一区二区三 | 久久不卡电影 | 狠狠激情中文字幕 | 久久久黄视频 | 精品久久久久久国产91 | 久久毛片视频 | 曰本三级在线 | 五月激情片| 六月激情 | 在线视频婷婷 | 久久精品99久久久久久 | 天天操天天射天天爱 | 99精品欧美一区二区蜜桃免费 | 日韩精品视频免费看 | 亚洲精品999 | 国产视频1区2区3区 久久夜视频 | 亚洲成av人片在线观看无 | 中文字幕在线免费观看 | 久久久五月婷婷 | 狠狠色伊人亚洲综合网站野外 | 成人精品视频久久久久 | 国产精品九九热 | 激情久久五月 | 人人爱爱人人 | 成人免费一区二区三区在线观看 | 欧美另类一二三四区 | 久久久在线观看 | 欧美污污网站 | 久久久男人的天堂 | 免费观看成年人视频 | 精品亚洲免费视频 | 日韩欧美一区二区三区视频 | 91在线看视频免费 | 久久躁日日躁aaaaxxxx | 久久久久国产精品厨房 | 亚洲色图 校园春色 | 日韩电影一区二区在线观看 | 2024av| 美女黄频免费 | www久久精品 | 国产一区二区高清视频 | 午夜视频在线观看欧美 | 国产九九热视频 | 天天插日日射 | 波多野结衣精品视频 | 在线免费成人 | 色综合天天综合在线视频 | 五月天婷亚洲天综合网鲁鲁鲁 | 国产福利不卡视频 | 国产精品视频99 | 免费观看久久久 | 国外av在线 | 久久久久久久久久国产精品 | 亚洲国产精久久久久久久 | 婷婷六月中文字幕 | 97视频网站| 亚洲电影黄色 | 在线成人观看 | 插婷婷 | 五月开心六月伊人色婷婷 | av中文字幕网 | 国产成人精品av在线 | av福利在线导航 | 99精品在线看 | 国产黄a三级 | 国产偷v国产偷∨精品视频 在线草 | 国产精品99久久久久久宅男 | 亚洲极色 | 亚洲日本在线一区 | 日日射天天射 | 欧美极品在线播放 | 九九视频免费 | 国产亚洲精品v | 亚洲精品网址在线观看 | 91精品国自产在线 | 日韩动态视频 | 天天干,天天干 | 国产99中文字幕 | 福利一区在线视频 | 国产精品免费久久久久影院仙踪林 | 亚洲成人网在线 | 婷婷五情天综123 | 久久99网| 黄色中文字幕在线 | 日p视频| 友田真希av| 久久久久www | 国产精品久久久久久久久久妇女 | 久久综合九色 | 九色激情网 | 91九色自拍 | 国产精品美女毛片真酒店 | 久久综合狠狠综合久久激情 | 狠狠操操操| 探花视频在线版播放免费观看 | 91看片淫黄大片一级在线观看 | 日韩精品 在线视频 | 五月天av在线 | 九九精品在线观看 | www.午夜色.com | 丁香六月婷婷激情 | 欧美日韩高清一区 | 日本深夜福利视频 | 亚洲精色 | 免费观看一级一片 | 999热视频| 狠狠狠色丁香综合久久天下网 | 青草视频在线 | 久久理论电影 | 亚洲精品国偷拍自产在线观看 | 一级黄毛片 | 亚洲一级二级三级 | 成人a大片| 最近中文字幕高清字幕在线视频 | 黄色av免费电影 | 国产精品毛片一区视频 | 国产精品18久久久久久久久久久久 | 99在线精品免费视频九九视 | 成人黄色av免费在线观看 | 日本中文一区二区 | 国内揄拍国内精品 | 97香蕉久久超级碰碰高清版 | 一区二区三区久久 | 天天操夜夜拍 | 亚洲每日更新 | 99热在线免费观看 | 亚洲精品91天天久久人人 | 奇米网网址 | 色视频国产直接看 | 香蕉视频网站在线观看 | 99热这里只有精品久久 | 毛片a级片| 天天做天天爱天天爽综合网 | 国产精品原创在线 | 久久一区国产 | 麻花豆传媒mv在线观看网站 | 日本在线观看一区 | 国产91精品一区二区麻豆亚洲 | 国产高清免费av | 免费观看成人 | 一级黄色片在线播放 | 亚洲国产精品资源 | 最新日韩在线观看 | 99视频精品全国免费 | 一区二区视频在线看 | 在线观看国产麻豆 | 久草在线手机视频 | 91久久国产自产拍夜夜嗨 | 伊人天天色 | 午夜私人影院久久久久 | 国产亚洲精品久久久久久无几年桃 | av观看免费在线 | 日韩欧美高清在线 | 特级毛片网 | 亚洲色图 校园春色 | 欧美激情亚洲综合 | 久久成电影 | 九九久久婷婷 | 久久五月激情 | 久久视频这里有久久精品视频11 | 在线观看国产www | 国产一区二区精品91 | 丁香婷婷综合激情 | 日本mv大片欧洲mv大片 | 中国一级特黄毛片大片久久 | 国产一级淫片免费看 | 99久久精品免费看国产一区二区三区 | 日本中文不卡 | 99精品在线视频观看 | 国产小视频在线看 | 国产成人在线观看免费 | 91av免费观看 | 久久五月婷婷综合 | 亚洲国产精品传媒在线观看 | 久久国产区 | 日日干 天天干 | 91精品国产自产老师啪 | 国产剧情一区二区在线观看 | 在线播放亚洲 | 亚洲精品99久久久久中文字幕 | 狠狠色丁香婷婷 | 久久国产精品免费一区二区三区 | 嫩草伊人久久精品少妇av | 久久五月婷婷综合 | 中文字幕国产一区 | 久草在线中文888 | 成人在线免费看 | 伊人狠狠色 | 久久人人97超碰国产公开结果 | 中文字幕 国产精品 | 中文字幕在线播放第一页 | 亚洲女人天堂成人av在线 | 日韩一级理论片 | 免费看三级 | 国产不卡一区二区视频 | 成人免费观看视频网站 | 国产精品一区二区美女视频免费看 | 一区二区三区免费看 | 精品电影一区 | 91视视频在线直接观看在线看网页在线看 | japanese黑人亚洲人4k | 日韩av影视在线 | 日韩精品在线免费观看 | 最新成人av | 亚洲视频999 | 五月导航 | 国产亚洲欧美精品久久久久久 | 日韩网页 | 午夜精品一区二区三区在线播放 | 正在播放五月婷婷狠狠干 | 五月婷婷电影网 | 精品一区免费 | 国产福利精品在线观看 | 亚洲免费av在线播放 | 一区二区三区在线电影 | 色综合久久久久综合体桃花网 | 久久久久久久久久久成人 | 久久第四色 | 亚洲欧美激情精品一区二区 | 欧美日韩在线观看一区二区 | 久久午夜羞羞影院 | 国产又黄又爽又猛视频日本 | 国产精品一区二区吃奶在线观看 | 欧美一区日韩精品 | 欧美日韩精品网站 | 久久在线视频精品 | 在线观看国产区 | 三级av中文字幕 | 日本公乱妇视频 | 久久精品欧美视频 | 亚洲一区av | 黄色电影网站在线观看 | 日韩高清二区 | 日本在线视频网址 | 国产一区二区高清 | 国产一区二区在线影院 | 久久婷婷综合激情 | 免费av视屏 | 91精品免费在线 | 久久精品中文 | 久久久久久免费毛片精品 | 成人av在线播放网站 | 国产精品9区 | 国产精品欧美在线 | 最新av中文字幕 | 日韩精品高清视频 | 久草在线观看资源 | 国产精品va在线观看入 | 欧美日韩后 | 久久久久亚洲精品国产 | 国产精品久久久久久久久搜平片 | 国产成人av在线影院 | 久久国产欧美日韩精品 | 国产成人精品一区二区在线观看 | 国产精品久久在线观看 |