免费国产精品自在自线-91精品国产色综合久久久浪潮-99热久久免费频精品-国产精品国模在线观看-久久亚洲国产精品成人?V秋霞-久久国产一级A片免费播放-亚洲国产欧洲综合97久久-久久国产白嫩美女呻吟高潮

ARTICLE DETAIL

資訊詳情

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

SpringBoot優(yōu)雅停機(jī)實(shí)戰(zhàn):從SIGTERM到K8s滾動(dòng)發(fā)布全解析

SpringBoot優(yōu)雅停機(jī)實(shí)戰(zhàn):從SIGTERM到K8s滾動(dòng)發(fā)布全解析 凌晨十二點(diǎn)盯著發(fā)布流水線一條kill -15發(fā)下去業(yè)務(wù)群里瞬間冒出好幾條“接口報(bào)錯(cuò)了”“剛才提交的訂單沒返回”。這個(gè)場景是我對 SpringBoot 停機(jī)機(jī)制最初的記憶。默認(rèn)情況下SpringBoot 收到 SIGTERM 并不代表它會(huì)等手頭的事干完而是“幾乎立刻”把 Web 容器和 Spring 容器拆掉所有在途請求直接被 Reset。SpringBoot 優(yōu)雅停機(jī)機(jī)制是解決這類問題的標(biāo)準(zhǔn)方案它從 Spring Boot 2.3 開始由官方原生支持。這篇文章我會(huì)帶你搞清楚優(yōu)雅停機(jī)到底在哪一層生效、兩行配置背后發(fā)生了什么事、實(shí)測中請求表現(xiàn)差多少、以及真正上線時(shí)最容易忽略的注冊中心和容器編排坑。適合正在做服務(wù)發(fā)布、彈性伸縮、壓測驗(yàn)證的 Java 開發(fā)者收藏。1. 從最慘的一次發(fā)布事故說起默認(rèn)停機(jī)到底停掉了什么1.1 kill -15 并不溫柔JVM 鉤子與 Web 容器的同步關(guān)閉很多人有個(gè)誤解以為給 Java 進(jìn)程發(fā)kill -15SIGTERM之后JVM 會(huì)“把當(dāng)前請求處理完再退出”。這個(gè)說法只說對了一半。JVM 確實(shí)會(huì)執(zhí)行 ShutdownHookSpring Boot 也注冊了自己的SpringApplicationShutdownHook但問題在于默認(rèn)停機(jī)模式下Spring 容器關(guān)閉 WebServer 時(shí)并不會(huì)等待活躍請求。你可以把那次事故的現(xiàn)場還原一下。Tomcat 收到 stop 指令后Connector 直接進(jìn)入關(guān)閉流程還在執(zhí)行中的 Servlet 線程會(huì)被打斷正在讀取響應(yīng)體的 Nginx 突然收到一個(gè)空的 FIN 包客戶端表現(xiàn)就是 Connection reset by peer。如果你在寫訂單接口可能已經(jīng)完成了數(shù)據(jù)庫事務(wù)提交但響應(yīng)沒送到客戶端調(diào)用方就會(huì)選擇重試于是重復(fù)下單、重復(fù)扣庫存、對賬不平全都來了。1.2 粗暴關(guān)停的典型故障清單這類問題在線上有非常固定的模式我整理了一張表基本覆蓋了絕大部分事故場景故障現(xiàn)象真實(shí)原因涉及模塊客戶端提示 Connection resetTomcat 在請求進(jìn)行中直接關(guān)閉連接Web 容器下游收到 502/504Nginx 在 Upstream 節(jié)點(diǎn)關(guān)閉瞬間轉(zhuǎn)發(fā)請求失敗負(fù)載均衡消息重復(fù)消費(fèi)消費(fèi)到一半進(jìn)程退出offset 未提交Kafka/RocketMQ事務(wù)已提交但響應(yīng)丟失業(yè)務(wù)邏輯完成響應(yīng)未寫回客戶端Servlet 線程定時(shí)任務(wù)重復(fù)執(zhí)行集群多實(shí)例同時(shí)停機(jī)任務(wù)調(diào)度沒做搶占任務(wù)調(diào)度注冊中心出現(xiàn)異常實(shí)例服務(wù)端進(jìn)程已死但心跳還沒過期Eureka/Nacos這些故障有個(gè)共同點(diǎn)都不是代碼邏輯錯(cuò)誤而是進(jìn)程退出順序問題。業(yè)務(wù)代碼跑得好好的純粹因?yàn)橥C(jī)姿勢不對把“正常完成的請求”變成“客戶端感知到的失敗請求”這才是最虧的。1.3 先分清三個(gè)概念JVM ShutdownHook、Actuator Shutdown 與優(yōu)雅停機(jī)網(wǎng)上搜“SpringBoot 優(yōu)雅停機(jī)”經(jīng)??吹絻煞N做法混在一起容易踩坑。第一種是 JVM 層面的 ShutdownHook代碼里Runtime.getRuntime().addShutdownHook(new Thread(...))它只保證“JVM 退出時(shí)我能執(zhí)行一段代碼”但改變不了 Web 容器已經(jīng)在關(guān)閉的事實(shí)。你用這個(gè)方式做“通知注冊中心摘流”因?yàn)轫樞虿粚ν€沒來得及發(fā)請求容器已經(jīng)斷了。第二種是 Actuator 的/actuator/shutdown端點(diǎn)需要手動(dòng)打開并 POST 觸發(fā)。它本質(zhì)上也是觸發(fā)ApplicationContext.close()在 Spring Boot 2.3 之前它是實(shí)現(xiàn)“相對優(yōu)雅”停機(jī)的主要手段因?yàn)槟憧梢钥刂朴|發(fā)時(shí)機(jī)不讓它依賴操作系統(tǒng)信號(hào)。第三種才是真正的“優(yōu)雅停機(jī)Graceful Shutdown”也就是從 2.3 開始官方內(nèi)置的能力。它做的事情很明確先停止接收新請求然后等待所有在途請求處理完成或超時(shí)最后再關(guān)閉 WebServer 和 Spring 容器。后面我會(huì)從配置開始完整拆解。2. 先別急著加配置版本、容器與兩行核心參數(shù)的前置判斷2.1 Spring Boot 版本是分水嶺低于 2.3 就沒有原生方案Spring Boot 2.3.0.RELEASE 的 Release Notes 明確寫了為內(nèi)嵌 Web 服務(wù)器增加優(yōu)雅停機(jī)支持。所以如果你項(xiàng)目還在 2.1、2.2對不起server.shutdowngraceful這個(gè)配置是無效的日志里連個(gè)警告都不會(huì)有。我見過有人把server.shutdowngraceful加到 2.2 項(xiàng)目上發(fā)版之后以為萬事大吉結(jié)果壓測一打就露餡。所以第一步永遠(yuǎn)是看pom.xml里的父版本parent groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-parent/artifactId version2.7.18/version relativePath/ /parent如果你日常用的是 Spring Boot 3.x那當(dāng)然更沒問題這套機(jī)制一直延續(xù)下來了。如果是老項(xiàng)目暫時(shí)升不動(dòng)版本至少要做到給負(fù)載均衡或注冊中心留出摘流時(shí)間再手動(dòng)觸發(fā)/actuator/shutdown不要裸著發(fā) SIGTERM。2.2 核心配置只有兩行但第二行含義經(jīng)常被讀錯(cuò)在application.properties或 yaml里加上server.shutdowngraceful spring.lifecycle.timeout-per-shutdown-phase30s第一行很簡單把默認(rèn)的immediate改成graceful告訴 Spring Boot 走優(yōu)雅停機(jī)流程。第二行spring.lifecycle.timeout-per-shutdown-phase寫的默認(rèn)值是 30s。注意關(guān)鍵詞是per-shutdown-phase也就是“每個(gè)關(guān)閉階段”的超時(shí)時(shí)間不是“整個(gè)停機(jī)過程”的總超時(shí)。Spring 容器里不同 Lifecycle 組件按 phase 分批關(guān)閉理論上有幾個(gè) phase就可能累加幾個(gè) 30s。這一點(diǎn)后面講事件鏈的時(shí)候還會(huì)展開先記住不要把它理解成“最多等 30 秒就強(qiáng)制退出”。2.3 官方支持矩陣四個(gè)內(nèi)嵌容器全都支持但成熟度有差異Spring Boot 官方文檔對優(yōu)雅停機(jī)的描述是支持所有四個(gè)內(nèi)嵌 Web 服務(wù)器Tomcat、Jetty、Reactor Netty、UndertowServlet 和響應(yīng)式應(yīng)用都可以。但做底層適配的人都知道一個(gè)能力“支持”和“支持得好”是兩回事。Tomcat 的實(shí)現(xiàn)最完整從 9.0.33 開始提供了相對成熟的 Connector pause 線程池等待機(jī)制Jetty 和 Reactor Netty 也能做到“停止接收新請求等待在途請求完成”Undertow 也能用但我在網(wǎng)上見過一些版本差異導(dǎo)致的邊界問題如果你不是必須用 Undertow建議在生產(chǎn)環(huán)境優(yōu)先用 Tomcat省心。容器是否支持實(shí)際表現(xiàn)Tomcat 9.0.33完整支持pause Connector等待線程池任務(wù)完成日志清晰Jetty 9.4支持等待在途請求但部分版本需要額外注意連接超時(shí)Reactor Netty支持WebFlux 場景可用2.3 起支持等待事件循環(huán)中請求Undertow支持能用但社區(qū)反饋的邊界問題相對多2.4 開啟前檢查下自己的環(huán)境這里給一個(gè)快速自查清單照著過一遍再上線項(xiàng)目spring-boot-starter-web或spring-boot-starter-webflux版本是否 ≥ 2.3。是否使用內(nèi)嵌容器如果打成 war 丟外置 Tomcat這套配置不直接生效。確認(rèn)停機(jī)時(shí)是kill -15或docker stop、systemctl stop觸發(fā)而不是kill -9。有沒有在代碼里自定義 ShutdownHook如果自定義 Hook 里做了“等待 xx 秒”之類的邏輯要測試它與 Spring 優(yōu)雅停機(jī)的先后順序別讓兩段等待互相打架。3. 停機(jī)時(shí)到底在等什么SIGTERM 到容器關(guān)閉的完整事件鏈3.1 事件鏈路拆解SIGTERM → JVM Hook → Spring 容器關(guān)閉優(yōu)雅停機(jī)不是魔法它只是在正確的位置插入了等待邏輯。進(jìn)程收到kill -15后JVM 開始執(zhí)行已注冊的 ShutdownHook。Spring Boot 的SpringApplicationShutdownHook在這個(gè)時(shí)機(jī)被觸發(fā)它會(huì)調(diào)用ApplicationContext.close()。close()內(nèi)部會(huì)先觸發(fā)ContextClosedEvent然后通過DefaultLifecycleProcessor去 stop 所有 Lifecycle 組件。關(guān)鍵就在這里Spring Boot 把內(nèi)嵌 WebServer 的優(yōu)雅停機(jī)封裝成了一個(gè)SmartLifecycle它會(huì)在 Spring 容器關(guān)閉時(shí)先執(zhí)行。這個(gè) Lifecycle 做的事是設(shè)置 Server 不再接收新請求Tomcat 表現(xiàn)為停止 accept 新連接。等待活躍請求執(zhí)行完成。超過timeout-per-shutdown-phase的請求不再等待直接強(qiáng)制關(guān)閉。等它結(jié)束后WebServer 才真正銷毀Spring Bean 才開始挨個(gè)銷毀。這條鏈路保證了“先等業(yè)務(wù)收完尾再拆房子”。3.2 三層等待容器層、線程池層、業(yè)務(wù)資源層實(shí)際等的東西可以分成三層看。第一層是 Web 容器層。Tomcat 的 Connector 進(jìn)入 paused 狀態(tài)后不再 accept 新連接但已經(jīng)建立連接上正在執(zhí)行請求的線程不會(huì)被打斷。第二層是線程池層。Tomcat 內(nèi)部維護(hù)了一個(gè)執(zhí)行 Servlet 的工作線程池優(yōu)雅停機(jī)時(shí)它會(huì)等線程池里所有任務(wù)執(zhí)行完。如果你的某個(gè)接口里定義了 10 秒Thread.sleep它就是這里被等的重點(diǎn)對象。第三層是業(yè)務(wù)資源層。Spring 容器真正 close 時(shí)HikariCP 數(shù)據(jù)源、消息連接池這些 Bean 才開始逐個(gè)關(guān)閉。HikariCP 關(guān)閉時(shí)也會(huì)等待租出去的連接歸還。這就是為什么“Web 容器等待”和“數(shù)據(jù)源等待”是兩個(gè)不同的時(shí)間窗口別只用接口耗時(shí)去預(yù)算停機(jī)總時(shí)長。3.3 為什么日志里只見 “Commencing graceful shutdown” 卻遲遲不結(jié)束開啟優(yōu)雅停機(jī)后收到 SIGTERM控制臺(tái)會(huì)輸出類似這樣的日志o.s.b.w.e.tomcat.GracefulShutdown : Commencing graceful shutdown. Waiting for active requests to complete很多第一次接優(yōu)雅停機(jī)的人看到這行日志然后發(fā)現(xiàn)進(jìn)程遲遲不退會(huì)慌。其實(shí)這是正?,F(xiàn)象。它正在等待在途請求。等所有請求處理完會(huì)看到o.s.b.w.e.tomcat.GracefulShutdown : Graceful shutdown complete之后 Spring 容器繼續(xù)關(guān)閉剩下的 Bean。整個(gè)停機(jī)的標(biāo)準(zhǔn)日志順序應(yīng)該是Commencing graceful shutdown. Waiting for active requests to complete 這里停頓時(shí)間取決于在途請求 Graceful shutdown complete Closing org.springframework.context.annotation.AnnotationConfigApplicationContext ...如果你始終看不到第二行日志大概率是某個(gè)請求永遠(yuǎn)不返回比如 WebSocket 連接、SSE 長連接、卡死的任務(wù)最后只能等超時(shí)被強(qiáng)制切斷。這也是生產(chǎn)環(huán)境最容易出問題的點(diǎn)看似在“優(yōu)雅等待”實(shí)際在“無限等待”。3.4 timeout-per-shutdown-phase 的真實(shí)累計(jì)邏輯前面說了這個(gè)參數(shù)是“每階段超時(shí)”。Spring 的DefaultLifecycleProcessor會(huì)把所有 Lifecycle 分組每個(gè) phase 單獨(dú)計(jì)時(shí)。如果你既用了 WebServer 的優(yōu)雅停機(jī)又自定義了幾個(gè) SmartLifecycle還接了消息監(jiān)聽容器等等那總停機(jī)時(shí)間可能超過 30s。舉個(gè)實(shí)際例子phase 大的 Lifecycle 先關(guān)閉如果它在 30s 內(nèi)沒結(jié)束后面哪怕還有很多 Bean 沒關(guān)也會(huì)被強(qiáng)制打斷繼續(xù)往下走。所以設(shè)置這個(gè)參數(shù)時(shí)最好把你業(yè)務(wù)里“最長的一個(gè)慢請求耗時(shí) 數(shù)據(jù)源連接歸還時(shí)間 自定義清理時(shí)間”都估算進(jìn)去。寧愿給 60s也不要卡在 30s 邊緣。4. 用壓測說話優(yōu)雅停機(jī)前后的請求行為對比4.1 測試環(huán)境與壓測準(zhǔn)備配置說再多不如自己跑一輪壓測直觀。下面是我在本地搭的一組最小驗(yàn)證環(huán)境Spring Boot 2.7 項(xiàng)目 Tomcat一個(gè)慢接口模擬“在處理中的業(yè)務(wù)”。RestController public class GracefulController { GetMapping(/slow) public String slow() throws InterruptedException { System.out.println(請求進(jìn)入 Thread.currentThread().getName() 時(shí)間 System.currentTimeMillis()); TimeUnit.SECONDS.sleep(10); System.out.println(請求完成 Thread.currentThread().getName() 時(shí)間 System.currentTimeMillis()); return ok; } }壓測用 ab 就夠了不用上 JMeterab -n 500 -c 50 http://127.0.0.1:8080/slow這個(gè)命令的意思是總共 500 個(gè)請求50 并發(fā)每個(gè)請求都要花 10 秒。按下命令后間隔幾秒再開一個(gè)終端執(zhí)行kill -15 $(jps | grep -i app | awk {print $1})然后觀察 ab 的統(tǒng)計(jì)結(jié)果和控制臺(tái)日志。4.2 未開啟優(yōu)雅停機(jī)kill 之后響應(yīng)直接被掐斷先把server.shutdowngraceful注釋掉用默認(rèn)的immediate跑一輪。kill 之后控制臺(tái)立刻開始關(guān)閉容器正在執(zhí)行的接口線程直接被中斷。ab 端的表現(xiàn)非常明顯大量Failed requests??蛻舳藗?cè)報(bào)Connection reset by peer。不管接口邏輯后面還有沒有收尾工作一律不執(zhí)行。最終輸出的Complete requests遠(yuǎn)小于 500。我在實(shí)際壓測中看到過更夸張的情況有些請求已經(jīng)進(jìn)入 Tomcat 工作線程但還沒來得及打印“請求進(jìn)入”進(jìn)程就關(guān)了。這類請求就是“連業(yè)務(wù)代碼都沒跑完就被掐斷”的典型。4.3 開啟優(yōu)雅停機(jī)新請求被拒絕在途請求正常收尾然后把兩行配置加上重新啟動(dòng)并壓測。中途 kill -15重點(diǎn)關(guān)注幾個(gè)表現(xiàn)第一控制臺(tái)輸出Commencing graceful shutdown之后原本已經(jīng)在跑的接口線程繼續(xù)打印“請求完成”沒有中斷異常。第二ab 的Complete requests和Failed requests不再難看。已經(jīng)進(jìn)入 Tomcat 的請求基本都能正常拿到響應(yīng)。第三停機(jī)期間新進(jìn)來的請求會(huì)失敗因?yàn)槿萜饕呀?jīng)不再 accept。你會(huì)在 Tomcat 日志里看到連接被拒絕的痕跡這是預(yù)期行為。所以優(yōu)雅停機(jī)的核心價(jià)值不是“所有請求都不失敗”而是“已經(jīng)進(jìn)入的請求別被半路打死”。至于新請求本來就應(yīng)該靠前面的負(fù)載均衡摘流解決這屬于第 5 章要討論的問題。4.4 超時(shí)場景超過等待上限的請求最終怎么收場再驗(yàn)證一個(gè)邊界如果請求耗時(shí)超過timeout-per-shutdown-phase會(huì)怎樣把spring.lifecycle.timeout-per-shutdown-phase改成3s然后接口 sleep 10 秒壓測中途 kill。你會(huì)發(fā)現(xiàn)3 秒之后日志里出現(xiàn)容器強(qiáng)制關(guān)閉的動(dòng)作。那個(gè)還在 sleep 的請求被中斷客戶端同樣會(huì)收到連接重置。所以優(yōu)雅停機(jī)不是“無限等”它是有上限的。上限到了該斷還是斷。這個(gè)測試特別適合用來跟業(yè)務(wù)方對齊預(yù)期停機(jī)窗口內(nèi)新請求會(huì)失敗超長請求會(huì)失敗只有“正常長度”的在途請求能被保護(hù)。4.5 生產(chǎn)視角看待壓測結(jié)果跑完這些對比我建議把結(jié)論寫進(jìn)發(fā)布手冊發(fā)布前先確認(rèn) Kafka 消費(fèi)位移、消息推送、文件上傳這類長任務(wù)耗時(shí)不超預(yù)算。壓測結(jié)論要讓運(yùn)維、QA、后端三方都看到別只停留在“我這邊加了配置”。把壓測中的Graceful shutdown complete日志出現(xiàn)時(shí)間點(diǎn)記錄下來作為每次發(fā)布前的參考基線。5. 單機(jī)優(yōu)雅不解決流量分配注冊中心、Nginx、Docker 和 K8s 的配合5.1 最容易被忽視的坑負(fù)載均衡還在往停機(jī)節(jié)點(diǎn)甩流量單機(jī)優(yōu)雅停機(jī)只解決“請求已經(jīng)進(jìn)來了”的情況。但發(fā)布的時(shí)候前面掛的 Nginx、Gateway、注冊中心客戶端并不知道這個(gè)節(jié)點(diǎn)正在停機(jī)它們?nèi)詴?huì)把新請求轉(zhuǎn)發(fā)過來。這個(gè)瞬間連接被拒、超時(shí)、報(bào)錯(cuò)還是會(huì)重演。我見過一個(gè)團(tuán)隊(duì)做出來的停機(jī)順序是反的先 kill 進(jìn)程等容器優(yōu)雅停完了再去 Nginx 摘節(jié)點(diǎn)。摘流事件發(fā)生在進(jìn)程死亡之后前面的用戶流量已經(jīng)遭殃了。正確的順序應(yīng)該是先摘流再停機(jī)。摘流手段根據(jù)你的流量入口不同有幾種做法下面分開說。5.2 手動(dòng)摘流Nginx、Eureka、Nacos、Consul 分別怎么處理如果你們上游是 Nginx最直接的健康檢查方案是Spring Boot 暴露一個(gè)健康檢查接口停機(jī)前先把該接口狀態(tài)改成 DOWNNginx 通過max_fails或主動(dòng)健康檢查摘掉這個(gè) upstream 節(jié)點(diǎn)。比較粗暴但有效的做法是在停機(jī)前用腳本調(diào) Nginx 接口直接標(biāo)記 down。如果用的是注冊中心更標(biāo)準(zhǔn)化的做法是調(diào)用服務(wù)治理 API 提前反注冊注冊中心摘流方式說明Nacosnacos-client的deregisterInstance主動(dòng)摘除后客戶端拉取新列表需要時(shí)間Eureka發(fā)心跳把狀態(tài)置為 OUT_OF_SERVICE配合 eureka 客戶端緩存刷新Consul服務(wù)實(shí)例標(biāo)記為 maintenance 或反注冊同樣存在傳播延遲無論哪種方式都要記住一個(gè)現(xiàn)實(shí)注冊中心的摘流是異步傳播的客戶端可能存在緩存延遲。所以不要“反注冊完立刻殺進(jìn)程”要留一個(gè)緩沖窗口比如再等 5~10 秒等流量真的淡出再停。5.3 Docker stop 的 10 秒絞刑默認(rèn) STOP_TIMEOUT 與 30 秒優(yōu)雅超時(shí)的沖突這塊是網(wǎng)上抱怨最多、也最隱蔽的坑。用 Docker 跑 SpringBoot 時(shí)docker stop默認(rèn)只等 10 秒超過 10 秒直接SIGKILL??墒莝pring.lifecycle.timeout-per-shutdown-phase默認(rèn)是 30s。如果你的停機(jī)時(shí)間超過 10sDocker 會(huì)毫不客氣地把進(jìn)程干掉優(yōu)雅停機(jī)形同虛設(shè)。解決辦法有三個(gè)# 運(yùn)行時(shí)指定 docker run --stop-timeout 60 your-image # compose 文件 services: app: stop_grace_period: 60s# 更推薦的還是在 Dockerfile 里明確信號(hào) STOPSIGNAL SIGTERM注意這行STOPSIGNAL SIGTERM有些基礎(chǔ)鏡像或啟動(dòng)腳本會(huì)對信號(hào)做二次轉(zhuǎn)發(fā)如果默認(rèn)不是SIGTERM優(yōu)雅停機(jī)可能根本沒被觸發(fā)。Dockerfile 里寫清楚就沒有這個(gè)歧義。5.4 Kubernetes 滾動(dòng)發(fā)布readiness 探針與 preStop 的最佳姿勢K8s 場景跟 Docker 又不一樣因?yàn)?K8s 控制的是 Pod 生命周期它默認(rèn)給了terminationGracePeriodSeconds: 30s這個(gè)窗口要大于你預(yù)估的優(yōu)雅停機(jī)時(shí)間。推薦的做法是用 readiness 探針配合 preStop hookspec: terminationGracePeriodSeconds: 60 containers: - name: app readinessProbe: httpGet: path: /actuator/health/readiness port: 8080 initialDelaySeconds: 10 periodSeconds: 5 lifecycle: preStop: exec: command: [/bin/sh, -c, sleep 5]這里面的邏輯是K8s 在停止 Pod 前會(huì)先把該 Pod 從 Service Endpoint 中摘掉但摘掉動(dòng)作的生效也要時(shí)間preStop里 sleep 幾秒等于給了 K8s 一個(gè)緩沖。sleep 結(jié)束K8s 才發(fā) SIGTERM此時(shí)流量已經(jīng)基本不來了Spring Boot 才開始優(yōu)雅停機(jī)。這樣組合起來才能真正做到“先摘流再等請求最后殺進(jìn)程”。5.5 多實(shí)例同時(shí)停機(jī)的雪崩問題分批發(fā)布最后一個(gè)集群層面的坑如果你有多個(gè)實(shí)例發(fā)布系統(tǒng)把實(shí)例 A、B、C 同時(shí) kill那它們同時(shí)在優(yōu)雅停機(jī)同時(shí)在等各自的重請求完成。等它們?nèi)恐貑⑼曛虚g出現(xiàn)的空閑窗口可能直接把整個(gè)服務(wù)的容量打穿。穩(wěn)妥做法是分批發(fā)布先把流量摘掉一部分停一個(gè)、起一個(gè)。滾動(dòng)發(fā)布有天然的順序但如果你是自己寫腳本發(fā)布一定要手動(dòng)控制并發(fā)數(shù)。這個(gè)經(jīng)驗(yàn)我在線上吃過虧優(yōu)雅停機(jī)修好了“單機(jī)請求被掐斷”卻差點(diǎn)因?yàn)椤叭繉?shí)例同時(shí)停機(jī)”導(dǎo)致服務(wù)不可用。6. 給業(yè)務(wù)留足收尾時(shí)間事件監(jiān)聽、Lifecycle 順序與上線檢查清單6.1 ContextClosedEvent別在 Web 容器停止后再做異步收尾優(yōu)雅停機(jī)等于給了你一個(gè)“業(yè)務(wù)收尾”的時(shí)間窗口。但很多團(tuán)隊(duì)把收尾邏輯寫在PreDestroy或自定義 ShutdownHook 里順序非常不可控。更可控的方式是監(jiān)聽ContextClosedEvent。這個(gè)事件在 Spring 容器開始關(guān)閉時(shí)發(fā)出此時(shí) Bean 還都活著你可以在這時(shí)候通知消息隊(duì)列暫停消費(fèi)、把服務(wù)狀態(tài)標(biāo)記為“停止接收流量”、保存內(nèi)存中的批次數(shù)據(jù)等。Component public class ShutdownListener { EventListener(ContextClosedEvent.class) public void onShutdown(ContextClosedEvent event) { // 1. 暫停消息消費(fèi) // 2. 觸發(fā)緩存刷新或持久化 // 3. 標(biāo)記健康檢查為 DOWN System.out.println(容器開始關(guān)閉執(zhí)行業(yè)務(wù)收尾); } }但要注意這個(gè)回調(diào)里不要做耗時(shí)太長的操作它會(huì)被計(jì)入整個(gè)關(guān)閉流程超時(shí)一樣會(huì)被強(qiáng)殺。6.2 SmartLifecycle 與 phase 控制注冊中心為什么必須放在高 phase如果你需要在 Web 容器停止之前就把注冊中心摘掉更規(guī)范的做法是實(shí)現(xiàn)SmartLifecycle并給一個(gè)較大的 phase。Spring 的規(guī)則是停止時(shí)數(shù)字越大越先關(guān)閉。所以摘流邏輯應(yīng)該用 Integer.MAX_VALUE 附近的 phase確保它排在 WebServer 優(yōu)雅停機(jī)之前。Component public class DeregisterLifecycle implements SmartLifecycle { private volatile boolean running; Override public void start() { this.running true; } Override public void stop() { // 在這里調(diào)用 Nacos / Eureka / Consul 摘流 System.out.println(先從注冊中心摘除實(shí)例); this.running false; } Override public boolean isRunning() { return this.running; } Override public int getPhase() { return Integer.MAX_VALUE; } }這個(gè)模式比在ContextClosedEvent里寫更嚴(yán)謹(jǐn)因?yàn)樗?Spring 的關(guān)閉順序是同一套機(jī)制不用擔(dān)心某個(gè) Bean 提前銷毀導(dǎo)致調(diào)用失敗。不過也要注意摘流后必須在注冊中心傳播延遲里再拖幾秒所以我一般會(huì)在stop()里加一個(gè)輕量 sleep別一摘完就立刻進(jìn)入下一步。6.3 定時(shí)任務(wù)、線程池、數(shù)據(jù)庫連接池在停機(jī)期的真實(shí)表現(xiàn)如果你項(xiàng)目里有Scheduled定時(shí)任務(wù)默認(rèn)情況下它們跑在單線程調(diào)度器里。優(yōu)雅停機(jī)過程中這些任務(wù)不會(huì)自動(dòng)取消如果某個(gè)任務(wù)正在刷新緩存或跑批量任務(wù)它也會(huì)被容器關(guān)閉打斷。我的建議是給這些異步任務(wù)顯式指定一個(gè)線程池并在關(guān)閉時(shí)主動(dòng) shutdown。這樣能保證優(yōu)雅停機(jī)時(shí)任務(wù)執(zhí)行到安全邊界才退出。數(shù)據(jù)庫連接池這塊HikariCP 在容器關(guān)閉時(shí)會(huì)等待租借出去的連接歸還但默認(rèn)的等待時(shí)間并不長。如果某個(gè)慢 SQL 在停機(jī)瞬間還沒跑完Hikari 的連接會(huì)被強(qiáng)制釋放事務(wù)可能回滾。所以你真正要評估的是“業(yè)務(wù)慢請求的最差耗時(shí)”而不是平均值。6.4 上線前照著抄的停機(jī)檢查清單最后給一份可以直接抄進(jìn)發(fā)布手冊的檢查清單確認(rèn) Spring Boot ≥ 2.3配置了server.shutdowngraceful且把timeout-per-shutdown-phase按最壞情況調(diào)大。用kill -15壓測一次確認(rèn)出現(xiàn)Commencing graceful shutdown和Graceful shutdown complete兩行日志。Docker 場景檢查stop-timeout或stop_grace_periodK8s 場景檢查terminationGracePeriodSeconds與 preStop。確認(rèn)注冊中心摘流在進(jìn)程退出前完成并留了緩沖時(shí)間。明確新請求在停機(jī)窗口內(nèi)注定會(huì)失敗由負(fù)載均衡/網(wǎng)關(guān)做兜底。針對長連接和長期占用線程的請求WebSocket、SSE、文件上傳單獨(dú)確認(rèn)超時(shí)策略。我個(gè)人的體會(huì)是優(yōu)雅停機(jī)不是一個(gè)讓“所有請求零失敗”的方案它是一個(gè)讓“該成功的請求能成功”的方案。真正要啃的硬骨頭在停機(jī)前的那幾步流量調(diào)度上。把代碼里的等待時(shí)間、容器參數(shù)里的超時(shí)時(shí)間、K8s 里的優(yōu)雅終止時(shí)間這三件事對齊線上發(fā)布才算真的穩(wěn)健。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
337午夜福利| 久久小片| av在线观看网址| 超碰九九热| 天堂婷婷五月在线| 激情综合国产| 综合爱久久| 五月丁香色婷婷| 婷婷五月天成人网站| 激情四射五月天| 秋霞av吧| 欧美午夜乱妇午夜福利| 97五月天| 丝袜人妻| 天堂久久精品| 狠狠爱五月婷婷| 久久狠色噜噜狠狠狠狠97| 99精品偷拍视频| 九九这里只有精品| 五月婷婷啪啪| 九九色色| 中文字幕日产A片在线看| 日本啪啪网| 丁香五月五月婷婷五月天激情四射| www.五月婷婷久久.com| 国产精品操| 影音 五月 婷婷 久久| 五月丁香成人网| 99视频| 天天肏天天插| 国产成人精品一区二三区熟女在线| 婷婷基地爱| \\五月天婷婷激情| 精品九九视频| av操一操| www.激情| 丁香六月啪| 亚洲色五月婷婷| 五月花丁香婷婷| 成人va在线观看视频| 久久婷丁香五月| 激情AV中文| 婷婷日韩| 天堂综合久久| 亚洲色色色色色色色色色| 狼人婷婷久久| 伊人丁香六月婷婷| 丁香婷婷激情网站| 91婷色| 91视频五月丁香| 99热a片免| 五月天六月婷婷电影| 99.色| 蜘蛛女免费观看完整版高清电影| 亚洲婷婷丁香五月视频| 婷婷五月另类网站| 亚洲激情五月天| 99热人人| 久热婷婷综合| 四季AV综合网| 天天综合激情| 久久久久人妻精选| 色综合九九| 大香蕉av在线| 综合在线观看99| 99色人| 五月激情婷婷偷拍| 精品人人操| 日韩色色色色色| 亚洲区,视频区,视频区免费| 区区欧美你爱| 色色五月丁香婷婷| 韩国不卡AC视频| 操逼视频网址| 色婷婷影院| 色五月xxx| 丁香六月av| WWW.色婷婷.COM| 成人日韩欧美| 五月丁香综合| 丁香六月天婷婷色| 国产色色色色| 久久久久人妻精品| 国产三级在线播放| 色婷婷色五月另类综合| 九九婷婷网五月天| av国产精品| 丁香六月激情国产| 欧洲日韩一区二区三区| 欧美综合123区| 丁香五月天堂网| 五月丁香亭亭A片| 婷婷丁香花五月天| 国产婷婷五月在线视频| 久久久com| 在线超碰精品| 99热6这里只有精品6| 丁香六月天堂| 无码AV免费精品一区二区三区| 色亭亭九月| 色狠狠色综合久久久绯色AⅤ影视| www.婷婷网| 青草青青草| 五月丁香在线观看| 人人综合久| 五月丁香综合伦理片| 五月婷婷草| 99天堂网| 99re这里只有精品9| 天堂草在线看www| 国产成人99久久亚洲综合精品| 五月婷久久久久综合| 亚洲午夜电影| 亚洲午夜一区二区| 99色日本| 欧美成人色婷婷| 超碰人人色| 97成人在线视频精品| 婷婷丁香五月天综合网| 五月丁香婷婷基地| 久色网址| WWW99热| 日本A片一区| 五月丁香六月日逼| 国产AV一区二区三区最新精品| 色色五月天婷婷丁香| 天天插夜夜爽| 深夜婷婷 丁香| 色婷五月天| 深爱激情综合网| 少妇高潮呻吟A片免费看软件| 性爱网五月天| 丁香九月婷婷| 国产永久一二一起草| www热久久yy9| 亚洲综合五月天婷婷丁香| 天天爽天天摸| 久久九九re热| 99乱视频| 激情五月,色五月| 色色色五月婷| 婷婷五月丁香综合亚洲| 91日韩在线| 欧美在线操| 99精品久久久久| 亚洲AV永久无码影院黑人| 丁香综合伊人AV| a久久| 天天狠狠婷婷在线| 国产成人精品一区二区三区视频| 五月天婷婷乱| 另类图片五月激情| 激情床戏| 久久ER视频com| 色五月激情五月| 亚洲人人96@| 尔尔AV一区| 人妻熟妇国产精品| 熟妇人妻中文字幕无码老熟妇| Xx色综合| 五月天婷婷婷| 欧美Va婷色| 亚洲无aV在线中文字幕 | 26uuu欧美| 色综合网上班开心婷婷久久| 日本强伦片中文字幕免费看| 激情丁香五月天图片| 丁香五月婷婷高清| 99在线热| 激情五月天网页| 久久受www免费人成| 婷婷天天综合| 亚洲99在线| 精品久久久人妻| 日韩无码一区二区三区四区| 色婷婷播放| 久久人妻精品| www.婷婷五月天啪啪| 久久久国产精品黄毛片| 婷婷五月天成人| 91超级碰在线视频| 日本eVa一区=区视频| 丁香六月无码| 成人av中文字幕| 婷婷啪啪| 六月丁丁香| 狠狠做五月| 国产成人精品一区二三区熟女在线 | 久热这里精品免费| 婷婷丁香五月天影院 | 性一交一乱一交A片久久四色| 久久人妻精品| 色综合五月天| 69激情小说| 亚洲第二AV| 九九aV| 婷婷中文字幕版| 伊人玖玖综合| 久热精品免费视频4| 俺去也综合| 久操b网| 人妻在线观看视频| 丰满少妇猛烈A片免费看观看 | 欧美激情 日韩无码 婷婷 五月天| 国产精品天天狠天天看| 婷婷亚洲天堂| 五月天激情网图片| 六月婷婷久久大全| 森林影视大全,最好看的2019年视频 | 99热在线播放| 99热这里只有精品18| 99热日韩| 国产免费av在线| 99精品偷自拍| 久久五月视频| 97操操操| 激情九色| h在线看免费版在线看| 五月激情综合激情五月| 丁香婷婷六月激情文学| 亚洲第一成人无码A片| 日本eVa一区=区视频| 五月婷婷啪啪啪| 综合激情五月天六月婷免费视频| 九九热在线视频,| 99操中文视频| 伦乱天堂| 成人网站在线观看视频| 色婷婷狠| 无码啪啪| 婷婷开心深爱五月天| 9一精品视频观看| 99精品偷自拍| 无遮挡国产高潮视频免费观看| 久久婷婷丁香| 九九AV在线| 婷婷激情小说| 久草热在线视频| 五月丁香婷庭在线| 色丁香五月婷婷在线| 99在线免费视| 69五月天视频| 久久婷婷在线| 婷婷激情丁香六月| 丁香五月激情啪啪| 这里只有精品视频在线| 丁香婷婷激情| 爆乳熟妇一区二区三区爆乳照片| 婷婷五月丁香六月| 五月丁香六月色| 99热人人| 天天操夜夜操| 综合AV网| 1024欧美日韩精品久久久| 99青青草99| 色婷丁香91| 婷婷丁香日韩五月| 日本人妻操| 久热9热| wwww.色婷婷| 强奸幻女毛片| 综激情网| 婷婷六月激情啪啪| 五月天成人小说网| 亚洲AV网址| 4399亚洲视频| 欧洲色区| 丁香久久激情俄| 中文字幕+中文在线| 久久嘟嘟丁香| 久久久久久久综合狠狠综合| 激情综合网激情五月欧美| 天天综合天天做天天综合| 五月综合激情图片| 五月婷婷六月丁香在线| 99色天堂| 久久五月婷综合| 国产精品黑丝| 天天久久66xxx| 激情美女五月天| 天天插夜夜爽| 操97免费超级视频| 69精品人人人人人人人人人| 美欧成人视频| 97激情五月天| 午夜爱爱网站| 97一区二区| 久久全色| 精品网站99| 五月激情天天干| 99re热在线视频观看| 99热免| 51精品国自产在线| 国产白丝在线一区| 99热在线观看这里只有精品| 久久久久亚洲AV成人无码电影| 婷婷五月天伊人网| 丁香五月婷婷影院| WWW.夜夜操.com| 五月婷婷我| 日本婷久久| 婷婷在线视频| 热99精品视频五月| 99热这里只有精品国产首页| 欧美性爱五月天| 肏日网在线看| 夜夜爽日日躁| 婷婷九月色| 天啪色| 精品国产va久久久久| 色情综合网| 日韩啪啪网| 国产精品成av人在线视午夜片| 婷婷五月色影视先锋| 天天干狠狠操| 国产 码在线成人网站| 不卡的AV网站| 翔田千里aV中文字幕| AVDV久久| www.五月婷| 婷婷六月爽| 在线视频99| 99色嘟嘟精品网站| 五月婷婷亚洲综合网| 久久久五月五丁香| 婷婷欧美激情| 色婷婷婷婷| 亚洲激情综合| 丁香激情五月综合网| 婷婷六月色开| 久久99jiu9| 狠狠五月丁香色婷| 狠狠操狠狠| 久操大| 激情丁香五月婷婷| 一起肏在线视频| 五月丁香激情欧洲啪啪| 99干日日干| 欧美色五月| 国产亚洲精品久久一区二区三区| 91av无码| 婷婷激情社区| 9久热在线精品| 五月天久久成人| 色五月婷婷基地| 婷婷射丁香| 日本美女五月天| 91综合在线观看| 久久久精品人妻录| 丁香婷婷久久综合在线| 国产婷婷五月色情综合| 另类图片五月激情| 激情网婷婷五月天| 久久五月激情综合| 色色色综合网| 五月天婷五月天综合网小说首页-五月天激激婷婷大综合,婷婷亚洲综合五月天小说 | 六月五月丁香五月欧美| 亚洲成人免费电影| 五月婷婷插一插| 亚洲妇女熟BBW| 综合激情五月综合激情五月激情1| 久久曰曰| 热热久久精品视频| 天天干天天日蜜臀av| 五月丁香九九九综合| AⅤ网站在线看| 欧美综合激情五月| 97国产精品女人碰碰| 色狠久| 久久无意婷婷| 999精品乱码77777| 婷婷综合欧美| 123日本不卡在线| 久久婷婷五月综合啪| 超碰操日| 婷婷久久99| 丁香五月性| 精品色色| 色婷婷成人| 91精品又长又大又粗又爽又猛| 91久久国产综合久久| 丁香五月婷婷色| 欧洲区自拍| 91肏| 五月丁香啪啪激情| 欧美婷婷九月| 综合久久99| 五月青青草综合| 婷婷五月丁香基| 天天摸天天舔天天天天爽| 婷婷五月电影| 五月婷婷丁香日韩在线| 91免费看片| 婷婷久久五月天亚洲欧美国产日韩在线观看 | 91成人视频| 开心五月深爱五月| 第五色色色婷婷| 五月天久久www| 婷婷五月影院| 欧美色性色好| 丁香五月激情欧欧美| 九色成人AV在线| 久色激情| 色五月婷婷婷婷| 九月激情综合婷婷| 日本熟妇乱妇熟色A片蜜桃| 五月草视频| 狠狠色色| 欧美三级级99久久| 夜夜骑日日夜夜| 欧美WW在线网| 欧美成人AAA片一区国产精品| 四色五月婷婷在线观看| 久久ER视频com| 99热第一页| 99热国产| 99九九热在线观看| 久久99性爱| 五月天日日操夜夜操| 大香蕉AV电影在线| 天天色情站| 久久久人妻| 亚洲五月天综合| 激情五月婷| 丁香六月婷婷基地| 99re在线播放| 婷婷综合网| 五月婷在线| 五月天中文字幕在线婷婷| 色噜噜狠狠色综合网| 九九视频在线观看视频6| 色五月婷婷91| 欧美成人性爱网| 天天日狠狠| 久久亚洲婷婷| 97偷拍对白视频| 丁香九月婷婷色| 色婷婷婷av| 97干在线看| 性爱激情综合网| 色色色色综合| 91丨九色丨大屁股| 综合网色| 免费观看亚洲AV片| 亚洲综合无码| 五月天婷婷网站888| 丁香五月中文字幕久色| 天堂美国久久| 99婷五月| 五月天色软件| 激情婷婷护士激情| 久久久久视剧HD| 久久久久久久久月丁| 欧美交换配乱吟粗大25P| 精品久热| 26uuu成人网| 大香蕉九九| 99熟女视频| 婷婷人人操| 99久久这里只有精品| http://www.sd-xiangsu.com/| 五月天激情无码高清| 玖玖在线资源视频| 婷婷五月天性| 国产婷婷五月色情综合| 久久丁香综合| 六月婷婷综合激情| 另类小说五月天| 涩涩涩五月天| 成人免费120分钟啪啪| 婷婷丁香六月天| a久久| 香蕉久久国产AV一区二区| 日韩另类| 婷婷五月丁香综合网| 色五月在线综合| 欧美123区免| 超碰色天堂| 99热这里都是精品| 6月丁香婷婷激情| 天天干天天玩天天夜天天射天天操天天日蜜臀少妇 | 婷婷六月丁香开心深深爱| 99热免费精品热久久66| 色婷婷五月天堂资源| 九九热视频免费| 26uuu精品一区二区| 天天摸天天舔天天天天爽| 五月丁香成年黄色| 99精品无码| 4399无码视频| 91丨九色|PRNY熟妇| 欧美色宗和激情| 思思热久久阴99| 婷婷免费无视频| 天天五月天综合网址| 67194中文字幕| 狠狠色综合网站久久久久| 六月婷婷综合| 久热99久热| 五月久久婷婷| 五月激情综合深爱| 99热精品在线| 韩国激情五月天综合网| 日本欧美成人片AAAA| av网址在线播放| 9九色首页| 婷婷在线观看五月天在线视频| 热久久视频99| 这里只有精品1| 超碰天堂网| 日本色天堂| 插插插色综合网| 亚洲天堂色色| 狠狠CAO日日穞夜夜穞AV| 久九九热| 26uuu91| 丁香五月欧美激情| 黄色AAAAAAA| 五月丁香亚洲校园欧美| 色色99| 精品无码久久久久久久久| 婷婷五月天丁香激情| 这里只有精品视频国产| 在线网黄| 一区二区三区四区牛| 伍月婷婷免费视频| 中文字幕在线不卡| 五月婷久久久| 亚州色色色| 欧美精品XXXXBBBB| 99热18| 婷婷五月天激情电影小说| 亚洲第一综合| 激情综合网丁香| 天天爽天天干| 婷婷基地成人五月天| 色综合天天网| 色色99| 超碰国产av| 少妇人妻综合色6699| 丁香五月av| 五月停停色色丁香| 国产成人高清| 午夜丁香综合婷婷| 日本婷色| 人妻中文av| 99人人操人人摸| 婷婷香蕉| 99久久国产宗和精品1上映| 超碰免费成人| 97人凄人人操人人爽| 人人干人人看| 91丁香婷婷综合资源| 99热视精品| 色五月婷婷777| 色五月天天| 丁香六月激情| 狠狠色丁香婷婷基地| 婷婷伊人网| 丁香色情五月天| 亚洲无码色色| 第四色五月激情网| 国产欧美熟妇另类久久久| 婷婷激情五月天7| 五月婷视频| 俺来也综合网精品一区| 婷婷五月婷婷| 五月丁香va| 日日干日日| 免费日韩99| 无码免费人妻A片AAA毛片西瓜| 天天综合激情| 午夜成人片400| 思思色综合网站| av大片在线| 丁香五月天成人| WWW.HENHENL.| 五月综合在线| 婷色五月| 精国产品一区二区三区A片 | 激情五月天综合| 狠干综合| 亭亭五月色男人| www.婷婷网| 青青久在线视频免费观看| 婷婷涩五月天综合| WWW·色色色·COM| 激情欧美五月丁香| 26UUU亚洲欧美| 人操91在线| 婷婷五月色激情欧美激情| 91.com男女操| 狠狠操狠狠| 青青草视频福利| 激情综合婷婷久久| 五月丁香啪啪综合| 婷婷综合五月色播| 黑人熟妇一区二区三区| 九月婷婷久久| 日韩在线婷婷五月天综合| 精品99在线| 婷婷伊人綜合中文字幕| 五月天色婷婷网| 狠狠第四色| 成人精品视频99在线观看免费| www夜夜操wwwcon| www.综合久久.com| 国产精品A成V人在线播放| 午夜做爱影院| 99热99网| 啪精品| 久久五月综合| 狠狠色成人影片| www.婷婷网| 激情丁香五月| 9+1视频网址| 色色色色网| 男人天堂伊人五月丁香| 99久久五月丁香野外| 色五月AV| 国产精品久久久海的味道| 婷婷久久久| 婷婷五月丁香99| 青草五月天| 五月婷婷影| 色色色色色级无码| 日韩人妻在线观看| 亚洲成人AV电影网| 熟妇内谢69XXXXXA片| 综合网啪| 这里只有精品视频99| 五月丁香婷婷综合在线| av国产精品偷| 男人天堂 久久| 免费观看欧美成人AA片爱我多深| 91黄址| 亚洲欧美一区二区三区四区爱爱动图| xxxx五月激情| 97久久人人| 黄色99热| 九九精品re免费视频| 亚洲五月天激情| 嫩草视频在线观看| 亚洲人成色A777777在线观看| 97色色色色色色色色色色色色色| 久久免费精品小视频| 久久色午夜在线导航| 九九热123| 超碰久热| www.婷婷| 色婷婷电影网| 99免费在线视频| 激情久久五月天| 夜夜爽天天爽| 色五月婷婷小说亚洲中文字幕组 | 天天爱天天狠天天透| 狠色色狠网| 大伊久久| 欧美婷婷五月天综合| VA国产在线综合网站| 丁香五月激情六月欧亚激情综合导航 | 狠狠综合久久综合| 色婷婷五月丁香色| 激情婷婷22月间| 中文字幕91,综合| 欲求不满的人妻| 色婷婷人人| 丁香色情五月综合激情| 五月天婷婷丁香人人操91| 综合色七七| 超碰cap| 日本成人内射| 婷婷丁香www视频日本韩国| 91高潮喷水久久久久久久久 | 色婷婷丁香五月高清在线| av婷婷丁香 六月| 99色激| 久色视频在线| 丁香五月激情站| 丁香五月婷婷亚洲另类| 日日操,夜夜撸| 99热精品在线免费观看| 久久久精品人妻| 色婷婷A| 亚洲色综合| 天天日天天色| 亚洲字幕AV一区二区三区四区| 9久热精品在线视频| 青青草原亚洲久| se色综合网| 久久婷婷网| ay2区| 99久久思思| 999热在线视频| 超碰在线观看9| 天天干夜夜谢| 大香蕉伊人丁香五月| 色色丁香五月天社区| 五月丁香久久呀| 玖玖在线视频福利| 六月五月婷婷| 天天综合 99久久婷婷| 五月丁香激情综合网| www.婷婷| 99热精品超碰| 色八月婷婷| 在热视频精品| 婷婷在线视频| 亚洲黄网在线| 91丨九色丨国产打屁股| 丁香五月天av| 九九热啪啪| 国产古装妇女野外A片| 丁香久久九九99| 综合激情婷婷| 毛片色五月| 99re思思热久久| 激情狠狠丁香月| 九九精品亚洲| 超碰日韩人妻在线| 六月丁香大香蕉| 亚洲十月婷婷综合| 中文资源在线a| 国产偷人爽久久久久久老妇APP | 99re热在线视频| 亚洲九九99精品视频在线播放| 中文字幕AV网址| 日韩AV无码影片| 久久久久久久97| 五月天婷婷视频30| 色五月在线播放| 另类丁香综合| 人人干Av| 丁香色婷婷| 人人综合久| 中国激情网| 91狠狠色丁香婷婷综合久久精品| 伦99热| 日日夜夜爽爽| 色墦五月丁香| 啊v视频在线观看| 丁香狠狠色婷婷久久无码视频| 五月天婷婷久久| 九月婷婷激情| 淑女丝袜bi操逼123| 日本熟妇乱妇熟色A片蜜桃| 97在线视频人妻九色| 五月激情婷婷六月| 五月天激情色色| 五月天另类小说亚洲| 婷婷久久五月天丁香| 婷婷WWW久久| 色情激情五月| 天天天天干| 久久免费精品小视频| 天天色粽合合合合合合合| 日逼影音先锋男人资源站| 国产Va视频| 亚洲精品成人| jiujiu热在线视频| 亚洲AV网站| 九九精品热播| 五月婷视频在线| 九九中文字幕九| 99热这里只有精品国产首页| 婷婷色五月大香蕉在线| 久久se 综合网 | 五月丁香亭亭操逼| 色综合视频| 亚洲操B| 免费在线a| 毛片色五月| Y11111111111少妇电影院| 激情五月天色爱| 苗黎美女四级成人版一级二级毛片| www.av视频xx999.com| 91欧美| 99啪啪视频| 久久婷五月天| 人妻久久做| 激情五月天网| 色综合性视频| 67194线路二在线观看| 综合色色婷婷| 五月丁香婷婷老司机| 中文在线视频久1| ...婷婷五月综合不卡,国产在线手机| 夜夜干夜夜操| 99热精品99| 色欲av伊人久久大香线蕉影院| 999婷婷综合| 激情五月综合婷婷| 五月天色婷婷av| 亚洲精品一二三| 色永久| 婷婷色吧| 思思热视频在线| 激情伊人六| 日本eVa一区=区视频| 色色 9| 99色在线观看视频| 色色色色网| 色视五月天婷婷| 色婷婷久久9.com| 五月天社区婷婷丁香社区| 色婷操逼| 成人中文网| 可以免费看的AV网站| www999日韩精品| 欧美日韩aaa| 另类小说五月天综合网| 亚洲精品成人片在线播| 99久久99久久综合| 色婷五月丁香久亚洲| 一区中文字幕电影| 91日本在线观看| 丁香五月天人体| 婷婷久久欧美| 99热这里只有精品2| 午夜不卡成人一区二区| 激情五月天激情五月天| 婷婷五月天综合网| 开心色色五月天综合| 色爱综合网| 凹凸探花电影| 金品在线视频99| 激情视频网址| 激情综合五月开心狠狠| 中文字幕婷婷五月天| 猫咪伊人AV| 99re久久| 九九亚洲视频| 丁香六月色香蕉视频| 色停停影院五月天| 五月激情综合网| 六月丁香啪啪啪| 99re在线观看视频| 九九性爱网| 国产在线激情视频| 一起草AV| 伊人五月综合网| 妻久久久久| 日本久久视频| 69久久久| 婷婷五月花| 色色激情网| 九九亚洲视频| 久久狠狠色| 超碰人人色| 丁香婷婷婷五月综合色情| 一本道在线电影| 色色免费网站| 色色色色色色网站| 五月色丁香激情| 五月天色婷好好| 色偷偷色婷婷| 自拍视频在线观看9| 色婷婷丁香A片区毛片区女人区| 国产成人AV在线播放| 亚洲丁香五月在线观看| 狠狠艹狠狠艹| 久九色| 97色操| 丁香五月婷婷高清| 五月丁香亭亭电影久久| 99热这里只有精品8| 一区视频网站| 97碰人人操| 91午夜激情| 久久久五月四色| 热99这里只有精品视频| 五月色情婷婷开心五月色情| 91色色色| 色六月婷婷| 日韩精品一品二区三区的使用体验| 久久九九激情五月天 | 激情五月婷婷综合色播小说| 五月激情视频网| 亚洲成人色五月婷婷综合| 超碰九九热| 91网站黄| 欧美日韩123| 97色欧美| 久婷久婷| 成人婷婷| 黄色AV日韩| 久久综合激情| 久久综合丁香激情五月| 久久久久久综合88| 97在线碰| 久久五月天婷婷| 激情小说婷婷| 色色色综合网| 日本不卡高字幕在线2019| 国产3p露脸普通话对白| 最近中文字幕2019视频1| 最近免费中文字幕大全高清大全1| 五月天激情网站| 少妇熟女视频一区二区三区| 专区无日本视频高清8| 成人看片网站| 久99婷婷色综合| 久久月天堂| av线电影| 99热国产精品| ay2区| 天天久久综合| 99热日韩| 丁香五婷婷| 婷婷精品| 噼里啪啦在线观看免费完整版视频| 国产精品99久久久久久久女警| 内射干少妇亚洲69XXX| 亚洲狠狠色丁香婷婷综合久久| 性爱激情五月| 五月婷婷亚洲色图| 九九青青草成人| 人人人人人人人人人草| 色色 9| 婷婷五月色综合| 婷婷五月天影院| 丁香五月花影院| 9九色首页| 五月色情婷婷| 五月停停丁香| 久青操| 丁香婷婷综合激情五月色| 高清a片基地| 狠狠爱婷婷爱| 五月丁香WWW| 天天插天天插天天插天天插| 九九精品自拍| 欧美成人AAA片一区国产精品| 99国产97在线,| 9色视频在线| 99热骚货| 超碰免费大香蕉| 成人无码髙潮喷水A片| 97超级碰碰碰久久久| 精品人人操| 日日肏天天操| 久久综合激情| 亚洲婷婷性爱| 超碰人妻在线| 色五月首页| 激情五月婷婷网| 91av无码| 99热久只有精品首页| 欧美色爱五月天| 996er热| 超碰AV成人| 99热精品少| 99只有精品| 99人妻碰碰久久久禁片| 色色色在线| 天天天天做夜夜夜夜做| 婷婷丁香在线| 久久六月综合| 人人爱天天摸摸天天爱| 九九热自拍| 五月精品99综合| 操操操www.com| 婷婷五月色惰| 婷婷成人av| 国产在线6| 五月丁香婷婷色| 五月天涩涩| 风流少妇A片一区二区蜜桃| 五月丁香大相交| 俺去啦综合网| 第九色区av天堂| 久99久视频| 久久久这里有精品| 岛国在线观看91| 色五月丁香总合网| 9久精品视频| 六月婷婷网| WWW,婷婷,COM| 97在线观看| 激情深爱婷婷网| 99九九精品| 99九九在线视频| 婷婷丁香五月综合激情视频| 欧美三级巜人妻互换| 五月天婷婷色在线视频免费观看| 六月天婷婷| 五月激情久久| 婷婷在线免费| 久99婷婷色综合| 五月青青草综合| 色色激情五月天| 亚洲色色色色色色色色色| 丁香伊人网| 欧美激情中文字幕| 五月激情婷婷国产精品久久久久久| 色五月天婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷 | 九九综合久久| 久草视频一,二三四| 亚洲激情综合| 久激情| 色五月在线播放| 六月婷婷日| 久久久久久久久人妻| 日本波多野结衣视频| 欧美亚洲婷婷五月| 影音先锋男人女人| 三级成人网站| 久久99久久99精品,久国产,久久精品免费,99久在线,久久久久国产精品免费网站,9 | 成人视频九九| 99自拍视频在线| 丁香五月综合激情久久潮喷| 中文字幕 中文字幕明步| www.超碰在线| 丁香五月播播| 五月开心婷婷网| 天天狠狠夜夜狠狠2023| 亚洲婷婷丁香五月在线| 五月婷婷综合在线| 天天干-天天日| www天堂99| 噜噜精品| 激情av在线| 国产91视频| 婷婷八月激情| 激情婷婷丁香色五月综合| 91打屁股免费看| 精品无码视频| 中文字幕性爱视频| 久久婷婷国产| 99热这里在线精品| 成人片黄网站色大片免费毛片| 9这里只有精品| 婷婷色一二三区波多野结衣| 国产亚洲精品久久一区二区三区| 婷婷丁香97| 深爱五月天| 亚洲性爱99在线| 精品动漫 无码av| 激情久久五月天| 色色亚洲无码| 国产女18毛片多18精品| 丁香婷婷五月综合| 丁香五月综合高清在线| 国产AV一区二区三区最新精品| 这里只有精品视频在线看| 色蜜婷婷| 91久久99久久91熟女精品| 思思re视频在线| 久久五月天网| 天天做天天爱| 五月综合无码| 婷香五月网在线| 丁香六月婷婷激情| 大香蕉精品视频| 婷婷激情五月综合基地| 综合色婷婷| 婷婷丁香久久| 色婷婷成人五月| 黄网在线免费观看| 涩丁香| 99在线精品视频| 色综合久久伊伊婷婷五月| 色综合色色色色| 婷婷久久综合| 日日操天天操| 丁香五月骚喷水视频| 五月婷婷|欧美| 欧美性猛交 XXXX 乱大交| 5月婷婷6月六月丁香| 激情五月图| 99日在线观看视频| 开心五月婷婷| 精品网站:999WWW| 玖玖精品资源| 超碰在线人妻| 日本英国美国欧美亚洲国产精亚洲日韩精品在线观看 | 自拍盗摄 另类| 五月丁香在线视频观看| 亚洲蜜乳AV| 丰满人妻妇伦又伦精品国产| 婷婷五月天成人| 丁香婷婷人妻综合网| 人伦30P| 97久久精品视频| 婷婷六月色| 欧美日本国产欧美日本韩国99| 亚洲另类婷婷五月综合| 婷婷丁香六月| 亚洲AVDVD| 九热网站| 69精品人人人人| 丁香五月综合| 看片视频在线免费日产在线看| 色五月婷婷激情五月| 日本色色色| 九月综合| 影音先锋91男人资源在线播放| 午夜精品人妻无码一区二区三区 | 99精品视频推荐| 任你弄在线视频免费| 97人人草| 色婷婷AAA| 99re热在线视频观看| www.开心激情| 丁香五月在线观看综合| 色五月丁香五月五月婷婷| 色噜噜狠狠色综合成人99| 大香蕉懂9| av操B网站| 精品久久久中文字幕大豆网推荐理由| 99人人干| 天天干夜晚夜操| 丁香五月性| 婷婷97碰碰| 99热99美国在线观看| 亚洲久久激情| 亚洲欧美一区二区三区爱爱动图| 深爱五月亚洲| 人人摸人人射| 久久996re热这里只有精品无码| 日日夜夜狠狠婷婷色| 婷婷丁香五月天综合AV| 日本欧美在线| 婷婷永久在线| 激情五月天色网站| 久色网址| 8区视频在线| 爆乳熟妇一区二区三区爆乳照片| 人人草人人看| 日亚二欧美| 色色狼人综合| 九九综合精品| 五月激情小说| 五月天激情小说| 国产人妻777人伦精品HD| 国外亚洲成AV人片在线观看| 人与禽A片啪啪| 九八Av| 日本婷婷色| 色五月婷婷影视| 成人啪啪色婷婷久| 五月天激情四射网站| 中文AV在线播放| 九九久久精品| 成人婷婷桔色| 六月亭亭久久综合激情| 天天干狠狠艹| 蜜臀99精品| 99热网站| 99re6在线视频精品免费| AV在线不卡播放| 久久五月婷综合网| www.maotanji.com| 久久综合婷婷| 五月丁香六月婷婷中文版| 伊人久久丁香婷婷六月五月综合| 久99在线视频| 99精吕视频在线观看了| 日本色狠狠| 色欲天天综合网| 久热无码| 26uuu成人网| 欧美日韩国产伦精品日韩人妻一| 国产精品成人AV在线| 日韩九九视频| 日逼免费视频| 久久久久久人妻| 婷婷丁香18| 五月婷婷 激情按摩| 久久九精品| 开心久久五月天| 停停五月天激情网| 亭亭色网| 午夜性做爰电影| 97久久超视频| 激情视频婷婷五月花| 六月亭亭久久综合激情| 超碰国产AV| 99成人| 九九久久偷拍| 大香蕉九九| 五月天激情婷婷小说| 九九精品综合| 欧美成人一区二区三区在线视频 | 六月婷婷综合| 五月激情婷婷偷拍| 97碰啪啪| 婷婷激情五月综合在线视频| 123草逼网| 最近中文字幕2019视频1| 婷婷丁香五月色偷偷| 色五月婷婷在线视频| 婷婷五月天AV| 国产精品久久久久久久久久久久| 另类丁香综合| 情欲综合网| 97香蕉久久超级碰碰高清版| 色五月aV| 中文AV在线观看| 国外亚洲成AV人片在线观看| 99热色婷婷| 亚洲十月婷婷综合| 99久久婷婷国产综合精品草原| 超碰九热| 欧洲激情网站| 色播播五月天| 久久婷婷五月综合色欧美| 亚洲五月婷婷| 色色色色色网| 日本黄色三级片内射| 久草五月| 婷婷丁香五月综合免费视频百花| 情欲禁地| 丁香六月婷婷久久综合| 久久五月丁香| 好吊兆人妻| 久久这里都是精品免费| 久久婷婷五月天| 激情综合五月丁香六月婷婷| 深爱女色婷婷丁香五月亚洲图区| 99热8| 狠狠色噜噜狠狠狠狠狠色综合久久| 俺也去婷婷五月天第五色| 婷婷色操| 色情五月天导航| 亭亭五月激情亚洲在线| 婷婷综合五月天| 91在线日| 热99免费在线| 热久久这里只有三级视频| 日本成人噜噜噜噜噜| 91超碰人人操| 97操在线视频| 亚洲网站999| 久久伊人婷| 婷婷五月天激情诱惑| 五月婷婷黄色网址| 丁香五月激情婷婷激情| 五月婷婷六月丁香| 色婷婷电影| 丁香五月综合婷婷| 99riAv1国产在线观看| 99热这里只有精品9| 97狠狠碰| 黄色激情五月天| 热婷婷av| 九九热只有精品| 99热九九九九| 丁香婷婷色情社区成人小说| 8050一级网| 婷婷丁香五月天亚洲| 久久婷婷九月国产精品| 五月婷婷激情69| 激情五月婷婷综合秋霞| 精品人妻久久久久久久| 熟女人妻视频| 六月婷婷影院| 国内精品免费一区二区2009| 激情五月,深深爱五月| 97久久婷婷色| 99热这里只有精品 搜| 午夜丁香久久久久久| 五月情婷婷| 婷婷伊人75| 亚洲AV综合在线观看| 成人丁香五月|