精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

分布式鏈路追蹤之Spring Cloud Sleuth奪命連環(huán)九問(wèn)?

開(kāi)發(fā) 架構(gòu) 分布式
今天這篇文章陳某介紹一下鏈路追蹤相關(guān)的知識(shí),以Spring Cloud Sleuth和zipkin這兩個(gè)組件為主,后續(xù)文章介紹另外一種。

[[433789]]

文末本文轉(zhuǎn)載自微信公眾號(hào)「碼猿技術(shù)專欄」,作者不才陳某。轉(zhuǎn)載本文請(qǐng)聯(lián)系碼猿技術(shù)專欄公眾號(hào)。

今天這篇文章陳某介紹一下鏈路追蹤相關(guān)的知識(shí),以Spring Cloud Sleuth和zipkin這兩個(gè)組件為主,后續(xù)文章介紹另外一種。

文章的目錄如下:

為什么需要鏈路追蹤?

大型分布式微服務(wù)系統(tǒng)中,一個(gè)系統(tǒng)被拆分成N多個(gè)模塊,這些模塊負(fù)責(zé)不同的功能,組合成一套系統(tǒng),最終可以提供豐富的功能。在這種分布式架構(gòu)中,一次請(qǐng)求往往需要涉及到多個(gè)服務(wù),如下圖:

服務(wù)之間的調(diào)用錯(cuò)綜復(fù)雜,對(duì)于維護(hù)的成本成倍增加,勢(shì)必存在以下幾個(gè)問(wèn)題:

  • 服務(wù)之間的依賴與被依賴的關(guān)系如何能夠清晰的看到?
  • 出現(xiàn)異常時(shí)如何能夠快速定位到異常服務(wù)?
  • 出現(xiàn)性能瓶頸時(shí)如何能夠迅速定位哪個(gè)服務(wù)影響的?

為了能夠在分布式架構(gòu)中快速定位問(wèn)題,分布式鏈路追蹤應(yīng)運(yùn)而生。將一次分布式請(qǐng)求還原成調(diào)用鏈路,進(jìn)行日志記錄,性能監(jiān)控并將一次分布式請(qǐng)求的調(diào)用情況集中展示。比如各個(gè)服務(wù)節(jié)點(diǎn)上的耗時(shí)、請(qǐng)求具體到達(dá)哪臺(tái)機(jī)器上、每個(gè)服務(wù)節(jié)點(diǎn)的請(qǐng)求狀態(tài)等等。

常見(jiàn)的鏈路追蹤技術(shù)有哪些?

市面上有很多鏈路追蹤的項(xiàng)目,其中也不乏一些優(yōu)秀的,如下:

  • cat:由大眾點(diǎn)評(píng)開(kāi)源,基于Java開(kāi)發(fā)的實(shí)時(shí)應(yīng)用監(jiān)控平臺(tái),包括實(shí)時(shí)應(yīng)用監(jiān)控,業(yè)務(wù)監(jiān)控 。集成方案是通過(guò)代碼埋點(diǎn)的方式來(lái)實(shí)現(xiàn)監(jiān)控,比如:攔截器,過(guò)濾器等。對(duì)代碼的侵入性很大,集成成本較高,風(fēng)險(xiǎn)較大。
  • zipkin:由Twitter公司開(kāi)源,開(kāi)放源代碼分布式的跟蹤系統(tǒng),用于收集服務(wù)的定時(shí)數(shù)據(jù),以解決微服務(wù)架構(gòu)中的延遲問(wèn)題,包括:數(shù)據(jù)的收集、存儲(chǔ)、查找和展現(xiàn)。該產(chǎn)品結(jié)合spring-cloud-sleuth使用較為簡(jiǎn)單, 集成很方便, 但是功能較簡(jiǎn)單。
  • pinpoint:韓國(guó)人開(kāi)源的基于字節(jié)碼注入的調(diào)用鏈分析,以及應(yīng)用監(jiān)控分析工具。特點(diǎn)是支持多種插件,UI功能強(qiáng)大,接入端無(wú)代碼侵入
  • skywalking:SkyWalking是本土開(kāi)源的基于字節(jié)碼注入的調(diào)用鏈分析,以及應(yīng)用監(jiān)控分析工具。特點(diǎn)是支持多種插件,UI功能較強(qiáng),接入端無(wú)代碼侵入。目前已加入Apache孵化器。
  • Sleuth:SpringCloud 提供的分布式系統(tǒng)中鏈路追蹤解決方案。很可惜的是阿里系并沒(méi)有鏈路追蹤相關(guān)的開(kāi)源項(xiàng)目,我們可以采用Spring Cloud Sleuth+Zipkin來(lái)做鏈路追蹤的解決方案。

Spring Cloud Sleuth是什么?

