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

ARTICLE DETAIL

資訊詳情

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

SDK更新版本實(shí)戰(zhàn)指南:從評(píng)估到灰度發(fā)布,避開(kāi)升級(jí)深坑

SDK更新版本實(shí)戰(zhàn)指南:從評(píng)估到灰度發(fā)布,避開(kāi)升級(jí)深坑 簡(jiǎn)介這是一份針對(duì)Android SDK更新失敗問(wèn)題的實(shí)操型解決方案文檔面向Android開(kāi)發(fā)初學(xué)者及遇到SDK Manager無(wú)法下載、更新中斷或協(xié)議訪問(wèn)受限的開(kāi)發(fā)人員。文檔從日常升級(jí)SDK時(shí)最常見(jiàn)的報(bào)錯(cuò)入手給出清晰的解決思路與操作路徑包括在SDK Manager中切換強(qiáng)制HTTP協(xié)議、修改Windows hosts文件映射Google域名、安裝更新時(shí)逐一勾選Accept License等關(guān)鍵要點(diǎn)覆蓋從環(huán)境設(shè)置到安裝完成的完整流程。包體為一個(gè)docx格式文檔共1個(gè)文件壓縮包大小195KB內(nèi)容精煉、步驟明確適合在本地或團(tuán)隊(duì)內(nèi)直接查閱。已有11039人學(xué)習(xí)下載經(jīng)過(guò)實(shí)戰(zhàn)驗(yàn)證能夠幫助開(kāi)發(fā)者繞開(kāi)SDK更新中的常見(jiàn)障礙提升開(kāi)發(fā)環(huán)境搭建效率。1. SDK更新版本這件事為什么說(shuō)拖得越久坑越深項(xiàng)目組最尷尬的時(shí)刻往往不是寫(xiě)不出業(yè)務(wù)代碼而是被SDK的新版本追著跑舊接口突然廢棄、推送服務(wù)換了鑒權(quán)方式、新SDK在低端機(jī)型上初始化就崩潰。這類問(wèn)題沒(méi)法用業(yè)務(wù)邏輯繞過(guò)去因?yàn)樗裨诘谌酱a里。SDK更新版本解決方案就是一套在“升”與“不升”之間做決策、在升級(jí)過(guò)程中控制風(fēng)險(xiǎn)的流程先評(píng)估影響面再改依賴配置跑回歸、灰度、上線最后把經(jīng)驗(yàn)固化成模板。這套流程對(duì)依賴大量第三方SDK的應(yīng)用型團(tuán)隊(duì)尤其重要。我見(jiàn)過(guò)太多團(tuán)隊(duì)把升級(jí)拖到舊版停維護(hù)才動(dòng)手結(jié)果一次跨好幾個(gè)大版本接口簽名全變了光改適配代碼就花了兩周最后還是回滾。下面按評(píng)估、配置、落地、避坑的順序展開(kāi)。無(wú)論你是開(kāi)發(fā)者還是移動(dòng)端負(fù)責(zé)人按這個(gè)順序讀下來(lái)下一次SDK更新版本時(shí)就不必靠猜。2. 動(dòng)手前的評(píng)估先把SDK的變更影響面摸透2.1 四種SDK更新類型補(bǔ)丁型、次版本型、主版本型和行為漂移型按語(yǔ)義化版本管理的約定版本號(hào)拆成三截主版本、次版本、補(bǔ)丁版本。主版本更新意味著接口有破壞性變更次版本更新體現(xiàn)為向下兼容的新功能補(bǔ)丁版本只修Bug。這個(gè)約定被絕大多數(shù)主流SDK遵循不過(guò)有個(gè)執(zhí)行層面的坑個(gè)別SDK會(huì)在次版本里夾帶破壞性變更尤其是那些仍在快速迭代期的行為變化不會(huì)只在主版本號(hào)上體現(xiàn)。所以升級(jí)前我習(xí)慣先看三樣材料變更日志、接口廢棄標(biāo)注、以及SDK自帶的遷移指南優(yōu)先級(jí)按這個(gè)順序排。變更日志是判斷影響面的第一手材料。成熟的SDK會(huì)明確標(biāo)出哪些接口被移除、哪些被重命名、哪些行為有變化有的還會(huì)在代碼里給接口標(biāo)注Deprecated并在每次構(gòu)建時(shí)輸出編譯警告再講究一點(diǎn)的會(huì)隨版本發(fā)布提供遷移指南。如果三樣一樣都沒(méi)有這個(gè)SDK的維護(hù)水平本身就要打問(wèn)號(hào)升級(jí)前更要謹(jǐn)慎。我把SDK更新分成四種類型。補(bǔ)丁型基本零風(fēng)險(xiǎn)改了版本號(hào)跑一遍關(guān)鍵流程就能發(fā)。次版本型通常是加功能加參數(shù)風(fēng)險(xiǎn)中等重點(diǎn)要處理?xiàng)売镁媾f接口還在但編譯期已經(jīng)開(kāi)始提示“將在下個(gè)版本移除”這類警告不能無(wú)視欠的債早晚要還。主版本型是重頭戲接口簽名、依賴關(guān)系、最低環(huán)境要求都可能變化必須按新工程的標(biāo)準(zhǔn)來(lái)做適配。行為漂移型最隱蔽版本號(hào)沒(méi)變但SDK通過(guò)遠(yuǎn)端配置改了默認(rèn)行為客戶端拉取到新配置后表現(xiàn)就不同了這類變更誰(shuí)都沒(méi)法提前發(fā)現(xiàn)只能靠灰度期間的監(jiān)控?cái)?shù)據(jù)說(shuō)話。實(shí)際項(xiàng)目中一次SDK升級(jí)往往同時(shí)包含多種類型的變更。比如SDK從2.x升到3.0主版本號(hào)變了說(shuō)明有破壞性變更而它順帶新增了一個(gè)接口這是次版本型行為又比如它把一些配置從本地文件挪到遠(yuǎn)端下發(fā)這就是行為漂移型。拆開(kāi)分類去排查比籠統(tǒng)地“升級(jí)一下試試”要穩(wěn)得多。這里還有個(gè)常見(jiàn)困境如果SDK的版本號(hào)不符合語(yǔ)義化版本規(guī)范怎么辦。有些SDK明明是大改動(dòng)卻只修了次版本號(hào)或者反過(guò)來(lái)只是內(nèi)部?jī)?yōu)化卻升了主版本號(hào)。這種情況我一般用兩個(gè)辦法兜底一是看SDK廠商的版本發(fā)布節(jié)奏如果一個(gè)SDK頻繁發(fā)主版本更新說(shuō)明它在快速迭代期破壞性變更更容易發(fā)生二是看SDK構(gòu)建產(chǎn)物的命名有的SDK會(huì)把構(gòu)建時(shí)間或提交號(hào)寫(xiě)進(jìn)產(chǎn)物信息對(duì)比兩次產(chǎn)物的元數(shù)據(jù)就能粗略判斷改動(dòng)幅度。2.2 用命令行快速摸清項(xiàng)目里的SDK依賴與版本沖突評(píng)估的第一件事是搞清楚項(xiàng)目里到底依賴了哪些SDK的哪些版本。這一步看起來(lái)簡(jiǎn)單實(shí)際上在依賴多的項(xiàng)目里光靠讀構(gòu)建腳本根本看不出全貌因?yàn)閭鬟f依賴會(huì)把你不認(rèn)識(shí)的中間庫(kù)帶進(jìn)來(lái)。以幾個(gè)常見(jiàn)生態(tài)為例Maven項(xiàng)目用dependency:treeGradle項(xiàng)目用dependencies任務(wù)前端項(xiàng)目用npm ls把依賴樹(shù)完整展開(kāi)出來(lái)。# Maven 項(xiàng)目展開(kāi)整個(gè)依賴樹(shù)-Dverbose 連被版本仲裁覆蓋掉的依賴也顯示 mvn dependency:tree -Dverbose # Gradle 項(xiàng)目只看運(yùn)行時(shí)依賴的樹(shù)過(guò)濾掉編譯期用不到的內(nèi)容 ./gradlew dependencies --configuration runtimeClasspath # 前端 npm 項(xiàng)目展開(kāi)嵌套依賴depth 控制查看層數(shù) npm ls --depth5-Dverbose值得加上因?yàn)镸aven默認(rèn)只顯示最終生效的版本被仲裁掉的老版本不會(huì)出現(xiàn)而恰恰是這些被覆蓋的版本容易埋坑。Gradle的--configuration runtimeClasspath把范圍限制在運(yùn)行時(shí)輸出會(huì)比默認(rèn)的compileClasspath清爽更適合看真正會(huì)跑進(jìn)線上環(huán)境的依賴。npm的--depth5適合層級(jí)不深的前端項(xiàng)目如果發(fā)現(xiàn)某棵子樹(shù)特別深多半是某個(gè)SDK把公共庫(kù)重復(fù)打包了后面升級(jí)時(shí)要留意。依賴樹(shù)輸出的重點(diǎn)不是頂層依賴而是第二層、第三層里那些被兩個(gè)以上SDK共同引用的公共庫(kù)。比如兩個(gè)SDK都依賴同一個(gè)JSON解析庫(kù)一個(gè)要1.x一個(gè)要2.x仲裁結(jié)果可能讓其中一個(gè)SDK在運(yùn)行時(shí)找不到需要的方法直接NoSuchMethodError。這樣的沖突在升級(jí)前發(fā)現(xiàn)成本最低等上了線再爆定位就費(fèi)勁了。除了命令行輸出我還會(huì)在代碼庫(kù)里搜一遍SDK的import語(yǔ)句把過(guò)期注釋、臨時(shí)代碼一起搜出來(lái)。有些團(tuán)隊(duì)習(xí)慣在業(yè)務(wù)代碼里寫(xiě)“等SDK升級(jí)后刪除”這類標(biāo)記用 grep 全局搜一遍就能把這部分隱藏工作量提前列出來(lái)挪進(jìn)本次升級(jí)的計(jì)劃表里。這個(gè)動(dòng)作很簡(jiǎn)單但經(jīng)常被遺漏尤其是跨多個(gè)倉(cāng)庫(kù)的項(xiàng)目升級(jí)影響面往往比單倉(cāng)庫(kù)看起來(lái)的大得多。2.3 變更影響清單升級(jí)前必須回答的六個(gè)問(wèn)題拿到新版本SDK后我不急著改構(gòu)建腳本先花半小時(shí)把變更日志里出現(xiàn)的 removed、deprecated、renamed、changed behavior 這些關(guān)鍵條目全部摘出來(lái)整理成一張表。這一步老手也容易跳過(guò)直接埋頭改代碼然后被編譯錯(cuò)誤打得措手不及——問(wèn)題不在于編譯錯(cuò)誤本身而在于你不知道下一個(gè)錯(cuò)誤會(huì)從哪里冒出來(lái)。檢查項(xiàng)具體動(dòng)作判斷標(biāo)準(zhǔn)版本號(hào)類型看主版本/次版本/補(bǔ)丁版本是否變化主版本變更按最高優(yōu)先級(jí)對(duì)待變更日志找 removed/deprecated/renamed/behavior 關(guān)鍵詞逐條對(duì)照業(yè)務(wù)代碼是否有引用廢棄接口檢索項(xiàng)目是否用到帶廢棄標(biāo)注的接口有引用就必須在升級(jí)中一起處理最低環(huán)境要求看SDK要求的最低系統(tǒng)版本或運(yùn)行環(huán)境是否抬高低于新要求的用戶或環(huán)境會(huì)直接不可用傳遞依賴看新版本是否引入新的底層依賴評(píng)估是否與現(xiàn)有依賴產(chǎn)生沖突遠(yuǎn)端行為確認(rèn)SDK是否帶服務(wù)端配置并動(dòng)態(tài)下發(fā)有則必須在灰度期額外觀察行為變化表格里六項(xiàng)走完基本能算出這次升級(jí)要?jiǎng)佣嗌偬幋a、要花多少工時(shí)也能據(jù)此判斷值不值得在本次迭代里排期。如果改動(dòng)面太大而舊版本還能支撐一段時(shí)間推遲升級(jí)不是錯(cuò)誤選擇——推遲不等于不升級(jí)而是給團(tuán)隊(duì)留出充分測(cè)試窗口同時(shí)把升級(jí)任務(wù)排進(jìn)后續(xù)迭代避免“臨時(shí)加塞”導(dǎo)致質(zhì)量失控。我有一個(gè)習(xí)慣這張表填完后會(huì)把它貼到升級(jí)分支的說(shuō)明文檔里作為這次升級(jí)的“決策快照”。好處是幾周后有人問(wèn)“當(dāng)時(shí)為什么決定升、為什么決定不升”不用重新復(fù)盤(pán)直接看記錄就行。3. 版本管理改造從“寫(xiě)死版本號(hào)”到“可追溯的升級(jí)路徑”3.1 獨(dú)立版本清單把SDK版本從代碼里抽出來(lái)集中管理接手過(guò)一個(gè)項(xiàng)目SDK版本號(hào)散落在構(gòu)建腳本、資源清單、初始化代碼注釋里升級(jí)時(shí)要用編輯器全局搜索才能找齊所有版本號(hào)漏一處就到運(yùn)行時(shí)才炸。更難受的是它沒(méi)有統(tǒng)一的版本清單無(wú)法追蹤“上次升級(jí)到底改了什么”。后來(lái)我做的第一件事就是把所有直接依賴的SDK版本號(hào)收進(jìn)一個(gè)獨(dú)立的版本清單文件構(gòu)建腳本只引用清單里定義的版本變量。以Gradle項(xiàng)目為例在項(xiàng)目根目錄放一個(gè)versions.gradle所有第三方SDK的版本號(hào)都定義在這個(gè)文件里主構(gòu)建腳本通過(guò)apply from引用。升級(jí)時(shí)只改清單文件里的一個(gè)值版本變動(dòng)可以完整地記錄在版本控制系統(tǒng)里Code Review 時(shí)一眼就能看出改了哪個(gè)SDK、升到哪個(gè)版本。// versions.gradle —— 版本清單文件升級(jí)時(shí)只動(dòng)這里 ext { sdkCoreVersion 2.4.0 sdkNetworkVersion 3.0.1 sdkPushVersion 1.8.2 }// 主構(gòu)建腳本聲明依賴版本號(hào)全部引用清單變量 apply from: versions.gradle dependencies { implementation com.example:sdk-core:${sdkCoreVersion} implementation com.example:sdk-network:${sdkNetworkVersion} implementation com.example:sdk-push:${sdkPushVersion} }示例里com.example是占位坐標(biāo)實(shí)際項(xiàng)目換成自己依賴的真實(shí)SDK坐標(biāo)。版本清單獨(dú)立出來(lái)的意義不只是方便改更重要的是能配合依賴鎖定機(jī)制把每次升級(jí)產(chǎn)生的傳遞依賴變化也固化下來(lái)。Maven項(xiàng)目有依賴鎖定插件npm有l(wèi)ock文件Gradle有--write-locks參數(shù)升級(jí)后跑一次鎖定就能保證團(tuán)隊(duì)所有成員和CI拿到的依賴樹(shù)完全一致。前端項(xiàng)目也建議做同樣的收斂。拿npm來(lái)說(shuō)把依賴聲明集中在package.json版本號(hào)不要用^或~直接寫(xiě)精確版本號(hào)再用npm ci代替npm install來(lái)保證構(gòu)建環(huán)境嚴(yán)格執(zhí)行鎖定文件。我見(jiàn)過(guò)不少線上事故的根源就是“開(kāi)發(fā)機(jī)器裝的時(shí)候沒(méi)問(wèn)題CI重新解析的時(shí)候拉到了新版本”鎖文件的存在就是為了消滅這類不確定性。3.2 消滅通配符版本給依賴鎖定加上強(qiáng)制校驗(yàn)新手最容易踩的坑是在依賴配置里寫(xiě)或者latest.release這種通配符版本號(hào)。表面上看這樣以后升版本不用操心了實(shí)際結(jié)果是你根本不知道SDK什么時(shí)候推送了破壞性變更構(gòu)建環(huán)境默認(rèn)拉到了新版開(kāi)發(fā)機(jī)、CI、發(fā)布機(jī)拿到的依賴還各不相同。處理過(guò)一個(gè)典型場(chǎng)景某團(tuán)隊(duì)測(cè)試環(huán)境構(gòu)建一直正常一到正式發(fā)布就編譯報(bào)錯(cuò)排查到半夜才發(fā)現(xiàn)只是版本鎖定沒(méi)做發(fā)布那天的網(wǎng)絡(luò)源恰好吃到了已經(jīng)被廠商撤回的中間版本?!耙驯怀坊氐闹虚g版本”是指SDK廠商發(fā)布后發(fā)現(xiàn)問(wèn)題又下線的版本但構(gòu)建緩存里可能還留著它造成本地和線上不一致。把版本號(hào)寫(xiě)死配合鎖定文件才不會(huì)有這種玄學(xué)問(wèn)題。版本號(hào)的寫(xiě)法也有講究。真正的語(yǔ)義化版本號(hào)是2.4.0這種三段式的但在部分生態(tài)里同一個(gè)版本對(duì)應(yīng)多個(gè)構(gòu)建產(chǎn)物——比如移動(dòng)端SDK有調(diào)試版和發(fā)布版有的還有不同CPU架構(gòu)的包。版本清單里最好把變體信息也帶上避免升級(jí)時(shí)漏改一個(gè)變體導(dǎo)致特定設(shè)備上崩潰。代碼層面我一般會(huì)在CI里加一道強(qiáng)制校驗(yàn)檢查構(gòu)建產(chǎn)物使用的依賴版本是否與版本清單完全一致不一致就直接讓構(gòu)建失敗。這個(gè)檢查本身很簡(jiǎn)單但能擋掉很多低級(jí)的版本錯(cuò)配問(wèn)題比如“我明明升到2.4.0了為什么線上還在跑2.3.1”。這類問(wèn)題一旦全量上線才發(fā)現(xiàn)回滾成本遠(yuǎn)高于加一道校驗(yàn)的成本。# CI 強(qiáng)制校驗(yàn)示例比對(duì)鎖定文件和版本清單中的版本號(hào) # 不一致時(shí)直接以非零狀態(tài)退出讓流水線失敗 if ! grep -q sdk-core:2.4.0 gradle.lockfile; then echo sdk-core 版本與版本清單不一致請(qǐng)運(yùn)行依賴鎖定命令后重新提交 exit 1 fi這段腳本是示意實(shí)際項(xiàng)目里可以換成專門(mén)依賴核對(duì)插件。核心思路就一條把“升級(jí)后有沒(méi)有鎖定”從一個(gè)人為自覺(jué)變成一個(gè)機(jī)器強(qiáng)制行為。3.3 升級(jí)分支策略一次升一個(gè)SDK留一條可回退的路常見(jiàn)做法是每次SDK升級(jí)從主干拉一條獨(dú)立的升級(jí)分支在這個(gè)分支上專門(mén)做升級(jí)改造。好處是升級(jí)工作量和業(yè)務(wù)開(kāi)發(fā)完全隔離隨時(shí)可以放棄整個(gè)分支回退到升級(jí)前的狀態(tài)。說(shuō)白了是給自己留了一顆后悔藥。升級(jí)分支的粒度我執(zhí)行得很嚴(yán)格一次只升一個(gè)SDK。如果一次把五個(gè)SDK捆綁升級(jí)翻車之后你根本分不清是哪個(gè)SDK導(dǎo)致的回歸。跑完測(cè)試確認(rèn)一個(gè)沒(méi)問(wèn)題再進(jìn)下一個(gè)。有些場(chǎng)景兩個(gè)SDK存在硬依賴比如底層基礎(chǔ)庫(kù)升級(jí)要求上層業(yè)務(wù)SDK同步升級(jí)這種情況下捆在一起升也可以但前提是先單獨(dú)驗(yàn)證兩個(gè)SDK各自的變更點(diǎn)合并驗(yàn)證時(shí)再整體跑一遍回歸。分支合并回主干的時(shí)機(jī)也要選。我一般找迭代的窗口期比如功能開(kāi)發(fā)剛結(jié)束、發(fā)版前測(cè)試剛開(kāi)始的階段。這個(gè)階段業(yè)務(wù)代碼變動(dòng)少SDK升級(jí)引發(fā)的回歸不會(huì)被業(yè)務(wù)改動(dòng)干擾定位Bug的效率最高。反過(guò)來(lái)如果選在業(yè)務(wù)高頻開(kāi)發(fā)期合并定位問(wèn)題時(shí)很難分清是業(yè)務(wù)改動(dòng)引入的還是SDK引起的排查會(huì)非常痛苦。窗口期的選擇還有一個(gè)原則避開(kāi)大型活動(dòng)和大版本發(fā)版前幾天。這段時(shí)間線上任何抖動(dòng)都會(huì)被放大SDK升級(jí)這種有風(fēng)險(xiǎn)的改動(dòng)盡量靠前安排給監(jiān)控和回滾留足時(shí)間。如果實(shí)在避不開(kāi)就把升級(jí)拆成“提前停更依賴編譯驗(yàn)證”和“后續(xù)追加功能適配”兩步至少保證發(fā)版當(dāng)天的包用的是已經(jīng)驗(yàn)證過(guò)的依賴組合。4. SDK更新落地從編譯通過(guò)到灰度上線的完整路徑4.1 編譯通過(guò)不等于更新成功三層驗(yàn)證攔住大部分回歸不少團(tuán)隊(duì)的“SDK升級(jí)完成”標(biāo)準(zhǔn)是“項(xiàng)目能編譯”這個(gè)標(biāo)準(zhǔn)遠(yuǎn)遠(yuǎn)不夠。編譯通過(guò)只代表接口簽名對(duì)上了不代表運(yùn)行行為符合預(yù)期。SDK的行為變更、資源文件變化、原生庫(kù)兼容性很多是編譯期發(fā)現(xiàn)不了的。我把升級(jí)驗(yàn)證分成三層編譯、自動(dòng)化測(cè)試、關(guān)鍵路徑冒煙測(cè)試。編譯過(guò)了之后先跑自動(dòng)化測(cè)試。這里有個(gè)效率問(wèn)題全量測(cè)試跑一圈可能半小時(shí)每次升級(jí)都全量跑開(kāi)發(fā)同事會(huì)嫌煩。我定的規(guī)則是升級(jí)分支上每天夜里跑一次全量回歸白天開(kāi)發(fā)時(shí)只跑和SDK使用點(diǎn)相關(guān)的測(cè)試模塊。時(shí)間上自動(dòng)化測(cè)試能攔下大概六到七成的問(wèn)題剩下的要靠冒煙測(cè)試兜底。# 升級(jí)分支上跑指定模塊的回歸測(cè)試避免全量測(cè)試拖慢開(kāi)發(fā)節(jié)奏 # --tests 支持通配符多個(gè)模塊用逗號(hào)分隔 ./gradlew test --tests com.example.login.*,com.example.payment.* # 前端項(xiàng)目等價(jià)物運(yùn)行測(cè)試文件里和登錄、支付相關(guān)的用例 npm test -- --testPathPattern(login|payment)命令里com.example.login.*是包名通配實(shí)際項(xiàng)目里按自己模塊的包路徑替換。冒煙測(cè)試點(diǎn)我一般選登錄、核心業(yè)務(wù)鏈路、支付、數(shù)據(jù)上報(bào)這四類這些功能是SDK最容易影響到的位置。自動(dòng)化測(cè)試加冒煙測(cè)試都過(guò)了還剩一類問(wèn)題測(cè)不出來(lái)就是性能和資源占用的變化。SDK里往往有線程池、緩存、埋點(diǎn)上報(bào)這些容易在后臺(tái)耗電耗流量的組件升級(jí)后我會(huì)用性能分析工具抓一輪運(yùn)行時(shí)數(shù)據(jù)和升級(jí)前對(duì)比確認(rèn)啟動(dòng)時(shí)間、內(nèi)存占用、CPU峰值沒(méi)有明顯惡化。性能對(duì)比最好有固定的基線。我建議團(tuán)隊(duì)在主干上定期記錄關(guān)鍵性能指標(biāo)這樣升級(jí)分支上隨時(shí)能拿新數(shù)據(jù)對(duì)比不需要臨時(shí)找歷史版本重跑。沒(méi)有基線的性能評(píng)估基本靠感覺(jué)說(shuō)服不了自己也說(shuō)服不了項(xiàng)目的同事。4.2 灰度發(fā)布讓真實(shí)用戶替你完成最后一輪驗(yàn)證自動(dòng)化測(cè)試、冒煙、性能對(duì)比都過(guò)了還不能直接把新版本全量發(fā)上去因?yàn)榭傆幸徊糠钟脩舻沫h(huán)境是你測(cè)試覆蓋不到的。SDK升級(jí)的最后一關(guān)是灰度發(fā)布。灰度不只是一個(gè)開(kāi)關(guān)它包含兩層意思第一控制新版本覆蓋的用戶比例第二在灰度過(guò)程中持續(xù)監(jiān)控關(guān)鍵指標(biāo)一旦惡化能快速把用戶切回舊版本。灰度比例怎么定要看SDK的影響力。一個(gè)支付SDK升級(jí)影響交易鏈路灰度比例可以放高一些因?yàn)楸仨毮茉诙虝r(shí)間內(nèi)快速回滾一個(gè)埋點(diǎn)SDK升級(jí)可以放低一些因?yàn)樗鼟炝瞬挥绊懼髁鞒獭N伊?xí)慣的做法是先放5%用戶觀察一天確認(rèn)崩潰率、關(guān)鍵功能成功率與舊版本基本持平再逐步放量到30%、80%、100%。每一步放量之間留出觀測(cè)窗口至少覆蓋一個(gè)業(yè)務(wù)高峰周期通常是24小時(shí)以上。灰度期間的監(jiān)控指標(biāo)不能只看崩潰率。接口超時(shí)率、關(guān)鍵頁(yè)面停留時(shí)長(zhǎng)、轉(zhuǎn)換率同樣重要這些指標(biāo)在崩潰率沒(méi)跳起來(lái)的時(shí)候就可能先惡化是更早期的預(yù)警信號(hào)。還要留一個(gè)心眼部分客戶端的上報(bào)有延遲崩潰率往往延后幾小時(shí)才在監(jiān)控后臺(tái)體現(xiàn)所以放量節(jié)奏不能過(guò)猛要等數(shù)據(jù)平穩(wěn)后再走下一步。灰度期間如果發(fā)現(xiàn)某個(gè)用戶群有問(wèn)題比如特定系統(tǒng)版本崩潰率偏高最快的手段是限流——把這個(gè)用戶群強(qiáng)制切回舊版本而不是等全體回滾。這個(gè)操作要求灰度開(kāi)關(guān)具備按用戶維度分流的能力在升級(jí)前就要先驗(yàn)證分流邏輯是否好用否則真出事時(shí)手忙腳亂。4.3 回滾預(yù)案把“撤退路線”當(dāng)成升級(jí)必需的一環(huán)灰度發(fā)現(xiàn)的嚴(yán)重問(wèn)題正確的做法不是在新版本上繼續(xù)打補(bǔ)丁而是立刻回滾。但回滾比想象中難因?yàn)樯?jí)代碼里可能已經(jīng)引入了新的相互調(diào)用關(guān)系直接撤銷版本新代碼調(diào)舊SDK接口照樣翻車。所以我在升級(jí)分支上會(huì)專門(mén)保留一個(gè)回滾提交記錄把升級(jí)前那個(gè)可用狀態(tài)的完整快照包括依賴鎖定文件、構(gòu)建配置、回滾開(kāi)關(guān)配置全部保存好。一旦需要回滾不是去“撤銷”升級(jí)分支的改動(dòng)而是直接切回升級(jí)前的發(fā)布產(chǎn)物重新部署?;貪L還有一層容易被忽視的坑數(shù)據(jù)兼容性。SDK升級(jí)如果改了本地存儲(chǔ)格式或服務(wù)端接口協(xié)議回滾后新版本已經(jīng)寫(xiě)入的數(shù)據(jù)舊版本可能讀不了。遇到這種情況我一般提前準(zhǔn)備數(shù)據(jù)遷移腳本回滾時(shí)同步執(zhí)行反向遷移否則用戶設(shè)備上會(huì)留下一批丟失數(shù)據(jù)比升級(jí)失敗本身更麻煩?;貪L預(yù)案要在升級(jí)前就寫(xiě)好而不是等到出問(wèn)題時(shí)再臨時(shí)想。至少包括三塊內(nèi)容回滾觸發(fā)條件哪些指標(biāo)達(dá)到什么閾值、回滾操作步驟誰(shuí)按哪個(gè)按鈕、執(zhí)行哪條命令、回滾后驗(yàn)證項(xiàng)確認(rèn)舊版本恢復(fù)正常、確認(rèn)新版本數(shù)據(jù)不影響回滾。這份預(yù)案要和灰度方案一起評(píng)審評(píng)審?fù)ㄟ^(guò)才允許進(jìn)入灰度階段。敏捷團(tuán)隊(duì)可以把回滾動(dòng)作做成一個(gè)自動(dòng)化任務(wù)把“切流量、切依賴配置、回舊版本”這些動(dòng)作封裝成一條命令運(yùn)維同學(xué)一條命令就能執(zhí)行整套回滾故障時(shí)間可以壓縮到分鐘級(jí)。我見(jiàn)過(guò)太多團(tuán)隊(duì)在事故當(dāng)晚一邊開(kāi)著會(huì)議一邊手動(dòng)改配置文件那場(chǎng)景毫無(wú)意外地成了最深的教訓(xùn)。5. SDK升級(jí)避坑清單四個(gè)翻車場(chǎng)景與排查方法5.1 測(cè)試環(huán)境升級(jí)通過(guò)生產(chǎn)環(huán)境發(fā)布后接口大面積報(bào)錯(cuò)現(xiàn)象本地和測(cè)試環(huán)境都驗(yàn)證通過(guò)一發(fā)到生產(chǎn)接口大面積報(bào)錯(cuò)錯(cuò)誤日志里堆棧卻和測(cè)試環(huán)境不太一致。原因生產(chǎn)環(huán)境和測(cè)試環(huán)境用了不同的依賴解析結(jié)果最常見(jiàn)的是某臺(tái)構(gòu)建機(jī)器緩存里還留著舊版SDK拉新版本時(shí)命中了緩存里的舊包。這類問(wèn)題最容易在“灰度通過(guò)正式放量”的那次構(gòu)建上爆發(fā)因?yàn)榛叶葮?gòu)建可能用了手動(dòng)觸發(fā)的參數(shù)沒(méi)有走標(biāo)準(zhǔn)的鎖定校驗(yàn)。解決先對(duì)比生產(chǎn)與測(cè)試環(huán)境的鎖定文件哈希值清掉構(gòu)建機(jī)和CI的SDK緩存目錄重新構(gòu)建同時(shí)把“強(qiáng)制刷新依賴并記錄鎖定文件校驗(yàn)值”加入發(fā)布流程避免緩存過(guò)期被舊版本污染。我自己的經(jīng)驗(yàn)是流程里寧可多一步校驗(yàn)也不要省這一步。5.2 SDK版本號(hào)沒(méi)變但部分用戶App行為變了現(xiàn)象升級(jí)報(bào)告里沒(méi)有SDK版本變化用戶卻反饋丟消息、彈窗異常、閃退排查半天發(fā)現(xiàn)事件時(shí)間線和SDK服務(wù)端策略變更完全吻合。原因很多SDK是“客戶端殼加服務(wù)端配置”的架構(gòu)客戶端啟動(dòng)后從服務(wù)端拉配置廠商改了默認(rèn)參數(shù)客戶端行為就變了跟本地SDK版本號(hào)沒(méi)有關(guān)系。這類問(wèn)題不只在升級(jí)時(shí)出現(xiàn)日常版本里也可能冒出把它寫(xiě)進(jìn)監(jiān)控預(yù)案能省掉大量“我們沒(méi)有升級(jí)為什么行為變了”的無(wú)效排查。解決升級(jí)前確認(rèn)SDK是否帶遠(yuǎn)端配置能力升級(jí)后灰度期間把“版本號(hào)相同但行為分布異常”作為獨(dú)立監(jiān)控項(xiàng)觀察是否有異動(dòng)如果SDK提供關(guān)閉遠(yuǎn)端配置的調(diào)試選項(xiàng)在測(cè)試環(huán)境先固定行為確認(rèn)服務(wù)端策略穩(wěn)妥后再放開(kāi)。5.3 升級(jí)后啟動(dòng)變慢、內(nèi)存占用明顯升高功能卻正?,F(xiàn)象升級(jí)后功能全部正常但App啟動(dòng)時(shí)間從2秒變成4秒內(nèi)存占用明顯升高用戶投訴變多。原因新版本SDK引入了更重的初始化邏輯可能在主線程上做了同步的數(shù)據(jù)預(yù)加載。這類問(wèn)題自動(dòng)化測(cè)試很難發(fā)現(xiàn)因?yàn)闇y(cè)試環(huán)境往往不執(zhí)行完整的啟動(dòng)流程或者沒(méi)有真實(shí)的設(shè)備性能檔位。解決用性能分析工具對(duì)比升級(jí)前后的啟動(dòng)流程定位耗時(shí)在新版本SDK的哪個(gè)方法如果SDK提供延遲初始化或懶加載配置把初始化挪到子線程或業(yè)務(wù)真正調(diào)用的時(shí)機(jī)再執(zhí)行沒(méi)有對(duì)應(yīng)配置的SDK就要評(píng)估這次升級(jí)的性能代價(jià)是否可接受不可接受就直接回退。這類問(wèn)題我一般在小范圍灰度時(shí)同步跑真機(jī)性能對(duì)比真機(jī)上多檔位設(shè)備各跑一輪數(shù)據(jù)出來(lái)再?zèng)Q定下一步。不要只看中高端機(jī)型的數(shù)據(jù)低端機(jī)的CPU調(diào)度策略差異很大SDK初始化成本在低端機(jī)上可能被放大好幾倍。5.4 升級(jí)分支合并后業(yè)務(wù)模塊出現(xiàn)偶發(fā)崩潰現(xiàn)象升級(jí)分支合并后業(yè)務(wù)模塊出現(xiàn)偶發(fā)崩潰不是必現(xiàn)的分布在不同設(shè)備和操作步驟上開(kāi)發(fā)環(huán)境復(fù)現(xiàn)不了只能看線上堆棧。原因新版本SDK把原來(lái)同步的回調(diào)改成了異步線程回調(diào)業(yè)務(wù)代碼原本默認(rèn)回調(diào)發(fā)生在主線程或某個(gè)生命周期環(huán)節(jié)現(xiàn)在線程和時(shí)機(jī)都變了出現(xiàn)空指針或UI更新異常。這類問(wèn)題最廢時(shí)間的原因是觸發(fā)條件不明要有意識(shí)地收集“設(shè)備型號(hào)、系統(tǒng)版本、操作路徑、崩潰堆?!彼募讟颖玖繅蛄瞬拍芏ㄎ灰?guī)律。沒(méi)有可復(fù)現(xiàn)路徑之前不建議在主干上反復(fù)試先在灰度環(huán)境觀察同時(shí)在升級(jí)分支上做防護(hù)性修復(fù)。解決先看崩潰堆棧里有沒(méi)有SDK的線程池類名有的話去SDK變更日志里查線程、回調(diào)相關(guān)描述在業(yè)務(wù)代碼里做一次線程切換和空對(duì)象保護(hù)不默認(rèn)回調(diào)線程和時(shí)機(jī)跟舊版本一致這類適配代碼單獨(dú)留在升級(jí)分支里注釋寫(xiě)明是哪個(gè)SDK版本引出的避免后續(xù)團(tuán)隊(duì)誤刪。6. 把升級(jí)經(jīng)驗(yàn)沉淀成團(tuán)隊(duì)的常規(guī)能力6.1 升級(jí)Checklist模板與CI自動(dòng)更新提醒SDK升級(jí)做過(guò)兩三次之后流程會(huì)穩(wěn)定下來(lái)。我在項(xiàng)目倉(cāng)庫(kù)里維護(hù)一份升級(jí)Checklist模板每次新的SDK版本發(fā)布按模板過(guò)一遍流程不需要臨時(shí)想該做什么。模板涵蓋的環(huán)節(jié)就是前面幾章的內(nèi)容變更影響面評(píng)估、獨(dú)立版本清單更新、升級(jí)分支創(chuàng)建、編譯、全量測(cè)試、性能對(duì)比、灰度發(fā)布、監(jiān)控觀察期、回滾預(yù)案確認(rèn)。模板是給沒(méi)有經(jīng)驗(yàn)的新同學(xué)用的經(jīng)驗(yàn)還要沉淀在自動(dòng)化的流程里。我在CI上加了一個(gè)SDK版本檢查任務(wù)每次構(gòu)建時(shí)對(duì)比版本清單和SDK官網(wǎng)發(fā)布的最新版本有更新就自動(dòng)提醒。提醒只提示不自動(dòng)升級(jí)——SDK升級(jí)必須經(jīng)過(guò)評(píng)估盲目自動(dòng)更新是給自己埋雷。6.2 依賴差異報(bào)告與“不升級(jí)”的記錄升級(jí)完成后用依賴對(duì)比工具把升級(jí)前后的依賴樹(shù)差異生成一份報(bào)告和這次發(fā)布記錄一起歸檔。報(bào)告的價(jià)值不只在當(dāng)下如果兩周后才發(fā)現(xiàn)某個(gè)異常這份報(bào)告能幫你快速確認(rèn)是否和某次SDK升級(jí)有關(guān)省掉排查所有可能性的時(shí)間。項(xiàng)目長(zhǎng)期運(yùn)行后歸檔報(bào)告就是最客觀的歷史依據(jù)。有些SDK版本評(píng)估下來(lái)風(fēng)險(xiǎn)遠(yuǎn)大于收益選擇不升級(jí)也是一種方案。這個(gè)決定同樣要記錄原因比如“新版本要求的最低系統(tǒng)版本高于我們相當(dāng)比例的用戶設(shè)備”或“當(dāng)前版本已驗(yàn)證可長(zhǎng)期運(yùn)行升級(jí)會(huì)引入一個(gè)我們還沒(méi)有明確需求的變更”。后面有人再問(wèn)為什么舊版本還在用一份記錄就能回答不需要再開(kāi)一輪評(píng)估會(huì)。長(zhǎng)期做下來(lái)團(tuán)隊(duì)對(duì)SDK升級(jí)的恐懼會(huì)小很多。最深的體會(huì)有兩條一條是升級(jí)不要等定期評(píng)估、低風(fēng)險(xiǎn)小步升級(jí)比憋大招跨版本升級(jí)穩(wěn)得多另一條是流程要留痕每次升級(jí)留下的評(píng)估記錄、差異報(bào)告和踩坑條目能讓下一輪升級(jí)的工作量從兩周變成兩三天。希望這篇筆記幫到你下一次接到SDK升級(jí)任務(wù)的時(shí)候心里有譜。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
中文字幕丰满人妻日本| 加勒比人妻综合| 校园春色中文字幕AV| 精品亚洲| 九九热九九热| 另类图片欧美激情综合| 久久亚洲天天做| 91视频综合| 小草精彩毛片| 亚洲综合小说另类图欧美视频激情小说色五月天| 超碰偷拍| 区一在线观看| 国产精品一区二区三区,亚洲综合 性开放中文AV高清无码免费看 | 夜色97| 无色无码| 在线欧美亚洲| 东京热精品97综合网| 无码操逼视频一下| 天天综合站| 婷婷亚洲综合| 无码heyzo高清一区| 亚洲高清色综合| 色综合潮| 亚洲老熟妇xxx| 欧美性爱日韩性爱| 亚洲国产精品无石码久久| 九九热免费国产视频婷婷伊人五月| 四虎国产精品永久入口| 99热在线播放| 99av| 青娱乐黄色录像| 91成人久久| 久9久| 亚州AV无码国产精品| 一本久久久精品| 亚洲天堂第一页| 91成人在线免费视频| 97在线观看| 91精品91久久久中77777| 综合久久2017| 亚洲91在线| 亚洲无限观看| 亚洲熟女乱综合一区二区三区| 美女的肌被草喷水视频| 97干在线看| 青娱乐亚洲热| 中文精品少妇天堂| 亚洲国产天堂| 思思热在线视频免费| 蜜臀久久99精品久久久久久婷婷| 天天拍天| 欧美日韩资源| 无码免费在线观看黄色片| 白嫩白嫩的午夜九久久久久久久久久久久成人剧场 | 人妻熟女av国产网站| 日本人妻丰满熟妇久久久久久| 青青草狠狠撸| 男人天堂最新手机版在线青青草| 亚洲成成熟女人综合一区二区| 偷拍亚洲视频一区二区三区四区| 超碰中文字幕人妻草一区| 大香交伊人网| 99热啪啪| 免费黄色视频网址| 97WW精品| 夜夜操91744565| 96免费视频在线| 一区=区三区视频| 久9久| 91高跟美女在线播放| 啊啊啊啊嗯嗯嗯用力好爽 | 国产精品对白内射| 高清孕妇孕交 交孕妇| 国产乱码久久久| 国产欧美日产一区二区三区 - 国产欧美日| 欧美最大综合网| 九九久久久| 亚洲国产欧美一区二区潘金莲| 亚洲国产美女久久久久| 熟女人妻一区二区三区免费看 | www.人人cao| 欧美日韩222| 国产后入清纯| 欧美人与动性人交a| 色天使亚洲综合在线观看| 人妻-91porn| 躁躁日曰躁2020| 日本三级韩国三级美三级91| 黄片www视频免费| 亚洲系列第一页| japan日本高清乱xxxx| 中文字幕 国产区| 综合自拍| 亚射在线| 亚洲?V无码专区在线电影| 天天躁日日躁AAAXX| 婷婷亚洲中文字幕在线| 日韩中文字墓| 久久麻豆一区二区| 加勒比久久av| 日韩综合无码一区久久92| 亚洲国产欧美中文永久| 1000午夜黄色| 自拍偷拍 高清无码| 久久精品一区| 97精品一区二区视频| 天堂种子在线www网资源| 天天综合网在线| 欧美色图91| 囯产乱伦一区二区三女 | a人欧美综合天堂麻豆| 日日躁夜夜躁狠狠躁超爽| 国产人伦a片信息免费片| 日本黄 R色 成 人网站| 很狠操| 97视频在线| 丁香五月社区| 天天爽天天| 综合久久少妇中文字幕| 欧亚三区动漫| 美女黄页网站| 精品成人动漫一区二区| 99视频内射三四| 欧美久久婷| 99re视频在线播放青草| ji熟女.com| 久久久久久中文字幕中文字幕最新| chaopen97久久| 欧美大香蕉久| 亚洲日韩乱码中文无码蜜桃臀网站| 中文无线日韩一区| 性爱乱伦一区| 亚洲精品九九九九九九| 中文字幕在线免费观看视频| 国产传媒午夜理伦精品| 亚洲少妇在线影音| 免费毛片在线播放| 亚洲人天堂| 久草资源在线视频官方总站日韩丝袜美腿| AV污污污污| 亚洲国产亚洲天堂| 国产毛片精品一区二区色欲黄A片| 老熟女天天操| 狠狠搞 亚洲91| 无码WWW免费视频网站| 日本中文字幕一区| 国产精品一区二区黄片| 夜夜精品视频| 欧美夜色| 亚洲欧美中文日韩视频中国语| JuliaAnnXXX888| 国产久久久9999| 91性高朝久久久久久久久| 久久国99999| 亚洲五码一区二区三区| 国产精品天堂| 精品999日本| 日韩一级片在线看| 久久久久久久强迫| 四虎精品一区| 熟啊v色欧美热| 精品成人av一区二区三区在线| 超碰吊日色| 五十路熟女工口| 国产1769在线| 国产三级资源在线观看| 囯产精品久久久久久久久久梁医生| 操我啊啊啊啊啊| 综合久久久久久久综合网| 亚洲天堂少妇| 超碰97导航| 1024香蕉视频| 日本高清_区二区三区 | 国产成人免费观看在线视频| 亚洲天堂资源网| 欧美天堂日韩三级国产传媒| 怡红院视频在线| 久久亚洲一区二区色婷婷| 无码一区二区三区四区五区六区七区八区九区十区视频 | 日本精品网站在线中文| 少妇色欲综合网2| 天天综合香 ld视频| 美女被艹尤物视频| 青娱乐亚洲自拍| 亚洲se91| 97chaopengongkai| 欧美色图亚洲色,麻豆| 91人妻超碰| 久久激情五月| 日逼国产| 婷婷久热| 天天看综合网| 亚洲欧洲小说图片视频| 亚洲色五月| 无码自拍SM| 久久成人午夜精品影院| 18禁中文字幕| 精品毛片av一区二区| 视频在线中文字幕| 欧美综合传媒| 屁股久久久久久久久| 大香蕉一人在线| 精品人妻夜夜草| 久久天天摸| 五月天伊人| 五月天伊人| 婷婷久久综合久| 日韩欧美国产高清视频| 99久久精品国产高潮| 日操粉逼逼| 亚洲AV秘 精品久久老牛影视| 日韩欧美大片免费高清啪啪| 色激情综合网站| 秋霞午夜成人福利片片| 国产强奸AV在线| 伊人网免费视频| 中文字幕在线免费观看2| 花花AV导航| 天天干人人乐| 蜜臀无码视频在线观看| 国产精品无码av在线| 超碰无码加勒比| 色五天伊人| 香蕉久久AⅤ...| 精品中文字幕第一页| 日日不卡av| 亚州国产成人精品女人久久| 97日视频| 性欧美| 日韩欧美丝袜诱惑| 日韩啪啪啪视频| 99精品丰满人妻无码| 国产精品suv一区| 超碰到97情色| 亚洲欧美另类图片| ..日韩av毛片精品久久久| 日韩人妻一区二区精品| 香蕉一区二区三区在线视频| 人妻丝袜肏逼| 97爱爱爱| 欧美专区日本专区| 亚洲精品丝袜| 国产精品在线一区二区| 美女9118禁| 亚洲AV成人无码一二三久久| 91网九色蝌蚪操熟女| 淫荡网址| 国产AV激情无码久久无码| 久久精品中文字幕无码l| 综合网色| 精品一区二区三区四区外站| 91伊人| 视频在线观看免费一区二区三区| 在线视频日韩欧美国产| 欧美性暴力猛交XXXX| 蜜臀aV午夜一区二区三区| 色妺妺AⅤ| 人妻在线视频| 九久9热| 久久久久久九九九九九九| 欧美天天综合网| 鸡巴插逼视频| 91欧美偷拍| av日韩中文字幕| 91伊人久| 久都青青视频 | 国产精品女久久久久av爽| 激情五月婷| 香蕉久久精品| 在线日韩日本亚洲国产| 亚洲国产青青| 亚洲欧美一区二区网址| 婷婷五月天伊人| 青青伊人加勒比海| 国模私拍一区二区三区神乳| 天天流夜夜操| 青青草原香蕉日本Ap| 亚洲精品性爱片| 亚洲天堂另类美腿| 91亚州| 精品少妇一区二区三区在线视频| 后入式在线免费观看60秒| 97在线免费视频| 五月丁香| 99999久久精| 爱av免费| 超碰在线1234区| 久久91精品国产9丨久久分亭| 中文字幕片| 天天综合网网欲色| 免费观看欧美日韩操逼视频| 精品国产乱子伦一区二区三区,精品一| 欧美性爱十八禁| 亚洲综合射| 国产一区二区三区免费视频在性观看| 97自拍一区| 人人操,人人插| 99自拍B亚洲 | 亚洲色9| 国产一区二区三区白丝| 亚洲日韩欧美一区二区| 在线可观看的黄色网址| 亚洲欧美激情小说| 狠狠穞A片一區二區三區| 99999久久精| 久操婷婷| yw尤物av无码点击进入麻豆| 97超碰天天爱天天爱| 国产 亚洲 一二三四| 成人老鸭窝人人在线视频| 国产一级舔足在线观看| 亚洲 欧美 小说| 日韩偷拍一区二区三区 | 国产又色又粗又黄又爽| 99蜜桃臀久久久欧美精品网站| 蜜桃臀av一区二区| 97色在线| 国产精品视频自拍在线| 色偷偷综合91久久噜噜| 婷婷九月色| 欧美色999| 青青操在线亚洲视频观看欧美在线| 麻豆国产视频精品观看| 欧美色图在线视频少妇| 人人人人人人少妇| 免费av在线播放二区| 男人把坤坤插入女人的下体| 97干在线| 国产精品女久久久久av爽| 97亚洲国产| 桃色五月天| 少妇熟女1区2区3区| 国产精品高潮久久AV| 久久AV无码网址| 一起草视频在线| 91成人在线| 久久九九国产精品| 九九九色| 97爱爱官网| 九九九久千久久激情蜜桃在线看| 国产精品视频白浆免费| 国产精品4p在线观看| 国产麻豆一区二三区| 久久天天摸| 国产三级日产三级韩国三级| 亚洲av噜噜噜噜噜噜| 性交一区二区在线播放| 亚洲中文字幕97久久精品少妇| 久久欲| 91精品国产91熟女| 色网1| 久jiu久神马影院| 人人操人人摸人| 日韩激情无码影院| 日韩情色一区二区| 日本免费二区三区| 久日91在线| 久久精品亚洲婷婷| 激情综合五月婷婷| 日韩欧美一级特黄大片| 欧美中文字幕日韩在线| 超碰78| 中国和日本人色哪个不下载能放| 素颜老阿姨乱情色| 久久久久久九九九九-美女久久久久久久-成人AV | 亚洲高清视频在线免费观看| 97碰碰色| 骚货操死你| 精品乱码在线观看| 欧美色图在线视频少妇| 亚洲视频二区| 97操在线| 操逼999| 抽插爽| 91热情品| 精品一久久久| 麻豆天美传媒在线视频天堂| 国产suv精品一区二区四| 亚洲午夜av| 操逼日韩无码| 啊v视频在线观看| 牛黄色久午久| 色婷婷九月| 国产精品久久久久综合| 99九九久久| 亚洲欧美经典一区二区| 91碰碰| www.久久99| 大香蕉综合网| 亚洲夜色在线| 国产CHASE男男GAYGA 毛多色婷婷| 国产精品制服丝袜清纯唯美| 不卡一区二区日本视频| 强奸a片网| 国产小u女在线观看| 国产精品自在自拍视频| 日韩啪啪啪啪啪| 丁香五月激情五月| 久久久久精| 日本女厕偷拍| 超碰夫妻97| 男人精品天堂一区| 欧美宗合色| 97在线视频观看| 99久国产精品午夜性色福利| www黄片免费看com| 国产按摩一区二区三区| 欧美黑人与女人91~| 丰满少妇高潮无码| 91操熟女视频 | 影音先锋国产精品| www.四虎在线| 久久久久久久9最新免费视频观看| 国产偷人妻精品一区二区在线| 超碰在线第一页| 神马麻豆福利院| 午夜男女爽爽爽影院视频| 国产性爱在线视频一区二区| 久操不卡视频| 白丝AV网站| 久久97超碰香蕉| 久久久无码视频| 韩国手机不卡无码三级视频| 婬女免费一二三区A片| 欧美九九爱| 国产精品久久久九九九| 毛片一区二区| 三久久久四久久久久| 丁香九月 婷婷| 99爱爱| 96免费视频在线| 99热在线只有精品| 人妻丰满熟妇一区二区三| 日韩免费性爱视频在线观看| 亚洲国产一级中文综合久久天堂在线免费观看 | 亚洲十八禁止| 日本潮催一卡操| 强奸a片网| 四虎884a| 日本欧美一区二区三区视频麻豆| 五月丁香啪| A一级色女| 97爱爱| 婷婷性爱| 久久r精品| 国产最新小视频在线播放下载 | 神马久久久久久久久久久久| 亚洲毛片久久| 牛黄色久午久| 婷婷九月国产| 国产成人欧美一区二区三区的国产| 天美传媒国产原创中文字幕亚洲欧美另类| 99re热| 欧美一区二区三区互相| 中文字暮97| 天天射天天色成人| JULIA一区二区三区在线播放| 亚州综合AⅤ| 中文一区二区三区影院| 夜夜做夜夜爽精品视频| 国产野战露脸在线播放| 激情终合网| 欧美人与动性人交a| 中文字幕高清20页视频| 精品人妻丰满熟妇一区二区三| 久久久久久久久成人av解说| 久湿久久| 日韩不卡a级视频专区| 亚洲在钱| 久热大香蕉| 欧美另类天堂| 97人人操人人干| 亚洲色婷婷综合久久一区二区三区| 成人免费福利在线观看| 天天躁夜夜躁狠狠躁AV| 日韩一性一交一A片俄罗斯| 成人在线永久| 亚洲国产午夜真人一级片中文字幕精品黄网站| 国产九九九九九九| 强免费黄色网址| 后入合集| ′ !γ}丶。。久久精品欧美一区二区三区| 亚洲精品黄码久久久久| 91亚洲黑人| 亚洲啪啪综合?v一区综合精品区| 色综合中文字幕不卡| 亚洲欧美色图小说| 久久久久久久9最新免费视频观看| 亚洲字幕一区二区| 怡红院网站在线视频| 国产这里只有精品| 亚洲电影中字一区二区| 北京美女一区二区| 簧片免费看视频| 天天做天天爱| 国产肏屁眼视频| 亚洲午夜福利在线影院| 婷婷激情四射| 久久久久久九九九九-美女久久久久久久-成人AV | 久热大香蕉| 一本色道熟妇| 91熟女综合| 人人操人人大香蕉| 东北女人无套内谢视频| 国产乱人妻精品入口| 中文字幕精品资源在线| 尤物网站91| 9999亚洲精品| 亚洲18禁| 日本人人操人人操| 九九综合九九综合| 超碰 国产熟女精品一区| 国产精品一二三免费网站| 国产最火爆久久国产网站网站 | 99九九久久| 国产在线观看91精品一区| 懂色av中文字幕一区二区三区天美| 九九热最新| 日本性爱欧美性爱| www.男人的天堂| 诱惑人妻欧美一区在线播放| 性在久久久久久| 97干97色| 人人操超碰在线| 亚洲中文字幕乱码无码一区二区| 最新日产中文在线麻豆| 乱伦熟女论坛| 亚洲高清综合网| 亚洲精品一区二区免费在线观看| 欧美|91色综合| 色婷婷五月综合激情中文字幕| 立川理惠被中出无码| 亚洲自拍小说| 综合情欲网| 人妻 欧美 中文| 国产丝袜视频| 色九月婷婷| 中国女人内射6XXXXX| 日韩熟女操逼| 欧美人体性爱互联网第一页婷婷日本| 欧美热图99| 欧美激色| 日本高清视频xxxx| 亚洲一区二区三区在线激情| 色欧洲| 加勒比综合在线| 青青操视频在线| 蜜桃色院一区久久| 噜噜噜久久亚洲精品色情| 国产精品久久久视频| 长长久久免费视频| 草草影院在线视频| 激情综合五| 婷婷综合| 丁香九月婷婷| 天天摸,夜夜摸| 狠狠色丁香| 激情五月综合网| 伊人婷婷五月天| 综合久| 色婷婷电影| 亚洲少妇喷视频看| 久久极品一区二区| 久久久久无码| 日韩99神马视频片| 色麻豆AV| 久久成人东京热人妻| 亚洲在线综合| 亚洲 欧美 色图| 成年无码动漫av片无尽在线| 色色色日本| 高清无码一区二区三区| 一级A片女人高潮叫床| 日本一级性爱| 超碰79人人乐| 97爱亚洲综合色| 亚洲精品一卡二卡三卡福利视频网站| 91九九九吃| 国产91丝袜 在线播放| 香蕉99秘 一区精品蜜桃臀| 超碰免费人妻在线| 亚洲h片在线免费观看| 国产麻豆福利av在线播放| 久久亚洲精品成人av| 久久激情五月| 九九热超碰97亚洲最新香蕉 | 激情欧美97| 91在线免费精品视频| 熟女这里只有精品6| 91精品人妻电影| 日韩有码一区三区| 夜夜嗨绯色| 久久久久久人体| 亚洲国产美女久久久久| 亚洲五码一区二区三区| 少妇 综合| 日韩精品操少妇| 久久久一区二区三区麻豆| 青娱乐淫乱1314| 久久久免费一级黄片| 极品丝袜无码| 欧美九一精品久久久熟妇| 日本综合色图| 黑人精品成人一区二区三区| 69AV女优男人的天堂| 97视频在线视频| 久久专区| 六月丁香婷| 亚洲男人天堂2013| 亚洲综合欧美| 色婷视频| 欧美第二页午夜| 国产成人91一区二区三区| 久久精视频美日韩在线视频| 亚洲91网。| 日韩精品 欧美激情| 精品少妇人妻av久久免费| 亚洲综合97中文网| 99re99在线视频| 激情无码日韩| 91夜色chaopeng| 色妇综合网| 亚洲码专区| 国产精品久久久久久久久久久久久久久久 | sewuyueav| 亚洲九月丁香| 狠操91,com| 秋霞免费无码视频日韩A片| 99色在线| 日本在线999| 久久久久国产精品片区无码直播| 欧美亚洲AN| 日本黄大片在线观看视频| 天无日色综合| 亚洲 在线| 人妻AV在线| 亚洲中文sv| 人人透人人操| 亚洲综合色图欧美| 中文字幕日本久久| 另类老少妇| 国产视频不卡在线观看| 东北操逼| ?亚洲伊人伊成久久人综合网| 亚洲999综合| 草草网站影院白丝内射| 好看的久久不射无码影视影院| 精品日韩人妻视频| 亚州综合电影| 欧美日产国产在线成人第一区| 亚洲网自拍| 欧美一区二区日韩三区| 97国产色图 | 伊人久大| 9色在线| 超碰美国| 欧美综合色站| 四虎影视永久在线免费| 98福利在线视频| 欧亚性爱啪啪| 久久伊人影院| 国产九九久久久精品| 性久久久| 午夜AV污污污| 狠狠色综合网| 新亚洲无码| 日本一片一区| 在线人人人人人人精品超| 成人夜夜| 超碰97精品在线| 欧美呦呦性爱| 超碰9 7女人 | A 天堂| 97网址97| 丁香六月婷婷久久综合| 欧洲黄色网| 精品无码一区二区人妻久久蜜桃| 久久久婷婷婷| 亚洲 小说 欧美 激情 另类| 色眯眯av| 95精品在线| 国产一级特黄大片处女| 极品出轨视频网站| 麻豆AV一区二区| 亚洲一区二区三区AV无码 | 亚洲夜色在线| 先锋色眉乱伦资源| 色妇综合网| 欧美日韩青操| 另类图片五月| 美中日韩无码| 日韩欧无码一区二区三区免费不卡| 欧美国产一区二区三区麻豆传媒| 乱老女人一区二区视频| 日韩无码视频黄色| 欧洲亚洲人妻无码久久三区四区| 嗯嗯啊啊操死我| 精品超碰国产| 蜜乳av一区二区| 亚州综合色| 久久久久久久综合,国产| 欧美三级一级| 成人午夜视频免费播放| 性爱综合一区二区| 久久αⅴ| 久久9精品网站| 神马久久久久久久久久久久| 中文字幕 码 自拍 视频 区| 黄色网址在线免费观看| 搡老女人911熟妇老熟女| 大色网久久| 97频视在线| 日韩一999精品| 天天干天天插| 色香色欲天天综合网天天来吧 | 91最新综合| 日日干日日| 久久艹逼视频| 在线强奷到舒服的无码视频 | 久久久一区二区三区四曲免费听 | 99日视频在线免费| 色 亚洲 91| 青青色综合| 久久99黄色卞西瓜| 欧美色色色| 欧美疯狂做爰xxxx| 日本色色的视频| 亚洲国产一区二区入口| 涩综合导航| 人人干人人操人人爱| 欧美色狠| 91青青草| AAAA级日本片免费视频| 七月婷婷综合| 欧美人体性爱互联网第一页婷婷日本| 国产精品久久久久久久久久久久久久| 蜜臀99久久精品久久久久久| 综合熟妇一区二区三区| 欧美女同在线| 91精品久久久久久| 91丝袜人妻| 风韵犹存大大大大香蕉 | 91麻豆天美国产欧美| 日本狠狠干| 亚洲精品视频二区| 97操97色| 欧美色图亚州激情| 精品福利视频| 少妇500双飞99| 人妻酒店出差被中出免费在线播放| 九X超碰| 久久久网一区| 亚洲国产亚洲天堂| 美女爽到高潮91| 久久内射| 日本精品一级二级三级| 人人看人人插| 国产亚州高清国产拍精| 欧美性爱五月天| 天美传媒av 在线| 欧美18禁91| 婷婷五月天无码| 激情四射婷婷六月天| 97亚洲综合在线| 啊啊啊好多水| 欧美性生活免费网| 91黑人无码激情在线| 色婷婷影院| 少妇69中文| 福利大香蕉| 天天日夜干| 青草草免费网站av| 亚洲欧美国产日本一区二区三区| 91狠| 青青伊人加勒比海| 超碰九区| 国产精品视频麻豆入口| 激情五月天视频| 欧美超碰96| 欧美九一精品久久久熟妇| 综合网 欧美| 二男一女成人A片| 亚洲色婷婷| 亚州 综合 色图| 亚洲天天天| 国产美女口爆吞精视频| 性爱精品一区| 91新在线欧美| 超碰人人干天天射| 17c在线成人免费A片观看| 色情综合网| 久草精品一区| 日韩免费中文字幕视频| 久久久久久AV无码免费网站| 男人天堂站| 91四海无码日韩欧美| 老外又粗又长一晚做五次| 亚洲精品亚洲人成人网| 蜜桃色院一区久久| 九九九久久久| 久久婷综合| 亚洲欲| 天天干天天舔| 人妻熟女字幕一区二区| 91欧美丝袜| 性爱乱伦视频免费| 麻豆视频test| 春色91| 欧美综合区| 欧美大战久久久伊人| 日本伦乱九九九综合| www久久99| 加勒比av官网在线| 日本色色视频网站| 国产丝袜美女诱惑| 久久系列| 五月综合久久| 色九九久九九| 中文字幕在线观看二区三区| 久久久久9| 国产精品探花色| 区一在线观看| 毛片久久| 中文字幕一区二区三区蜜臀| 青娱乐91| 久7色| 国产v亚洲v日韩v欧美v片另类| 大香蕉婷婷| 亚洲中文sv| 久久婷婷伊人| 97在线公开视频| 欧美日韩99| 2017天天操天天日| 日本人妻A片成人免费看片| 九九超碰综合网| 日本三级R| 91精品国| 尹人大香蕉视频在线| 亚洲深夜福利| 一本一道人妻久久一区二区三区 | 人人操,人人液| 素人美腿视频网站| 中国一级αV| 天天亚洲综合| 又粗又长又爽在线观看| 日本天天干天天搞一区| 欧美aaaaaaa| julia ann久久| 大香蕉五月天| 嗯嗯啊啊好爽| 天天综合影院91| 岛国激情视频软件| 性色高清..……| A久久| 襙一襙| 久久久国产精品亚洲精品| 国产亚洲精品美女久久久m| 久久精品日韩专区免费观看| 激情综合婷婷| 国产午夜在线观看| 97干天天| 亚洲国产激情国产av| 偷拍盗拍亚洲色图图片 | 一级性爱视频免费观看| 久久爽爽精品| 爽 好舒服 无码刺激久久| 骚女天天综合网| 操美女人妻| 人人操人人摸人 | www.久久久久| 99精品国产户外露出| 日韩欧美偷拍美女视频| 激情五月天色色网| 欧美黄色手机在线观看| 超碰视97中文| 91狠婷| 日韩Va亚洲va欧美Ⅴa久久| 东京热,男人的天堂| 热天堂一区二区| 乱伦1色页| 伊人网高清| 国产久久日| 亚洲色鬼| 成人免费福利在线观看| 97久久网| 久久久久久裸体| 最新AVzaixian| 精品久久久久久中文| 欧亚日韩中文在线| 色拍偷亚洲| 亚洲天堂另类美腿| 国产 三级自拍| 99e久久国产精品| 黑人性欧美| 亚洲精品一卡二卡三卡福利视频网站| 激情婷婷五月天| 欧美色性爱| 欧美视频一| 欧洲视频在线| 青青欧美| 日韩99神马视频播放| 这里有精品| 欧美系列在线一区二区| 综合伊人激情| 啊啊啊啊好爽好舒服一区二区易域| 日韩精品操少妇| 国产极品999| 99免费视频| 天堂8在线新版官网| 日韩欧美大力操| 国产午夜精品在线观看| 国产一线二线三线av| 91少妇通奸网站| 免费网站观看www在线观| 极品五月天噜噜| 久久激情网| av凤凰久久久| 操逼片中文| 神马久久久久久伦理片| 91国产操逼视频| 国产精品久久久| 日韩小电影| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 色偷综合| 91性感网站| 夜夜福利| 青青伊人久久| 日夜干射色啊| 欧洲一区二区三区免费| 久久精品一区| 97超碰色屌| 久久欧洲| 中文字幕97色| 精品乱码久久久久| 欧美999999| 好屌色综合| 亚洲欧美日韩电影网站一区| 欧美熟妇亚洲版| 97频视在线| 久欲AV| 久久精品一区一起草| 女上位精品在线| 51一区二区三区| 国产精品白丝AV| www.91视频网| 囯产精品久久久久久久久久二区三区| 精品人妻av区天天看片| 国产激情视频一区区三区| 热99这里有精品综合久久 | 91人妻视频在线| 福利偷拍视频-中文字幕2019国语完整视频大全-S91AV | 亚洲高清无码在线桃色| AV免费在线播放一区| 三级片网站在线播放| 噜噜噜狠狠色综合| 草草影院在线视频| 97硬碰| 美女黑人91神马| 一区二区播放| 久久 精品| CCYY草草影院地址入口| 一区二区三区黄色片a| 欧美大香蕉专区网| 婷婷五月在线视频| 一区二区首页| 丰满人妻一区二区中文| 久久亚洲欧美一区二区三区-亚洲国产精品第一区二区 | 久热大香蕉网站| 欲综合网| 综合亚洲欧美精品日韩?v| 性久久| 99热最新网址| 久久亚洲天天做| 黄站在线免费观看| av三级电影在线播放| 一牛影视成人片免费| www.zbzhongsen.com| 夜夜嗨av午夜成人| 精品制服美女中文一区二区三区| 97碰久久| 日韩欧美中文日韩欧美色| 欧美99| 亚洲自拍一区夜夜操 | 久久久一热在线播放| 欧美视频激情久久久久久| 蜜桃久久一区| 久久久久久亚洲Av无码| 亚洲成av人片色午夜乱码| 97色爱| 天天影视91看看| 国产精品爱欲| 五月婷婷丁香| 91精品国产乱码| 成人国产视频在线观看| 亚州AV无码国产精品| 麻豆av一区二区三区| chaopen97久久| 日韩欧美操逼xxx| 色综合久| 蜜桃狠狠色伊人亚洲综合| 清纯唯美亚洲| 色五月综合网| 97视频新免费| 精品美女久久久久| 大奶啊啊好爽 | 日韩强奸av| 污啪啪啪视频| 久久久久96| 99国产精品视频尤物| 大鸡巴久久久| 欧美九九九九九| 天天躁日日躁XXXXYY| 日本不卡二三区| 伊人影院日本| 婷婷月色| 婷婷丁香人妻 | 静品嫩模一区二区| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 日韩欧美麻豆 | 神马午夜久久久| 九九九九热| 五月综合视频| 超碰欧美COM| 韩国一级婬片A片AAAAA| 国产免费一区| 中文字幕一区电影在线观看| 99色婷婷中文字幕乱色| 美国日韩黄片| 少妇毛片久久| 久操精品| 厕所偷拍在线| 草草电影院| 99re这里只有精品3| 中文字幕三四区| 欧美超碰9798| 91综合色噜噜| 国产有码一区| 波多野42部激情无码喷潮| 日本淫色网| 亚洲一区在线观看欧洲| 嗯嗯嗯,草死我| 亚洲黄片免费在线播放| 97色色色综合网站| 欧美大香蕉久| 性爱欧美五月| 国产综合网站在线播放 | 好淫网一二三视区| 97日韩欧美| 色女99一级片在线观看| 日韩一级久久毛片| 久久久婷| 乱伦av麻豆| 99国产精品自在自在| 国产树林里野战在线看| 美女天天干| Julia在线播放亚洲久久| 欧美色图20p| 色91综合网| av在线一区二区三区| 99精品无码| 综合网欧美在线| 囯产精品久久久久久久久久梁医生| 熟女中出视频| 秋霞蝌科网日本一区| 男人天堂毛片| 日韩女优中文字幕| 艹精品| 国产尤物在线三区| 艳美熟妇先锋一二三区| 91av一区二区在线观看| 天美麻豆黄色录像| 曰韩精品九九无码| 伊人一区二区在线播放| 精品人妻伦一区二区三区久久| 91狠狠综合久久| 中文字幕在线免费观看2| 综合欧美日韩在线| 99超级碰免费视频| 自拍偷拍草一草| 日日AAvv| 亚洲色图 欧美热图 清纯唯美 另类自拍| 国产超碰AV在线精品| 熟女熟妇一区二区三区视频| 欧美专区第一页| 国产 日韩 欧美 中文 另类,国产 欧美 另类 制服 变态,高清 日韩 欧美 中文,高 | 婷婷午夜清品久久久久久久性色视频观| 亚洲熟女国产综合另类| 久久毛卡| 麻豆久久精品亚洲精品88| 学生妹天天看| 97综合在线观看| 欧美疯狂做爰xxxx| 国产主播福利| 天天影视综合色| 啊啊啊不要啊啊受不了了视频在线| 偷窥自拍亚洲天堂网爆| 亚洲日本激情| 97天天操| 人人妻天天做天天爽| 91jk色拍| 五月激情小说| 国产精品成人无码av无码免费| 伊人国产成人av网站| 亚洲精品蜜桃久久久| 91总综合网| 天天操女人| 色啪网| 欧美激情中文字幕另类小说| 欧美 精品国产制服第一页| 亚洲综合嫩| 超碰这里有精品| 日韩9999| 欧美最婬乱婬爆婬性视频| 91精品久久久久久综合五月天| 一本久道在线综合视频| 亚洲天堂久久久久久粉红视频| 天天性射网| 天天综合网~91综合网| 插老姨肥穴| 欧美久久草熟女| 五月婷婷色| 2020国产精品| 女人午夜视频777| 亚洲第一黄色av网站| 午夜a成v人电影| 91社区伊人| 91色交| 亚洲天天在线| 欧亚日韩中文在线| 懂色Av一区二区三区| 久久久久久久久久久精| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 操逼免费视频无码国产| 98人妻精品一区二区色欲| 曰韩人妻中文字幕在线 | 久久久久久91香蕉国产| 欧美日日夜夜| 国产suv精品一区二区四区999 | 中文操逼字幕| av黄图片在线观看| 国产91精品在线免费| 久久久久国产精品久久久| 97欧美在线| 91久久| 另类图片欧美激情综合| 黑人免费福利视频| 精品欧美不卡在线播放| 欧美成人性爱视频在线播放| 精品人成视频在线观看| 最新日本中文字幕| 韩国三级一线观看久| 极品综合| 亚洲欧美在线观看免费| 福利伊人玖玖国产| 欧美日韩性爱操大逼| 国产精品老师| 九九热精品在线| 丰满少妇乱子伦精品无| 大香伊人在线一区| 国产乱人妻精品入口|