精品欧美一区二区三区在线观看 _久久久久国色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)

成人午夜免费在线| 3d蒂法精品啪啪一区二区免费| 水蜜桃av无码| 日本一区免费网站| 国产人妖乱国产精品人妖| 国产精品日韩欧美大师| 麻豆亚洲av熟女国产一区二| 自拍自偷一区二区三区| 欧美久久久久久久久中文字幕| 特大黑人娇小亚洲女mp4| 亚洲 另类 春色 国产| 免费在线观看视频一区| 欧美国产精品日韩| 亚洲AV无码片久久精品| 欧美成人精品一级| 欧美性xxxxxxxxx| 在线观看免费黄色片| 艳母动漫在线看| 久久成人免费网站| 欧美在线免费视频| 亚洲天堂黄色片| 免费视频国产一区| 精品国产一区久久| 日本免费观看网站| 国模私拍一区二区国模曼安| 国产精品国产三级国产普通话三级| 国产精选在线观看91| 91久久国语露脸精品国产高跟| 亚洲三级观看| 欧美成人激情在线| 欧美性受xxxx黑人| 亚州国产精品| 亚洲国产精品va在线看黑人动漫| 九九九九九国产| 日韩在线观看不卡| 黑丝美女久久久| 蜜桃网站在线观看| 韩国av网站在线| 欧美激情一区二区三区不卡| 精品无码久久久久久久动漫| 亚洲成a人片77777精品| 韩国毛片一区二区三区| 国产精品丝袜久久久久久高清| 人人干人人干人人干| 国精品一区二区三区| 久热99视频在线观看| ass极品国模人体欣赏| 国产99久久| 亚洲女人天堂视频| 国产精品无码一区二区三| 中文无码日韩欧| 欧美一级免费大片| 亚洲热在线视频| 国产午夜精品一区在线观看 | 国产在线精品观看| 亚洲国产精品第一区二区| 欧美激情免费看| 国产一二三四在线| 伊人成人网在线看| 国内精品久久久久久| 免费在线观看亚洲| 欧美日韩精品| 久久久久久久国产精品| 国产一级片久久| 最新亚洲一区| 欧美一级在线亚洲天堂| 午夜婷婷在线观看| 老**午夜毛片一区二区三区 | 中文字幕理论片| 日韩精品成人一区二区三区| 国产精品成熟老女人| 这里只有精品免费视频| 麻豆国产一区二区| 91理论片午午论夜理片久久| 国产成人精品免费看视频| 国产精品亚洲视频| 精品国产免费久久久久久尖叫| 三级国产在线观看| 欧美高清在线视频| 麻豆一区二区三区在线观看| 丰满大乳少妇在线观看网站 | 国产精品一区二区免费在线观看| 日韩av影片| 欧美亚洲综合网| 国产精品探花在线播放| www.国产精品一区| 亚洲欧美制服丝袜| 91人妻一区二区三区蜜臀| 国产综合亚洲精品一区二| 国产69久久精品成人| 亚洲精品国产精品乱码视色| 国产一区二区看久久| 国产精品一国产精品最新章节| 日韩在线免费看| 国产精品国产自产拍在线| 国产欧美日韩小视频| 日韩毛片在线| 精品国产伦理网| 黄色片网站免费| 国产一区二区中文| 国产成人精品av在线| 国产精品天天操| 久久婷婷国产综合国色天香| 一区二区冒白浆视频| 国产v日韩v欧美v| 欧美日韩在线电影| 亚洲午夜久久久久久久久| 精品国产乱码久久久久久蜜坠欲下 | 一本久久综合亚洲鲁鲁五月天 | 91网址在线看| 手机看片日韩国产| 欧美电影网站| 精品国产乱码久久久久久1区2区| 久久久久亚洲av无码a片| 欧美三级在线| 成人免费黄色网| 久久精品蜜桃| 亚洲成人综合视频| 五月花丁香婷婷| 精品一区二区三区在线| 久久人人爽人人| 99热这里只有精品5| 久久久精品国产免大香伊| 黄色三级中文字幕| 亚洲成人高清| 中文综合在线观看| 在线天堂中文字幕| aa级大片欧美| www.亚洲成人网| 国产美女久久| 亚洲人永久免费| 亚洲国产成人精品激情在线| 国产不卡视频在线播放| 在线成人性视频| 69堂免费精品视频在线播放| 亚洲国产婷婷香蕉久久久久久| 成年人av电影| 国产一区二区免费视频| 偷拍盗摄高潮叫床对白清晰| 99亚洲伊人久久精品影院| 亚洲毛片在线观看.| 久久狠狠高潮亚洲精品| 国产91丝袜在线播放| 丰满女人性猛交| 91成人小视频| 日韩中文字在线| 一级特黄aaa| 中文字幕一区视频| 亚洲va在线va天堂va偷拍| 999久久久国产精品| 国产精品久久二区| aiai在线| 欧美日本国产一区| 在线观看黄网址| 狠狠久久亚洲欧美| a级网站在线观看| 欧美2区3区4区| 久久久久久久久久久免费 | 国产成人免费精品| 中文在线不卡视频| ,亚洲人成毛片在线播放| 国产欧美日韩综合精品一区二区| 亚洲成人av免费看| 日韩欧美中文| 亚洲最大成人免费视频| 免费看电影在线| 亚洲精品久久久久国产| 最新中文字幕一区| 中文字幕不卡在线观看| 日韩av.com| 欧美久色视频| 久久久久久欧美精品色一二三四| 免费亚洲电影| 久久精品亚洲国产| 国产91免费看| 色欧美88888久久久久久影院| 国产视频不卡在线| 国产曰批免费观看久久久| 大荫蒂性生交片| 亚洲欧洲av| 成人精品福利视频| 欧美黄色视屏| 亚洲人成在线电影| av免费观看在线| 欧美性猛交xxxx久久久| 999精品久久久| 不卡区在线中文字幕| 免费男同深夜夜行网站| 亚洲91中文字幕无线码三区| 国产福利久久精品| 欧美日韩亚洲国产| 欧美精品videosex性欧美| 青青久在线视频免费观看| 欧美日韩另类一区| 日本一级淫片色费放| 欧美精彩视频一区二区三区| 久久久久99人妻一区二区三区| 久久国产99| 国产在线无码精品| 国产成人精品免费视| 99在线视频首页| 78精品国产综合久久香蕉| 欧美激情综合色综合啪啪五月| 国产黄色片在线播放| 精品福利一二区| 怡春院在线视频| 欧美三级免费观看| 无码黑人精品一区二区| 久久久久久久久久电影| 中国特级黄色大片| 日韩人妻一区二区三区| 色综合色综合| 激情亚洲另类图片区小说区| 97人人做人人爱| 黄av在线播放| 中文字幕无线精品亚洲乱码一区 | 爱看av在线| 久久香蕉国产线看观看av| 免费在线看v| 亚洲国产精品热久久| 国产伦理吴梦梦伦理| 色综合久久久久综合体桃花网| 青青草原国产视频| 亚洲欧洲日产国码二区| 中文字幕被公侵犯的漂亮人妻| 国产98色在线|日韩| 午夜国产福利在线观看| 久久综合网络一区二区| 日韩欧美亚洲天堂| 激情视频一区| 色哟哟免费网站| 亚洲国产一区二区在线观看| 深夜福利成人| 九九亚洲视频| 乱色588欧美| 亚洲肉体裸体xxxx137| 国产精品成人一区二区三区| 日韩精品成人| 3d动漫精品啪啪一区二区三区免费| 亚洲爽爆av| 成人精品一区二区三区| 欧美日一区二区三区| 国产精品久久久久久久app| 中文在线8资源库| 2019亚洲日韩新视频| 免费v片在线观看| 欧洲午夜精品久久久| 在线观看网站免费入口在线观看国内| 777国产偷窥盗摄精品视频| 黄视频免费在线看| 午夜伦理精品一区 | 日本电影亚洲天堂| 亚洲美女炮图| 国产成人福利网站| 成人国产精品入口免费视频| 国产精品国模在线| 欧美成人高清视频在线观看| 国产精选久久久久久| 日本免费一区二区三区等视频| 国产美女被下药99| 成人网av.com/| 国产福利久久精品| 久久综合五月婷婷| 欧美理论一区二区| 欧美日韩一区二区三区视频播放| 婷婷精品国产一区二区三区日韩| 欧美少妇xxxx| 神马午夜伦理影院| 9国产精品视频| 日本三区在线观看| 久久精品国产77777蜜臀| 一级网站在线观看| fc2成人免费人成在线观看播放| 女同毛片一区二区三区| 国产视频一区在线观看| 国产精品视频一区二区三| 亚洲线精品一区二区三区八戒| 九九热在线视频播放| 在线观看日韩av先锋影音电影院| 怡春院在线视频| 精品国产欧美一区二区| 国产专区在线播放| 久久精品国产亚洲一区二区| 国产丝袜视频在线播放| 欧洲成人免费视频| 国产精品一区二区三区四区在线观看| 国产成人av一区二区三区| 国产成人1区| 300部国产真实乱| 亚洲一区二区三区四区五区午夜| 成人免费在线观看视频网站| 国产精品一区2区| 香蕉网在线播放| 亚洲天堂福利av| 中文字幕第四页| 日韩一区二区在线免费观看| 日韩av资源| 欧美大片免费观看| 国产一区二区精品调教| 丁香婷婷久久久综合精品国产| 少妇一区二区视频| 日韩视频在线视频| 久久精品国产第一区二区三区| 好吊色视频一区二区三区| 国产精品进线69影院| 毛片在线免费视频| 日韩美女视频在线| 日本韩国在线视频爽| 欧美亚洲第一页| 北条麻妃一区二区三区在线| 亚洲精品乱码久久久久久蜜桃91| 日韩午夜精品| 国产精品熟女一区二区不卡| 国产午夜久久久久| 国产精品免费av一区二区| 日韩一区二区免费视频| 高清av电影在线观看| 欧美精品激情blacked18| 婷婷久久免费视频| 视频一区在线免费观看| 午夜在线播放视频欧美| 四虎永久免费观看| 1区2区3区精品视频| 国产天堂第一区| 精品亚洲一区二区| www视频在线观看| ts人妖另类在线| 一区二区影院| 天堂中文av在线| 国产精品乱码久久久久久| 国产精品免费精品一区| 日韩av在线高清| 欧美人与禽猛交乱配| 不卡视频一区| 欧美精品综合| 日本成人在线免费| 一区二区三区中文在线| 国产三级伦理片| 美日韩精品视频免费看| 在线成人免费| 日本成人性视频| 国产一区二区在线视频| 国产suv精品一区二区68| 欧美精品亚洲二区| 性开放的欧美大片| 国产日本欧美一区| 成人女性视频| 911福利视频| 亚洲欧洲制服丝袜| 精品区在线观看| 欧美激情视频给我| 国产主播性色av福利精品一区| 国产免费一区二区视频| www.欧美.com| 国产一级片毛片| 夜夜嗨av一区二区三区四区| 日韩漫画puputoon| 国产欧美综合一区| 国产电影一区在线| 日韩免费一二三区| 日韩精品在线影院| 日韩成人高清| 在线观看亚洲视频啊啊啊啊| 国内精品免费**视频| 青娱乐国产在线视频| 亚洲国产欧美日韩精品| 亚洲人体影院| 亚洲最新在线| 国产99久久久精品| 亚洲日本视频在线观看| 最近中文字幕日韩精品| 国产一区二区三区亚洲综合| 97中文字幕在线| 久久久精品综合| 国产人妖在线播放| 97香蕉超级碰碰久久免费的优势| 精品成av人一区二区三区| 亚洲精品国产久| 好吊成人免视频| 久草资源在线观看| 国产视频精品网| 蜜臀av性久久久久蜜臀aⅴ四虎| 91精品国产高清一区二区三蜜臀| 亚洲成人黄色网址| 日韩欧美一区二区三区在线观看| 9999在线观看| 99热国产精品| 在线观看免费观看在线| 久久男人资源视频| 日韩欧美精品| 给我免费观看片在线电影的| 欧美三级一区二区| 丁香花在线观看完整版电影| 亚洲蜜桃在线| 99视频超级精品| 国产精品一区二区av白丝下载| 欧美激情视频免费观看| 欧美日韩在线二区| 午夜男人的天堂| 538prom精品视频线放|