Spring Cloud Sleuth實(shí)現(xiàn)了一種分布式的服務(wù)鏈路跟蹤解決方案,通過(guò)使用Sleuth可以讓我們快速定位某個(gè)服務(wù)的問(wèn)題。簡(jiǎn)單來(lái)說(shuō),Sleuth相當(dāng)于調(diào)用鏈監(jiān)控工具的客戶端,集成在各個(gè)微服務(wù)上,負(fù)責(zé)產(chǎn)生調(diào)用鏈監(jiān)控?cái)?shù)據(jù)。

Spring Cloud Sleuth只負(fù)責(zé)產(chǎn)生監(jiān)控?cái)?shù)據(jù),通過(guò)日志的方式展示出來(lái),并沒(méi)有提供可視化的UI界面。

學(xué)習(xí)Sleuth之前必須了解它的幾個(gè)概念:

  • Span:基本的工作單元,相當(dāng)于鏈表中的一個(gè)節(jié)點(diǎn),通過(guò)一個(gè)唯一ID標(biāo)記它的開(kāi)始、具體過(guò)程和結(jié)束。我們可以通過(guò)其中存儲(chǔ)的開(kāi)始和結(jié)束的時(shí)間戳來(lái)統(tǒng)計(jì)服務(wù)調(diào)用的耗時(shí)。除此之外還可以獲取事件的名稱、請(qǐng)求信息等。
  • Trace:一系列的Span串聯(lián)形成的一個(gè)樹(shù)狀結(jié)構(gòu),當(dāng)請(qǐng)求到達(dá)系統(tǒng)的入口時(shí)就會(huì)創(chuàng)建一個(gè)唯一ID(traceId),唯一標(biāo)識(shí)一條鏈路。這個(gè)traceId始終在服務(wù)之間傳遞,直到請(qǐng)求的返回,那么就可以使用這個(gè)traceId將整個(gè)請(qǐng)求串聯(lián)起來(lái),形成一條完整的鏈路。
  • Annotation:一些核心注解用來(lái)標(biāo)注微服務(wù)調(diào)用之間的事件,重要的幾個(gè)注解如下:
    • cs(Client Send):客戶端發(fā)出請(qǐng)求,開(kāi)始一個(gè)請(qǐng)求的生命周期
    • sr(Server Received):服務(wù)端接受請(qǐng)求并處理;sr-cs = 網(wǎng)絡(luò)延遲 = 服務(wù)調(diào)用的時(shí)間
    • ss(Server Send):服務(wù)端處理完畢準(zhǔn)備發(fā)送到客戶端;ss - sr = 服務(wù)器上的請(qǐng)求處理時(shí)間
    • cr(Client Reveived):客戶端接受到服務(wù)端的響應(yīng),請(qǐng)求結(jié)束;cr - sr = 請(qǐng)求的總時(shí)間

Spring Cloud 如何整合Sleuth?

整合Spring Cloud Sleuth其實(shí)沒(méi)什么的難的,在這之前需要準(zhǔn)備以下三個(gè)服務(wù):

  • gateway-sleuth9031:作為網(wǎng)關(guān)服務(wù)
  • sleuth-product9032:商品微服務(wù)
  • sleuth-order9033:訂單微服務(wù)

三個(gè)服務(wù)的調(diào)用關(guān)系如下圖:

客戶端請(qǐng)求網(wǎng)關(guān)發(fā)起查詢訂單的請(qǐng)求,網(wǎng)關(guān)路由給訂單服務(wù),訂單服務(wù)獲取訂單詳情并且調(diào)用商品服務(wù)獲取商品詳情。

添加依賴

在父模塊中添加sleuth依賴,如下:

  1. <dependency> 
  2.    <groupId>org.springframework.cloud</groupId> 
  3.    <artifactId>spring-cloud-starter-sleuth</artifactId> 
  4. </dependency> 

以上只是Spring Cloud Sleuth的依賴,還有Nacos,openFeign的依賴這里就不再詳細(xì)說(shuō)了,有不清楚的可以結(jié)合陳某前面幾篇文章和案例源碼補(bǔ)漏一下。

調(diào)整日志級(jí)別

由于sleuth并沒(méi)有UI界面,因此需要調(diào)整一下日志級(jí)別才能在控制臺(tái)看到更加詳細(xì)的鏈路信息。

在三個(gè)服務(wù)的配置文件中添加以下配置:

  1. ## 設(shè)置openFeign和sleuth的日志級(jí)別為debug,方便查看日志信息 
  2. logging: 
  3.   level
  4.     org.springframework.cloud.openfeign: debug 
  5.     org.springframework.cloud.sleuth: debug 

演示接口完善

以下接口只是為了演示造的數(shù)據(jù),并沒(méi)有整合DB。

