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

ARTICLE DETAIL

資訊詳情

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

SpringCloud微服務(wù)在線教育系統(tǒng)實戰(zhàn):從單體拆分到部署避坑

SpringCloud微服務(wù)在線教育系統(tǒng)實戰(zhàn):從單體拆分到部署避坑 簡介一套基于SpringCloud微服務(wù)架構(gòu)的在線教育系統(tǒng)完整項目面向Java初中級開發(fā)者、畢業(yè)設(shè)計選題學(xué)生及需要微服務(wù)實戰(zhàn)經(jīng)驗的程序員。系統(tǒng)分為前臺用戶網(wǎng)站和后臺運營平臺兩部分前臺包含課程、問答、文章三大核心模塊后端采用SpringBoot、SpringCloud、MyBatis-Plus、MySQL、Docker等主流技術(shù)前端基于Node.js和Vue.js構(gòu)建并整合Redis、ActiveMQ、阿里云OSS與視頻點播同時使用ECharts實現(xiàn)圖表展示POI完成用戶批量上傳注冊JWT實現(xiàn)分布式單點登錄。壓縮包大小約198KB內(nèi)容以項目源碼、數(shù)據(jù)庫腳本與說明文檔為主可幫助讀者快速理解前后端分離的微服務(wù)項目結(jié)構(gòu)。目前已有1154人學(xué)習(xí)下載適合參考其架構(gòu)設(shè)計、接口文檔生成及分布式組件集成方式用于個人項目練手或畢業(yè)設(shè)計二次開發(fā)。1. 從單體撐不住到 online_edu 微服務(wù)改造這個在線教育系統(tǒng)到底在解決什么在線教育系統(tǒng) online_edu 的典型痛點不在“寫接口”而在“拆模塊”。前臺用戶要刷課程、發(fā)問答、看文章后臺運營要傳視頻、導(dǎo)報表、盯數(shù)據(jù)面板如果全部揉在一個 SpringBoot 單體里熱部署慢、并發(fā)扛不住、運營活動一上線就得整個重啟。所以這類系統(tǒng)最常見的落地方案是SpringBoot SpringCloud 做微服務(wù)底座MyBatis-Plus 做數(shù)據(jù)訪問Vue.js 做前后端分離MySQL 存業(yè)務(wù)數(shù)據(jù)Redis 扛熱點ActiveMQ 解耦異步任務(wù)OSS 和視頻點播管文件ECharts 出圖表POI 導(dǎo) Excel。這套技術(shù)組合在 2026 年的今天依然是中小團隊搭建在線教育平臺的主流選型因為每一層都有成熟生態(tài)招人容易、排錯資料多、踩坑成本低。這篇文章適合兩類人一是正在做畢業(yè)設(shè)計或課程設(shè)計、需要從零跑通一個完整微服務(wù)項目的學(xué)生二是公司要自建在線教育平臺、想用現(xiàn)成方案避免從頭造輪子的后端開發(fā)。我會按“怎么拆服務(wù)、怎么寫業(yè)務(wù)、怎么部署、怎么避坑”的順序把這套系統(tǒng)從骨架到上線講透。先說明一點微服務(wù)不是越拆越好online_edu 這種體量拆 3 到 4 個核心服務(wù)就夠拆多了反而被分布式事務(wù)拖死。2. SpringCloud 微服務(wù)骨架搭建從 Maven 多模塊到 Nacos 注冊中心2.1 服務(wù)拆分的判斷標(biāo)準online_edu 為什么拆成這四個服務(wù)很多初學(xué)者拿到“微服務(wù)架構(gòu)”這個要求就慌不知道拆幾個服務(wù)、按什么拆。我的經(jīng)驗是按“獨立部署 獨立數(shù)據(jù)域 獨立伸縮”三個標(biāo)準來判斷。online_edu 的前臺系統(tǒng)包含課程、問答、文章三大部分這三塊業(yè)務(wù)的數(shù)據(jù)表互不重疊、訪問頻率差異大——課程是高頻讀問答是寫多讀少文章是內(nèi)容管理為主。把它們拆成三個服務(wù)再加上一個管文件上傳、視頻點播和后臺報表的后臺服務(wù)正好四個不多不少。拆服務(wù)的時候有一個常見誤用把“微服務(wù)”理解成“每個 Controller 一個服務(wù)”結(jié)果一個查詢要跨五次 HTTP 調(diào)用延遲直接爆炸。我一般會這樣判斷——如果兩個功能要頻繁聯(lián)查同幾張表它們就應(yīng)該在同一個服務(wù)里如果只是偶爾通過 ID 互相引一下才值得拆開。課程服務(wù)要查講師信息和視頻播放地址這些表天然在一塊硬拆反而不是微服務(wù)是給自己上刑。服務(wù)拆完每個服務(wù)獨立一個數(shù)據(jù)庫至少做到邏輯隔離。online_edu 這種規(guī)模不需要分庫分表但四個數(shù)據(jù)庫是底線。MySQL 5.7 和 8.0 都能跑建議直接上 8.05.7 的官方支持已經(jīng)走到盡頭新項目沒必要為難自己。2.2 用 Maven 多模塊搭建項目骨架父 POM 鎖定依賴版本微服務(wù)項目第一步是建 Maven 多模塊工程。父 POM 管依賴版本子模塊管具體實現(xiàn)。這一步的坑主要在版本兼容SpringBoot 和 SpringCloud 的版本號不是隨便配的SpringCloud 的每個大版本對應(yīng)一個 SpringBoot 版本配錯了啟動直接報 NoSuchMethodError而且是啟動到一半才爆查起來非常惡心。我一般用 SpringBoot 2.6.x 配 SpringCloud 2021.x這套組合在 2026 年依然大量運行在生產(chǎn)環(huán)境資料最多、坑基本都被踩平了。SpringBoot 3.x 配 SpringCloud 2022 當(dāng)然更好但對 MyBatis-Plus 和 ActiveMQ 的兼容性要求更高學(xué)生項目和老系統(tǒng)升級沒必要賭這個。!-- 父 POM 關(guān)鍵配置片段 -- parent groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-parent/artifactId version2.6.13/version relativePath/ /parent properties spring-cloud.version2021.0.5/spring-cloud.version mybatis-plus.version3.5.3.1/mybatis-plus.version mysql.version8.0.33/mysql.version /properties dependencyManagement dependencies dependency groupIdorg.springframework.cloud/groupId artifactIdspring-cloud-dependencies/artifactId version${spring-cloud.version}/version typepom/type scopeimport/scope /dependency dependency groupIdcom.baomidou/groupId artifactIdmybatis-plus-boot-starter/artifactId version${mybatis-plus.version}/version /dependency /dependencies /dependencyManagement這段配置的邏輯是SpringBoot 父 POM 統(tǒng)一管理 Spring 全家桶的版本SpringCloud 的 dependencyManagement 統(tǒng)一管微服務(wù)組件Nacos、Gateway、OpenFeign 等的版本MyBatis-Plus 和 MySQL 驅(qū)動單獨鎖版本。這樣每個子模塊只需要聲明用到了什么不需要寫版本號避免子模塊之間依賴版本漂移。注意 SpringCloud 的版本號是倫敦地鐵站名命名的2021.0.x 對應(yīng) Jubilee不要寫錯。2.3 Nacos 注冊中心與 Gateway 網(wǎng)關(guān)配置服務(wù)發(fā)現(xiàn)是微服務(wù)的地基服務(wù)拆完之后服務(wù)之間要互相找到對方這就需要注冊中心。Nacos 是當(dāng)前 SpringCloud 生態(tài)里用得最多的注冊中心比 Eureka 多了配置中心功能而且控制臺是中文的排查問題方便很多。online_edu 的四個服務(wù)全部注冊到 Nacos前臺請求統(tǒng)一走 Gateway 網(wǎng)關(guān)轉(zhuǎn)發(fā)不直接調(diào)服務(wù)地址。# 每個微服務(wù)模塊的 application.yml 關(guān)鍵配置 server: port: 8101 # 不同服務(wù)用不同端口 spring: application: name: service-course # 服務(wù)名網(wǎng)關(guān)和 Feign 都靠這個名字路由 cloud: nacos: discovery: server-addr: 192.168.1.10:8848 namespace: online-edu-dev # 區(qū)分環(huán)境用dev/prod 隔離# Gateway 網(wǎng)關(guān)模塊路由配置 spring: cloud: gateway: routes: - id: course-route uri: lb://service-course predicates: - Path/api/course/** - id: qa-route uri: lb://service-qa predicates: - Path/api/qa/**注冊中心這一段邏輯是服務(wù)啟動時向 Nacos 上報自己的 IP 和端口網(wǎng)關(guān)從 Nacos 拉取服務(wù)列表根據(jù)請求路徑的前綴把請求轉(zhuǎn)發(fā)到對應(yīng)服務(wù)。lb://前綴表示走負載均衡Gateway 會輪詢分發(fā)到服務(wù)實例。我在配置里加了namespace字段開發(fā)環(huán)境和生產(chǎn)環(huán)境用同一個 Nacos 但不同命名空間防止聯(lián)調(diào)的時候服務(wù)串了。這里有個參數(shù)值得注意spring.application.name是微服務(wù)里的“身份證”所有注冊、發(fā)現(xiàn)、配置管理都靠這個名字。如果你把服務(wù)名寫錯了Nacos 控制臺里能看到服務(wù)但網(wǎng)關(guān)路由永遠轉(zhuǎn)發(fā)不過去日志里只會報 503非常隱蔽。3. 前臺用戶系統(tǒng)落地課程、問答、文章三大模塊的代碼實現(xiàn)3.1 課程模塊MyBatis-Plus 分頁查詢與視頻點播的配合課程模塊是 online_edu 的前臺核心用戶需要按分類瀏覽課程、搜索課程、查看課程詳情、播放視頻。數(shù)據(jù)庫設(shè)計上課程表、課程分類表、講師表、課程視頻表四張表就夠了不需要過度設(shè)計。課程列表頁的典型接口是分頁查詢這里直接用 MyBatis-Plus 的 Page 對象避免手寫 LIMIT 分頁的邊界判斷。MyBatis-Plus 的 BaseMapper 已經(jīng)封裝了大部分單表 CRUD寫代碼的核心就變成“怎么組合條件”。// 課程分頁查詢接口實現(xiàn) Service public class CourseServiceImpl implements CourseService { Autowired private CourseMapper courseMapper; Override public PageCourse pageCourses(Integer current, Integer size, CourseQueryDTO query) { // 1. 創(chuàng)建分頁對象current 從 1 開始 PageCourse page new Page(current, size); // 2. 構(gòu)建查詢條件LambdaQueryWrapper 避免硬編碼列名 LambdaQueryWrapperCourse wrapper Wrappers.lambdaQuery(); wrapper.like(StringUtils.hasText(query.getTitle()), Course::getTitle, query.getTitle()) .eq(query.getCategoryId() ! null, Course::getCategoryId, query.getCategoryId()) .eq(Course::getStatus, 1) // 只查上架的課程 .orderByDesc(Course::getPublishTime); // 3. 執(zhí)行分頁查詢MyBatis-Plus 會自動生成 COUNT 查詢 return courseMapper.selectPage(page, wrapper); } }這段代碼的關(guān)鍵邏輯是LambdaQueryWrapper它用方法引用的方式指定列名編譯期就能發(fā)現(xiàn)字段名拼寫錯誤不用等運行期報 SQL 異常。like和eq第一個參數(shù)是布爾條件為 true 才拼接這個條件這樣查詢參數(shù)為空的時候不會生成多余 WHERE 子句。selectPage會自動執(zhí)行一條 COUNT 查詢和一條分頁查詢返回的 Page 對象里帶總條數(shù)和頁數(shù)前端直接拿來渲染分頁組件。課程詳情頁要展示視頻播放地址這就涉及阿里云視頻點播的接入。常見做法是后端調(diào)用視頻點播的接口獲取播放憑證PlayAuth返回給前端前端配合視頻播放器 SDK 播放。播放憑證有過期時間一般是 100 秒所以不能緩存必須每次進入播放頁時實時獲取。這里有個小坑憑證獲取接口要加防盜鏈配置否則播放地址泄露出去別人可以直接扒流。3.2 問答模塊Redis 緩存熱點問題與 ActiveMQ 異步通知問答模塊的業(yè)務(wù)特征是用戶提問、其他用戶回答、提問者采納答案。這個模塊的并發(fā)模型和課程模塊不一樣——一個熱門問題可能在短時間內(nèi)被大量瀏覽但回答數(shù)遠小于瀏覽數(shù)。所以問答模塊的緩存策略是題目詳情頁用 Redis 緩存回答列表也緩存用戶提交新回答時先更新數(shù)據(jù)庫再刪除緩存等下次查詢時重建。這里我用的是“先更新數(shù)據(jù)庫再刪除緩存”的模式而不是“先刪緩存再更新數(shù)據(jù)庫”。原因很簡單先刪緩存的話更新數(shù)據(jù)庫那段時間內(nèi)來了請求緩存沒有會直接去打數(shù)據(jù)庫如果請求量大的話數(shù)據(jù)庫瞬間被壓垮這就是緩存擊穿。先更新庫再刪緩存雖然極端條件下會有幾百毫秒的臟讀但對問答場景完全可接受。// 回答問題的異步處理邏輯 Service public class AnswerServiceImpl implements AnswerService { Autowired private StringRedisTemplate redisTemplate; Autowired private JmsTemplate jmsTemplate; Override public void submitAnswer(Answer answer) { // 1. 保存回答到數(shù)據(jù)庫 answerMapper.insert(answer); // 2. 刪除問題詳情的緩存下次查詢時自動重建 redisTemplate.delete(qa:question:detail: answer.getQuestionId()); // 3. 發(fā)送異步消息通知提問者 jmsTemplate.convertAndSend(edu.qa.answer, JSON.toJSONString(answer)); } }ActiveMQ 在這里的作用是解耦把“新回答通知”這個非關(guān)鍵路徑剝離出去。如果不用消息隊列用戶提交回答后要同步調(diào)郵件或短信服務(wù)一旦短信服務(wù)掛了回答就提交失敗。用 ActiveMQ 之后回答只要存進庫里就算成功通知失敗可以重試互不影響。上面代碼里convertAndSend是 JmsTemplate 最簡單的用法消息體直接傳 JSON 字符串消費者那邊用JmsListener注解接消息就行。Redis 緩存這里還有一層設(shè)計熱門的瀏覽計數(shù)也不直接寫數(shù)據(jù)庫而是先寫 Redis再定時批量同步到 MySQL。不然用戶每打開一次問題詳情頁就 UPDATE 一次數(shù)據(jù)庫問答這種讀多寫少的場景也能把數(shù)據(jù)庫打滿。3.3 文章模塊富文本編輯與靜態(tài)化方案的取舍文章模塊相對簡單核心就是兩類頁面文章列表和文章詳情。文章詳情如果每次請求都從數(shù)據(jù)庫查、再用模板渲染數(shù)據(jù)庫壓力大不說響應(yīng)速度也慢。常見做法是文章發(fā)布時生成靜態(tài) HTML 頁面存到 OSS 或者本地磁盤前臺詳情頁直接返回靜態(tài)文件。我做過一個簡化版本前端用 Vue.js 的vue-quill-editor做富文本編輯器文章正文以 HTML 片段存進 MySQL。詳情頁請求時后端把 HTML 片段拼進 Vue 組件里渲染。這個方案的優(yōu)點是改動少、好維護缺點是首屏加載慢一點但對文章這種非實時性內(nèi)容用戶完全感知不到區(qū)別。// Vue.js 前端文章列表頁的分頁邏輯 export default { data() { return { articleList: [], current: 1, size: 10, total: 0 } }, methods: { async fetchArticles() { const res await axios.get(/api/article/list, { params: { current: this.current, size: this.size, category: this.categoryId } }) // 后端返回結(jié)構(gòu): { records: [], total: 100 } this.articleList res.data.records this.total res.data.total } } }這里要說一個很多人忽略的細節(jié)分頁接口返回的records是文章列表但列表里不應(yīng)該包含文章正文這個字段。文章正文可能幾十 KB列表頁一次性拉 10 篇就是幾百 KB移動端網(wǎng)絡(luò)扛不住。正確做法是列表接口只返回 ID、標(biāo)題、摘要、封面圖、發(fā)布時間詳情頁再單獨查正文。這個字段裁剪邏輯要看 SQL 里 select 了哪些列MyBatis-Plus 里用select(Course::getId, Course::getTitle, ...)指定就好。4. 后臺運營平臺ECharts 看板與 POI 報表導(dǎo)出的實現(xiàn)細節(jié)4.1 運營后臺的數(shù)據(jù)面板ECharts 圖表接口怎么設(shè)計才不卡后臺運營平臺要展示課程銷售趨勢、用戶增長曲線、問答活躍度這些圖表。ECharts 渲染本身是純前端的事后端的工作是提供聚合好的數(shù)據(jù)接口。最容易犯的錯誤是后端直接返回明細數(shù)據(jù)讓前端去聚合。用戶量大了以后報表接口一次返回幾萬條記錄前端渲染直接卡死而且圖表數(shù)據(jù)不需要那么細的粒度后端聚合完只返回十幾個點的坐標(biāo)就夠了。我的做法是后端按時間粒度聚合。按天、按周、按月給聚合接口前端拿到的是[{date: 2026-01-01, count: 32}, ...]這種結(jié)構(gòu)ECharts 塞進去直接渲染。// 后臺數(shù)據(jù)面板的聚合查詢 RestController RequestMapping(/admin/stats) public class StatsController { Autowired private JdbcTemplate jdbcTemplate; GetMapping(/course-publish-trend) public ListMapString, Object coursePublishTrend( RequestParam String startDate, RequestParam String endDate) { String sql SELECT DATE(publish_time) AS date, COUNT(*) AS count FROM course WHERE publish_time BETWEEN ? AND ? GROUP BY DATE(publish_time) ORDER BY date; return jdbcTemplate.queryForList(sql, startDate, endDate); } }這個接口的邏輯是MySQL 的 GROUP BY 按天聚合課程上架數(shù)量返回的 Map 列表就是圖表的數(shù)據(jù)源。這里能用 JdbcTemplate 直接寫 SQL是因為聚合查詢往往是多表 JOIN 加復(fù)雜條件用 MyBatis-Plus 的 Wrapper 反而難寫。一個項目里別只用一種數(shù)據(jù)訪問方式聚合報表類和業(yè)務(wù) CRUD 類用不同工具很正常。圖表數(shù)據(jù)接口的響應(yīng)速度一般要求 200ms 以內(nèi)超過這個時間前端就能感知到卡頓。如果聚合查詢超過 1 秒優(yōu)先加聯(lián)合索引只要 WHERE 條件和 GROUP BY 的字段在同一個索引里性能通常能提升一個數(shù)量級。4.2 POI 實現(xiàn) Excel 導(dǎo)出百萬行數(shù)據(jù)的正確導(dǎo)出姿勢后臺運營平臺離不開導(dǎo)出功能課程清單、學(xué)員信息、問答列表都要導(dǎo)成 Excel。POI 是最常用的庫但很多人只會用XSSFWorkbook數(shù)據(jù)量一超過幾萬行就內(nèi)存溢出。POI 有 SXSSFWorkbook 專門處理大文件導(dǎo)出用內(nèi)存和磁盤交換的方式避免 OOM百萬行數(shù)據(jù)毫無壓力。// POI 導(dǎo)出課程列表數(shù)據(jù)量大時使用 SXSSFWorkbook public void exportCourses(ListCourse courses, HttpServletResponse response) { // 1. 用 SXSSFWorkbook1000 行刷一次盤避免內(nèi)存堆積 SXSSFWorkbook workbook new SXSSFWorkbook(1000); Sheet sheet workbook.createSheet(課程列表); // 2. 設(shè)置表頭樣式 CellStyle headerStyle workbook.createCellStyle(); headerStyle.setAlignment(HorizontalAlignment.CENTER); Font headerFont workbook.createFont(); headerFont.setBold(true); headerStyle.setFont(headerFont); // 3. 寫表頭 String[] headers {課程ID, 課程名稱, 講師, 價格, 上架狀態(tài)}; Row headerRow sheet.createRow(0); for (int i 0; i headers.length; i) { Cell cell headerRow.createCell(i); cell.setCellValue(headers[i]); cell.setCellStyle(headerStyle); } // 4. 寫數(shù)據(jù)行 int rowIndex 1; for (Course course : courses) { Row row sheet.createRow(rowIndex); row.createCell(0).setCellValue(course.getId()); row.createCell(1).setCellValue(course.getTitle()); row.createCell(2).setCellValue(course.getTeacherName()); row.createCell(3).setCellValue(course.getPrice().doubleValue()); row.createCell(4).setCellValue(course.getStatus() 1 ? 上架 : 下架); } // 5. 寫響應(yīng)流 response.setContentType(application/vnd.openxmlformats-officedocument.spreadsheetml.sheet); response.setHeader(Content-Disposition, attachment; filenamecourses.xlsx); workbook.write(response.getOutputStream()); workbook.dispose(); // SXSSFWorkbook 用完必須調(diào) dispose 清理臨時文件 }這段代碼的要點是new SXSSFWorkbook(1000)這行的參數(shù)1000 表示內(nèi)存里最多保留 1000 行超過的行會刷到磁盤臨時文件。dispose()必須調(diào)用否則臨時文件會留在磁盤上一次導(dǎo)出清不干凈時間長了磁盤被占滿。數(shù)據(jù)量大導(dǎo)出耗時超過幾秒時前端要配合 loading 狀態(tài)不然用戶會以為界面卡死了。POI 導(dǎo)出還有一個常見的亂碼坑文件名里的中文如果直接拼在Content-Disposition里瀏覽器會變成下劃線。需要做 URL 編碼URLEncoder.encode(課程列表.xlsx, UTF-8)這樣 Chrome、Edge、Safari 都不會亂。4.3 運營后臺的權(quán)限處理為什么把權(quán)限判斷放在網(wǎng)關(guān)層后臺運營平臺不允許普通用戶訪問管理員和運營人員要分開角色。微服務(wù)架構(gòu)下權(quán)限有網(wǎng)關(guān)層攔截和服務(wù)層校驗兩層。網(wǎng)關(guān)層做粗粒度校驗判斷請求路徑是否要求登錄、用戶有沒有這個角色的訪問權(quán)限服務(wù)層做細粒度校驗判斷用戶對某條數(shù)據(jù)有沒有操作權(quán)。SpringCloud Gateway 的全局過濾器可以統(tǒng)一做登錄態(tài)校驗和角色判斷這樣四個服務(wù)不用每個都寫一遍權(quán)限邏輯。token 用 JWT 格式網(wǎng)關(guān)解析出用戶 ID 和角色 ID 后通過 Header 傳給下游服務(wù)。這里有個坑下游服務(wù)直接信任網(wǎng)關(guān)傳來的 Header 有安全風(fēng)險要加一個內(nèi)部密鑰校驗防止服務(wù)端口暴露時被繞過網(wǎng)關(guān)直接調(diào)用。5. 避坑與排查online_edu 從開發(fā)到部署的 6 個真實踩坑記錄5.1 MySQL 連接報錯SSL 連接錯誤和時區(qū)問題一起出現(xiàn)現(xiàn)象SpringBoot 項目啟動時控制臺報Cannot create PoolableConnectionFactory具體原因里有The server time zone value й? is unrecognized和SSL connection error兩個問題同時出現(xiàn)。原因MySQL 8.0 默認啟用 SSL 連接而且時區(qū)配置從SYSTEM改成了需要明確指定。JDBC 連接串里既沒配useSSLfalse也沒配serverTimezoneAsia/Shanghai導(dǎo)致驅(qū)動校驗時區(qū)失敗整個連接池創(chuàng)建失敗。解決JDBC 連接串改成這樣jdbc:mysql://localhost:3306/online_edu?useUnicodetruecharacterEncodingutf8useSSLfalseserverTimezoneAsia/ShanghaiallowPublicKeyRetrievaltrue。其中allowPublicKeyRetrievaltrue是 MySQL 8.0 的另一個坑不配它連接時可能報Public Key Retrieval is not allowed。這行參數(shù)建議直接寫進每個微服務(wù)的配置文件里不要漏。5.2 Docker 安裝 MySQL 失敗鏡像拉不下來和容器起不來現(xiàn)象用 Docker 部署環(huán)境時docker pull mysql:8.0卡住不動或者docker run之后容器秒退docker logs看報錯是權(quán)限不足。原因拉鏡像卡住通常是網(wǎng)絡(luò)問題容器秒退則是 MySQL 初始化時往宿主機掛載目錄寫文件沒有權(quán)限。很多教程讓你掛載/my/own/datadir:/var/lib/mysql但這個目錄如果宿主機上沒有合適的權(quán)限MySQL 的mysqld進程無法寫入數(shù)據(jù)。解決掛載數(shù)據(jù)目錄時先建目錄再調(diào)整權(quán)限mkdir -p /data/mysql chmod -R 777 /data/mysql。然后啟動時加上--usermysql參數(shù)運行命令是docker run -d --name mysql8 -p 3306:3306 -e MYSQL_ROOT_PASSWORDroot123 -v /data/mysql:/var/lib/mysql mysql:8.0 --character-set-serverutf8mb4 --collation-serverutf8mb4_unicode_ci。--character-set-serverutf8mb4這個參數(shù)很重要MySQL 默認的latin1編碼存不了中文不配的話建表時必須每個表單獨指定字符集非常麻煩。5.3 微服務(wù)之間調(diào)用超時HttpClient 連接池耗盡現(xiàn)象商城或問答服務(wù)調(diào)用課程服務(wù)時偶爾報Connection pool timeout高峰時段特別頻繁。原因online_edu 的服務(wù)間調(diào)用用了 HttpClient而很多人的 HttpClient 配置是默認的。默認最大連接數(shù)只有 20而且連接空閑 60 秒后會被回收。一旦課程服務(wù)響應(yīng)變慢調(diào)用方積壓的請求占滿全部連接后續(xù)請求全部排隊等連接超時時間一到就報錯。解決給 HttpClient 設(shè)置更大的連接池和合理的超時時間。PoolingHttpClientConnectionManager的setMaxTotal(200)和setDefaultMaxPerRoute(100)RequestConfig里的connectTimeout(5000)需要 5 秒socketTimeout(10000)是 10 秒。同時開啟evictExpiredConnections()和evictIdleConnections(60, TimeUnit.SECONDS)定期清理空閑連接避免連接池被死連接占滿。5.4 Vue 打包放進 SpringBoot 之后的刷新 404 問題現(xiàn)象前端 Vue.js 項目打包后的 dist 目錄放到 SpringBoot 的static目錄下訪問首頁沒問題但點擊前端路由跳轉(zhuǎn)到/course/1這種路徑后按 F5 刷新就報 404。原因Vue 是單頁應(yīng)用路由用的 history 模式刷新時瀏覽器向服務(wù)器請求/course/1這個路徑但 SpringBoot 里沒有對應(yīng)的靜態(tài)文件后端直接返回 404。開發(fā)環(huán)境沒有這個問題是 vite 或 webpack 的 dev server 做了 history 回退。解決后端加一個轉(zhuǎn)發(fā)規(guī)則把非接口路徑的請求都轉(zhuǎn)發(fā)到首頁。寫一個配置類實現(xiàn)WebMvcConfigurer添加一個 ViewController 把錯誤路徑轉(zhuǎn)發(fā)到index.html。但是要注意/api/**和/admin/**這些接口路徑不能轉(zhuǎn)否則請求后端接口會被錯誤地返回 HTML排查起來更迷惑。5.5 阿里云 OSS 視頻上傳失敗STS 臨時憑證失效現(xiàn)象后臺運營在管理臺上傳課程視頻時偶爾上傳到一半報InvalidAccessKeyId特別是上傳大視頻時幾乎必現(xiàn)。原因視頻點播和 OSS 的臨時憑證 STS 默認有效期是一個小時但視頻上傳不是一次性的前端分片上傳大文件可能超過憑證有效期。憑證過期后后續(xù)分片攜帶舊憑證請求 OSS服務(wù)端直接拒絕。解決不要在前端固定一個 STS 憑證上傳所有文件。每次開始上傳時后端重新頒發(fā) STS前端檢測到上傳失敗時捕獲InvalidAccessKeyId錯誤后重新獲取憑證并重試當(dāng)前分片。同時在服務(wù)端把 STS 的有效期適當(dāng)延長比如 3 個小時但不要超過 12 小時安全性和體驗要權(quán)衡。5.6 ActiveMQ 消息堆積消費速度跟不上生產(chǎn)速度現(xiàn)象問答模塊的異步通知越來越多ActiveMQ 控制臺看到某個隊列的PendingMessage數(shù)量持續(xù)上漲用戶反饋收不到回答通知。原因消費者處理每條消息的邏輯里有調(diào)用遠程接口的操作比如發(fā)送郵件或短信這個遠程操作慢導(dǎo)致消費吞吐量遠低于生產(chǎn)量。解決先看消費者日志確認是遠程調(diào)用慢然后改消費者邏輯把發(fā)郵件的操作改成先入庫、再異步批量發(fā)送。同時給JmsListener配置并發(fā)消費者concurrency 5-10讓 5 到 10 個線程同時消費。這里要提醒一下消息的消費冪等性一定要做否則消費者重啟時重復(fù)消費用戶會收到兩條重復(fù)通知。在數(shù)據(jù)庫里加一個message_id唯一索引消費前先嘗試插入插入沖突說明處理過了直接跳過。6. 進階驗證用 Docker Compose 一鍵部署 壓測確認系統(tǒng)能上線項目開發(fā)完本地能跑通不等于能上線。我習(xí)慣把所有中間件編排進 Docker Compose在測試環(huán)境一鍵拉起然后立刻做一輪簡單的壓測確認瓶頸不在基礎(chǔ)設(shè)施層。Docker 的部署方案分兩層中間件層用 Docker Compose 管應(yīng)用層用 Dockerfile 打包鏡像。先看中間件編排version: 3.8 services: mysql: image: mysql:8.0 container_name: edu-mysql environment: MYSQL_ROOT_PASSWORD: root123 TZ: Asia/Shanghai ports: - 3306:3306 volumes: - /data/mysql:/var/lib/mysql command: --character-set-serverutf8mb4 redis: image: redis:7.0 container_name: edu-redis ports: - 6379:6379 command: redis-server --appendonly yes activemq: image: rmohr/activemq:5.15.9 container_name: edu-activemq ports: - 61616:61616 - 8161:8161中間件的參數(shù)說明TZ: Asia/Shanghai同時設(shè)置了容器的時區(qū)和 MySQL 的時區(qū)解決 5.1 提到的 serverTimezone 報錯Redis 加了appendonly yes開啟持久化避免容器重啟后緩存數(shù)據(jù)全部丟失ActiveMQ 映射了 61616服務(wù)端口和 8161控制臺端口控制臺可以用來排查消息堆積。應(yīng)用服務(wù)編排進同一個 Compose 文件里用 depends_on 指定依賴順序。網(wǎng)關(guān)服務(wù)對外暴露 8080其余服務(wù)只暴露給內(nèi)部容器網(wǎng)絡(luò)不映射宿主機端口這樣外部只能走網(wǎng)關(guān)服務(wù)端口不會被直接打穿。部署之后驗證系統(tǒng)能不能扛住基本流量我用一個很簡單的方法用ab壓測網(wǎng)關(guān)接口看吞吐量和錯誤率。# 壓測課程列表接口模擬 200 個并發(fā)每個并發(fā)發(fā) 1000 個請求 ab -n 200000 -c 200 -k \ -H token: your-test-token \ http://localhost:8080/api/course/list # 壓測結(jié)果重點看這 3 個指標(biāo) # Time per request: 平均每個請求耗時應(yīng)小于 200ms # Failed requests: 應(yīng)接近 0 # Requests per second: 吞吐量單機網(wǎng)關(guān)應(yīng)超過 500壓測結(jié)果如果 Failed requests 不為零先用dmesg看是不是端口隊列滿了再逐個排查是 MySQL 慢查詢還是 Redis 連接數(shù)不夠。我的經(jīng)驗是online_edu 這種體量的系統(tǒng)先確認基礎(chǔ)設(shè)施沒選錯型號再談業(yè)務(wù)優(yōu)化。做 docker compose 部署和壓測這件事我吃了不少虧。以前圖省事本地直接把服務(wù)跑起來就給測試看結(jié)果每次環(huán)境不一致要么 MySQL 配置不一樣要么 Redis 版本不同測試報 bug 我本地又復(fù)現(xiàn)不了最后發(fā)現(xiàn)是環(huán)境差異。用 Docker Compose 之后整個團隊的環(huán)境完全一致這個“在我電腦上能跑”的玄學(xué)問題算是徹底根治了。最后的習(xí)慣是每次改完代碼先跑一遍壓測接口確認響應(yīng)時間沒有明顯劣化再提交合并。壓測腳本放在項目的script目錄下隨手就能執(zhí)行不用臨時敲命令。希望這些步驟和踩坑記錄能幫你少走一段彎路把 online_edu 從本機跑通做到真正敢上線。本文還有配套的精品資源點擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
91日日| 亚洲最新中文字幕免费| 色眯眯av| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 亚洲aV无码成人在线观看| 加勒比综合在线| 天色综合网| 五月天丁香婷婷综合网站| 欧美日韩亚洲天堂| 日韩无码服务区| 大香网伊人久久综合网eew| 99热精品在线观看| 日本在线不卡v二区| 欧美性第一页| 无码二级三级| 婷婷久月| 综合欧美色图| 久操视频在线| 久久亚州大香蕉| 香一区二区三区| 五月婷婷综合在线| 午夜福利免费精品视频| 亚洲精品三区在线观看| 黄色视频特级毛片| 色天使亚洲综合在线观看| 96精品久久| 少妇精品久久久八区九区| 91av天美性媒精品视频| 综合国产97| 91色久| 福利伊人玖玖国产| 国产综合网站在线播放 | www.婷婷六月天| 再深点灬舒服灬太大了添视频| 伊人国产成人av网站| 中日韩久久久免费看| 成人五月天色网| 99国产精品免费| 亚洲AV无码天美传媒一区| 国产精品自产拍在线观看社区| 九九精品99| 在线看的av| 婷婷丁香五月天亚洲天堂网| 91人人臊| 成人短视频在线观看| 国产精品午夜高潮呻吟久久av| 美女一区二区国产精品| 成人综合网 欧美| 九九热男人天堂| 午夜天堂精品久久| 欧美亚州综合图片| 国产激情在线| 欧美日本成人一区二区| 爱妃国产亚洲视频中文字幕| 91成人高清在线观看| 在线欧美69V免费观看视频| 精品毛片av一区二区| 国产自产自拍| 欧美日韩情色一区二区| 九九九九精品一区| 九九九久久久W精品| 99操| 爱爱动态试试看6 0秒| 91久久| 69天堂| a片久久久久久久久久久久| 中文字幕高清精品一区| 日本女人操逼| 97 超碰 人人做 人人爱| 亚洲AV在线资源| 久操免费电影| 欧洲性爱无码区| 国产最火爆久久国产网站网站| 日本精品无码三级网站| 欧美激情总合网| 91老司机在线视频免费观看 | 中出789在线视频| 欧美色图人妻| 看日韩黄片| 久久精品国产亚洲AV高级北京| 亚洲AV成人无码一区二区三区在线观看 | 人人人摸人人| 日本福利二区视频| 久久 亚洲 日韩 人妻| 天天日美女的B| 视频不卡中文字幕| 一本一道久久综合久久| 思思视频免费看网站| 国产激情在线观看| 试看60秒| a片久久久久久久久久久久| 综合欧美日韩在线观看| 白丝AV网站| 深夜激情 | 国产免费大片| 综合少妇网| 久久亚洲欧美中文字幕国语| 日韩国语字幕| 人妻人久久精品中文字幕| 蜜臀久久99精品久久久久| 日韩一性一交一A片俄罗斯| 久久天天摸| 亚洲好色人妻| 亚洲欧洲网站免费观看| 欧美熟女逼久久久久久| 国模私拍一区二区三区神乳| 久久一二区四| 美女天天干| 一区二区三区精品黑丝白丝酒店对鸡 | 日本 免费 一区二区三区 久久香蕉 | 狠狠久久手机视频精品| 67194无码不卡| 好湿好紧视频| 黑人精品成人一区二区三区| 国产日韩中文字幕欧美| 99热在线播放| 殴美性天天| 天天色播亚洲综合网站| 久久久久久久9最新免费视频观看| V A在线| 加勒比综合九九99视频在线播放| 香蕉国产精品麻豆亚洲欧美日韩| 欧美一级欧美三级在线观看| 素人播放一区| 懂色Av| 精品国产片亚洲一区| 久久久久幕乱码| 国产亚洲精品美女久久久久久2021| 久久久久久中文版| 国产毛片在线| 97久久天天综合色天天综合色电影| 亚洲天堂在线怕怕视频| 久操九九九九九九九九九九九九九九九九九九九九九九九九九九九九 | 色色无码| 在线日韩精品一区二区三区| 伊人久久亚洲中文字幕| 日本三级A片网站com| 无码视频一区二区| 国产一区二区欧美日本| 国产精品一区二区麻豆| 亚洲第一页色| 色欲久久久久综合网| 少妇与黑人高潮在线| Sekablack无码一区| 九九热超碰97亚洲最新香蕉| 亚洲性爱免费电影| 日本天堂在线播放| 一区二区日韩欧美久久| 亚洲精品乱码线路中文字幕| 2019亚洲男人天堂| 一二三区在线| 人妻偷拍一区二区三区| 99少妇内射| 久久女人一区二区三区| 激情五月天插| 99久草| 国产精品经典一卡久久久| 岛国激情视频在线观看| 97这里只有精品| 精品十三区| 91站街按摩店老熟女熟女| 国产成人在线观看网址| 色臀aV| www老逼91| 无码高清国产AV| 97色操| 国产精品网站www| AV无码久久久精品| 人人搞人人插人人操| 丝袜翘臀后入欧美校园亚洲自拍另类小说一区中文字幕少妇诱惑 | 加勒比海成人视频网| 婷婷综合网站| 国产精品永久免费10000| 日韩综合色网| 中文97国产| 92福利社视频| A片 AV一级在线播放观看免费| 91A欧美电影网站| 夜夜操美女| 亚洲丰满很很操| 久久综合久久综合人久久夜精品| 香蕉在线一区二区三区| 久久一级无码精品毛片6| 91高潮| 久久久天美| 欧美 日韩 国产传媒| 色色色色电影网| 亚洲一区二区三区播放在线| 小视频国产| 亚洲不雅视频1区二区| 欧美在线视频播放| 中文幕97| 60秒免费小视频| 精品人妻一区二区免费蜜桃| 日韩三级久久久| 99久久久久| 大香蕉免费乱伦视频| 操日韩第| 青椒国产97在线熟女| 国产又猛又粗又爽又黄| 国产精品久久久久亚洲av| 亚洲婷婷综合网| 欧亚日韩一区在线| 97精品视频| 亚州欧美在线| 奶水 人妻 哺乳 在线| 一本大道青青| 国产深夜福利| 日B操| 精品一区二区三区免费古装毛片香港三级日本三级人妇 | 欧美一区二区三区成人性生活| 日韩精品高清资源在线| 日日A∨| 最新中文字幕av| 啊操爽品善一区二区三区| 日本九九久久99播| 久久av网| 中文字幕第7页| 久久东京热成人| 亚洲九九视频| 日韩熟女乱伦中出| 欧美一级久久久久久久大片动画| 日韩欧美午夜视频在线| av婷婷色婷婷色六月| 日韩性爱电影一区| 熟女精品一区二区三区| 成人日韩中文字幕| 久久熟女久| 91白虎| 国产久久久久久| 亚洲 暴爽 AV人人爽日日碰| 亚洲精品国产无码高清| 久久亚洲AV成人精品无码| 夜色AV无码手机在线影院| 日本韩欧美在线播放a| www.婷婷六月天| 久久久久久夜夜夜夜夜| 欧美色图20P| 亚洲国产成人精品久久久国产成人一区二区 | 色色色色电影网| 青青操在线视频| 秋霞网无码| 欧美一级美片在线观看免费| 国产欧美日韩在线不卡第一页| 日韩三级视频一区二区三区| 美腿丝袜高跟网免费视频免费视频| 欧美亚洲厕所精品偷拍91| 天操天操夜操夜月月年年操操 | 亚洲欧美大| 国产老熟女| 久久精品人妻一区二区| 九九热国产| 欧美黄片免费在线观看视频| 91AV老熟女视频| 99re6在线视频精品免费完整版安卓版| 大香蕉2017| 大二网站亚洲| 色婷婷五月天| AV男人天堂网| 国产区91柔拿会所技师| 在线观看十八禁| 蜜臀一二三区| 亚洲 自拍偷拍 欧美| 日本 欧美 亚中文字幕| 人人摸人人舔一区二区| 99久久亚洲精品无码毛片潘甜甜| 久久久久久中文字幕中文字幕最新| 欧美激情黑人| 一级日本牲交大片好爽在线看| 秋霞视频一区二区| 亚洲高清男人天堂| 欧美操逼熟女| 97就爱干| 免费观看国产小粉嫩喷水精品午| 中文高清一区二区的| 91网站在线播放| 男人的天堂午夜av| 超碰 av 女人天堂| 18禁在线视频| 蜜臀久久99精品| 国产无码久久高清| 国产欧美日韩在线观看麻豆传媒公司| 欧美 亚洲精品首页| 亚洲精品中文字幕一区在线视频| 久久水蜜臀亚洲AV无码精品| 狠狠色伊人亚洲综合网站色| 国产一区二区三区不卡手机在线| 天天影视亚洲| 欧美躁死她一区二区| 久久9精品网站| 男人a天堂手机在线版| 色诱avtt| 国产91啪| 中文字幕av一区二区三区人妻少妇| 操日韩第| 中国黄色特级精品一区二区三区片| 亚洲av国产av综合av卡| 安徽熟妇视频| 国产宅男宅女在线观看| 任你干在线视频| 一起草日韩| 久草草一二三四区久久| 波多野结衣先锋影音| 美性中文综合网| 精品丝袜无码一区二区三APP| 青娱乐大香蕉| 唐山老熟妇露脸啪啪叫| 成人资源中文字幕在线观看| 这里只有精品视频| www.av家庭乱伦| 亚洲国产剧情少妇激情| www亚洲免费| 日本黄色天堂| 丝袜美腿诱惑亚洲欧美视频在线观看| 婷婷爽人人婷婷爽视频| 美女大乳久久久久久久女人18| 欧美大波激情xxxx| 超碰69| 婷婷激情五月综合| 很很操在线| 熟女网站最新| 五月天婷婷小说| 操屄日韩| 插入粉嫩少妇视频| 97操碰| 偷拍亚洲熟女视频播放| 一本色道熟妇| 亚洲少妇色图自慰直播| 激情四射五月天| 日韩免费在线观看不卡| 亚洲一二三四区在线免费看视频| 婷婷五月天久久久| 麻豆国产精品午夜视频| 97久久国产精品| 色五月婷婷麻豆在| 国产日韩精品人妻久久久久色欲网站| 无码二级三级| 高潮综合网| 久超碰在| 亚洲AV无码国产成人| 蜜臀一区二区三区在线| 久久成人东京热人妻| 视频在线观看一二三区| 无遮挡h肉动漫在线观看| 亚洲精品九九九| 91AV天美在线视频| 婷婷激情一区二区三区俺也去| 97人妻免费中文字幕| 懂色aV一区二区天美传媒| 综合91网| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 免费男人的天堂| 97玖玖超碰| 婷婷五月天色| 一级啊性爱在线视频| 国产精品不卡高清在线观看| 亚洲欧美内射| 伦理弟一页| 久久久久久久久久久人妻| 精品一区二区成人动漫| 眼镜人妻101.com| 熟妇一区二区| 亚洲资源吧| 偷拍综合亚洲| 日韩99神马视频片| 熟女一区二区| 淫淫总合网| www.婷婷| 六月婷婷综合| 国产久久久久久久久一区二区 | 国桃视频产巨乳精品一区二区在线| 小草精彩毛片| 精品女人999| 91粉嫩萝控精品福利网站_精品影音先锋国| 国产对白刺激视频| 性久久久| 91视频伊人| 中文字幕一区二区视频在线观看| 视频一区二区免费在线| 久久AV无码AV| 国产无马在线| 人人看人人插| 波多野结衣被操50分钟免费视频| 国产一级特黄大片处女| 国产最新小视频在线播放下载 | 欧美一二三区四五区| 老鸭窝亚洲毛片| 东京太热久久久| 99热99re超碰精品| 97欧美精品综合| 日本欧美色| 婷婷五月天无码 | 久久AV无码AV| 亚欧免费| 亚洲综合精品国产一区| 91精品黄在线观看| 小少妇| 美女啊啊啊啊pc| 九九热超碰97亚洲最新香蕉| 超碰免费欧美7| 美熟女逼导航AV操逼| 九九九九九九免费视频| www色色com| 能看的av| 人妻大相焦在线| 任你干在线视频| 成人资源中文字幕在线观看| 干超碰碰熟女| 亚洲色色探花| 九九成人视频| 九九热这里只有在线精品视 伊人草 成人菠萝蜜视频在线观看 | 久久机热| 亚洲天堂资源网| 1769国内精品视频| 九九综合色| 亚洲不卡av在线| 大香蕉琪琪日本女优不卡| 久久天堂网| 国产真实子伦对白| 911粉嫩人妻| 另类图片五月| 国产诱惑| 88xx成人精品视频| 抽插无码高清一区| 超碰99热中文字幕| 美女久久久久久久久久久| WWW操逼| 熟女突然公开看18禁影片| 99青草| 中字一区| 強姦亂倫a| 六月激情网| 久久久久99999| 亚洲中文字幕日产无码久久| 五月婷婷六月色| 久极品在线观看| 91女优在线观看| 狠狠91| 亚欧无码在线| 欧洲亚洲人妻无码中字久久三区四区| 亚洲怡春院| 精品久久久亚洲AV成人网站| 黄网站黄视频网站进入口 | 亚洲欧美综合区自拍另类| 无码自拍SM| 国产成人AV麻豆| 日韩综合色图| 蜜桃久久综合视频| 青青草原香蕉日本Ap| 一区操逼| 婷婷五月天久久精品视频一区二区三区| 超碰到97情色| 中国一级操逼视频| 夜夜嗨av午夜成人| 男人午夜天堂| 亚洲色鬼| 中欧人妻丝袜中文字幕| 熟女乱伦二区| 亚洲天堂少妇| 色丁香五月婷婷| 色综合1991| 最近2019中文字幕国语免费版| 久插综合| 国产一区在线观看无码AV| 蜜桃臀 后入 一区 二区 三区 在线| 精品人妻一区二区蜜桃视频| 欧美,日韩,亚洲视频| 超碰在97| 夜夜影视四色| 99福利社| 久久怡红院| 大香蕉狠狠爱| 91欧美高清| 啊啊啊啊操死我| 伊色综合天堂色97| 久久只有精品| 天天爽夜夜欢视| 91在线精品一区二区三区| 欧美性爱一内片一区二区三区| 91色交| 日少妇亚洲版| 2018天天干在线视频| 91 综合 色| 中文操嬖片。| 久久久久久久9| 78综合网| 亚欧免费| 精品少妇高潮久久| 亚洲精品色| 国产成年女黄特黄| 欧美色图成人网一区二区| 少妇与黑人高潮在线| 免费看黄片现成| 欧美 亚洲 另类 综合| 思思热影视| 日韩欧美三级| 超碰在线974| 久久九九视频九九视频| 老熟乱一区二区三区四区| 亚洲少妇色| 日本操逼视频不卡直接放| 亚洲天堂日本| av中文字幕在线熟女| 极品欧美一区二区三区| 懂色av中文字幕一区二区三区天美| 日本三级韩三级99久久| 秋霞怕怕片| 加勒比av官网在线| 乱人伦 国语对白:视频直接看| 91网九色蝌蚪操熟女| 欧亚揄拍偷拍精品视频 | 日韩91网| 骚熟女吞| 96AV精品| 久操精品网| 激情小说日韩无码| 日夜精品| 久久9精品网站| 亚州操操穴网| 亚洲色欲天天人妻无码系列专区| 亚洲啪啪视频免费| 熟妇人妻丰满久久久久久久无码| 欧美国产视频| 欧美少妇熟女| 秋霞视频一区二区| 福利操逼| A级片日韩欧美国产欧美视频精选观看| 黑人粗大V S日韩女优视频| 99精品丰满人妻无| 99热精品在线观看| 亚洲一本色道中文无码aV天美| 97欧美视频| 亚洲 欧美 日韩另类 麻豆| 精品然女一区二区| 乱日视频| 日韩AV电影网站| 色小视频蜜乳| 国产1769在线| 天天色,天天干,天天干| 久久久精品91八戒| 国产白丝精品在线观看| 亚洲色图A| KK色在线影院| 丝袜美腿操av| 99精品无码| 99re在线视频国产| 国产在线精品电影观看| 国产亚卅97| 日本裸体久久色噜噜| 女优免费一区二区永久| 97福利视频| 久草视频分类在线| 婷婷色色五月天| 91精品国产麻豆国产自产在| 久久草视频污视频| 成人在线午夜视频一区| 在线情色电影 91大 | 青青草大香蕉视频| 精品国产乱码久久久影院| 色综合超碰超| 亚洲熟女一区二区| 欧美激情在线观看视频| 欧美日韩亚洲天堂| 日日夜夜精品视频| 操国产逼| 少妇人妻太紧太深av| 五月婷婷六月丁香网址| 国产人伦a片信息免费片| 日韩亚洲中文有码视频| 久久精品国产亚洲AV片多多| 最新中文字幕精品在线| 另类一区| 男人兔费天堂| 狠狠热这里都是精品| 十八禁黄色成人网站观看| 性性久久| 黑人精品欧美一区二区蜜桃| 九九九九九九九九九国产精品| 好爽视频在线观看视频 | 3p国产欧美99热| www.狠狠操| 夫妻四区五区六区| 夜夜操中文字幕| 久久九九精品一区二区| 久久久青青草| 老熟女乱伦片| AA特级绝黄| 色五月婷婷在线| 亚洲国产一级中文综合久久天堂在线免费观看 | 在线黄页看毛片| 成人综合网 欧美| 超碰97在线中文| 91久| 国产绿奴视频在线观看| 色婷婷色99国产综合精品| 亚洲色图在线视频| 国产成人精品一区| 97天堂| 亚洲淫乱骚妇AV| 亚洲极品| 日韩精品色呦呦| 色婷婷av在线观看| 国产熟女精品区| 超碰97男女| 尤物黄色在线观看网站| 黑丝内射一区二区三区| 亚洲男人的天堂网| 日韩兔费看黄片| 爆操无码| 97色色,97综合| 东京热毛片177b2viP| 人妻81p| 亚洲最大黄网| 国产日韩怡红院| 国产操偷| 四虎免费看黄| 亚洲在线欧美| 柠檬AV导航| 使劲用力艹少妇视频一区二区| 婷婷综合伊人一区| 日本熟女中文| 欧美在线综合| 一级特黄aaa大片在线观看成人一级片在线观看| 91精品大奶人妻| 制服中出中文人人精品| 人妻9117c| 红杏大香蕉| 极品出轨视频网站| 亚洲最大AV网| 老司机午夜精品福利视频一区二区 | 蜜桃视频成a人v在线| 18一区二区三区| 熟妇一区二区| 99这里有精品视频| 人妻熟女一区二区三区视频| 亚洲精品中文字幕一区在线视频| 热久久国产精品视频大陆精品| 91东北熟女| 禁片 高清 在线观看视频网站| 超碰在线日韩一区| 立川理惠无码一区二区| 天天搞欧美| 爆操无码| 中文字幕丝袜| 9 9精品一区二区三区| 色网亚洲人| 超碰人人在线| 欧美色另类| 天天干天天爽| 91色狼| 九九久久久九九| 日本操逼无码| 97色97好| 欧美强奸乱能| 久久9精品网站| 色婷婷日韩精品一区二区三区| 久久精品国产72国产精品福利| 国产熟女自拍| 99视频内射三四| 国产一区在线看| 97超碰美国| 豆花视频操逼网址 | 久久91精品国产9丨久久分亭| 免费超碰97久久| 激情久久久| 凌辱美少妇久久aV| 日本一二三高清| 伊人久久综合影院| 国产午夜福利合集| 亚洲日产专区| 久久免费99精品久久久久久| 亚洲综合射| 久热9| 无码久久亚洲高清,| 亚洲成人色情五月天丁香花| 91 亚洲 欧美 日韩 国产 综合| 日本二区不卡| 伊人久久亚洲中文字幕| 波多野结衣先锋影音| 东京热AV男人的天堂| 成人五月香网在线| 天堂а√在线最新版在线| rivers-china.com| 国产怡红院| 国产浮力影院第1页| 78精品| 丝袜无码a片| 日本黄 R色 成 人网站| 成全动漫视频观看免费下载| 精彩久久中文| 亚洲人在线成线成人| 熟女人妇一区二区三区| 97爱亚洲| 综合网亚洲1| 极品粉嫩一区二区| 伊人婷婷五月天| 日本精品网站在线中文| 欧美激情 亚洲色图| 啊啊啊啊啊啊啊好爽不要| 中文字幕 国产 精品| 一级片视频啪啪| 色原狠狠天天天| 婷婷情色五月天| 精品一区二区啪啪啪| 秋霞蝌科网日本一区| 污色区网站| 日韩中文字幕在线视频观看| 国产精品爆乳懂色蜜乳| 后入精品| 91国产丝袜美女| 国产男女无套97| 大香蕉伊人色偷偷在线| 日韩精品在线观看网站| heyZO天然素人无码AⅤ专区| 亚欧美色| 亚洲另类色综合网站| 婷婷精品国产一区二区三区日韩| 天堂av2019| 婷婷五月成人| 九久9精品| 国产福利小视频高清在线观看| 欧美乱伦专区| 久久一区二区三区四区五区| 97色操| 伊人97| 暴力av在线| 欧美最大综合网| 综合欧美日韩在线| 久久综合女优| 国产精品 午夜福利| 性色avv| 欧美极品少妇交| 91无人区卡一卡二卡三乱码入口最新版:能让用户有更多选择的选择-经典说说-爱 | 一区二区三区麻豆| 欧美成人精品一区二区男人蜜臀| 无码男人天堂| 九九九九免费视频| 加勒比av官网在线| 亚洲欧美综合网站| 熟女91网| 一本大道久| 91热| 97超碰超碰| 91中出| 富女玩鸭子一级毛片| 国产精品白领在线观看| 天堂v无码免费视频| 老司机福利青青草| 乱伦日本中文自拍| 日韩中文字幕视频| 日本东京热加勒比久久| 黑丝自慰喷水网站| 欧美成人午夜免费福利785| 中文字幕日本久久| 99综合网| 色呦呦、国产精品| 一本一首道人妻少妇免费久久| 久久亚洲人妻| 操老熟女AV| 91N综合网| 国产久久久久久| 秋霞操逼片| 一本一道波多野毛片中文在线| 亚洲操逼无码| 五月丁香色婷婷| 大香蕉伊人亚洲| 91久久国产综合精品| 久久久精品一区二区| 四季av一区二区凹凸精品小说| 午夜欧美精品久久久| 性色亚洲| 95自拍视频在线观看| 中国熟女91| 久久在肏| 欧美午夜视频免费观看| 精品黑人一区二区| 国产精品情侣啪啪| 久久久精品中文字幕麻豆| 九九九久久久W精品| 日韩免费av片高清无码| 亚洲九月丁香| 欧美精品在线观看| 97欧美色综合| 亚洲精品久久久久毛片A片拉屎| 日韩精品国产一区二区| 亚洲色婷婷| 久干网| 欧美姓爱综合网| 中国zzijzzijzzwww精品| 99热精品在线播放| 日韩情色AV| 伊人超碰97| 干干干天天| 一区二区三区 丝袜 高跟 美腿| 天天射夜夜| 亚洲爽图| 色99视频| 国产女人9999| 精品国产Av无码久久久亚洲| 99热精品在线| 九九av| 強姦亂倫a| 丁香六月综合激情| 婷婷久草| 中文字幕人成乱码熟女香港| 欧美成人都市人妻| 后入式999| 思思热免费在线视频| 久久久久久久少妇| 99999久久精| 五月天婷精品激情| 亚洲熟久久| 人人搞人人插人人操| 欧美性爱五月天| 天天草AV| 在线观看高清AV| 免费的av网| 9久久久久| 色情五月婷婷| 天天日天天干天天摸天天操| 99性爱在线观看| 国产美女口爆吞精| 国产高清视频无码在线| 国产欧美日韩在线观看麻豆传媒公司 | 东京热熟女亚洲视频网站| 国产精品人妻免费精品| 91亚洲人电影| 91亚洲欧洲| 亚洲日本成人动漫| 欧美激情视频一区二区| 九九AV| 亚洲超碰在线| 国产精品午夜福利| 免费一级视频特黄色大片| 夜夜爽夜夜摸夜夜操免费视频| 亚洲AV无线| 久久久久久裸体| 欧美麻豆成人同性GⅤ在线| 五月天欧美色图| 国产女性无套 免费观看| 天操天操夜操夜月月年年操操| 国产乱人伦AVA麻豆软件.| 风月影院男女十八禁| 日本人人操人人操| 青青久久久| 久久激情网| 欧美综合亚洲综合| 旡码电影特区| 国产精品99精品视频网站| 亚洲美女30b| 午夜男人av| 国内外毛片在线观看| 欧美性爱精品一区二区| 日日骚一区二区三区| 九九热免费视频| 亚洲自拍偷拍视频在线| 青青草精玖玖69精品| 亚洲 自拍偷拍 欧美| 在线观看 99热| 五月婷婷AV| 国产精品操| 超碰1024久久| 深夜激情无码| 麻豆天美一区二区| 天天综合欧美综合| 亚洲天堂7777| 啊v在线观看视频| 欧美天堂日韩三级国产传媒| 少妇xx精品| 久久久不卡| 97人人爱人人做人人乐| 日本性爱少妇| 91视频综合网| 俞拍自拍| 中文字幕日韩国产传媒欧美精品| 被窝影院午夜看片无码| 久久久久久裸体| 91蜜臀熟女| 亚洲蜜乳av| 亚洲日韩电影| 精品中文一区二区| 99青草| 国产 v乱码一区二| 久久产精品一区二区三区电影| 欧美午夜视频| 婷婷久草一区二区三区| 亚洲蜜乳av| 97欧美日韩| 国产人妻精品一区二区三区秋霞| 亚洲色吧网| 成人性爱美曰韩| 东北少妇高潮zzzz| AV女资源| 少妇色综合| 日韩精品三区四区| 国产一区二区三区影片| 国产综合在线视频网站| 超碰97COm中文| 97爱碰| 日韩 国产 欧美自拍| 国产日产欧产美韩系列麻豆免费| 日日天天久久啊啊aaa| 99精品久久久久久久婷婷蜜桃| 国产亚洲欧美每日在线| 上特色A在线| 欧美日综合| 亚洲色图 图片| 日本精品人妻少妇一区二区| 9久久精品| 国产精品自在线发布| 性爱视频免费网址| 91丝袜在线观看| 国产sv美女内射| 人妻人久久精品中文字幕| 欧美91在线+|+欧美| 九一亚洲国产免费| 久久久人体| 五月天激情视频| 爽 好舒服 无码刺激久久| 日韩欧美成人午夜福利| 亚洲欧美日韩制服另类| 日日摸天天爽夜夜欢| 大香蕉日韩| 欧美激情内射| 超碰欧美COM| 亚州高清AV| 青青草影视蜜久久| 久久久久深夜无码| 试看60秒| 午夜精品人妻二区三区| 日日噜噜夜夜久久亚洲一区二区| 精品国产72| 久久久久9999妇女| 免费久久9999| 污污污8888| 91路www| 精吧天堂| 97在线观看免费| 婷婷探花久久精品一区| 欧美啪啪天堂| 精品玖九九久| juliaann欧美丝袜办公室| 91色亚洲| 国产熟妇 码视频户外直播| 亚州欧美色图| 亚洲啪啪视频免费| 欧美日韩国产另类综合| 欧美性生活免费网| 亚洲成a人片在线观看中文!!!| 深夜国产一区二区三区在线看| 日韩Va亚洲va欧美Ⅴa久久| 亚洲情色中文字幕一区| 国产激情在线观看| 丁香激情五月天| 欧美综合骚| 第45页一区二区| 国产女人9999| 欧美色交| 激情综合网亚洲| 日本精品网站在线中文| 国产AV激情无码久久无码| 久久香蕉综合一本到3atv| 性一交一乱一交A片久久四色| 天天操天天插| 天天摸夜夜摸| 色踪合AV| 欧美黑人熟妇精品91| 欧美精品成人一区二区在线观看| 亚洲国产av中文字幕久久| 国产成人bd在线观看| 99热这里都是精品| 熟女色图在线| 青青久久久| 少妇久久久| 操高情无码| 精品精品精品| 不卡一区视频| 久久国产精品m码| www.99色| 久综合网| 亚洲综合图色在线| 全国男人天堂网| AV一起草在线| 色色丁香| silk lablo在线观看一区二区| 免费视频观看60秒| 内射小黄片| 激情网五月天| 久久久久网站-538在线视频-欧美永久乱码 | 青青草福利视频| 人妻人人做人人澡人人爽欧美一区| 激情丁香五月婷婷| 日韩电影天堂视频二区三区| 麻豆尤物视频网| 欧美精品99久久久**| 天美国产三级传媒| 美女网站黄页| 免费看片黄| 伊人AAA| 超碰视97中文| 国产一区免费午夜视频| 九九人人操| 亚洲性少妇| 久久精品国产欧美日韩亚洲欧美日韩中文久久国产一区 | 成人性爱全视频观看| 亚91亚洲网| 亚洲欧美日韩不卡人妻| 操我无码| 日日A∨| 国产h小视频在线观看免费| 国产精品视频白浆免费| 大香伊人在线一区| 九九九九精品| 丁香五月天激情综合| 97视频在线视频| 天天激情干| 少妇一区二区三区在线观看| 日韩十八禁| 五月天大香蕉| 欧美日韩国产色五月综合在线| 特级特黄一级毛片免费| 国产欧美日韩女同性恋ww喷水精品 | 青青青国产手线观看视频2| 国产丝袜视频| 国产美女自拍视频| 人妻人人操| 草B在线| 国产激情av女片自拍| 九九九九精品一区| 国产乱伦亚洲| 久久精品夜色国产亚洲AV| 国产无码三级视频在线观看| 91色综| 麻豆久久一区二区三区| 日韩高潮一区| 人人妻人人澡人人爽久久av| 97婷婷色| 黄色工厂这里只有精品| 97色碰| 国产精品96| 精品精品精品| 国产v亚洲v日韩v欧美v片另类| 亚洲,欧美,春色,另类| 超碰地址久久| 亚洲91av| 日韩黄片影院| 国产熟妇一区二区| 人人操人人插人www| 免费亚洲国产精品久久一区| 亚洲欧洲精品视频发布| 成人精品水蜜桃久久久久久久| 亚洲精品中文字幕一区在线视频| 九九九九九九免费视频| 亚洲综合色婷婷| 亚洲人综合19| 国产精品 亚洲情色| 成人自拍三级在线观看| 日韩精品第3页| 久久久久久久国产视频| 亚洲激情欧美色图| 欧美夜夜狠| 亚洲另类欧美精品| 污污汅18禁网站在线永久免费观看| 麻豆AV短剧| 无码乱人伦中文视频| 精品美女少妇一区二区| 美女尤物福利视频| 无码精品久久| 亚洲男人天堂视频| 五月天综合在线| 国产精品爆乳懂色蜜乳| 国产精品不卡一区二区三区| 欧美啪啪色吧在线| 欧美 日韩 亚洲 春色| 人人摸人人干人人拍97| 一级A啪啪啪啪| 狠狠操夜夜操蜜桃视频三区| 96AV久久久| 亚洲国产亚洲天堂| 99热精品在线观看| 欧美亚洲激情| 日韩不卡毛片Av免费高清| 激情久久久| 麻豆2区1区天美| 无码99| 超碰98综合网| 96国产精品| 国产三级日产三级韩国三级| 久热69九色熟妇97| 久操99| 欧洲与亚洲欧美精品中文字幕| 国产女主播视频在线观看| 96超碰网| 国产精品黑人一区二区三区| 中文字幕亚韩| 91精品久久久久久77777| 亚洲成人一二三区| 欧美激情 一区| 人人操人人操草草| 97日视频| www.yeyecao| 天天天天天天天天综合| 青娱乐淫乱1314| 欧美图片偷拍| 九九综合九九综合| 中文字幕91综合| 亚州成人A√| AV乱伦专区| 小草三级久久观看| 东京热双插| 日本不卡码黄色| 白丝被操91| 美女AV一区二区| 欧美黑人精品一区二区| 国产精品亚洲日韩骚欢乐谷最新地址发布页huanieguty性屋娱乐妖精视频 | 91白嫩| 国产欧美第五页| 欧美成年人性爱视频免费观看| 欧美色九九九| 在线观看亚洲成人精品| 天天舔天天日天天射| 国产精品成人蜜臀AV在线| 伊人久久亚洲色欲综合网站| 韩国三级理论在线| 久久久青青草| 欧美日韩国产电影| 99热在线观看| 日本精品一级二级三级| 亚洲欧美setu| 乱色视频中文字幕| 91av熟女人妻| 97视频在线观看网站| av天堂影视中文在字幕在线中文 | 这里都是精品在线观看| 爱逼综合| 大香蕉日亚洲日本亚大| 旡码电影特区| 国产乱伦性爱AV| 精品人妻中文字幕4399| 久久二| 夜夜 中文视频rt| 夜夜操天天肏| 亚洲人妻一区二区三区| 日韩丰满熟妇| 九九久久99| 国产熟女免费观看久久| 超97在线精品视频| 91精品大奶人妻| 亚洲人妻一区二区三区| 77777亚洲蜜臀精品久久综合蜜臀| www.夜夜| 中文幕97| 久久久久久中文| 97亚洲综合在线| 777琪琪午夜免费A片| 国产操偷| 青青操轻轻| 亚洲各类熟们中文字幕| 日韩一区二区三区四区五区| 欧美性爱中文字幕无线码|