亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

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

基于ZooKeeper的在線狀態(tài)漂移檢測與選主實現(xiàn)

基于ZooKeeper的在線狀態(tài)漂移檢測與選主實現(xiàn) 1. 先聊清楚微信個人號多設(shè)備場景下的“在線狀態(tài)漂移”是什么1.1 多個實例同時工作為什么會產(chǎn)生狀態(tài)分歧如果你搭過微信個人號相關(guān)的中臺服務(wù)一定遇過這種奇怪現(xiàn)象后臺明明顯示賬號在線消息流水也正??蓸I(yè)務(wù)側(cè)就是反饋漏消息、重復(fù)消息。查到最后往往是同一個號被兩個進程同時管理著A 進程剛發(fā)完一條消息B 進程又把它頂下線微信端的在線狀態(tài)像拉鋸一樣來回橫跳。我們內(nèi)部把這種現(xiàn)象叫做“在線狀態(tài)漂移”——主控權(quán)從一個實例轉(zhuǎn)移到另一個實例但沒有經(jīng)過雙方確認(rèn)誰都覺得當(dāng)前自己才有資格操作這個賬號。這種場景在帶多設(shè)備、多進程的 IM 個人號管理系統(tǒng)里非常常見客服工作臺、消息聚合、自動化備份都可能讓同一套憑據(jù)同時暴露給多個節(jié)點。理想情況下同一時間只能有一個實例作為“主控”與微信服務(wù)端保持主會話其他實例只做只讀監(jiān)聽或待命。可一旦節(jié)點宕機、網(wǎng)絡(luò)抖動、進程僵死主控身份就需要立刻交給另一個實例。關(guān)鍵問題是怎么讓大家同時感知到“舊主已失效”并且在新舊交替時不讓消息發(fā)送錯亂。這就是在線狀態(tài)漂移檢測要解決的核心矛盾。1.2 數(shù)據(jù)庫里放一個在線標(biāo)志位為什么靠不住有人會想在數(shù)據(jù)庫建一張狀態(tài)表online_holdernode_aA 不行了就改成node_b不就行了嗎我一開始也是這么干的后來發(fā)現(xiàn)這條路走不通。第一數(shù)據(jù)庫里存的只是一個靜態(tài)快照。進程是被 kill -9 干掉的數(shù)據(jù)庫不會自動把狀態(tài)改成“離線”只能靠額外的定時任務(wù)去心跳清理而心跳本身又會引入新的超時判斷問題。第二多節(jié)點同時讀寫這張表時時序很難控制。A 網(wǎng)絡(luò)抖動恢復(fù)后可能并不知道 B 已經(jīng)把狀態(tài)改成自己了它只要再往數(shù)據(jù)庫寫一條online_holdernode_a狀態(tài)就又分裂了。第三數(shù)據(jù)庫的更新事務(wù)沒法保障“誰真正持有網(wǎng)絡(luò)會話”這個事實。會話是長連接數(shù)據(jù)庫狀態(tài)只是一個弱信號兩者沒有強綁定關(guān)系最終一定會出現(xiàn)狀態(tài)與事實脫節(jié)。所以我們需要的是一個具備“會話語義”的協(xié)調(diào)組件把進程是否存在、會話是否有效、主控權(quán)是否被持有這幾件事天然綁在一起。ZooKeeper 的臨時節(jié)點正好干這個。2. 選型思考為什么是 ZooKeeper而不是 Redis 或 MySQL2.1 臨時節(jié)點天然就是在線狀態(tài)的“心跳探針”ZooKeeper 里有一種節(jié)點叫臨時節(jié)點Ephemeral Node它和客戶端的 ZK 會話綁定。客戶端創(chuàng)建臨時節(jié)點之后如果連接斷開并且超過會話超時時間ZooKeeper 服務(wù)端會主動把這個節(jié)點刪除。進程被強殺、機器掉電、長時間網(wǎng)絡(luò)隔離都會觸發(fā)同樣的結(jié)果節(jié)點自動消失。這個特性幾乎是給“在線狀態(tài)漂移檢測”量身定做的。我們不需要寫清理邏輯去移除僵尸標(biāo)記也不需要等業(yè)務(wù)方手動上報離線。ZK 服務(wù)端會替我們做這件事。把“當(dāng)前主控權(quán)”放在一個臨時節(jié)點上等于告訴所有節(jié)點誰能在 ZK 里保住這個節(jié)點誰才有資格繼續(xù)對外操作。這里有個容易忽略的細(xì)節(jié)臨時節(jié)點刪除的時機是“會話超時”不是“連接斷開”??蛻舳撕?ZooKeeper 之間的連接斷開后會話不會立刻失效ZK 服務(wù)端會等待一個會話超時時間期間如果網(wǎng)絡(luò)恢復(fù)客戶端可以重連并繼續(xù)使用同一個會話。這個超時時間是可以配置的后面我會專門講如何避免因為參數(shù)設(shè)置不當(dāng)導(dǎo)致誤漂移。2.2 Watch 機制讓狀態(tài)變化能夠主動通知所有候選節(jié)點ZooKeeper 的另一個關(guān)鍵能力是 Watch監(jiān)聽??蛻舳丝梢詫δ硞€節(jié)點設(shè)置監(jiān)聽節(jié)點創(chuàng)建、刪除、數(shù)據(jù)變化、子節(jié)點變化時ZK 會向客戶端推送一個事件。這樣選主和漂移檢測就可以從“定時輪詢”變成“事件驅(qū)動”。比如每個候選節(jié)點都盯著當(dāng)前active節(jié)點一旦active節(jié)點消失所有候選中至少有一個會收到通知馬上發(fā)起新一輪選舉。如果換成數(shù)據(jù)庫輪詢就得每隔幾百毫秒查一次狀態(tài)表既慢又費資源而且響應(yīng)速度還取決于輪詢間隔。當(dāng)然Watch 是“一次性”的。事件觸發(fā)后監(jiān)聽自動失效如果業(yè)務(wù)代碼沒有重新注冊 Watch下一次變化就感知不到了。這是一個非常經(jīng)典的坑后面的實操部分我會給出應(yīng)對方案。2.3 和 Redis / MySQL / etcd 放在一起看選型時我也對比過其他方案簡單列個表方案會話綁定能力事件通知運維成本適合場景ZooKeeper有臨時節(jié)點綁定會話節(jié)點隨會話失效自動刪除原生 Watch注冊簡單偏高集群需要獨立維護分布式協(xié)調(diào)、選主、分布式鎖Redis沒有會話概念需要自己用 TTL 模擬可用 Pub/Sub 或 Stream但語義弱低簡單緩存鎖、短任務(wù)互斥MySQL無狀態(tài)全靠業(yè)務(wù)寫無只能輪詢低業(yè)務(wù)狀態(tài)存儲etcd有 Lease可綁定節(jié)點續(xù)期有 WatchgRPC 生態(tài)高云原生場景下的選主配置如果你團隊里已經(jīng)有成熟的 ZooKeeper 集群用 ZK 做在線狀態(tài)漂移檢測和選主是最順手的。如果沒運維條件etcd 也完全可以做類似的事但本文重點講 ZooKeeper 的實現(xiàn)思路。3. 在線狀態(tài)漂移檢測與選主的整體設(shè)計3.1 節(jié)點模型把賬號狀態(tài)“立”在 ZooKeeper 上我最終采用的節(jié)點結(jié)構(gòu)大概是這樣/wx-accounts /{wxid} /members /m-0000000001 /m-0000000002 /active三層節(jié)點的含義/wx-accounts/{wxid}是持久節(jié)點代表一個微信個人號。/wx-accounts/{wxid}/members是持久節(jié)點用戶存放所有候選實例。/members/m-0000000001是臨時順序節(jié)點。每個實例啟動時都在這里創(chuàng)建一個節(jié)點節(jié)點序號由 ZooKeeper 自動遞增。/wx-accounts/{wxid}/active是臨時節(jié)點由當(dāng)前主控實例創(chuàng)建。誰創(chuàng)建成功了誰就是主控。active節(jié)點的數(shù)據(jù)里我習(xí)慣放一段 JSON{ seq: 1, instanceId: host-a-001, sessionId: 1234567890, activeSince: 1699999999000 }seq就是候選節(jié)點的序號instanceId是本實例的唯一標(biāo)識sessionId是 ZK 會話 ID。這三個字段一起決定“當(dāng)前主控是誰”以及“是否發(fā)生了狀態(tài)漂移”。用臨時順序節(jié)點而不是隨機節(jié)點名是有意的節(jié)點序號天然給出了候選者的繼任順序先啟動的實例序號小更容易成為主控中途掛掉后下一個節(jié)點自動頂上不需要再做復(fù)雜的優(yōu)先級排序。3.2 選主流程順序節(jié)點 最小序號 Watch 前驅(qū)有了上面的節(jié)點模型選主流程就非常清晰了實例啟動連接 ZooKeeper。確保/wx-accounts/{wxid}和/members持久節(jié)點存在。在/members下創(chuàng)建臨時順序節(jié)點拿到自己的seq。讀取/members下所有子節(jié)點按序號排序。如果自己的序號是最小的嘗試創(chuàng)建/active臨時節(jié)點。創(chuàng)建成功就是主控實例失敗說明已經(jīng)有主控存在那就監(jiān)聽/active。如果自己的序號不是最小那么監(jiān)聽“緊挨著自己前面的那個節(jié)點”。比如當(dāng)前序是 2就監(jiān)聽序 1 的節(jié)點。當(dāng)前驅(qū)節(jié)點消失時說明前面的候選退出了立刻重新讀取子節(jié)點重新執(zhí)行選舉。這里的關(guān)鍵優(yōu)化是“只監(jiān)聽前驅(qū)節(jié)點”。如果所有候選節(jié)點都監(jiān)聽/active一旦active刪除所有節(jié)點都會收到事件但只有一個能創(chuàng)建成功其他節(jié)點白白競爭會產(chǎn)生驚群效應(yīng)。通過監(jiān)聽前驅(qū)節(jié)點ZooKeeper 天然給候選人排了隊前面的掛了后面的頂上整個過程非常安靜。選舉完成后非主控節(jié)點還要繼續(xù)監(jiān)聽/active節(jié)點因為如果主控實例進程沒崩但是active節(jié)點被人為刪除或數(shù)據(jù)被改也需要觸發(fā)重新評估。3.3 漂移檢測規(guī)則序號、會話、持有者三者缺一不可在線狀態(tài)漂移檢測的核心不是簡單判斷“有沒有主控”而是判斷“當(dāng)前主控是不是我”。我總結(jié)了三個信號信號一我的候選節(jié)點在/members下是否存在。如果不存在說明我的 ZK 會話可能已經(jīng)過期我失去競選資格。信號二/active節(jié)點是否存在。不存在說明當(dāng)前沒有主控需要立即選舉。信號三/active節(jié)點里的數(shù)據(jù)是不是我。如果節(jié)點存在但instanceId、sessionId、seq和我本地不一致說明主控權(quán)已經(jīng)漂移到了別的實例我必須立刻降級。把這三個信號組合起來看候選節(jié)點存在active 節(jié)點存在active 持有者是我判定結(jié)果是是是正常主控繼續(xù)工作是是否候選/待命等待 active 消失是否否沒有主控立即參與選舉否任意任意本實例已失去資格重新登記節(jié)點連接斷開任意任意暫停一切業(yè)務(wù)操作等待重連這里最容易被忽略的是“連接斷開”這一行。我在早期實現(xiàn)里犯過錯誤本地進程以為自己還是主控繼續(xù)向微信服務(wù)發(fā)送消息但其實 ZooKeeper 里active節(jié)點已經(jīng)因為會話超時被刪除了新的主控已經(jīng)產(chǎn)生于是兩邊同時發(fā)消息造成重復(fù)和沖突。正確做法是只要 ZK 客戶端進入Disconnected或Expired狀態(tài)立刻把本地角色降級為SUSPEND停掉所有對外寫操作避免舊主在不知道的情況下繼續(xù)工作。3.4 狀態(tài)機把角色流轉(zhuǎn)寫清楚所有實例都會經(jīng)歷幾個狀態(tài)INIT初始化、CANDIDATE候選、LEADER主控、WAITING等待前驅(qū)、SUSPEND暫停/降級。創(chuàng)建候選節(jié)點成功進入CANDIDATE。CANDIDATE發(fā)現(xiàn)自己是最小序號且成功創(chuàng)建active進入LEADER。CANDIDATE發(fā)現(xiàn)前驅(qū)還在進入WAITING。WAITING收到前驅(qū)節(jié)點刪除事件回到CANDIDATE重新選舉。LEADER如果發(fā)現(xiàn)active節(jié)點消失、數(shù)據(jù)被改、ZK 連接異常進入SUSPEND。SUSPEND重連成功后重新創(chuàng)建候選節(jié)點進入CANDIDATE。把這個狀態(tài)機寫清楚代碼就不容易亂。我在工程里遇到過一些代碼選主邏輯和心跳邏輯混在一起狀態(tài)一多就開始到處改變量最后線上故障時根本分不清當(dāng)前該算什么態(tài)。后來強行把狀態(tài)流轉(zhuǎn)收斂到一個對象里所有狀態(tài)變更都只由 ZK 事件驅(qū)動再也沒有出現(xiàn)過“看著像主控但其實不是”的混亂窗口。4. Java 落地一套最小可用的選主與漂移檢測實現(xiàn)4.1 環(huán)境與依賴準(zhǔn)備我用 Java 原生客戶端做了一版可運行的最小實現(xiàn)。先加依賴dependency groupIdorg.apache.zookeeper/groupId artifactIdzookeeper/artifactId version3.8.4/version /dependency本地起一個單節(jié)點 ZooKeeper 就夠了測試時用bin/zkServer.sh start啟動服務(wù)默認(rèn)端口2181。生產(chǎn)環(huán)境建議起三節(jié)點集群但選主邏輯本身不需要區(qū)分單機還是集群。核心類我命名為WxAccountLeaderElector字段包括private final ZooKeeper zk; private final String wxid; private final String instanceId; private final String membersPath; private final String activePath; private String candidatePath; private long localSeq; private volatile boolean isLeader false;instanceId用來標(biāo)識本機實例比如host-a-001。后面判斷active節(jié)點是否為本人持有全靠它。4.2 候選注冊創(chuàng)建臨時順序節(jié)點實例啟動的第一步是創(chuàng)建候選節(jié)點。這個過程相當(dāng)于向 ZooKeeper 喊一句“我來了請給我排個號”。public void start() throws Exception { ensureParentNode(); registerCandidate(); evaluateLeader(); } private void ensureParentNode() throws Exception { if (zk.exists(/wx-accounts, false) null) { zk.create(/wx-accounts, null, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); } if (zk.exists(/wx-accounts/ wxid, false) null) { zk.create(/wx-accounts/ wxid, null, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); } String path /wx-accounts/ wxid /members; if (zk.exists(path, false) null) { zk.create(path, null, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); } } private void registerCandidate() throws Exception { String data String.format({\instanceId\:\%s\,\pid\:%d,\startTime\:%d}, instanceId, ProcessHandle.current().pid(), System.currentTimeMillis()); candidatePath zk.create(membersPath /m-, data.getBytes(StandardCharsets.UTF_8), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL); localSeq Long.parseLong(candidatePath.substring(candidatePath.lastIndexOf(-) 1)); }這里創(chuàng)建的是EPHEMERAL_SEQUENTIAL節(jié)點它既具備臨時節(jié)點的自動刪除特性又能得到一個全局遞增的序號。所有候選節(jié)點按照創(chuàng)建順序排成一條隊序號越小優(yōu)先級越高。4.3 選主與漂移監(jiān)聽核心邏輯選主邏輯在evaluateLeader方法里。每次 ZK 事件觸發(fā)都會重新評估當(dāng)前角色。private void evaluateLeader() throws Exception { if (zk.getState() ! ZooKeeper.States.CONNECTED) { markFence(); return; } ListString children zk.getChildren(membersPath, true); ListLong seqs children.stream() .map(p - Long.parseLong(p.substring(p.lastIndexOf(-) 1))) .sorted() .collect(Collectors.toList()); if (seqs.isEmpty()) { return; } long minSeq seqs.get(0); if (minSeq localSeq) { tryAcquireActive(); } else { long prevSeq seqs.get(seqs.indexOf(localSeq) - 1); String prevPath membersPath /m- prevSeq; if (zk.exists(prevPath, event - { if (event.getType() EventType.NodeDeleted) { try { evaluateLeader(); } catch (Exception e) { log.error(重新選舉失敗, e); } } }) null) { evaluateLeader(); } } }注意zk.exists(prevPath, ...)這一步注冊的是針對前驅(qū)節(jié)點的 Watch。事件回調(diào)只在NodeDeleted時觸發(fā)觸發(fā)后重新執(zhí)行evaluateLeader這樣當(dāng)前實例就能從前驅(qū)消失的狀態(tài)中立刻感知到主控權(quán)發(fā)生了漂移。下一步是嘗試創(chuàng)建active節(jié)點也就是搶主控private void tryAcquireActive() throws Exception { String data String.format({\seq\:%d,\instanceId\:\%s\,\sessionId\:%d}, localSeq, instanceId, zk.getSessionId()); try { zk.create(activePath, data.getBytes(StandardCharsets.UTF_8), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL); isLeader true; log.info(成為主控實例seq{}, instance{}, localSeq, instanceId); zk.exists(activePath, event - { if (event.getType() EventType.NodeDeleted) { try { evaluateLeader(); } catch (Exception e) { log.error(active 節(jié)點消失重新選舉失敗, e); } } }); } catch (KeeperException.NodeExistsException e) { log.info(active 已存在當(dāng)前不是主控進入等待狀態(tài)); isLeader false; zk.exists(activePath, event - { if (event.getType() EventType.NodeDeleted) { try { evaluateLeader(); } catch (Exception ex) { log.error(重新選舉失敗, ex); } } }); } }當(dāng)active創(chuàng)建成功isLeader置為true。但“創(chuàng)建成功”只代表那一瞬間我是主控不代表我一直是。所以每次對外執(zhí)行任務(wù)前還要做一次漂移校驗確保主控權(quán)沒有在后臺悄悄溜走。4.4 發(fā)送消息前的主控權(quán)校驗我在實際工程里寫了一個方法所有對外操作都必須走這一層門禁public boolean checkLeadership() { if (!isLeader) { return false; } if (zk.getState() ! ZooKeeper.States.CONNECTED) { resign(); return false; } try { Stat stat new Stat(); byte[] raw zk.getData(activePath, false, stat); ActiveInfo info ActiveInfo.fromJson(raw); boolean mine info.seq localSeq info.instanceId.equals(instanceId) info.sessionId zk.getSessionId(); if (!mine) { resign(); return false; } return true; } catch (KeeperException.NoNodeException e) { resign(); return false; } catch (Exception e) { return false; } } private void resign() { isLeader false; log.warn(檢測到在線狀態(tài)漂移或主控權(quán)丟失當(dāng)前實例已降級); }這里最關(guān)鍵的一點是除了比對instanceId還要比對sessionId。因為 ZK 會話過期后客戶端重連會得到一個全新的sessionId即使instanceId相同它也不是原來的會話。單獨比對instanceId是不夠的。任務(wù)執(zhí)行時可以這樣統(tǒng)一約束public boolean executeIfLeader(Runnable task) { if (!checkLeadership()) { log.warn(非主控或主控已漂移拒絕執(zhí)行任務(wù)); return false; } task.run(); return true; }嚴(yán)格來說這個校驗屬于“操作前檢查”。在分布式環(huán)境下舊主可能已經(jīng)和新主同時工作消息帶一個 fencing token 會更安全。seq就是天然的 token每一次選主都會產(chǎn)生更大的序號下游服務(wù)只需要拒絕 token 小于當(dāng)前主控序號的請求就能避免舊主消息造成數(shù)據(jù)沖突。4.5 運行效果漂移檢測到底能檢測到什么假設(shè)我同時啟動兩個實例A和BA 啟動創(chuàng)建/members/m-0000000001成功創(chuàng)建/activeA 成為主控。B 啟動創(chuàng)建/members/m-0000000002發(fā)現(xiàn)最小序號不是自己于是 watchm-1進入等待狀態(tài)。我手動 kill 掉 A 進程。ZK 檢測到 A 的會話結(jié)束臨時節(jié)點m-1和/active自動刪除。B 收到前驅(qū)節(jié)點刪除事件重新執(zhí)行evaluateLeader發(fā)現(xiàn)自己是當(dāng)前最小序號創(chuàng)建active成功B 成為新主控。我重新啟動 A。A 創(chuàng)建/members/m-0000000003發(fā)現(xiàn)最小序號是 B于是 watchm-2進入等待。整個過程里B 的日志會出現(xiàn)一行“成為主控實例”A 重啟后不會有任何任務(wù)權(quán)限直到 B 再次故障。這就是一次標(biāo)準(zhǔn)的在線狀態(tài)漂移檢測和選主切換。5. 實戰(zhàn)中踩過的坑故障排查與避坑清單5.1 網(wǎng)絡(luò)抖動引發(fā)的會話超時誤判我在測試環(huán)境第一次上線這套邏輯時用的是 5 秒會話超時。結(jié)果機房一次輕微的網(wǎng)絡(luò)抖動把所有實例全部踢下線觸發(fā)了一次完全沒必要的選主切換。原因是 ZooKeeper 的臨時節(jié)點刪除機制基于會話超時不是基于連接斷開。網(wǎng)絡(luò)抖動后ZK 服務(wù)端暫時聯(lián)系不上客戶端如果超時設(shè)得太短服務(wù)端會認(rèn)為客戶端死了直接刪除臨時節(jié)點??蛻舳司W(wǎng)絡(luò)恢復(fù)后發(fā)現(xiàn)自己創(chuàng)建的節(jié)點已經(jīng)沒了只能重新注冊。我的建議是把 ZK 客戶端構(gòu)造參數(shù)里的sessionTimeout設(shè)置為 20 到 30 秒具體數(shù)值取決于業(yè)務(wù)對“主控恢復(fù)速度”和“誤判容忍度”的權(quán)衡。如果業(yè)務(wù)可以容忍 30 秒沒有主控就設(shè) 30 秒如果希望秒級切換那就要接受網(wǎng)絡(luò)抖動帶來的誤判風(fēng)險。同時客戶端收到Disconnected事件時不要等 ZK 告訴你“節(jié)點已刪除”自己要先主動標(biāo)記為SUSPEND暫停所有對外寫操作。這樣即使 ZK 側(cè)還沒判定會話超時業(yè)務(wù)側(cè)也不會因為舊主繼續(xù)工作而產(chǎn)生重復(fù)信息。5.2 舊進程僵尸化帶來的雙主窗口真正危險的場景不是進程被 kill而是舊主進程還活著但它和 ZooKeeper 之間的網(wǎng)絡(luò)被切斷了。這時候從 ZK 的視角看舊主已經(jīng)因為會話超時而退出新主成功上位但舊主進程還保存著“我是主控”的本地狀態(tài)它仍然能訪問微信服務(wù)端繼續(xù)發(fā)消息。兩個主同時存在就成了雙主窗口。這個問題不能單靠 ZooKeeper 解決。ZooKeeper 只能保證“在 ZK 內(nèi)部狀態(tài)一致”不能保證“在業(yè)務(wù)網(wǎng)絡(luò)里也一致”。我最后的處理方法是兩層配合客戶端收到Disconnected時立刻拒絕所有本地任務(wù)不等待 ZK 判定。業(yè)務(wù)消息里帶上 fencing token也就是active節(jié)點里的seq。下游服務(wù)只接受當(dāng)前主控的 token。如果你能把 token 校驗下沉到消息網(wǎng)關(guān)雙主問題能基本被攔住。舊主發(fā)出來的 token 已經(jīng)比新主小網(wǎng)關(guān)直接拒絕比舊主自己“猜”自己是不是主控要可靠得多。5.3 Watch 只觸發(fā)一次重連后通知丟失ZooKeeper 的 Watch 是一次性的。最開始我寫代碼時只在初始化時注冊了一次exists后面發(fā)現(xiàn)節(jié)點變化后程序完全沒有反應(yīng)。排了半天才發(fā)現(xiàn)事件觸發(fā)后 Watch 就失效了如果不重新注冊下一次變化永遠(yuǎn)感知不到。更隱蔽的是在回調(diào)里重新執(zhí)行evaluateLeader時getChildren(membersPath, true)會注冊一個新的 Watch但如果你在某條分支里調(diào)了zk.exists(prevPath, watcher)這次注冊也是獨立的別忘記在對應(yīng)回調(diào)里再次注冊。我建議把“重新評估 重新注冊 Watch”收斂成一個公共方法在回調(diào)里統(tǒng)一調(diào)用并且把異常包裹在 try/finally 里保證 Watch 不會因為一次異常就永久丟失。當(dāng)然更省心的做法是用 Curator 框架的LeaderSelector或PathChildrenCache它內(nèi)部封裝了 Watch 的重注冊邏輯。但如果想真正理解 ZK 選主的原理手工實現(xiàn)一次是值得的。5.4 多賬號場景下的線程模型與連接復(fù)用如果同時管理幾百個微信個人號不可能給每個號都建一個獨立的 ZooKeeper 連接。連接太多會耗盡 ZK 的文件描述符和會話資源。正確的做法是一個 ZooKeeper 實例承載所有賬號的選主邏輯不同賬號通過不同的父節(jié)點路徑區(qū)分。但這就帶來一個新的問題ZooKeeper 的 Watcher 回調(diào)線程是共享的。如果一個賬號的選主回調(diào)里做了數(shù)據(jù)庫操作或者網(wǎng)絡(luò)請求整個 Watcher 線程都會被阻塞其他賬號的狀態(tài)變化也會延遲處理。我后來把狀態(tài)變更邏輯全部丟進一個獨立的單線程 executor回調(diào)只負(fù)責(zé)往 executor 里提交任務(wù)。這樣賬號 A 的慢操作不會影響賬號 B。同時每個賬號的選主狀態(tài)都隔離在自己的WxAccountLeaderElector對象里公共的僅是 ZK 連接。5.5 監(jiān)控與可觀測性別等漂移發(fā)生了才去救火選主邏輯上線后一定要配監(jiān)控。我至少會暴露這些指標(biāo)當(dāng)前賬號的active節(jié)點持有者。候選節(jié)點數(shù)量。主控切換次數(shù)和切換時間。最近一次切換的原因session_expired、node_deleted、active_deleted。日志里每次切換都要帶清晰上下文比如leader changed accountwxid_xxx oldSeq1 oldInstancehost-a newSeq2 newInstancehost-b reasonsession_expired這樣每次發(fā)生漂移我們都能從日志里快速還原當(dāng)時的網(wǎng)絡(luò)情況、實例狀態(tài)而不是靠猜。沒有監(jiān)控的選主邏輯等于把一個分布式炸彈埋在系統(tǒng)里平時看不出來一炸就是大事故。我在實際項目里反復(fù)體會到一件事ZooKeeper 只是給了你一個可靠的狀態(tài)源真正決定系統(tǒng)穩(wěn)不穩(wěn)的是所有業(yè)務(wù)操作是否嚴(yán)格服從“只要不持有 active 節(jié)點就立刻停手”這個紀(jì)律。選主代碼反而是整個鏈路里最簡單的一塊難的是讓所有調(diào)用方都統(tǒng)一走同一個門禁。建議先把狀態(tài)機畫清楚再寫代碼會少走非常多彎路。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
天天澡天天爽日日av| 日日日大屁股骚女人精品| 亚洲清纯唯美| 色婷婷在线视频| A一区片| 欧美激情色婷婷花野真衣一区二区| 成人av影院在线观看| 日日摸日日碰| 青娱乐av在线| 亚洲高清无码免费观看视频| 色在线亚洲视频www| 天天日天天干少妇日| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 亚洲欧美日韩国产丝袜自拍中文| 黑丝91视频| 国产亚洲色婷婷久久99精品91| 香蕉欧美| 久久午夜色播影院免费高清| 91制服丝袜| 日韩精品三级片长长久久| 天天综合日韩网| 欧美性爱日韩性爱| 亚洲国产精品9999在线观看| 日韩兔费看黄片| 国产精品久久泡妞网站| 91视频综合在线| 97 国产一区| 日韩在线AB| 熟女精品一区二区三区| 自拍盗摄一区| 禁止观看美女黄| 狠狠色综合网| 五月色网| 国内91熟女人妻丝袜天天精品视频在线| 色官网色综合| 香蕉久久国产AV一区二区| 青椒国产97在线熟女| 中文字幕人妻资源在线| 亚洲av综合色| 噜噜吧,噜噜色,噜噜| 精品亚洲国产成人av网站| 乱伦日本中文自拍| 最新av网站在线观看| 色吧91| 天天噜| 亚州男人天堂| www久久国产精品| 97碰碰色| 91在线视频国产网站| 性欧美999| 欧美亚洲特P| 亚洲午夜精品久久久中文影院| 激情啪啪视频| 91免费看一区二区三区| 一个国产在线综合网站| 婷婷综合久久| 久久大香蕉手机高清| 亚洲精品一区二区三区新线路| 久久久人体| 精品国产乱码久久久久A| 长长久久88视频| 97爱爱爱综合| 91在线一起| 日韩在线电影| 午夜啪啪片| 久久久麻豆精品| 99自拍视频在线| 毛片中心9视频99| 人妻久热在线| 91色色综合| 91天堂丝袜美腿| 亚洲天天操| 再深点灬舒服灬太大了添视频| 双插性欧美一二三区| 色99色| 亚洲日韩av一区二区三区百合| 亚洲老司机123专区| 国内外毛片在线观看| 亚洲AV无码乱码| 欧美不卡在线一区二区| 免费精品福利在线观看| 亚洲大色堂| 男人的天堂三级| 亚洲婷婷丁香在线| 亚洲五码一区二区三区| 99r九九| 蜜臀av网址| 91成人18| 99日韩| 日本亚洲vr欧美不卡高清专区| 天天舔天天日天天射| 日韩BBN| 午夜舔阴达高潮视频免费看| 五月天激情小说网| 99精品无码| 97色伦97色伦国产欧美| 丁香五月电影| 日韩欧美天堂| 三级AV入口| 污啪啪啪视频| 亚州综合网| 欧美性爱在线无码| av草草在线电影| 久久国产逼| 91色艳| 美女黄色91| 亚洲无吗在线视频| 中国小夫妻勾搭露脸淫荡对白| 欧美综合91| 久久久五月天| 蜜臀久久99精品久久久久电影| 另类TS人妖一区二区三区| 亚洲人成网www| 午夜久久久| 少妇人妻太紧太深av| 熟女丝袜视频| 久久六六| 久久只有精品一区二区三区| 一个人免费视频观看在线WWW| 人妻啊啊人妻啊| 青青草在线视频播放器| 五月激情综合网| 91劲爆| 中国女人内射6XXXXX| 青青草国产盗摄一二三区| 久久久久亚洲熟妇熟女| 男人的天堂无码| A 在线网址| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 九九成人精品| 免费1级a做爰片观看| 亚洲色图激情小说| 99久久精品国产系列| 99热这里| 91夜色| 欧美永久激情一区二区| 午夜一区二区三区国产| 91热色| 91精品国产高清久久久久久,亚洲成人 | #NAME?| 日本黄 R色 成 人网站| 囯产精品久久久久久久久久梁医生 | 99操逼| 高清无码91| 天天综合亚在线| 啪啪性爱免费视频| 九九九九97| 亚欧高清v| 精品久久久久久久| 亚洲日韩97| www.婷婷| 久久久成人国产精品无码| 欧美三四五区| 欧美综合制服在线| 免费精品福利在线观看| 国产精品国产亚洲区艳妇糸列| 自拍视频大全亚洲专媒视频/一区二区三区| 人人贴人人摸| 日韩熟女精一区二区三区不卡| 亚洲精品一二三四区| 收看日本人日bb| 人伦四五区| 有码人妻系列| 天天插天天操| 日韩av不卡在线看| 人妻丝袜美腿中文字幕| 亚洲国产中文字幕| 日韩伦理久 久久 清纯| 激情五月天视频| 大香蕉欧美| 青青草一区二区三区四| 99综合自拍| 日本狠狠干| 精品国产丝袜一区二区三区乱码 | 人妻少妇精品一区二区三区| 色综合天天| 99re免费| 亚洲视频精选| 好吊色综合| 天天超级碰碰碰| 玖玖97综合| AV电影在线播放| 久久五十路熟女人妻| 天美91| 午夜噜噜噜| 亚洲熟女乱熟乱熟妇综合网二区| 日产狠狠干| 国产精品一二三在线看| 91人精品妻入口| 亚洲欧美综合图片| 国产精品午夜精品| 校园春色美腿丝袜 | www.久久超碰| 中出20p| 欧美中字二区| 啊灬快c我灬啊灬用力灬啊灬-国产精品性做久久久久久-成人AV | 青青草啪啪网| 97视频900| 伊人网在线观看| 一区二区三区精品黑丝白丝酒店对鸡| 狠狠色色| 男人的天堂不卡一区二区| 最新日韩黄片| 韩国黄色片精品久久久| 国产麻豆一级精品视频| 色区久久| 六月婷激情福利天堂69| 99亚洲精品| 超碰在线91| 色播综合| 蜜臀av在线播放一区二区三区| 天天肏夜夜肏| 亚洲色图久久精品蜜| 99色在线| 日本精品88888888| 四虎免费看黄| 欧美大干日韩| 91日产桃蜜| 亚洲a色| 91n处女在线观看| 国产视频97| 怡春院久久| 亚洲色人阁| 色五月AV| 国产日韩精品人妻久久久久色欲网站| 亚洲日韩精品一区视频在线| 久久婷色| 日韩精品人妻系列无码天堂| 91欧美性| 97在线免费看视频| 不卡av在线中文字幕| 高清无码 国产精品| 国产精品免费视频人成| 69精品少妇一区二区三区蜜桃| 久热色情精品| 激情四射五月天| 亚洲 欧美 日韩另类 麻豆| v91av| 欧美18 在线观看| 手机在线视频国内精品| 色五月婷婷麻豆在| 极品粉嫩少妇视频| 色香av| 在线播放免费av福利片| 啊视频在线| 嫩草 人人网精品| 91精品人妻五十路| 人人弄人人摸| 超碰在线99| 亚洲自拍欧美国产首页网曝| 人妻少妇无码| 成人av在线播放| 久久激情五月| 中文字幕、久久精品国产2020、久久综合久久自在自线精品自、亚洲 | 97网色| 久久五月天婷婷丁香中文字幕| 五月丁香综合啪啪| 亚洲高清少妇| 大香蕉伊人网| 五月丁香色色网| 久久最新视频免费观看| 乱伦一二三| 日韩在线观看中文字幕视频| 天天超级碰碰碰| 国产传媒日韩| 91丨九色丨大屁股| 国产精品久久久久久久久久二区三区| 五十路六十路七十路熟婆| 亚洲成人网站在线观看| 天天操福利视频综合网站| 国产精品白领在线观看| 亚洲交换| 色网在线视频观看免费| 久久夜夜夜夜| WWW啪啪的com| 午夜福利区| 亚洲av成人精品一区| 最新日韩黄片| 天天干1区2区在线| 秋霞免费AV| 国产91精品久久久久久久网曝门| 91久久久亚洲| 精品十三区| 蜜臀久久99精品久久久| 五月丁香成人网| 骚货操死你| 人妻22p| 久久久精品九| 亚洲中文字幕av| 热热色综合网| 国产小u女在线观看| 免费亚洲国产精品久久一区| 亚洲国产成人福利在线观看| 色五月第四色| 色狠狠 - 百度| 天美传媒Av在线| 国产黄色影片在线观看| 青娱乐手机日韩在线视频| 内射夫妻三片| 国产丰满少妇久久久精品影院| 九九综合九九综合| 春色校园综合网| 超清福利精品视频在线| 麻豆精品天美| 国产精品自在线发布| 亚洲天堂电影网| 亚洲天堂日本| 强奸乱伦Av网| 国产在线激情| 国产欧美日韩在线观看麻豆传媒公司| 亚洲春色欧美激情自拍| 久久精品99久久久久久| 欧美日韩第一页| 四虎精品永久在线观看| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | 精品人妻少妇| 208天天久久九九九| 影音先锋视频在线| av橘色网站| 亚洲综合在线视频| 久操视频在线观看| 97色涩| 欧美人妻精品一区二区| 日本Suv精品一区二区| 天天射,天天操,天天爽-国内精品一区二区三区-成人AV | 2017天天插| 综合网,亚洲,欧美| yellow网站免费观看日韩高清无码| 久久国语| 97九色人妻| 国产精品露脸在线观看| 日本 情色 1区2区3区| 黑丝少妇在线观看| 亚洲国产欧美另类自拍| 天天综合青苹果| 美国久久一二三四| 欧美后进式| 九色精品视频导航1| 超碰九九| 999 久久久| 小泽玛利亚一二三| 黑丝自慰喷水网站| 在线αⅴ| 亚洲熟女诱惑| 久久久久久久久久久久欧美日| 99综合视频一体| 少妇厨房愉情理伦片bd在线观看| 中文字幕欧美精品亚洲日韩蜜臀| 日韩钢筋无码高清啾啾啾| 五月综合久久| 成人性爱全视频观看| 国产毛片片精品天天看视频| 91亚洲黄色网| 青草园大香蕉| 久久久久元码视频| 国产精品制服丝袜中文字幕日韩一区二区三区 | 99re不伦| 人妻嗯啊啊在线播放| 午夜激情成人在线观看| 中文字幕日韩电影人妻| 九九综合九九综合| 亚州性色| 78m成人视线| 欧美综合 站| 91精品人妻一区二区-全集完整版免费正片国语-B02AV | 亚洲一区日韩| 在线观看精品国产免费| 亚洲精品国产无码高清| 一级片视频啪啪| 资源新线在线天堂| 992视频一区| 婷婷探花久久精品一区| 玖玖资源视频一区二区三区| 久久久78| 欧美肥臀在线| 91N综合网| 少妇久久久免费| 国产视频小说| 国内成人圈中文字幕无码视频| 鸥美插入视频| 日韩资源网| 综合天天网| 亚码人妻| 超碰97.com| 九九九九九九免费视频| 97在线播放| 欧美第五页| 国产中午字一暮区| 91丝袜人妻| 免费视频a级毛片免费视频| 亚洲少妇综合在线播放| 免费精品福利在线观看| 九九99久久| 精品国产少妇高潮视频| 日韩精品人妻系列无码天堂| 欧美天堂超碰97| 九九九九九九九九九九九九九九九女| 91精品丝袜在线观看| 亚洲古典另类欧美在线| 欧亚在线视频| 艹我哪美一区无码| 亚洲淫色网中文| 无套内射性感少妇视频| 久久久久久夜夜夜夜夜| 天天综合网1| 97超碰这里只有精品| 亚洲脚交| 久久天堂| 成人 日本A片无码8888| 我爱大香蕉| 91九久| 欧美色图下一页| 天天搞欧美| 97超碰中文在线| 无码 黑人一区二区三区| 国产激情av女片自拍| 99热在线播放| 亚洲大胆人体av| 91白虎| 夜夜草天天| 日韩激情啪啪| 色女综合| 亚洲欧美洲综合| 亚洲精品一区二区精华| 国产吞精a级片激情电影| 久久精品欧美一区蜜桃| 蜜桃视频啊啊啊啊| 欧美亚洲| 六月丁香啪啪| 亚洲综合图片在线| 大象AV在线| 精品一区二区人妖| 欧美激情一区二区| 校园春色五月天| 精品高清一区二区三区三州| 九久久九精品视频| 校园春色AV天堂| 中国一级操逼视频| 久久久久久久久久久久久久9999| 亚洲 欧美 日本 国内 首页| 岛国视频一二三区| 东京热一区二区三区四区五区六区| 高清不卡 中文 人妻| 亚洲色图综合| 欧美后进式| 一二三四区电影| 久久riav中文精品| 亚洲丝袜B诱惑| 东京热毛片调教| 亚洲成人一区二区精品| 久久久久久久久九九久孕交| 成年无码动漫av片无尽在线 | 日韩精品99久久久久久中文字幕| 国语精品av| 91动漫操逼视频| 一区二区精品更新提醒| 成·人免费午夜在线观看| 日本肉体xxxx裸交| 神马九九九| 亚洲精品三区在线观看| 看黑丝美女操逼青青网站| 啊啊啊啊操死我| 婷婷啪啪| 揉揉日日日日| 国产亚洲人妻综合日韩 久久| 大香蕉日韩欧美| 欧美视频一区二区在线| 久操影视| 人妻99p| 九九亚洲色在线观看| 久久无码成人| 黑人干亚洲| 国产强奸超碰AV| 美熟女逼导航AV操逼| 黄色AAAAA欧美| 热热色色综合| 天天看,天天做| 国产97色在线 | 亚洲| 久久亚洲av成人无码国产| 国产精品夜夜夜| 女人爽到高潮潮喷18禁网站| 俞拍久久国应视频| 日产国产精品中文久久婷婷| 97超碰磁| 色老久久| oumeisetu综合| 中文字幕在线免费观看2| 97硬碰| 狠狠中文字幕| 午夜经典| 青青草吊丝| 青青伊人这里只有精品| 97伊人超碰| 欧美午夜精品久久久久久超碰| 啊啊啊好多水| 久久久男人的天堂| 丁香六月激情综合| 欧美欧美啪啪视频| 天天操人人操骚逼网站| 婷婷性爱| 翔田千里一区二区三区奶水| 性色高清..……| 久久精品一区二区三区不卡| 先锋影音av先锋一区| 亚洲怡春院| 天美传媒av 在线| 亚洲无码国产精品久久| 极品出轨视频网站| 69视频福利导航| 亚欧高清v| 亚洲精品久久久久毛片A片拉屎 | 日韩性爱高清免费视频| 欧美性爽xyxOOOO| 丝袜色综合| 欧美性特| 九九综合久久| 日韩99精品视频综合区| 欧美成人精品一区| 加勒比东京热五月天天堂网| 久久久噜噜噜久久久| 家庭乱伦网站国产| 中文字幕人妻资源在线| 91n处女在线观看| 日本不卡二三区| 97久久精品亚洲| 亚洲中文日韩欧美大香蕉视频| 欧美天天干| 日产成人久久| 乱老熟女一区二区三区| 日韩情色视频| 九九碰九九爱97超碰| 国产精品黄色三级av| 91亚洲在线| 激情另类激情| AV久日| 久久中日麻豆| 人妻美腿丝袜制服诱惑综合天堂-| 激情专区综合| 成人八戒网站| 亚洲国产成人福利在线观看| 日韩欧洲操屄视频| 97色97干| 国内外内射高清视频| 国产91 丝袜在线播放| 久久精品国产97欧美精品亚洲| 麻豆 亚洲 97| 99色日| 韩国三级三级BD在线| 色av中文字| 一区二区三区精品黑丝白丝酒店对鸡| 九九色逼| 五月丁香六月激情综合| 激情99| 99久久99久久综合| 97人人草| 青青草中文-久久青草精品一区二区三| 久久肏大逼| 欧美精品久久久久久久久88| 亚洲一本大道中文字幕无码在线| 国产亚洲色婷婷久久99精品91葵花宝典| 性暴力欧美猛交在线直播| 东北少妇高潮zzzz| 日韩人妻一区二区| yaouchengrenav| 欧美高清18A片| 国产亚洲精品精AV.| 一个色导综合| av日韩国产一区二区| 日韩一级成人毛片免费观看| 成人美女av| 五月丁香激情综合| 人妻熟女午夜精品在线| 色综合美国| 亚洲色图 欧美热图 清纯唯美 另类自拍 | 人人做人人妻人人夜视频| 午夜精品久久久久久久99蜜桃一| 久久久国产成人一区二区三区在线| 在线国产探花| 色哟哟的毛片| 天天综合网1| 欧美激色| 亚洲人天堂| 三男一女不戴套的A片| 欧美探花网| 99久久精品国产高潮| 九九热在线视频| 嗯阿好爽好紧| 97草草| 日日夜夜免费| 国产成人精品无码久久| 超碰人人色| 激情文学 国产一二三aV| 东京热不卡视频| 天天干夜夜鈤| 为用户提供免费看黄网址在线观看| 特级丰满少妇一级AAAA爱毛片| 亚洲人成网www| 亚洲天堂第一页| 91久久久久| 强奸抽插av| 亚欧Av| 二区熟妇韩日| 亚洲欧美国产精品久久久久久久| 日本视频在线中文字幕| 日韩欧美国产高清视频| 国产精品久久久久绯色| 人妻色情天天操| 日韩三级伦理中文字幕| 国内精品伊人久久久久影院会| 久久欧美1卡2卡3| 91亚洲狠狠色| 人人妻人人爽 97人人看碰人免费公开视频 | 日本狠狠干| 岛国999| 老熟妇乱轮| 久热婷婷| 亚洲 欧美 综合 91| 97啪啪| 99热欧美| 人妻少妇久久| 国产精品久久久久久照片| 美女诱惑爱爱| 美女t无毒不卡不卡| 国产欧美精选激情视频| 香一区二区三区| 色区97| 亚洲欧美国产其他二区| ai欧美亚洲小说| 国产无码精品无码| 日韩精品一二三四| 在线二区不卡| · —级AA伦aa坐爱午夜极速ⅴA一区天天噪天天噪天天噪 | 久久综合日韩亚洲欧美| 最近二区三区视频大全| www.99在线| 中文字幕免费在线观看| 国产偷拍自拍在线视频| 好舒服视频| 国内毛片无遮挡国产| 久热伊人99re| 丁香九月婷婷| 激情一区二区三区在线观看| 欧成人精品一区二区三区| 丁香九月激情啪| 亚洲不卡一| 激情接吻视频久久久久久| 久久综合久色欧美综合狠狠| 一级黄色视频网| 婷婷五月天无码| 精品国产91av一区二区三区| 干B| 操操逼操操逼操操逼逼| 天天草AV| 国产日韩欧美三级片| 国产精品对白自产拍| 日本综合久久| 友优传媒精品在线一区二区| 国内91熟女人妻丝袜天天精品视频在线| 人妻天堂网| 麻豆2区1区天美| 97香蕉网| 久久久久密臀一区二区| 黄色在线网站| 久9爱精品| 韩日精品四区| 熟女乱3伦999| 午夜福利在线合集| 国产乱伦一二三区| 清纯唯美亚洲综合| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 日韩亚洲欧美中文字幕| 香一区二区三区| 岛国在线免费视频| 亚洲激情欧美色图| 野狼激情网| 国产精品日韩在线一区| 加勒比久久av| 亚码激情| 日韩精品一区二区日韩| 性欧美第一页| 午夜超碰| 欧美日韩222| 综合操逼| 97超碰超碰| 成人久久精品| 成功精品影院| 91精品国产日韩欧美综合| 亚洲图片小说欧洲| 久久精品老司| 免费AV播放| 性爱网站一区二区| 亚州五月| 一牛一区二区三区久久| 婷婷丁香五月激情啪啪| 91伊人久| 免费视频一二三区| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 大香蕉之青青草原| 96AV精品| 人妻中文字幕日韩电影| 日本熟妇浓毛hdsex| 99福利社| 精品小视频在线| 九九热视频在线观看| 免费在线黄片视频| aaa亚无码专区| 亚洲欧美激情小说| 色www精品视频在线观看| 精品久久一区二区三区四区五区| 中文字幕乱在线伦视频中文字幕乱码在线 | 国产精品久久久吖| 99re视频在线播放青草| 熟女网站最新| 青苹果影院男人的天堂| 操碰91| 亚洲欧美在线观看2021| 成人免费看吃奶视频网站| 欧美高清色| 男人的天堂久久| 久久人体一区二区| 丝袜翘臀后入欧美校园亚洲自拍另类小说一区中文字幕少妇诱惑 | 成人精品久久久午夜福利| 国产日韩怡红院| 欧美特黄视频网站| 精品无码一区二区人妻久久蜜桃| 亚欧中文字幕在线视频| 天天欧美色| 920日本午夜免费| 六月丁香婷| 中文字幕精品专区搜索结果91| 2019AV天堂| 五月天色电影| 区一二区日韩亚洲乱码av电影| 欧美黑人性猛交91| 亚洲色图激情小说| 中文字幕啊啊啊在线观看视频| 91久久久久久| 天天做天天爱| 污啪啪啪视频| 国产丝袜视频| 69精品少妇一区二区三区蜜桃| 亚洲中文字幕精品久久久久久直播| 国产三级日产三级韩国三级| 欧美十八禁网站| 福利在线黄片| 91GD.COM| 日本 欧美 亚中文字幕| 夜夜操2028| 美女人妻色网站| 国产人伦精品一区二区三区 | 99亚洲精品| 操逼视频色| 近亲乱伦一区二区| 无码抄逼网| 婷婷伊人綜合中文字幕| h在线看免费版在线看| 亚洲成人av色网| 国产欧美一区二区| 久久综合女优| 中文熟女五十乱码在线| 九九九只有精品| 久久精品无码专区| 精品免费视频国产一区| 亚洲精品尤物yw在线影院| 免费亚洲黄色视频在线观看| 久久‘黄片视频| 日本在线一二| 五月天综合网| 日韩成人人妻网站| 啊啊啊免费视频| 久久透逼视频| 熟妇操花| 久久超碰亚洲人| 久久久久久裸体| 欧美天天搞| 成人免费看吃奶视频网站| 亚洲一区二区三区AV无码 | av三级电影在线播放| 欧洲亚洲国产综合在线| 色婷婷丁香| 日本精品国产视频| 超碰九九| 男人的天堂午夜av| 综合色久| 日韩精品三级片长长久久| 日日躁夜夜躁狠狠躁超爽| a亚洲欧美色欲| 亚洲一区二区性爱电影| 九九九综合精品| 亚欧操逼片在线观看| 国产女同在线观看视频| 亚洲精品乱码久久久久久蜜桃麻豆 | 最新av在线| 好爽视频在线观看视频| 亚洲av影音先锋| 荡小穴在线观看| 国产97/欧美| 国产超碰AV在线精品| 99久久婷婷国产综合精品草原| 青青草视频久久久久| 国产97av| 人人操人人操草草| 蜜臀AV成人精品蜜臀AV久久| 伊人九九九| 欧美成人一级免费电影| 天天综合网久久ww| 青青草好吊色| 在线看免费无码AV天堂的| 亚洲自拍欧美国产首页网曝| 丰满人妻一区二区三区免费 | 综合熟妇一区二区三区| 超碰在线观看av不卡| 中文字幕精品丝袜| 91综合网站| 五月丁香大香蕉| 亚洲怡春院| 久污| 精品无码不卡视频| 综合另类| 国产无套粉嫩白浆在| 久操九九九九九九九九九九九九九九九九九九九九九九九九九九九九 | 国产精品久久aV| 夂久色| 97K超碰在线| 亚洲AV永久无码一区仙野| 1024手机看片欧美日韩| 国产福利电影| 天天爽夜夜欢视| 精品国产Av无码久久久伦古装| 中文字幕一区日韩精| 亚洲国产中文字幕| 成人激情无码在线视频| 色天堂综合| 欧美偷拍区| 97天天操天天干| 男女做爰猛烈动高潮A片免费应用| 欧美黄页在线| 女人综合网| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | 91少妇人妻| 韩日精品四区| 91骚熟女| 精品射1999| 国产精品99精品视频网站| 一区=区三区视频| 色综合一本| 丝袜综合| 国产一级特黄大片处女| 少妇三P| 国产熟女完整版中字| 亚拍在线| 自拍偷拍2025在线观看| 色路综合| 极品丝袜无码| 久久久久久亚洲Av无码精| 鸥美精品一区二区久久婷婷| 中文精品一区二去| 麻豆a'v电影| 亚洲综合九九| 91成人18| 熟女欧美日韩综合婷婷| 亚洲 日韩 丝袜 熟女 变态| 青久久| 夜夜操狠狠操| 精品人妻免费观看| 国产精品久久久久久久久久久久久久久| 综合五月婷婷亚洲一区| 97国产精品在线观看| 九九热精品视频在线观看| 欧美黄页| 欧美少妇高潮久久91| 日本一级性爱| 欧美性天天| 91爱看| 91丨九色丨43老版熟女| 91人妻人人澡人人爽人人精品| 国产白领连续中出在线播放| 九九无码视频| 日韩特级毛片免费观看全集| 欧美在线 亚洲| 美女刺激久久国产欧美| 99这里只有精品国产| 久热这里| 午夜欧美神马久久久久| 欧美十八禁在线看| 秋霞一集毛片观看| 97久久久久久久久久| 久久久9品一区二区三区| av在线一区二区三区| 夜夜躁狠狠躁日日躁av| 精品一国2| 日韩有码一区三区| 亚洲国产精品无码AV在线| 97碰碰色| 日韩av电影网站| 超碰午夜在线| 天天躁日日躁AAAXX| 欧美亚洲素人制服精品| 国产精品农村妇女| 久久综合久色欧美综合狠狠| 韩国轻伦国内自拍一区| 免费观看啪视频| 天天操夜夜操狠很操| 日韩大香蕉| 密臀国产在线| 热热热热日日漂亮永久永久国产日| 五月丁香影院| 国产综合操逼高清| 国产欧美精选自拍一区| 黄色大片视频在线免费看| 风间由美日韩欧美久久| 中文字幕第23区| 日日AV加勒比| 九一亚洲国产免费| 日本免费中文一区二区三区四区 | 亚洲综合贴图91| 亚洲情色一区三区| 超碰日本97美女人妻人人玩人人爱| 大伊香蕉在线视频免费| 日韩性爱人人爱人人操| 超碰在线人人射| 色逼综合| 玖玖综合网| 91女色| 偷拍亚洲情色| 尤物视频网 刘玥| 1000午夜黄色| 蜜屁Av| 天堂伊人久久| 日本黄色裸日本黄色裸体 | 一起草高清无码| 欧美亚洲综合高清在线| 蜜臀久久久99久久久久 | 国产综合日韩伦理| 在线视频免费观看午夜| 在线观看中文字幕| 欧美精品宗合| 91人妻人人澡人人爽人人精品| 一区二区乱码福利| 岛国爱情动作片在国产AV无码专区亚洲AV漫画| 东京热综合久久一区二区| 好涩综合| 啊啊啊免费视频| 亚洲综合另类| 你懂的在线观看区国产 | 涩爱AV在线| 青青草伊人久久| 国产小炒后入式| 欧美日动态视频| 久久久精品一区二区| 青青青草原| 亚洲高清综合网| av网站免费看| 人妻献身系列第54部| 国产黄片精品在线| 333kkkk·亚洲com久久| 国产无码一二三区| 东京日日夜夜| 丰满少妇一区二区三区四区观看| 精品国产一区二区三区久久久蜜臀 | 限制级中的三级片中的黑粗大屌屌日人妻熟女 | 日韩色| 国内毛片热久久思思热| 国产精品国产自产高清AV| 美中日韩无码| 色色国产| 蜜臀AV成人精品蜜臀AV久久| 亚洲日韩久久精品一区| 伊人宅男大香蕉| AV中亚| 日日噜噜夜夜狠狠视频无| 精品一二三区久久AAA片| 骚逼高潮久久精品| 亚州人妻| 人人妻人人爽人人精品| 免费A片三p视频| 午夜无码精品免费看性色| 丁香五月天堂网| 精品十三区| 国产蜜臀精品一区二区尤物| 91丨国产丨白浆秘 洗澡动漫| 激情无码日韩| 日本一本一区二区三区四区五区欧美日韩中文字幕 | 欧美老妇综合网| 亚州Av天美传媒| 亚洲国产精品成人久久蜜臀| 日韩亚洲精品一区二区| AV 少妇 人妻 偷拍| 美日韩在线不卡人妻| 超碰色图| 亚洲系列第一页| 日韩素人无码一区二区三区三州| 色婷婷淫色网| 国产精品 视频| 国产福利av精彩对白| 97欧美精品综合| 一本大道青青| 在线观看成人性爱免费小视频| 五月丁香六月| 伊人在线大香蕉二。| 国产午夜精品理论片一二三区区| 欧美日韩中文亚洲v在线综合| 日韩一级二级在线| 日本ZZ高免费A级视频| 免费观看性欧美一级| 精品一区二区啪啪啪| 久久视频,这里只有精品 | 欧美日韩精品国产91| 国产精品福利视频| 国内三级自拍小视频在线观看| 人人搡人人肉久久精品| 超碰成人人人爽人人爽| 九九99久久| 91黄射| 伊人网综合在线视频| 97精品视频免费| 国产精品人妻无码久久久互動交流| 国产尹人在线视频免费| 日本高清加勒比| www.久久制服糖| AND人妻系列| 一区二区高清视频| 天天综合网站| 9精品久久久久| 99久久精品国产高潮| 中文字幕伊人| 青娱乐亚洲自拍| 久久久久亚洲精品| 天天爽夜夜爽夜夜爽精| 欧美综合色站| 欧美精品69性爱| 人妻天天爽夜夜爽爽| 97啪啪| 日本天天人人狠狠在线日美女| 亚洲一区二区AV| 精品精品精品| 九九九九九精品| 亚洲色图久久成人| 99999国产精品| 欧美后进式| 另类图片天天影视| 精品人妻二区三区| 日本黄大片在线观看视频| 欧美激情视频一区二区三区不卡| av黄图片在线观看| 密臀在线免费观看| 日韩黄色片子| 亚热日本熟女| 少妇干B| 97在线播放| 五月天开心网| aa片毛片| 精品176精品2| 久久久亚洲欧美综合| 中文字幕av一区二区三区人妻少妇| 日韩中文字幕在线视频观看| 色网亚洲人| 亚洲 欧美 天天| 精品三级在线专区| 久久久久久波多野吉衣高潮| 欧美色视频在线| 婷婷激情五月综合| 欧美日韩国产在线| 天天视频黄| 97超碰精品成| 伊人99热| 韩国三级一线观看久| 日韩不卡网操逼中文字幕日韩| aaaa少妇高潮大片| 91性网| 中文乱码99| 国产高清MV操逼视频| 青青草依人大香蕉| 澳门人妻久久| 欧美成人性爱视频免费观看| 99re黄| 欧美狠狠操| 日本日皮视频逼| 99re这里只有精品9| 美女AV一区二区| 日本三级日本三级99| 强奸抽插av| 青青青草原| 欧美日本久久精品一区 | 中字一区| 九九热免费国产视频婷婷伊人| 日本1区2区不卡视频| av影院十区| 激情终合网| 色婷婷五月天| 美女尤物人人操| 色欧美综合| 啊嗯嗯啊好大好爽| 毛片视频白嫩| 亚洲操人| 欧美黄色大片在线观看 | 无码高清操逼| 亚洲 欧美 日本 国内 首页| 亚洲人在线| av九九| 日本视频一区二区三区| 精品91| 亚洲天在线| 亚洲综合九| 亚洲国产综合久久久性感熟妇| 亚洲AV无码国产精品久久久久| 无遮挡男女激烈动态图| 亚洲狠狠入| 鸥美极品| 国精综合一二三区影视| 天堂精品在线| www.国产高潮精品| 一本大道不卡一二三区| 国产视频人人网| 91爱| 久久性爱网站| 欧美成年人性爱视频免费观看| 超碰久久综合| 99re99视频在线免费观看| 又大又长又爽| 五月天婷婷成人网| 性爱乱伦网址| 青娱乐亚洲自拍| 操逼逼一区视频| 国产高清亚洲日韩一区| 蜜臀AV午夜精品久| 欧美色蜜桃97| 欧美啪啪啪91| 亚洲,欧美,综合网| 久久国产999| 91久久久老司机| 一直超碰| 97精品视频网站| 亚洲少妇色图自慰直播| 国产a级精品| 97激情97激情| av大香蕉网站| 亚洲免费日韩在线一区二区| 97超碰欧美精品| 9.1小视频| 亚洲日韩狠狠撸视频| 综合熟妇一区二区三区| 在线播放中文字幕| 97在线观看免费| 一本一道久久综合久久| 高清孕妇孕交 交孕妇| 在线小说视频一区| 亚洲久久东京热一二三四五区视频| 九九九九一级| 激情四射婷婷六月天| 欧亚韩国999| 九九久久国产精品怡红院| 1204人成网站色www| 999热日韩精品| 久久无码精品| 一级一性爱免费视频| 极品销魂美女一区二区| 色欲三区| 国产家庭乱伦网址| 九九无码视频|