sleuth-order9033查詢訂單詳情的接口,如下圖:

sleuth-product9032的查詢商品詳情的接口,如下圖:

gateway-sleuth9031網(wǎng)關(guān)路由配置如下:

測(cè)試

啟動(dòng)上述三個(gè)服務(wù),瀏覽器直接訪問(wèn):http://localhost:9031/order/get/12

觀察控制臺(tái)日志輸出,如下圖:

日志格式中總共有四個(gè)參數(shù),含義分別如下:

  • 第一個(gè):服務(wù)名稱
  • 第二個(gè):traceId,唯一標(biāo)識(shí)一條鏈路
  • 第三個(gè):spanId,鏈路中的基本工作單元id
  • 第四個(gè):表示是否將數(shù)據(jù)輸出到其他服務(wù),true則會(huì)把信息輸出到其他可視化的服務(wù)上觀察,這里并未整合zipkin,所以是false

好了,至此整合完成了,不禁心里倒吸一口涼氣,直接看日志那不是眼睛要看瞎了..........

什么是ZipKin?

Zipkin 是 Twitter 的一個(gè)開(kāi)源項(xiàng)目,它基于Google Dapper實(shí)現(xiàn),它致力于收集服務(wù)的定時(shí)數(shù)據(jù),

以解決微服務(wù)架構(gòu)中的延遲問(wèn)題,包括數(shù)據(jù)的收集、存儲(chǔ)、查找和展現(xiàn)。

ZipKin的基礎(chǔ)架構(gòu)如下圖:

Zipkin共分為4個(gè)核心的組件,如下:

  • Collector:收集器組件,它主要用于處理從外部系統(tǒng)發(fā)送過(guò)來(lái)的跟蹤信息,將這些信息轉(zhuǎn)換為Zipkin內(nèi)部處理的 Span 格式,以支持后續(xù)的存儲(chǔ)、分析、展示等功能。
  • Storage:存儲(chǔ)組件,它主要對(duì)處理收集器接收到的跟蹤信息,默認(rèn)會(huì)將這些信息存儲(chǔ)在內(nèi)存中,我們也可以修改此存儲(chǔ)策略,通過(guò)使用其他存儲(chǔ)組件將跟蹤信息存儲(chǔ)到數(shù)據(jù)庫(kù)中
  • RESTful API:API 組件,它主要用來(lái)提供外部訪問(wèn)接口。比如給客戶端展示跟蹤信息,或是外接系統(tǒng)訪問(wèn)以實(shí)現(xiàn)監(jiān)控等。
  • UI:基于API組件實(shí)現(xiàn)的上層應(yīng)用。通過(guò)UI組件用戶可以方便而有直觀地查詢和分析跟蹤信息

zipkin分為服務(wù)端和客戶端,服務(wù)端主要用來(lái)收集跟蹤數(shù)據(jù)并且展示,客戶端主要功能是發(fā)送給服務(wù)端,微服務(wù)的應(yīng)用也就是客戶端,這樣一旦發(fā)生調(diào)用,就會(huì)觸發(fā)監(jiān)聽(tīng)器將sleuth日志數(shù)據(jù)傳輸給服務(wù)端。

zipkin服務(wù)端如何搭建?

首先需要下載服務(wù)端的jar包,地址:https://search.maven.org/artifact/io.zipkin/zipkin-server/2.23.4/jar

下載完成將會(huì)得到一個(gè)jar包,如下圖:

直接啟動(dòng)這個(gè)jar,命令如下:

  1. java -jar zipkin-server-2.23.4-exec.jar 

出現(xiàn)以下界面表示啟動(dòng)完成:

此時(shí)可以訪問(wèn)zipkin的UI界面,地址:http://localhost:9411,界面如下:

以上是通過(guò)下載jar的方式搭建服務(wù)端,當(dāng)然也有其他方式安裝,比如docker,自己去嘗試一下吧,陳某就不再演示了。

zipKin客戶端如何搭建?

服務(wù)端只是跟蹤數(shù)據(jù)的收集和展示,客戶端才是生成和傳輸數(shù)據(jù)的一端,下面詳細(xì)介紹一下如何搭建一個(gè)客戶端。

還是上述例子的三個(gè)微服務(wù),直接添加zipkin的依賴,如下:

  1. <!--鏈路追蹤 zipkin依賴,其中包含Sleuth的依賴--> 
  2. <dependency> 
  3.       <groupId>org.springframework.cloud</groupId> 
  4.       <artifactId>spring-cloud-starter-zipkin</artifactId> 
  5. </dependency> 

注意:由于spring-cloud-starter-zipkin中已經(jīng)包含了Spring Cloud Sleuth依賴,因此只需要引入上述一個(gè)依賴即可。

