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

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(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è)場(chǎng)景是我對(duì) SpringBoot 停機(jī)機(jī)制最初的記憶。默認(rèn)情況下SpringBoot 收到 SIGTERM 并不代表它會(huì)等手頭的事干完而是“幾乎立刻”把 Web 容器和 Spring 容器拆掉所有在途請(qǐng)求直接被 Reset。SpringBoot 優(yōu)雅停機(jī)機(jī)制是解決這類問題的標(biāo)準(zhǔn)方案它從 Spring Boot 2.3 開始由官方原生支持。這篇文章我會(huì)帶你搞清楚優(yōu)雅停機(jī)到底在哪一層生效、兩行配置背后發(fā)生了什么事、實(shí)測(cè)中請(qǐng)求表現(xiàn)差多少、以及真正上線時(shí)最容易忽略的注冊(cè)中心和容器編排坑。適合正在做服務(wù)發(fā)布、彈性伸縮、壓測(cè)驗(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)前請(qǐng)求處理完再退出”。這個(gè)說法只說對(duì)了一半。JVM 確實(shí)會(huì)執(zhí)行 ShutdownHookSpring Boot 也注冊(cè)了自己的SpringApplicationShutdownHook但問題在于默認(rèn)停機(jī)模式下Spring 容器關(guān)閉 WebServer 時(shí)并不會(huì)等待活躍請(qǐng)求。你可以把那次事故的現(xiàn)場(chǎng)還原一下。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ù)庫(kù)事務(wù)提交但響應(yīng)沒送到客戶端調(diào)用方就會(huì)選擇重試于是重復(fù)下單、重復(fù)扣庫(kù)存、對(duì)賬不平全都來了。1.2 粗暴關(guān)停的典型故障清單這類問題在線上有非常固定的模式我整理了一張表基本覆蓋了絕大部分事故場(chǎng)景故障現(xiàn)象真實(shí)原因涉及模塊客戶端提示 Connection resetTomcat 在請(qǐng)求進(jìn)行中直接關(guān)閉連接Web 容器下游收到 502/504Nginx 在 Upstream 節(jié)點(diǎn)關(guān)閉瞬間轉(zhuǎn)發(fā)請(qǐng)求失敗負(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)度注冊(cè)中心出現(xiàn)異常實(shí)例服務(wù)端進(jìn)程已死但心跳還沒過期Eureka/Nacos這些故障有個(gè)共同點(diǎn)都不是代碼邏輯錯(cuò)誤而是進(jìn)程退出順序問題。業(yè)務(wù)代碼跑得好好的純粹因?yàn)橥C(jī)姿勢(shì)不對(duì)把“正常完成的請(qǐng)求”變成“客戶端感知到的失敗請(qǐng)求”這才是最虧的。1.3 先分清三個(gè)概念JVM ShutdownHook、Actuator Shutdown 與優(yōu)雅停機(jī)網(wǎng)上搜“SpringBoot 優(yōu)雅停機(jī)”經(jīng)常看到兩種做法混在一起容易踩坑。第一種是 JVM 層面的 ShutdownHook代碼里Runtime.getRuntime().addShutdownHook(new Thread(...))它只保證“JVM 退出時(shí)我能執(zhí)行一段代碼”但改變不了 Web 容器已經(jīng)在關(guān)閉的事實(shí)。你用這個(gè)方式做“通知注冊(cè)中心摘流”因?yàn)轫樞虿粚?duì)往往還沒來得及發(fā)請(qǐng)求容器已經(jīng)斷了。第二種是 Actuator 的/actuator/shutdown端點(diǎn)需要手動(dòng)打開并 POST 觸發(fā)。它本質(zhì)上也是觸發(fā)ApplicationContext.close()在 Spring Boot 2.3 之前它是實(shí)現(xiàn)“相對(duì)優(yōu)雅”停機(jī)的主要手段因?yàn)槟憧梢钥刂朴|發(fā)時(shí)機(jī)不讓它依賴操作系統(tǒng)信號(hào)。第三種才是真正的“優(yōu)雅停機(jī)Graceful Shutdown”也就是從 2.3 開始官方內(nèi)置的能力。它做的事情很明確先停止接收新請(qǐng)求然后等待所有在途請(qǐng)求處理完成或超時(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對(duì)不起server.shutdowngraceful這個(gè)配置是無效的日志里連個(gè)警告都不會(huì)有。我見過有人把server.shutdowngraceful加到 2.2 項(xiàng)目上發(fā)版之后以為萬(wàn)事大吉結(jié)果壓測(cè)一打就露餡。所以第一步永遠(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ù)載均衡或注冊(cè)中心留出摘流時(shí)間再手動(dòng)觸發(fā)/actuator/shutdown不要裸著發(fā) SIGTERM。2.2 核心配置只有兩行但第二行含義經(jīng)常被讀錯(cuò)在application.properties或 yaml里加上server.shutdowngraceful spring.lifecycle.timeout-per-shutdown-phase30s第一行很簡(jiǎn)單把默認(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 官方文檔對(duì)優(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 開始提供了相對(duì)成熟的 Connector pause 線程池等待機(jī)制Jetty 和 Reactor Netty 也能做到“停止接收新請(qǐng)求等待在途請(qǐng)求完成”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支持等待在途請(qǐng)求但部分版本需要額外注意連接超時(shí)Reactor Netty支持WebFlux 場(chǎng)景可用2.3 起支持等待事件循環(huán)中請(qǐng)求Undertow支持能用但社區(qū)反饋的邊界問題相對(duì)多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 秒”之類的邏輯要測(cè)試它與 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í)行已注冊(cè)的 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 不再接收新請(qǐng)求Tomcat 表現(xiàn)為停止 accept 新連接。等待活躍請(qǐng)求執(zhí)行完成。超過timeout-per-shutdown-phase的請(qǐng)求不再等待直接強(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í)行請(qǐng)求的線程不會(huì)被打斷。第二層是線程池層。Tomcat 內(nèi)部維護(hù)了一個(gè)執(zhí)行 Servlet 的工作線程池優(yōu)雅停機(jī)時(shí)它會(huì)等線程池里所有任務(wù)執(zhí)行完。如果你的某個(gè)接口里定義了 10 秒Thread.sleep它就是這里被等的重點(diǎn)對(duì)象。第三層是業(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í)長(zhǎng)。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)象。它正在等待在途請(qǐng)求。等所有請(qǐng)求處理完會(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í)間取決于在途請(qǐng)求 Graceful shutdown complete Closing org.springframework.context.annotation.AnnotationConfigApplicationContext ...如果你始終看不到第二行日志大概率是某個(gè)請(qǐng)求永遠(yuǎn)不返回比如 WebSocket 連接、SSE 長(zhǎng)連接、卡死的任務(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ù)里“最長(zhǎng)的一個(gè)慢請(qǐng)求耗時(shí) 數(shù)據(jù)源連接歸還時(shí)間 自定義清理時(shí)間”都估算進(jìn)去。寧愿給 60s也不要卡在 30s 邊緣。4. 用壓測(cè)說話優(yōu)雅停機(jī)前后的請(qǐng)求行為對(duì)比4.1 測(cè)試環(huán)境與壓測(cè)準(zhǔn)備配置說再多不如自己跑一輪壓測(cè)直觀。下面是我在本地搭的一組最小驗(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(請(qǐng)求進(jìn)入 Thread.currentThread().getName() 時(shí)間 System.currentTimeMillis()); TimeUnit.SECONDS.sleep(10); System.out.println(請(qǐng)求完成 Thread.currentThread().getName() 時(shí)間 System.currentTimeMillis()); return ok; } }壓測(cè)用 ab 就夠了不用上 JMeterab -n 500 -c 50 http://127.0.0.1:8080/slow這個(gè)命令的意思是總共 500 個(gè)請(qǐng)求50 并發(fā)每個(gè)請(qǐng)求都要花 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í)際壓測(cè)中看到過更夸張的情況有些請(qǐng)求已經(jīng)進(jìn)入 Tomcat 工作線程但還沒來得及打印“請(qǐng)求進(jìn)入”進(jìn)程就關(guān)了。這類請(qǐng)求就是“連業(yè)務(wù)代碼都沒跑完就被掐斷”的典型。4.3 開啟優(yōu)雅停機(jī)新請(qǐng)求被拒絕在途請(qǐng)求正常收尾然后把兩行配置加上重新啟動(dòng)并壓測(cè)。中途 kill -15重點(diǎn)關(guān)注幾個(gè)表現(xiàn)第一控制臺(tái)輸出Commencing graceful shutdown之后原本已經(jīng)在跑的接口線程繼續(xù)打印“請(qǐng)求完成”沒有中斷異常。第二ab 的Complete requests和Failed requests不再難看。已經(jīng)進(jìn)入 Tomcat 的請(qǐng)求基本都能正常拿到響應(yīng)。第三停機(jī)期間新進(jìn)來的請(qǐng)求會(huì)失敗因?yàn)槿萜饕呀?jīng)不再 accept。你會(huì)在 Tomcat 日志里看到連接被拒絕的痕跡這是預(yù)期行為。所以優(yōu)雅停機(jī)的核心價(jià)值不是“所有請(qǐng)求都不失敗”而是“已經(jīng)進(jìn)入的請(qǐng)求別被半路打死”。至于新請(qǐng)求本來就應(yīng)該靠前面的負(fù)載均衡摘流解決這屬于第 5 章要討論的問題。4.4 超時(shí)場(chǎng)景超過等待上限的請(qǐng)求最終怎么收?qǐng)鲈衮?yàn)證一個(gè)邊界如果請(qǐng)求耗時(shí)超過timeout-per-shutdown-phase會(huì)怎樣把spring.lifecycle.timeout-per-shutdown-phase改成3s然后接口 sleep 10 秒壓測(cè)中途 kill。你會(huì)發(fā)現(xiàn)3 秒之后日志里出現(xiàn)容器強(qiáng)制關(guān)閉的動(dòng)作。那個(gè)還在 sleep 的請(qǐng)求被中斷客戶端同樣會(huì)收到連接重置。所以優(yōu)雅停機(jī)不是“無限等”它是有上限的。上限到了該斷還是斷。這個(gè)測(cè)試特別適合用來跟業(yè)務(wù)方對(duì)齊預(yù)期停機(jī)窗口內(nèi)新請(qǐng)求會(huì)失敗超長(zhǎng)請(qǐng)求會(huì)失敗只有“正常長(zhǎng)度”的在途請(qǐng)求能被保護(hù)。4.5 生產(chǎn)視角看待壓測(cè)結(jié)果跑完這些對(duì)比我建議把結(jié)論寫進(jìn)發(fā)布手冊(cè)發(fā)布前先確認(rèn) Kafka 消費(fèi)位移、消息推送、文件上傳這類長(zhǎng)任務(wù)耗時(shí)不超預(yù)算。壓測(cè)結(jié)論要讓運(yùn)維、QA、后端三方都看到別只停留在“我這邊加了配置”。把壓測(cè)中的Graceful shutdown complete日志出現(xiàn)時(shí)間點(diǎn)記錄下來作為每次發(fā)布前的參考基線。5. 單機(jī)優(yōu)雅不解決流量分配注冊(cè)中心、Nginx、Docker 和 K8s 的配合5.1 最容易被忽視的坑負(fù)載均衡還在往停機(jī)節(jié)點(diǎn)甩流量單機(jī)優(yōu)雅停機(jī)只解決“請(qǐng)求已經(jīng)進(jìn)來了”的情況。但發(fā)布的時(shí)候前面掛的 Nginx、Gateway、注冊(cè)中心客戶端并不知道這個(gè)節(jié)點(diǎn)正在停機(jī)它們?nèi)詴?huì)把新請(qǐng)求轉(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。如果用的是注冊(cè)中心更標(biāo)準(zhǔn)化的做法是調(diào)用服務(wù)治理 API 提前反注冊(cè)注冊(cè)中心摘流方式說明Nacosnacos-client的deregisterInstance主動(dòng)摘除后客戶端拉取新列表需要時(shí)間Eureka發(fā)心跳把狀態(tài)置為 OUT_OF_SERVICE配合 eureka 客戶端緩存刷新Consul服務(wù)實(shí)例標(biāo)記為 maintenance 或反注冊(cè)同樣存在傳播延遲無論哪種方式都要記住一個(gè)現(xiàn)實(shí)注冊(cè)中心的摘流是異步傳播的客戶端可能存在緩存延遲。所以不要“反注冊(cè)完立刻殺進(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ì)對(duì)信號(hào)做二次轉(zhuǎn)發(fā)如果默認(rèn)不是SIGTERM優(yōu)雅停機(jī)可能根本沒被觸發(fā)。Dockerfile 里寫清楚就沒有這個(gè)歧義。5.4 Kubernetes 滾動(dòng)發(fā)布readiness 探針與 preStop 的最佳姿勢(shì)K8s 場(chǎng)景跟 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ī)。這樣組合起來才能真正做到“先摘流再等請(qǐng)求最后殺進(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í)在等各自的重請(qǐng)求完成。等它們?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ī)請(qǐng)求被掐斷”卻差點(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í)太長(zhǎng)的操作它會(huì)被計(jì)入整個(gè)關(guān)閉流程超時(shí)一樣會(huì)被強(qiáng)殺。6.2 SmartLifecycle 與 phase 控制注冊(cè)中心為什么必須放在高 phase如果你需要在 Web 容器停止之前就把注冊(cè)中心摘掉更規(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(先從注冊(cè)中心摘除實(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)用失敗。不過也要注意摘流后必須在注冊(cè)中心傳播延遲里再拖幾秒所以我一般會(huì)在stop()里加一個(gè)輕量 sleep別一摘完就立刻進(jìn)入下一步。6.3 定時(shí)任務(wù)、線程池、數(shù)據(jù)庫(kù)連接池在停機(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ù)庫(kù)連接池這塊HikariCP 在容器關(guān)閉時(shí)會(huì)等待租借出去的連接歸還但默認(rèn)的等待時(shí)間并不長(zhǎng)。如果某個(gè)慢 SQL 在停機(jī)瞬間還沒跑完Hikari 的連接會(huì)被強(qiáng)制釋放事務(wù)可能回滾。所以你真正要評(píng)估的是“業(yè)務(wù)慢請(qǐng)求的最差耗時(shí)”而不是平均值。6.4 上線前照著抄的停機(jī)檢查清單最后給一份可以直接抄進(jìn)發(fā)布手冊(cè)的檢查清單確認(rèn) Spring Boot ≥ 2.3配置了server.shutdowngraceful且把timeout-per-shutdown-phase按最壞情況調(diào)大。用kill -15壓測(cè)一次確認(rèn)出現(xiàn)Commencing graceful shutdown和Graceful shutdown complete兩行日志。Docker 場(chǎng)景檢查stop-timeout或stop_grace_periodK8s 場(chǎng)景檢查terminationGracePeriodSeconds與 preStop。確認(rèn)注冊(cè)中心摘流在進(jìn)程退出前完成并留了緩沖時(shí)間。明確新請(qǐng)求在停機(jī)窗口內(nèi)注定會(huì)失敗由負(fù)載均衡/網(wǎng)關(guān)做兜底。針對(duì)長(zhǎng)連接和長(zhǎng)期占用線程的請(qǐng)求WebSocket、SSE、文件上傳單獨(dú)確認(rèn)超時(shí)策略。我個(gè)人的體會(huì)是優(yōu)雅停機(jī)不是一個(gè)讓“所有請(qǐng)求零失敗”的方案它是一個(gè)讓“該成功的請(qǐng)求能成功”的方案。真正要啃的硬骨頭在停機(jī)前的那幾步流量調(diào)度上。把代碼里的等待時(shí)間、容器參數(shù)里的超時(shí)時(shí)間、K8s 里的優(yōu)雅終止時(shí)間這三件事對(duì)齊線上發(fā)布才算真的穩(wěn)健。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
亚州黄站| 成人熟女视频一区二区三区| 国产精品一区二区三区,亚洲综合| 哑洲在线| 精品视频久久区| 五月综合激情网| 欧美性爱中文字幕无线码| 97超碰护士| 国产日韩中文字幕欧美| 久久做97| 久久精品老司| 欧美日韩淫加| 91久久久久久久久久久| 夜夜爽77777| 日韩欧美午夜视频在线| AV网站高清无码在线观看| 亚洲男人天堂2017| 亚春色色| 国产蜜臀精品一区二区尤物| 精品一区二区三区四区外站 | 中文字幕在线2| 国产日本熟女顶级一区二区三区视频 | 国产一区二区成人av在线播放| 欧美日韩不卡传媒| 欧美第五页| 国产女主播视频在线观看| 青女在线| 免费超碰97久久| 91天射| 91老熟女老女人国产老太| 午夜情侣自拍网站| 日逼五月天| 亚洲揄拍网| 少妇69中文| 91 国产丝袜在线放观看| 色av中文字| 日韩在线76| 清柠毛片| 欧美日韩理论一区| 超碰精品人妻狠狠干| 黑人与人妻| 天天热精品| 91狠狠狠| 天天插夜夜操| 黄色性爱网网| 91狠狠综合久久| www.久久爱| 天天综合网~69| 欧美乱色| 欧美久久婷婷| 国产熟码AV| 大香蕉手机在线| 99少妇| 亚洲女人91| 欧综合网| 亚洲视频1区| 欧美日韩国内不卡| 青草青青久久久久久国产| 五月天色图| 男人天堂综合| 欧美在线天堂| 无码逼| 欧美成人精品A片免费一区99| 91精品黄在线观看| 亚洲A色| 麻豆色99999| 韩国三级一线观看久| 啪啪啪精品视频| 欧美熟爽综合| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 美国日韩黄色片| 超碰无码五月97| rivers-china.com| 在线亚洲丝袜视频网站| 中文自拍欧美影视| 十八禁电影伊人网| 欧美同性恋 的搜索结果 - 91n| 久久久91福利姬| 亚洲欧美清纯| 婷婷五月天激情网| 久久久99久9| 亚州色国| 夜夜草天天| 懂色AV蜜臀无码精品APP| 色一射色一射| 久久久久久久91| 日韩欧美大力操| 一级黄色影片| 熟女久久久| {男男暴菊gay无套网站| 日本999精品视频| 天天在线91| 人干人人人操人人摸| 97超碰jingpin| 久久久精品中文字幕麻豆| 最新制服中文第一页| 370p日韩欧美亚洲精品| 久久综合中文国产| 性夜影院爽黄A爽免费动漫| 亚洲91色在线| 亚洲动态色图| 超碰公开久久网| 国产AV天美传媒一区二区三区 | 这里有精品| 96久久久精品| 7777奇米影视久久| 91欧美偷拍| 60秒不遮不挡| 99热成人| 资源新线在线天堂| 久色网| 亚洲九九视频在线观看| 成人八戒网站| 欧美碰碰综合色| 91|九色|国产熟女| 91痴汉| 欧美精品日韩一区二区| 色网亚洲人| 青青操狠狠撩| 日日干日日摸| 91色久| 啊啊啊啊好疼| 亚洲情色电影网| 超碰97综合| wwwss在线观看| 日韩啪啪视频| 91偷拍欧美亚洲| 亚洲一区日韩精品中文字幕 | 无码日韩网站| 亚欧美综合网| 日本三级小说中文字幕| 一级性爱视频免费在线| 97久久超碰国产网站| 中文字幕日韩人妻视频| 果冻传媒A片一二三区| 浪人综合网| 天天综合网合集91| 色玖玖| 超碰97中文| 青青欧美在线| 日va操| 欧美肥臀在线| 九九视品黄色| 久久久久亚洲AV无码专区少妇| 久久只有精品一区二区三区| 免费公开人人操| 一本色道久久综合狠狠操| 天天操狠狠日夜夜干超碰撸com视频在线观看| 亚洲国产97在线精品一区| 涩五月婷婷| 亚洲熟伦熟妇AV无码春色| SS久久| 蜜桃av综合网发布| 在线a亚洲视频播放在线| 欧美一区二区在线资源| 婷婷综合网站| 亚洲精品乱码线路中文字幕| 中出20p| 国产精品丝袜在线| 亚洲国成人情色好看电影| 日本色色色色色视频| 五月天久久人妻| 国内精品久久国产,www香蕉久久五月丁香,亚洲欧美日韩精品永久在线,日本精品一 | 国产v亚洲v日韩v欧美v片另类| 亚洲色图加勒比| 国产麻豆福利av在线播放| 麻豆色约约| 亚洲国成人情色好看电影| 国模精品娜娜一二三区| 男人天堂黄片| 中国人高清www色视频免费| 国产99999久久精品| 亚洲激情综合| 伊人黄色视频免费观看| 岛国黄片网站| 日韩成人精品| 亚洲综合欧美| 亚洲国产综合图区中文字幕 | 麻花豆传媒剧国产MV出差| 91成人精品| 精品九九九九九九九九九| 天天流夜夜操| 九九黄色网| 夜夜影视四色| 日韩AC| 色操逼网| 亚洲综合另类小说色区亚洲成av人片在www | 超碰色图| 欧美亚洲在线| 久久岛国| 99热| 丁香五月天堂网| 日本操大逼| 日日操免费视频| 91国模| 久久九九久精品国产尤物|国产精品爽黄69天堂A片潘金莲,国产亚洲精品第一综合 | 亚洲国内精品成人不卡| 亚洲91网站| 亚洲综合有玛| 性性欧美| 亚洲天堂美臀在线| 东北操逼| 欧美色蜜桃97| 日曰骚久久精品| 日日躁狠狠躁天天躁精品| 欧美青青视频| 欧美洲精品一级| 色偷偷超碰亚洲| 亚洲丝袜二区在线| 欧美激情专区| 国产精品女aA片爽爽视频| 欧洲亚洲少妇| 97色碰| 久操97| 97碰| 久久精品国产72国产精品福利| 精品人妻一区| 丁香六月婷婷久久综合| 日少妇视频| 激情小说在线视频| 精品久久久久久AV无码| 熟女五十路一区二区三| 99无码视频| 日韩av女优在线免费一区| 嗯嗯啊中文字幕| 欧美操逼视频二区| 97久久久久久久久久| www.成人无码| 国产日产精品久久快鸭的功能介绍| 1级黄色夫妻对换性交免费看| 成人性爱AV在线免费观看| 国产精品视频自拍在线| 久精品无码av一区二免费国产在线观看| 午夜理论片在线观看免费| 欧美日韩99| 91无人区卡一卡二卡三乱码入口最新版:能让用户有更多选择的选择-经典说说-爱 | 麻豆AV一区二区| 天天天天天天天天综合| 亚洲欧美97√| 亚洲天堂五月天国产| 国产亲戚伦亲在线| 麻豆天美电影一区二区| 老熟妇一区二区三区啪啪| 男人的天堂日韩| 亚州综| 日韩人妻一区二区| 成年人黄色小视频网站| 高清无码网址| 色黄色美女大长腿午夜视频| 开心五月激情网| 综合国产97| 老司机午夜精品福利视频一区二区| 99色热| 另类亚洲一区二区三区| 五月婷婷久久综合| 黄页网站成人免费| 人人干人人操人人..com| 精品熟女一区=区三区| 精彩久久中文| 国产无码高清操逼视频| 久久久久久久人妻| 国产美女高潮视频| av无码精品久久久久| 久久99黄色卞西瓜| 我爱操| 欧美一区二区福利在线| 91女网站| 91老司机在线| 欧美黄片视频在线观看免费| 少妇极品熟妇人妻无码| 国产精品美女久久久久久网站| 日欧操屄视频| 亚洲精品人伦一区二区| 国产真实野战在线视频| 夜夜爽爽夜夜精品视频| 中文字幕国产| 久久 亚洲 日韩 人妻| 亚洲图片91| 国产AV高清AV无码| 夜夜嗨一区| 中文字幕成人理论在线| 色香欲天天天天综合色| AV污污污污| 亚洲欧洲第二视频在线观看色图| 高清国产精品无码| 伊人久久久日韩一区| 九九综合九九综合| 亚洲区限制级| 国产性爱在线视频一区二区| 一区二区三区蜜桃成人撸久久东京热 | 四虎精品永久在线播放| 91色鬼| 99re免费| 久久久av爱| 亚洲欧美在线观看无码| 日韩在线97| 熟女乱伦A| 学生妹天天看| 嗯嗯啊在线视频| 精品一区二区三区18| 日本污ww视频网站| 欧美 亚洲精品首页| 久久人妻精品| 国产呦精品系列在线观看| 天天欧美欧美亚洲网| 91宗合网| 日韩钢筋无码高清啾啾啾| 素人一区二区三区日韩| 天天操美美| 人人色人人操在线| 大香蕉78| 人妻少妇精品久久久| 玖玖资源综合在线视频| 巨乳特殊服务按摩| 欧美精品双插| 天天摸,夜夜摸| 日本孕妇一区二区视频操逼免费看| 最新亚洲风情电影| 五月激情小说| 综合亚洲欧美精品日韩?v| 亚洲自拍欧美国产首页网曝 | 中 文字幕一区二区三四 五 区日 日 骚| 免费观看国产不卡av| 97超碰中文字幕| 亚洲五月丁香花狠狠干一区二区三区| 国产福利一区二| 超碰久久网| 发朗少妇买婬全视频中文| 黑人免费福利视频| 九一国产精品| 日本不卡码黄色| 国产精品久久99日日| 玖玖爱视频网站| 亚洲色图 欧美热图 清纯唯美 另类自拍 | 日本大片日本一区二区免费高清| 中国AV美女| 香蕉免费一区二区三区不读 | 影音资源男人日韩| 精彩视频日韩| 中文字幕av亚洲在线| 狠狠爱大香蕉| 东京热伊久| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 97超碰色屌| 亚洲国产欧美中文永久| 另类小说综合网| 超碰97 线线 在现| 青青青草原| 第45页一区二区| 丝袜 亚洲 偷拍| 国产久久av| a'v在线资源| 91国产丝袜白虎| 黄色不卡视频| 亚洲日韩av一区二区三区百合| 日韩欧美亚洲一区二区三区影院| 成人av在线播放| 丰满人妻-区二区三区| 久久久久久久久久久久久女过产乱-少妇高潮一区二区三区喷水-成人AV | 精品国产少妇高潮视频| 综合色色婷婷| 国产AV高清AV无码| 美國A片| 操操操五月天婷婷丁香影院| 久久久一区二区三区四区五区| 另类专区加勒比| 欧美97在线观看| 操九九九九九九| 亚洲第一综合| 调教熟妇 久久久久久| 免费毛片在线播放| 91操人视频| 熟女六十路| 国产 丝袜 欧美中文 另类| 精品无码不卡视频| 欧美精品久久| 久久鲁夜| 精品人妻一区二区乱码一区二区| 熟女一区二区| 99操| 欧美色图91p| 激情视频一二三| 加勒比AV天堂| 啊啊在线| 96久久久久| 九九九九国产| se吧提供91精品国产91久久久久久| 久久久九九九| 牛牛操视频逼| 一线黄色免费性爱片| 操逼逼中文字幕| 美國A片| 强奸乱伦动态污图免费| 久久久婷| 白丝少妇一区二区| 九九九九九九九| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 色色色网站| 精品精品精品| 久操九九九九九九九九九九九九九九九九九九九九九九九九九九九九 | 久久久九精品| 91色欧美| 色吧5亚洲| 在线播放免费av福利片| 91free福利| 超碰久久性爱| 精品二区三四区五电影| 97亚洲在线| 色综合98| 国产一区二区久久| 久久久久99精品成人片蜜臀| 污色区网站| 色色福利| 翘臀vidoes| 动漫区日韩区欧美区| 伊人视频| av毛片aaaaa免费看| 岛国黄色短视频| 国产女人成人精品视频| 久久夜色一区二区| 亚洲综合在线91| 亚洲乱码精品一区二区| 蜜臀操逼黄色视频操的好爽| 97久久资源| 色拍偷亚洲| 91一区二区三区蜜桃| 97欧美精品| 久久伊人亚洲AV无码网站 | 日日狠狠久久偷偷色综合免费| 亚洲日韩av一区二区三区百合| 亚洲色悠悠久久88| 亚洲高清综合网| 欧美性生活免费网| 久久久草成人网站久久久草成人久久久草久久久 | 久久日韩毛| wuyechaopeng| 69国产对白刺激| 911粉嫩人妻| 青青草视频久久久久| 亚洲黄色电影| 国产热RE99久久6国产精品首| 中文字幕一区 二 区 三 四 五 区日 日 骚 | 91九久| 亚洲精品97久久中文字幕| 久久久一区二区三区三州| 伊人亚洲国产一成人久久精品,久久| 97精品久久久久久久| 日韩欧视频| 国产精品爽爽va在线观看98| 国产在线综合福利网站| 亚洲色天堂日韩中| 国产97在线 | 亚洲| 日本三级R| 蜜屁Av| 日韩性爱免费观看视频| 国产欧美一区二区| 亚洲影院无码在线| 嗯……啊…嗯嗯…啊…好舒服| 伊人九九| 日日日日日| 少妇高潮一区二区三区在线| av天堂手机版追回| 91美女视频直播| 性爱乱伦一区| 四虎884| 久久久国产三级黄色片| 免费视频观看60秒| 天天日天天插| 男人的天堂 在线一区| 免费视频无码| 欧美性爱一区二区| 精品久久久久黄少妇| 密乳视频在线| 欧美日韩亚洲天堂网| 无码人妻一区二区三区色欲aⅴ | 日韩无码极品| 亚洲不卡av在线| 国产日韩精品suv| 亚洲综合影视| 亚洲成人性| 蜜桃视频啊啊啊啊| 中国亚洲呦女专区| 久久无码精品| 亚洲欧美色综合| 亚洲精品白浆高清久久久久久| 白 大 人妻 区 在线| 久久黄色性爱视频| 天天影视综合色| 99热精品在线在线| 欧美日韩国产成人高清| 久久国产对白激情浪潮 | 日韩欧美亚欧在线视频| 亚洲欧洲色情高清| 久久精品国产亚洲AV嘿嘿| 在线电影亚洲色图| 久久熟女人| 天天操人人操狠狠插| 亚洲蜜臀视频精品久久| 久久精品国产精品亚洲艾通辽熟妇 | 岛国黄色大片网站| 欧美日韩在线小说 | 啊啊啊啊好疼视频| 97超碰国产亚洲精品资源| 情趣丝袜无码操逼视频| 久久久亚洲熟妇资源| 中文字幕国产精品1区| 色操逼网| 日本加勒比无码专区| 亚洲激情 欧美色图| www国产天美久久久| 欧美中文综合| 亚欧美色图| 色女综合| 天天日天天舔天天喷天天射| 色色香蕉| 人妻偷拍一区二区三区| 久久嫩草| 天天在线91| 伊人精品视频| 日韩免费人妻色情网站| 天天躁日日躁XXXXYY| 久久亚洲中文字幕视频| 无套后入双马尾| 天天摸天天舔天天操| 欧美 亚洲 制服 精品| 天天操天天舔| 日本免费中文字幕在线| 丁香婷婷五月| 国产日韩久久| 大逼色网站| 天美一区在线| 欧色性第一页| 99国产精品免费| 欧美日韩国产中文精品字幕自在自线,| 国产一区二区在线电影| 夜夜天天噜狠狠爱2021| 亚洲欧美色图小说| 亚洲牲交| 蜜桃av色偷偷av老熟女| 欧美色图91| 欧美日韩亚洲少妇寂寞影院正在播放| 天天摸夜夜操视频| 精品人妻一区春色| 综合欧美日韩在线| 久久99精品国产| 91网18| 澳门成人网站久国产日韩| 99热综合| 久久精品一区二区三区不卡| 99热这里| baisiav| 天天日老熟妇| 精品久久99| 97久精品| 中文字幕片| 午夜天堂精品久久| 亚洲视频小说| 国产亚洲日本| 麻豆a'v电影| 欧美亚洲清纯| 清纯唯美综合| 亚洲AV无码乱码| 亚洲一区日韩精品中文字幕| 无码久久国产 | 97国产色综合| 综合激情97| 日韩9999| 2003天天干夜夜操| 狠狠爱夜夜| 亚洲欧美人妻| 色性荡荡荡荡视频| 狠狠图片青青草| 天综合网欧美| 蜜臀Av一区二区三区| 青青草久草| 色欲久久久久综合网| 国产精品毛片?v一区二区三区| 无码国产Av| www.色操逼| 少妇二级| 欧美大色交| 青草精品视频一日本久久久久网站| 亚洲熟女av中文字幕| 一区二区三区国产在线播放 | 日韩av三四区| 俺也射| 国产精品久久蜜乳av| 人人人摸人人| 欧美一级A片在线看视频性色| 920日本午夜免费| caopeng97人妻| 黄页网站成人免费| 男女日B国产| 日韩av不卡在线观看| 九九热精品在线| 综合97久久| 精品九九| 久99热| 婷婷香网站| 亚洲欧美黄| 看一级特黄a大一片| 激情自拍 校园春色| jiujiujiujingpin| 国产精品点击进入在线影院高清| 日人妻视频91| 97国伦国色| 国产精品白丝www| 国产成年精品高清在线观看91| 日本99视频| 蜜臀久久久国产| 国产精品诱惑| 国产精品一区二区黄片| 国产天美传媒精品| 欧美不卡五十路| www.91久久| 91色色综合| 91P0RNY大屁股人妻| 超碰视97中文| 26uuu欧美日韩| 国产成人资源| 久久啊啊| 中文字幕在线日亚州9| 金典av| 亚洲97成人在线观看| 色色国产| 淫淫综合网| 美女黄频a美女大全免费皮| 蜜桃不卡一区二区| 国产肏逼网站| 少妇99成人麻豆| 丰满人妻一区二区三区免费| 深田咏美亚洲精品福利社| 成人一区二区三区四区| 八戒无码国产午夜福利| 伊人久久大香蕉线AV五月天| 色哟哟 日韩精品| 国产精品天美传媒| 91九九| 97超碰69| 国产综合色精品在线观看| 九九久久九九久久| 亚洲图片欧美色| 天天影视综合网欧美精品| 蜜臀99精品国产高清在线观看| 日本午夜福利影院| 欧美日韩小说| 日日夜夜干| 九九九九热| 高清不卡一二三区视频......| 水多多映视AV| 国产嫩草精品A88AV在线| 国产成久久综合片| 亚洲色资源| 人妻日日干| 99在线精品观看视频中文 | 超碰99在线| 色噜噜综合在线| 夜夜骑夜夜操| 亚洲永久永久永久永久一级一级一级精品| 欧美一二三级精品在线| 伊人网在线视频| 日韩激情啪啪| 美女91AV| 91美女在线视频| 人人爱人人操人人性| 久久9免费视频| h在线看免费版在线看| 久久久久久97| 精品国产国产AV| 国内三级自拍小视频在线观看| 日韩人妻无码不卡网站| 欧美午夜色妇色鬼| 精品国产乱码久久久久久口爆网站| 少好三P| 韩国一区二区精品亚洲| 大学生口爆吞精| 国产精品动态一区二区三区四四| 大香交伊人网| 中文字幕乱码人妻二区三区| 久久久久深夜无码| 热天堂一区二区| 综合免费无码中文| 后入式免费视频| 老汉网| 99精品在线播放| 国产亚洲性生活视频播放| 91欧洲入口| 色噜噜国产在线| 黄色高清无码无码破解免费暗网| 超碰97色| 干美女人妻| 超碰 另类 欧美| 岛国片在线观看视频亚洲| 中英熟女操女| 国产一线二线三线av| 成人热久久精品| 激情五月综合| 国产 热久久久久国产精品| 色汉综合| 我爱操| 日韩精品人妻中文字幕久久久| 色婷婷六月| 亚洲最大成人a毛毛片| 欧美AB在线| 春色综合免费| 久操网在线| 欧美一区二区在线资源| 99自拍视频| 国产精品一级毛片不卡视| 黄片www视频免费| 夜夜嗨一区| 免费97视频| 久久国模av| 人妻插插人妻人| 五月婷婷综合在线| 亚洲国产一区二区三区四区国产| 亚洲三区视频| 日韩综合成人免费视频| 久久久新亚洲AV| 花花AV导航| 大屁股熟女一区二区三区| 91熟女综合| 国产自产91区13区| 大稥蕉免费视频这里只有精品| 国产精品久久久鸭无码的功能| 一本大道不卡一二三区| 亚洲欧洲av影音| a级免费在线观看| 日夜伊人网| 欧美日韩在线小说 | 亚洲AV成人无码一二三久久| 九九九九精| 美女91| 亚洲精品99999| 婷婷午夜清品久久久久久久性色视频观| 台湾佬中文娱乐网久久久久久久久久com| 欧美在线l亚洲| 亚洲精品美女操逼| 色妇91| 中文字幕欧美日本乱码一线二线| 欧美成人国产精品| 天天天操天天天爱| 黑人综合色| 天天综合91入口| 欧美色九九| 婷婷五月天激情四射| 玖草在线视频| 精品一区二区国产日韩| 国产亚洲性生活视频播放| 日韩熟女乱伦中出| 3D污黄视频在线观看| 99热在线观看| 久久国产视频性吧| 国产怡红院| 午夜精品久久久久| 久久精品91| 男人的天堂VA| 亚洲乱码精品一区二区| 国产黄色小视频网站| 色天使亚洲综合在线观看| 日美免费黄片| 黄污污污污| 成人综合网 欧美| 啊啊啊啊啊啊啊网址在线观看| 九久久精品| 人妻久久一区二区三区| 天天视频网站黄| 肉嘟嘟www视频在线观看高清| 免费毛片在线播放| 嗯嗯嗯嗯啊啊啊好紧好大| 亚洲高清视频在线观看| 操死我了啊啊啊| 亚洲色电影在线| 欧美中文字幕日韩在线| 岛国黄色大片网站| 台湾佬激情综合| 情色五月天网| 亚洲高清色综合| 老司机天天操| 开心五月婷婷激情| a人欧美综合天堂麻豆| 久草毛片| 欧美性爱日韩高清| 中文字幕一区日韩精| 夜夜操老骚逼视频网站| 亚洲91射| 黄视频免费| 九月色婷婷| 久久久中文版| 东京热男人天堂| 无码精品一区二区三区潘金莲| 嗯啊不要在线观看嗯啊| 久色99999| 麻豆久久精品亚洲精品88| 嫩草影院在线观看精品| 欧美美女啪啪视频| 欧美午夜熟妇黑人精品91| 国产精品探花色| 淮穴色AV| 综合少妇网| 天天摸夜夜添无码小视频| 日韩成人色图| 欧美操逼录像国产黄色国产| 十八岁啪啪视频免费看| 草b在线 | 丁香五月婷婷色| 91n免费处女| www.亚洲黄色| 精品人人| 91亚洲情色| 午夜丁香| 天天性射网| 欧美强奸乱| 婷婷五月天无码| 中文字幕日韩精品久久| 欧美精品在线观看| 97超碰色色| 久久思思热| 日本亚洲嫩草影院啪啪| www欧美性爱| 嗯~啊~快点 死我视频免费看网站| 青娱乐999| 久久25| 搡老熟女免费视频| 四虎影库国产精品免费| 丝袜美腿av女优在线| 柠檬AV导航| 亚洲激情深爱文学小说网站| 一级特级aaaa毛片免费观看 | 亚洲无线码一区国产欧美国| 98福利在线视频| 亚欧无码在线| 亚洲综合伊人| 国产欧美亚洲精品a第2页| 玖玖草久草99蜜月一区二区三区| 影视综合无码少妇| 小草av不卡亚洲二区 | 亚欧美综合| 黄片在线免费在线观看| 天天性射网| 九月婷婷综合| 人妻少妇精品| 久九干| 久久这里只精品免费福利| 蜜桃视频精品一区二区三区| 中文字幕在线免费观看2| 欧美欲色| 亚洲制服aⅴ中文字幕| 99re在线精品78| 精品性爱一区二区| 久久日韩肥臀| Av色五月| 岛国免费黄色网址| 日本熟妇自慰性高潮一区二区三区| 99热只有这里有精品| 欧美BT 亚洲色图| 欧美美女自慰一区二区三区| 在线午夜成人无码视频| 麻豆性爱视频在线播放| 自拍偷拍 高清无码| 夜夜嗨TV| 蜜臀av中字字幕网站| 日韩av不卡在线看| 青青草影视蜜久久| 97AV爱| 国产人伦a片信息免费片| 91激情国产| 国产丝袜美女诱惑| 国产51色综合久久免费| 91在线观看,天天综合| 欧美人妻精品| 国产成人手机视频激情| 亚洲人妻日日日| 2019天天干| 北京美女一区二区| 国内外色色色色色成人视频| 综合伊人网12色| 本道在线| 中文字幕乱码人妻一区二区三区,99精品 | 一区二区三区黄色片a| 色综九九九一区| 亚洲最大的黄色电影网站。 | 久久久久久久久9| 国产老熟女| 免费A V在线| 超碰免费人妻人人| 97视频一区| 老汉网| 久久婷婷一区二| 青草青草久热| 日本黄大片在线观看视频| 亚洲欧美内射| 99国产精品久久久久久久成人热| 免费视频a级毛片免费视频| 日本精品一级二级三级| 日韩射图| 日韩人妻精品中文字幕| 欧美日韩丝袜| 极品尤物在线观看| 久操com| 99热在线播放| 欧美人妻熟女在线| 国产熟女二区| 国产a级精品| 五月花婷婷| 国产一区二区啪啪视频| 日本人妻伦在线中文字幕| 欧亚三区动漫| 女上位精品在线| 成人五月天色网| 97综合在线观看| 激情深爱五月天| 91天堂色男人的天堂| 免费观看国产小粉嫩喷水精品午| 亚洲色图欧美色图另类图片| 后入精品| 亚洲第二页| 人妻少妇无码| 少好三P| 久久精品电影| 久久久九九九九| 97精品97| 射欧美综合| 国产美脚女优尤物在线观看| 一区二区三区 丝袜 高跟 美腿| 久久九九综合| 自偷自拍的亚洲视频| 欧美一区二区观看在线| 亚洲无码一二三区| 婷婷激情五月天小说网| 岛国视频一二三区| 99精品欧美一区二区三区桃色| 成人av在线播放| 热无码中文亚洲H一道本一区二区| 精品视频在线观看精品| 91综合在线| av网站免费线看| 欧美呦呦性爱| 日本一区二区三区午夜观看| 人人操人人摸avav| a一区二区三区乱码在线| 久久精品久久久久久久久| 一二三四视频中文字幕在线看| 午夜福利无毒不卡| 欧美中文狠| 伊人久久蜜月| 久操视频在线| 亚洲高清综合网| 蜜臀一区二区三区在线| 日韩熟女无码| 国产精品点击进入在线影院| 福利视频一区二区微拍| 国产精品免费视频人成| 日本123区操B视频| 综合熟女| 日韩二三区| 超碰97亚洲区| 精品人妻一区二区三区不卡断 | 国产一级不卡在线观看| 91在线精品| 激情六月婷婷| 欧美日韩222| 日本高清熟女久久一区| 欧美淫乱视频| 激情小说亚洲| 天天激情干| 综合色图区| 毛片17S| 欧美亚洲成人在线一区二区三区| 亚洲情色 无码专区| 亚洲欧美首页| 精品无码不卡视频| 99色色| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 欧美第二页| 久久精品日韩| 天天综合精品| 99只有精品| 亚洲高清综合网| 国产精品熟女九色九色蜜臀| 婷婷操逼| 精品国产国产AV| 熟妇色99| 日韩中文字幕人妻视频| 亚洲一区二区麻豆影院| 久久超碰98| 久久色精品视频在线| 欧美aaaaaaa| 欧美另类色| 97精品一区| 制度丝袜99| 澳门成人网站久国产日韩| 亚洲不卡一| 久久精品久久九九精品| 国产玖玖| 久久久免费视频18| 亚洲?V无码专区在线电影| 天天操天天插| 午夜久久久| 黄色人人| 久久国色天香香蕉| 亚洲精品电影| 日韩不卡毛片Av免费高清| 第45页一区二区| 九七色图| 久操精品网| 亚洲色图 综合| 国产黄色视频久久| 中文字幕第页| 久久一二三四五六七八九区| 在线色导航| 日韩精品高清资源在线| 96一区二区| 免费视频a级毛片免费视频| 精品午夜福利国产一区二区在线观看 | 亚洲 91 在线| 麻豆天美在线| 国产精品午夜高潮呻吟久久av| 大香网伊人久久综合网eew| 超碰97人妻| 亚洲不卡AV在线| 精品久久97| 欧美日韩99| 久久久久久久久女黄| 亚洲AV无码国产精品久久久久| 国产青青美女玩逼视频| 中国AV美女| 区一二区日韩亚洲乱码av电影| 少妇一区二区三区| 天堂蜜桃无码视频一区二区| 91宗合网| 婷婷日韩一区二区三区中文字幕在线| 成人草草视频| 国产精品秘 福利姬在线观看| 影音资源男人日韩| 国产粉嫩出水在线播放| 久久精品一区二区三区蜜桃臀| 日本色色色视频| 美女骚尻视频| 日韩精品一区二区三区色欲| 熟妇无码视频三区| 伊人久久婷婷| 亚洲欧美另类图片| 日韩精品.久久精品.AV女优.天美传媒| 少妇蹲下露出大唇5| 久久婷婷色综合一区二区三区| 呦女网站| 日日嗷| 久久午夜色播影院免费高清| 天天影视91看看| 亚洲操人| 高清视频一区| 艳美熟妇先锋一二三区| 国产精品999aaa| 操操操操操操| 欧美人与性动交a美精品| 肉丝无码中文高清| 色五月丁香五月| 日本媚薬中文字幕在线| 啪啪91| 欧 美 自 拍 偷 拍| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 久久久久一本一区二区青青蜜月| AV一区观看| 国产精品粉嫩福利在线| 色五月首页| 亚洲无992tv| 乱欲性色| 九九色热| 2018天天日天天日| 五十路人妻在线| 婷婷丁香五月综合| a男人的天堂久久一级A毛片| 91路www| 亚洲日韩一区电影| 国产强奸乱伦xd| av草草在线电影| 97超碰美国| 无码日韩人妻av一| 日本不卡在线二区三区| 麻豆福利视频导航| 综合自拍| 日韩性爱小视频| 欧美黑人168页欧美黑人167| 精品超碰中文在线| 性色av蜜臀av色欲aV| 国产AV中文| 熟女网站最新| 久超碰在| 性爱乱伦一区| 亚洲成人精品在线一区| 麻豆天美AV传媒第一页| 啊嗯好大视频在线观看| 乱伦系列一区二区| 黄片视频观看| 999国产精品999久久久久久| 国产传媒美日韩av| 欧洲色色| 91成人久久| 少妇被c 黄 免费观看| 丰满少妇精品一区二区| 国产又大又粗又长视频在线| 国产亚洲色婷婷久久99精品91| 高潮的A片激情扒开一区| 久久久人妻| 97中文字幕一区| 1二区9| 丰满少妇一区二区三区专区| 色婷网| 精品一区二区综合熟妇| 国产黄色剧情影片麻豆免费播放| 97色欧洲| 加勒比少妇AV婷婷六月天超碰超碰| 亚洲熟妇图片| 五月色综合| 国产精品久久久久av| 思思热久久成人| 日韩精品色呦呦| 亚州综合色| 日本 情色 1区| 欧美激情一| 日韩天天本| 天天综合影院91| 久久免费中文字幕在线观看| 色色丁香| 一区二区三区视频在线观看免费| 超碰在线观看av不卡| 婷婷干黄色| 国产拍偷精品网站| 精品九九九九| 91人妻在线视频| 91丝袜| 美女91AV| 亚洲天天操| 精…码一二三区| 超碰在线一区二区三区| 欧美啪啪色吧在线| 91熟女网| 热热色91| 啊啊啊啊啊啊啊啊在线观看| 97超碰欧美精品| 97在线免费看视频| 男人天堂资源| 五月婷视频| 五月婷婷丁香| 懂色AV一区二区三区| 麻豆久久视频在线地址| 久久久工口| 成人无码专区精品视频| 欧色综合| 国产成人主播| 欧美激色| 性欧美第一页| 亚洲无码日韩电影| 亚洲日韩天堂| 99亚洲国产精品色一区二区三区| 久久草草亚洲蜜桃臀| 日本欧美韩国国产在线| 日韩欧美综合激情| 免费一级欧美片片线观看|