配置文件需要配置一下zipkin服務(wù)端的地址,配置如下:

  1. spring: 
  2.   cloud: 
  3.   sleuth: 
  4.     sampler: 
  5.       # 日志數(shù)據(jù)采樣百分比,默認(rèn)0.1(10%),這里為了測(cè)試設(shè)置成了100%,生產(chǎn)環(huán)境只需要0.1即可 
  6.       probability: 1.0 
  7.   zipkin: 
  8.       #zipkin server的請(qǐng)求地址 
  9.     base-url: http://127.0.0.1:9411 
  10.       #讓nacos把它當(dāng)成一個(gè)URL,而不要當(dāng)做服務(wù)名 
  11.     discovery-client-enabled: false 

上述配置完成后啟動(dòng)服務(wù)即可,此時(shí)訪問(wèn):http://localhost:9031/order/get/12

調(diào)用接口之后,再次訪問(wèn)zipkin的UI界面,如下圖:

可以看到剛才調(diào)用的接口已經(jīng)被監(jiān)控到了,點(diǎn)擊SHOW進(jìn)入詳情查看,如下圖:

可以看到左邊展示了一條完整的鏈路,包括服務(wù)名稱、耗時(shí),右邊展示服務(wù)調(diào)用的相關(guān)信息,包括開(kāi)始、結(jié)束時(shí)間、請(qǐng)求url,請(qǐng)求方式.....

除了調(diào)用鏈路的相關(guān)信息,還可以清楚看到每個(gè)服務(wù)的依賴如下圖,如下圖:

zipKin的數(shù)據(jù)傳輸方式如何切換?

zipkin默認(rèn)的傳輸方式是HTTP,但是這里存在一個(gè)問(wèn)題,一旦傳輸過(guò)程中客戶端和服務(wù)端斷掉了,那么這條跟蹤日志信息將會(huì)丟失。

當(dāng)然zipkin還支持MQ方式的傳輸,支持消息中間件有如下幾種:

  • ActiveMQ
  • RabbitMQ
  • Kafka

使用MQ方式傳輸不僅能夠保證消息丟失的問(wèn)題,還能提高傳輸效率,生產(chǎn)中推薦MQ傳輸方式。

那么問(wèn)題來(lái)了,如何切換呢?

其實(shí)方式很簡(jiǎn)單,下面陳某以RabbitMQ為例介紹一下。

1、服務(wù)端連接RabbitMQ

運(yùn)行服務(wù)端并且連接RabbitMQ,命令如下:

  1. java -jar zipkin-server-2.23.4-exec.jar --zipkin.collector.rabbitmq.addresses=localhost --zipkin.collector.rabbitmq.username=guest --zipkin.collector.rabbitmq.password=guest 

命令分析如下:

  • zipkin.collector.rabbitmq.addresses:MQ地址
  • zipkin.collector.rabbitmq.username:用戶名
  • zipkin.collector.rabbitmq.password:密碼

2、客戶端添加RabbitMQ

既然使用MQ傳輸,肯定是要添加對(duì)應(yīng)的依賴和配置了,添加RabbitMQ依賴如下:

  1. <dependency> 
  2.   <groupId>org.springframework.boot</groupId> 
  3.   <artifactId>spring-boot-starter-amqp</artifactId> 
  4. </dependency> 

配置MQ的地址、用戶名、密碼,配置如下:

  1. spring: 
  2.   rabbitmq: 
  3.     addresses: 127.0.0.1 
  4.     username: guest 
  5.     password: guest 

3、配置文件中傳輸方式切換

spring.cloud.zipkin.sender.type這個(gè)配置就是用來(lái)切換傳輸方式的,取值為rabbit則表示使用rabbitMQ進(jìn)行數(shù)據(jù)傳輸。

配置如下:

  1. spring: 
  2.   cloud: 
  3.   zipkin: 
  4.     sender: 
  5.      ## 使用rabbitMQ進(jìn)行數(shù)據(jù)傳輸 
  6.       type: rabbit 

注意:使用MQ傳輸,則spring.cloud.zipkin.sender.base-url可以去掉。

完整的配置如下圖:

4、測(cè)試

既然使用MQ傳輸,那么我們不啟動(dòng)服務(wù)端也是能夠成功傳輸?shù)模瑸g覽器訪問(wèn):http://localhost:9031/order/get/12

此時(shí)發(fā)現(xiàn)服務(wù)并沒(méi)有報(bào)異常,在看RabbitMQ中已經(jīng)有數(shù)據(jù)傳輸過(guò)來(lái)了,存在zipkin這個(gè)隊(duì)列中,如下圖:

可以看到有消息未被消費(fèi),點(diǎn)進(jìn)去可以看到消息內(nèi)容就是Trace、Span相關(guān)信息。

好了,我們啟動(dòng)服務(wù)端,命令如下:

  1. java -jar zipkin-server-2.23.4-exec.jar --zipkin.collector.rabbitmq.addresses=localhost --zipkin.collector.rabbitmq.username=guest --zipkin.collector.rabbitmq.password=guest 

服務(wù)端啟動(dòng)后發(fā)現(xiàn)zipkin隊(duì)列中的消息瞬間被消費(fèi)了,查看zipkin的UI界面發(fā)現(xiàn)已經(jīng)生成了鏈路信息,如下圖:

zipkin如何持久化?

zipkin的信息默認(rèn)是存儲(chǔ)在內(nèi)存中,服務(wù)端一旦重啟信息將會(huì)丟失,但是zipkin提供了可插拔式的存儲(chǔ)。

zipkin支持以下四種存儲(chǔ)方式:

  • 內(nèi)存:服務(wù)重啟將會(huì)失效,不推薦
  • MySQL:數(shù)據(jù)量越大性能較低
  • Elasticsearch:主流的解決方案,推薦使用
  • Cassandra:技術(shù)太牛批,用的人少,自己選擇,不過(guò)官方推薦

今天陳某就以MySQL為例介紹一下zipkin如何持久化,Elasticsearch放在下一篇,篇幅有點(diǎn)長(zhǎng)。

1、創(chuàng)建數(shù)據(jù)庫(kù)

zipkin服務(wù)端的MySQL建表SQL在源碼中的zipkin-storage/mysql-v1/src/main/resources/mysql.sql中,這份SQL文件我會(huì)放在案例源碼中。

github地址:https://github.com/openzipkin/zipkin/blob/master/zipkin-storage/mysql-v1/src/main/resources/mysql.sql

創(chuàng)建的數(shù)據(jù)庫(kù):zipkin(名稱任意),導(dǎo)入建表SQL,新建的數(shù)據(jù)庫(kù)表如下圖:

2、服務(wù)端配置MySQL

服務(wù)端配置很簡(jiǎn)單,運(yùn)行如下命令:

  1. java -jar zipkin-server-2.23.4-exec.jar --STORAGE_TYPE=mysql --MYSQL_HOST=127.0.0.1 --MYSQL_TCP_PORT=3306 --MYSQL_DB=zipkin --MYSQL_USER=root --MYSQL_PASS=Nov2014 

上述命令參數(shù)分析如下:

  • STORAGE_TYPE:指定存儲(chǔ)的方式,默認(rèn)內(nèi)存形式
  • MYSQL_HOST:MySQL的ip地址,默認(rèn)localhost
  • MYSQL_TCP_PORT:MySQL的端口號(hào),默認(rèn)端口3306
  • MYSQL_DB:MySQL中的數(shù)據(jù)庫(kù)名稱,默認(rèn)是zipkin
  • MYSQL_USER:用戶名
  • MYSQL_PASS:密碼

陳某是如何記得這些參數(shù)的?廢話,肯定記不住,隨時(shí)查看下源碼不就得了,這些配置都在源碼的/zipkin-server/src/main/resources/zipkin-server-shared.yml這個(gè)配置文件中,比如上述MySQL的相關(guān)配置,如下圖:

zipkin服務(wù)端的所有配置項(xiàng)都在這里,沒(méi)事去翻翻看。

github地址:https://github.com/openzipkin/zipkin/blob/master/zipkin-server/src/main/resources/zipkin-server-shared.yml

那么采用rabbitMQ傳輸方式、MySQL持久化方式,完整的命令如下:

  1. java -jar zipkin-server-2.23.4-exec.jar --STORAGE_TYPE=mysql --MYSQL_HOST=127.0.0.1 --MYSQL_TCP_PORT=3306 --MYSQL_DB=zipkin --MYSQL_USER=root --MYSQL_PASS=Nov2014 --zipkin.collector.rabbitmq.addresses=localhost --zipkin.collector.rabbitmq.username=guest --zipkin.collector.rabbitmq.password=guest 

持久化是服務(wù)端做的事,和客戶端無(wú)關(guān),因此到這就完事了,陳某就不再測(cè)試了,自己動(dòng)手試試吧。

總結(jié)

前面介紹了這么多,不知道大家有沒(méi)有仔細(xì)看,陳某總結(jié)一下吧:

  • Spring Cloud Sleuth 作為鏈路追蹤的一種組件,只提供了日志采集,日志打印的功能,并沒(méi)有可視化的UI界面
  • zipkin提供了強(qiáng)大的日志追蹤分析、可視化、服務(wù)依賴分析等相關(guān)功能,結(jié)合Spring Cloud Sleuth作為一種主流的解決方案
  • zipkin生產(chǎn)環(huán)境建議切換的MQ傳輸模式,這樣做有兩個(gè)優(yōu)點(diǎn)
    • 防止數(shù)據(jù)丟失
    • MQ異步解耦,性能提升很大 
  • zipkin默認(rèn)是內(nèi)存的形式存儲(chǔ),MySQL雖然也是一種方式,但是隨著數(shù)據(jù)量越大,性能越差,因此生產(chǎn)環(huán)境建議采用Elasticsearch,下一篇文章介紹。

 

責(zé)任編輯:武曉燕 來(lái)源: 碼猿技術(shù)專欄
相關(guān)推薦

2023-03-08 09:03:55

2024-03-13 13:56:11

openFeignHttp服務(wù)調(diào)用

2023-02-26 02:00:36

OpenFeign接口實(shí)現(xiàn)類

2020-12-16 09:24:18

Skywalking分布式鏈路追蹤

2024-06-07 13:04:31

2022-05-23 08:23:24

鏈路追蹤SleuthSpring

2024-01-26 07:49:49

Go分布式鏈路

2022-05-25 08:23:32

ZipKinTwitter開(kāi)源項(xiàng)目

2021-02-22 07:58:51

分布式鏈路追蹤

2021-10-26 15:56:57

kafka數(shù)據(jù)平臺(tái),

2020-09-11 09:44:04

微服務(wù)分布式鏈路

2024-08-21 08:09:17

2025-10-10 08:58:13

2023-11-21 08:25:09

2024-07-09 08:11:56

2022-02-18 09:30:48

分布式Spring應(yīng)用程序

2024-11-28 08:57:21

分布式鏈路Skywalking

2023-04-26 09:16:17

2022-11-26 09:49:07

分布式鏈路追蹤技術(shù)

2022-03-25 09:01:36

Spring循環(huán)依賴面試
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

自拍偷拍21p| 看高清中日韩色视频| 国产黄a三级三级| 亚洲国产一区二区久久| 一区二区三区欧美| 久久av二区| 中文字幕人妻精品一区| 欧美 亚欧 日韩视频在线| 欧美大片在线观看一区二区| 99热在线这里只有精品| www日韩tube| 国产精品一区二区三区四区| 91av在线免费观看| 国产精品久久久免费看| 国产欧美啪啪| 欧美日韩另类一区| 欧美一区二区中文字幕| 天天在线视频色| 91伊人久久大香线蕉| 成人a在线视频| 成人精品免费在线观看| 国产精品伦理久久久久久| 亚洲精品av在线| 在线视频一二区| japanese23hdxxxx日韩| 亚洲一线二线三线视频| 亚洲精品一区二区三区四区五区| 亚洲美女福利视频| 久久国产精品色婷婷| 91av成人在线| 国产午夜精品无码一区二区| 日韩在线精品| 亚洲视频日韩精品| 亚洲视频在线播放免费| 精品国产亚洲一区二区三区在线| 91精品福利视频| 日韩av在线第一页| 日本高清在线观看视频| 国产精品欧美一区二区三区| 美女视频久久| 神宫寺奈绪一区二区三区| 国产麻豆9l精品三级站| 国产精品色视频| 免费视频网站在线观看入口| 制服诱惑一区二区| 国外成人免费在线播放| 激情小说中文字幕| 欧美1区2区3区| 久久精品视频在线| 三级黄色片在线观看| 欧美日韩激情| 一区二区欧美久久| 中文字幕丰满孑伦无码专区| 国产精品中文字幕制服诱惑| 日韩美女天天操| 国产亚洲色婷婷久久| 国产日韩一区二区三免费高清| 欧美亚洲自拍偷拍| 欧美大尺度做爰床戏| 精品欧美日韩精品| 欧美日韩电影在线| 欧美视频亚洲图片| 日韩中文字幕一区二区高清99| 91精品免费观看| 亚欧美一区二区三区| 成人日韩视频| 精品嫩草影院久久| 男男做爰猛烈叫床爽爽小说| 天堂俺去俺来也www久久婷婷| 日韩精品免费综合视频在线播放 | k8久久久一区二区三区| 国产日韩在线一区二区三区| 天天操天天干天天插| 2024国产精品| 亚洲国产一区在线| 黄色免费在线看| 亚洲一区在线观看免费 | 欧美大电影免费观看| 色8久久人人97超碰香蕉987| 无人在线观看的免费高清视频 | 91黄色免费版| 57pao国产成永久免费视频| 97色婷婷成人综合在线观看| 日韩欧美一级二级| av直播在线观看| 国产探花在线精品| 久久国产精品久久久久久| 久久激情免费视频| 老牛国产精品一区的观看方式| 国产精品视频成人| 精品人妻一区二区三区换脸明星| 成人午夜av电影| 欧洲亚洲一区| 91麻豆一二三四在线| 精品久久香蕉国产线看观看gif| 国产精品人人妻人人爽人人牛| 91麻豆精品国产综合久久久| 亚洲激情视频在线播放| 亚洲天堂最新地址| 国内久久精品| 国产精品第二页| 精品人妻一区二区三区麻豆91 | 成人妖精视频yjsp地址| 日本成人黄色免费看| www久久日com| 色婷婷综合激情| 色哟哟在线观看视频| 国产麻豆一区二区三区精品视频| 久久av中文字幕| 日韩一级片中文字幕| 国产成a人亚洲精品| 色综合视频二区偷拍在线| 678在线观看视频| 欧美精品自拍偷拍| 国产精品久久久久无码av色戒| 亚洲综合五月| 国产精品成人播放| 少妇喷水在线观看| 一区二区三区国产| 蜜臀一区二区三区精品免费视频| 久久综合五月婷婷| 欧美国产日韩中文字幕在线| 国产在线一级片| 97久久超碰国产精品| 亚洲色婷婷久久精品av蜜桃| 国产精品久久久久久妇女| 亚洲黄色成人网| 九九视频免费看| 久久精品国产**网站演员| 欧美久久在线| 美女的胸无遮挡在线观看| 欧美成人精精品一区二区频| 国产美女福利视频| 美腿丝袜亚洲一区| 欧美日韩精品综合| 综合另类专区| 日韩精品福利在线| 国产精品免费av一区二区| 国v精品久久久网| 国产成人亚洲综合无码| 电影一区二区| 中文字幕久热精品视频在线| 亚洲精品久久久久久久蜜桃| 国产三级三级三级精品8ⅰ区| 免费看一级大黄情大片| 牛牛影视一区二区三区免费看| 欧美激情免费视频| www.五月婷| 亚洲一卡二卡三卡四卡无卡久久 | 日本熟女毛茸茸| 91免费观看国产| 免费黄色日本网站| 五月天亚洲色图| 日本亚洲欧洲色α| 精品三级久久久久久久电影聊斋| 欧美丝袜一区二区| 国产呦小j女精品视频| 久久免费黄色| 视频在线精品一区| 日韩五码电影| 欧美高清视频在线播放| 日本韩国在线观看| 日韩欧美国产激情| 国产一区二区三区四区在线| 蜜桃视频一区二区三区 | 久久久久久亚洲中文字幕无码| 免费亚洲一区| 丝袜足脚交91精品| 国产在线一区不卡| 久久人人爽人人| 天天干天天摸天天操| 一本一道久久a久久精品| 先锋影音av在线| 精品一区二区三区欧美| 东北少妇不带套对白| 亚洲国产最新| 国产中文欧美精品| 成人影音在线| 亚洲性xxxx| 国产浮力第一页| 精品美女久久久久久免费| 一级片久久久久| 国产一区二区不卡| 日韩精品一区二区三区久久| 成人av资源电影网站| 波多野结衣久草一区| 成年美女黄网站色大片不卡| 精品国产一区二区三区久久久狼| 成人免费公开视频| 欧美亚男人的天堂| 久久久精品视频免费观看| 91亚洲精华国产精华精华液| 性刺激的欧美三级视频| 狠狠入ady亚洲精品| 日韩欧美亚洲区| 高潮久久久久久久久久久久久久| 日韩av黄色在线观看| 中文在线手机av| 亚洲欧洲在线播放| 开心激情综合网| 欧美日韩日日骚| 国产精品第一页在线观看| 欧美韩日一区二区三区| 在线免费看黄色片| 精品一区二区三区在线播放视频 | 亚洲电影有码| 久久久亚洲影院| 麻豆tv在线| 国产亚洲精品一区二区| 五月婷婷在线播放| 91精品国产入口| 成人黄色三级视频| 香蕉影视欧美成人| www青青草原| 国产精品久久二区二区| 亚洲欧美在线不卡| 成人午夜碰碰视频| 国产精品探花在线播放| 美女网站视频久久| 日本成人在线免费视频| 亚洲成人直播| 黄色一级片国产| 国产精品久久观看| 亚洲mv在线看| 欧美特黄一级大片| 日产精品一线二线三线芒果| 欧美aaaaa级| 国模一区二区三区私拍视频| 无人区乱码一区二区三区| 国产综合色香蕉精品| 欧美亚洲大片| 国产成人精品综合| 中文在线а√天堂| 欧美亚洲国产精品| 黄在线观看免费网站ktv| 久久久久免费视频| 日韩另类在线| 欧美日韩国产999| h片在线播放| 欧美另类老女人| 中文字幕免费高清电视剧网站在线观看| 日韩有码片在线观看| 97电影在线| 日韩在线播放av| 巨大荫蒂视频欧美另类大| 日韩在线观看免费高清完整版| 午夜伦理在线| 久久色在线播放| 18视频在线观看| 久久久久久国产精品久久| 欧美人与禽性xxxxx杂性| 欧美激情一区二区三区在线视频观看| 亚洲综合影视| 久久久久亚洲精品| 自拍网站在线观看| 国产精品高清免费在线观看| 成人午夜毛片| 亚洲a区在线视频| 91蝌蚪精品视频| 精品亚洲欧美日韩| 一区二区三区日本久久久| 日本精品一区二区三区高清 久久 日本精品一区二区三区不卡无字幕 | 国产日韩欧美制服另类| 国产18无套直看片| 亚洲欧美日韩中文播放 | 色婷婷亚洲综合| 波多野结衣高清在线| 欧美男同性恋视频网站| 精品免费久久久| 精品亚洲一区二区| 三区四区电影在线观看| 另类色图亚洲色图| 九色porny丨入口在线| 国产精品观看在线亚洲人成网| 欧美伊人亚洲伊人色综合动图| 91aaaa| 日韩有码中文字幕在线| 日韩精品av一区二区三区| 97精品视频| 国产精品一线二线三线| 久久久久99| 国产精品嫩草影视| 久久综合色综合88| 岛国片在线免费观看| 亚洲国产综合色| 奴色虐av一区二区三区| 欧美一区二区免费观在线| 亚洲AV第二区国产精品| 日韩专区在线播放| av不卡高清| 国产精品中文字幕久久久| 999久久精品| 午夜精品一区二区在线观看| 好吊日精品视频| 国产九九热视频| 97精品久久久久中文字幕| 2014亚洲天堂| 欧美日韩国产精品一区| 国产有码在线观看| 亚洲欧美999| 日本不卡影院| 国产精品美女久久久久久免费 | a欧美人片人妖| 亚洲www在线| 精品国产一区二区三区小蝌蚪 | 亚洲精品一区在线观看| 国产高清在线| 97视频网站入口| 精品一区91| 亚洲国产精品综合| 西西裸体人体做爰大胆久久久| 久久出品必属精品| 国产日韩v精品一区二区| 日韩精品――中文字幕| 91精品国产手机| av成人手机在线| 日本精品久久久| 久久婷婷国产| 成人免费看片'免费看| 蜜桃视频在线观看一区| 精品人妻互换一区二区三区| 亚洲国产精品久久不卡毛片 | 欧美极度另类| 国产欧美日韩亚洲| 国内久久视频| 爱情岛论坛亚洲自拍| 中文字幕一区二区三区视频| www.av88| 亚洲天堂久久av| 成人美女大片| 久久精品日产第一区二区三区| 激情欧美一区二区三区| www.欧美com| 亚洲精品国产成人久久av盗摄| 7777久久亚洲中文字幕| 在线日韩中文字幕| 91福利精品在线观看| 亚洲aⅴ天堂av在线电影软件| 日韩电影在线观看网站| 老头老太做爰xxx视频| 欧美影视一区在线| 国产对白叫床清晰在线播放| 国产精品99久久久久久久久| 免费毛片在线不卡| 99视频精品免费| 国产日韩欧美在线一区| 亚洲天堂网视频| www日韩欧美| 欧美成年网站| 国产欧美日韩网站| 91免费版在线看| av手机天堂网| 精品国偷自产在线视频| 91精品国产一区二区在线观看| 免费成人深夜夜行网站视频| 国产精品一区二区三区99| 国产第100页| 日韩久久精品电影| 亚洲精品国产嫩草在线观看| 亚洲欧美日韩精品在线| 精品一区二区在线播放| 妺妺窝人体色www聚色窝仙踪| 精品国产乱子伦一区| 中文字幕影音在线| 三级三级久久三级久久18| 久久99精品国产| 国产亚洲小视频| 精品亚洲一区二区三区在线播放| 亚洲1234区| 中文字幕の友人北条麻妃| av电影一区二区| 少妇又紧又色又爽又刺激视频 | 少妇免费毛片久久久久久久久| 久久精品理论片| 久久精品女人毛片国产| 亚洲视频一区二区| 精品一区二区三区免费看| 欧美二区在线视频| 国产精品欧美久久久久一区二区| av中文字幕免费| 欧美在线欧美在线| 天天综合国产| 喷水视频在线观看| 欧美私人免费视频| 毛片在线导航| 亚洲春色在线视频| 成人av资源网站| 在线播放精品视频| 久久免费成人精品视频| 欧美手机视频| 人妻体内射精一区二区三区| 在线一区二区三区四区五区| www.久久ai| 视频一区免费观看| 99久久99久久精品国产片果冻| 午夜一级黄色片| 97在线免费视频| 亚洲色图网站| 在线免费观看视频| 亚洲激情自拍图|