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

玩轉Service Mesh微服務熔斷、限流騷操作

開發 架構
在微服務架構中,隨著服務調用鏈路變長,為了防止出現級聯雪崩,在微服務治理體系中,熔斷、限流作為服務自我保護的重要機制,是確保微服務架構穩定運行的關鍵手段之一。

[[404368]]

本文轉載自微信公眾號「無敵碼農」,作者無敵碼農 。轉載本文請聯系無敵碼農公眾號。

在微服務架構中,隨著服務調用鏈路變長,為了防止出現級聯雪崩,在微服務治理體系中,熔斷、限流作為服務自我保護的重要機制,是確保微服務架構穩定運行的關鍵手段之一。

那么什么是熔斷、限流?在傳統Spring Cloud微服務、以及新一代Service Mesh微服務架構中,它們分別又是怎么實現的?本文將對此進行闡述!

服務熔斷、限流概述

先理解下熔斷、限流的基本概念以及它們的應用場景。說起熔斷這個詞,大家印象深刻的可能是股市交易熔斷、或者電路保險絲斷開這樣的場景;而微服務中的熔斷本質上和這些場景中所描述的理念是一致的。都是為了在極端情況下,保證系統正常運行而設計的一種自我保護機制。

熔斷的基本邏輯就是隔離故障。在微服務架構盛行的今天,服務之間的調用鏈路相比單體應用時代變得更長了,服務化拆分帶來系統整體能力提升的同時,也增加了服務級聯故障出現的概率。例如調用鏈路“A->B->C->D”,如果服務D出現問題,那么鏈路上的A、B、C都可能會出現問題,這一點也很好理解,因為出現故障的服務D,必然會在某個時間段內阻塞C->D的調用請求,并最終蔓延至整個鏈路。而服務連接資源又是有限的,這種增加的調用耗時,會逐步消耗掉整個鏈路中所有服務的可用線程資源,從而成為壓垮整個微服務體系的幕后黑手。

而為了防止故障范圍的擴大,就需要對故障服務D進行隔離,隔離的方式就是服務C在感知到對D的調用頻繁出現故障(超時或錯誤)后,主動斷掉對D的連接,直接返回失敗調用結果。以此類推,如果微服務中的所有鏈路都設置這樣的熔斷機制,那么就能逐級實現鏈路的分級保護效果。

熔斷機制雖然解決不了故障,但卻能在故障發生時盡量保全非故障鏈路上的服務接口能被正常訪問,從而將故障范圍控制在局部。當然被熔斷的服務也不會一直處于熔斷狀態,在熔斷機制的設計中還要考慮故障恢復處理機制。

說完熔斷,再來說說限流。熔斷的主要目的是隔離故障,而引起故障的原因除了系統本身的問題外,還有一種可能就是請求量達到了系統處理能力的極限,后續新進入的請求會持續加重服務負載,最終導致資源耗盡,從而引起系統級聯故障、導致雪崩。而限流的目的就是拒絕多余流量、保證服務整體負載始終處于合理水平。

從限流范圍上看,微服務體系中的每個服務都可以根據自身情況設置合理的限流規則,例如調用鏈路“A->B->C->D”,B服務的承受力是1000QPS,如果超過該閥值,那么超出的請求就會被拒絕,但這也容易引起A對B的熔斷,所以對于微服務設置限流規則的設置最好還是根據壓測結果確定。

在實際場景中,對單個節點的微服務分別設置限流,雖然從邏輯上沒啥毛病,但實際操作起來卻并不容易,這主要是因為限流規則分散不好統一控制,另外對于單節點閥值的評估,在全鏈路環境下并不能得出“1+1=2”的結果。所以,一般做法是根據全鏈路壓測結果,在服務網關統一進行集群級別的限流處理。

接下來將分別介紹在Spring Cloud傳統微服務體系,以及新一代Service Mesh微服務體系中,熔斷、限流的基本實現原理,并重點演示基于Istio的微服務熔斷、限流邏輯具體實踐!

Spring Cloud微服務對熔斷/限流的處理

說起Spring Cloud微服務中的熔斷、限流,最先想到的肯定是Hystrix、Sentinel這樣的技術組件。關于這兩種著名的熔斷、限流組件,在筆者早先的文章<>以及<>中都曾詳細介紹過,細節就不再贅述,感興趣的朋友可以翻閱下。這里只從微服務架構的宏觀視角,來對比分析下其與服務網格(Service Mesh)在架構上的區別。

從本質上說Hystrix與Sentinel并無實質差別,它們都是以SDK的形式附著在具體微服務進程之上的、實現了熔斷/限流功能的本地工具包。具體示意圖如下:

在Spring Cloud微服務中,Hystrix、Sentinel等熔斷、限流組件通過嵌入微服務進程,統計微服務一段時期內的入口流量及依賴服務的錯誤調用次數、并根據組件的所提供功能及規則配置,來決定是否觸發限流或熔斷降級邏輯。這樣的過程完全是附著在微服務進程本身完成的,雖然限流/熔斷組件本身也提供了線程池隔離之類資源隔離手段,但從服務治理的角度來看,這樣的方式顯然還是侵入了業務、占用了業務系統資源;并且分散于應用的規則配置,也不利于微服務體系的整體管控。

Service Mesh微服務熔斷/限流實現

前面簡單概述了Spring Cloud微服務體系中實現熔斷、限流機制的基本框架及存在的弊端。接下來將具體分析下同樣的邏輯在Service Mesh微服務架構中是如何實現的?

關于Service Mesh微服務架構如果你還比較陌生,可以先通過筆者之前的文章<<干貨|如何步入Service Mesh微服務架構時代>><<實戰|Service Mesh微服務架構實現服務間gRPC通信>>進行了解,這兩篇文章從概念到實踐詳細介紹了基于Istio的Service Mesh微服務架構的具體玩法。本文所依賴的操作環境及示例代碼均依賴于該文章所演示的案例。

而回到本文的主題,要了解Service Mesh微服務架構中熔斷、限流的實現機制,還是需要從整體上理解服務網格實現的基本架構,具體如下圖所示:

如上圖所示,Service Mesh架構總體上由控制面(Control Plane)、數據面(Data Plane)這兩部分組成。其中控制面主要承擔整個微服務體系治理信息的集中管控;而數據面則負責具體執行由控制面下發的各類服務治理信息及規則。例如服務節點信息的發現、以及本文所講述的熔斷、限流規則等都是通過控制面統一下發至各數據面節點的。

數據面就是一個個代理服務,在Service Mesh體系下每個具體的微服務實例都會自動創建一個與之對應的代理,這個代理服務就是我們俗稱的邊車(SideCar)。這些代理會主動劫持所代理的微服務實例的入口流量和出口流量,從而根據控制面下發的服務治理信息實現路由發現、負載均衡、熔斷、限流等系列邏輯。

從中可以看出,在Service Mesh微服務架構中,各個具體的微服務之間不再直接發生連接,而是轉由各自的SideCar代理實現,因此在應用形態上就形成了一組由代理所組成的網狀交互結構,這就是服務網格名稱的由來。具體如下圖所示:

將微服務治理邏輯從原先具體的微服務進程中抽離出來,并實現由統一控制面管理、代理數據面執行的體系結構,這就是Service Mesh微服務體系與Spring Cloud傳統微服務體系在架構上最大的區別。

本文所提到的熔斷、限流邏輯,也是在這樣的架構模式下實現的。而控制面與數據面之間的具體通信則是通過一組被稱為xDS協議的數據交互方式實現。xDS協議的核心是定義了一套可擴展的通用微服務控制API,這些API不僅可以做到服務發現、還可以做到路由發現,可以說Service Mesh微服務體系中所有與服務治理相關的配置都可以通過xDS所提供的發現方式來實現,控制面與數據面之間正是通過這種全新的方案實現了各類數據的獲取、及動態資源的變更。

而具體來說xDS包含LDS(監聽發現服務)、CDS(集群發現服務)、EDS(節點發現服務)、SDS(密鑰發現服務)和RDS(路由發現服務)。xDS中的每種類型都會對應一個發現資源,而本文所要講述的熔斷、限流邏輯則是由RDS(路由發現服務)實現。由于篇幅的關系,就不展開講了,感興趣的讀者可以看看官方文檔,大家對此有個印象即可!

Istio服務網格熔斷、限流實踐

前面從整體架構的角度簡單分析了Service Mesh微服務治理體系的基本原理,接下來將基于Istio并結合微服務實戰案例,從實踐角度具體演示如何實現微服務之間的熔斷、限流配置。以下操作假設你已經在Kubernetes集群安裝了Istio,并正常部署了<<干貨|如何步入Service Mesh微服務架構時代>><<實戰|Service Mesh微服務架構實現服務間gRPC通信>>所演示的微服務案例。

Istio無需對代碼進行任何更改就可以為應用增加熔斷和限流功能。Istio中熔斷和限流在DestinationRule的CRD資源的TrafficPolicy中設置,通過設置連接池(connectionPool)實現限流、設置異常檢測(outlierDetection)實現熔斷。

限流邏輯演示

在Istio中,微服務的限流主要是通過設置connectionPool參數實現。該參數可以對上游服務的并發連接數和請求數進行限制(適用于TCP和HTTP),從而實現限流功能。例如要在API服務層實現限流,鏈路示意圖如下:

在Istio中實現此類限流邏輯,步驟如下:

1)、創建統一管理路由規則的配置文件(destination-rule-all.yaml),如:

  1. --- 
  2. apiVersion: networking.istio.io/v1alpha3 
  3. kind: DestinationRule 
  4. metadata: 
  5.   name: micro-api 
  6. spec: 
  7.   host: micro-api 
  8.   trafficPolicy: 
  9.     connectionPool: 
  10.       tcp: 
  11.         maxConnections: 1 
  12.       http: 
  13.         http1MaxPendingRequests: 1 
  14.         maxRequestsPerConnection: 1 
  15. --- 

上述規則文件定義了針對mico-api服務的限流規則,其中maxConnections(最大連接數為1)、http1MaxPendingRequests(最大等待請求數為1),如果連接和并發請求數超過1個,那么該服務就會觸發限流規則。

創建規則資源,命令如下:

  1. $ kubectl apply -f destination-rule-all.yaml  
  2. destinationrule.networking.istio.io/micro-api unchanged 

規則創建完后可以通過命令查看規則,命令如下:

  1. $ kubectl get destinationrule micro-api -o yaml 
  2. apiVersion: networking.istio.io/v1beta1 
  3. kind: DestinationRule 
  4. metadata: 
  5.   ... 
  6. spec: 
  7.   host: micro-api 
  8.   trafficPolicy: 
  9.     connectionPool: 
  10.       http: 
  11.         http1MaxPendingRequests: 1 
  12.         maxRequestsPerConnection: 1 
  13.       tcp: 
  14.         maxConnections: 1 

可以看到,規則資源已經成功創建!

2)、部署壓測工具,驗證限流效果

接下來,通過部署Istio提供的壓測工具fortio,模擬調用微服務并觸發限流規則。部署fortio命令如下:

  1. $ kubectl apply -f samples/httpbin/sample-client/fortio-deploy.yaml 

找到Istio安裝目錄“samples/httpbin/sample-client”后執行上述部署命令。

接下來通過fortio工具模擬壓測mico-api服務接口,命令如下:

  1. #將fortio服務pod信息寫入系統變量 
  2. $ export FORTIO_POD=$(kubectl get pods -lapp=fortio -o 'jsonpath={.items[0].metadata.name}'
  3.  
  4. #通過設置2個線程,并發調用20次進行壓測 
  5. $ kubectl exec "$FORTIO_POD" -c fortio -- /usr/bin/fortio load -c 2 -qps 0 -n 20 -loglevel Warning -H "Content-Type:application/json" -payload '{"businessId": "51210428001784966", "amount":100, "channel":1}' http://10.211.55.12:31107/api/order/create  

壓測數據效果如下:

  1. 11:18:54 I logger.go:127> Log level is now 3 Warning (was 2 Info) 
  2. Fortio 1.11.3 running at 0 queries per second, 2->2 procs, for 20 calls: http://10.211.55.12:31107/api/order/create 
  3. Starting at max qps with 2 thread(s) [gomax 2] for exactly 20 calls (10 per thread + 0) 
  4. 11:18:54 W http_client.go:693> Parsed non ok code 503 (HTTP/1.1 503) 
  5. 11:18:54 W http_client.go:693> Parsed non ok code 503 (HTTP/1.1 503) 
  6. 11:18:54 W http_client.go:693> Parsed non ok code 503 (HTTP/1.1 503) 
  7. 11:18:54 W http_client.go:693> Parsed non ok code 503 (HTTP/1.1 503) 
  8. Ended after 262.382465ms : 20 calls. qps=76.225 
  9. Aggregated Function Time : count 20 avg 0.025349997 +/- 0.01454 min 0.001397264 max 0.049622545 sum 0.506999934 
  10. # range, mid point, percentile, count 
  11. >= 0.00139726 <= 0.002 , 0.00169863 , 15.00, 3 
  12. > 0.003 <= 0.004 , 0.0035 , 20.00, 1 
  13. > 0.016 <= 0.018 , 0.017 , 25.00, 1 
  14. > 0.018 <= 0.02 , 0.019 , 30.00, 1 
  15. > 0.02 <= 0.025 , 0.0225 , 50.00, 4 
  16. > 0.025 <= 0.03 , 0.0275 , 65.00, 3 
  17. > 0.03 <= 0.035 , 0.0325 , 70.00, 1 
  18. > 0.035 <= 0.04 , 0.0375 , 80.00, 2 
  19. > 0.04 <= 0.045 , 0.0425 , 95.00, 3 
  20. > 0.045 <= 0.0496225 , 0.0473113 , 100.00, 1 
  21. # target 50% 0.025 
  22. # target 75% 0.0375 
  23. # target 90% 0.0433333 
  24. # target 99% 0.048698 
  25. # target 99.9% 0.0495301 
  26. Sockets used: 6 (for perfect keepalive, would be 2) 
  27. Jitter: false 
  28. Code 200 : 16 (80.0 %) 
  29. Code 503 : 4 (20.0 %) 
  30. Response Header Sizes : count 20 avg 148.8 +/- 74.4 min 0 max 186 sum 2976 
  31. Response Body/Total Sizes : count 20 avg 270.8 +/- 2.4 min 266 max 272 sum 5416 
  32. All done 20 calls (plus 0 warmup) 25.350 ms avg, 76.2 qps 

在可以看到20次請求,共成功16次,4次被限流后返回了503。查看istio-proxy狀態日志,命令如下:

  1. $ kubectl exec "$FORTIO_POD" -c istio-proxy -- pilot-agent request GET stats | grep micro-api | grep pending 
  2. cluster.outbound|19090||micro-api.default.svc.cluster.local.circuit_breakers.default.rq_pending_open: 0 
  3. cluster.outbound|19090||micro-api.default.svc.cluster.local.circuit_breakers.high.rq_pending_open: 0 
  4. cluster.outbound|19090||micro-api.default.svc.cluster.local.upstream_rq_pending_active: 0 
  5. cluster.outbound|19090||micro-api.default.svc.cluster.local.upstream_rq_pending_failure_eject: 0 
  6. cluster.outbound|19090||micro-api.default.svc.cluster.local.upstream_rq_pending_overflow: 0 
  7. cluster.outbound|19090||micro-api.default.svc.cluster.local.upstream_rq_pending_total: 0 

從上述日志可以看出micro-api服務的限流規則被觸發了!

熔斷邏輯演示

熔斷是減少服務異常、降低服務延遲的一種設計模式,如果在一定時間內服務累計發生錯誤的次數超過了預定義閥值,Istio就會將該錯誤的服務從負載均衡池移除,當超過一段時間后,又會將服務再移回服務負載均衡池。

具體來說Istio引入了異常檢測來完成熔斷功能,通過周期性的動態異常檢測來確定上游服務(被調用方)中的某些實例是否異常,如果發現異常就將該實例從連接池中隔離出去,這就是異常值檢測。例如對于HTTP服務,如果API調用連續返回5xx錯誤,則在一定時間內連接池拒絕此服務;而對于TCP服務,一個主機連接超時/失敗次數達到一定次數就認為是連接錯誤。

隔離不是永久的,會有一個時間限制。當實例被隔離后會被標記為不健康,并且不會被加入到負載均衡池中。具體的隔離時間等于envoy中“outlier_detection.baseEjectionTime”的值乘以實例被隔離的次數。經過規定的隔離時間后,被隔離的實例將會自動恢復過來,重新接受調用方的遠程調用。

回到熔斷演示案例,假設micro-pay服務不穩定,micro-order服務要實現對該服務的熔斷策略,鏈路示意圖如下:

與限流配置類似,Istio的熔斷邏輯也是基于“DestinationRule”資源。針對micro-pay微服務的熔斷規則配置如下(可在destination-rule-all.yaml文件增加配置):

  1. --- 
  2.  
  3. apiVersion: networking.istio.io/v1alpha3 
  4. kind: DestinationRule 
  5. metadata: 
  6.   name: micro-pay 
  7. spec: 
  8.   host: micro-pay 
  9.   trafficPolicy: 
  10.     #限流策略 
  11.     connectionPool: 
  12.       tcp: 
  13.         maxConnections: 1 
  14.       http: 
  15.         #http2MaxRequests: 1 
  16.         http1MaxPendingRequests: 1 
  17.         maxRequestsPerConnection: 1 
  18.     #熔斷策略 
  19.     outlierDetection: 
  20.       consecutive5xxErrors: 1 
  21.       interval: 1s 
  22.       baseEjectionTime: 3m 
  23.       maxEjectionPercent: 100 
  24. --- 

如上配置,為了演示micro-pay的報錯情況,這里也針對該微服務配置了限流規則。而熔斷策略配置的意思是:“每1秒鐘(interval)掃描一次上游主機(mico-pay)實例的情況,連續失敗1次返回5xx碼(consecutive5xxErrors)的所有實例,將會被移除連接池3分鐘(baseEjectionTime)”。

應用該規則,命令如下:

  1. $ kubectl apply -f destination-rule-all.yaml  

之后可通過壓測工具(與限流方式類似),測試觸發熔斷規則的情況。具體查看方式如下:

  1. # kubectl exec -it $FORTIO_POD  -c istio-proxy  -- sh -c 'curl localhost:15000/stats' | grep micro-pay | grep outlier 

如觸發成功,則可以查看到的信息如下:

  1. cluster.outbound|18888||micro-pay.default.svc.cluster.local.outlier_detection.ejections_active: 1 
  2. cluster.outbound|18888||micro-pay.default.svc.cluster.local.outlier_detection.ejections_consecutive_5xx: 0 
  3. cluster.outbound|18888||micro-pay.default.svc.cluster.local.outlier_detection.ejections_detected_consecutive_5xx: 2 
  4. cluster.outbound|18888||micro-pay.default.svc.cluster.local.outlier_detection.ejections_detected_consecutive_gateway_failure: 0 
  5. cluster.outbound|18888||micro-pay.default.svc.cluster.local.outlier_detection.ejections_detected_consecutive_local_origin_failure: 0 
  6. cluster.outbound|18888||micro-pay.default.svc.cluster.local.outlier_detection.ejections_detected_failure_percentage: 0 
  7. cluster.outbound|18888||micro-pay.default.svc.cluster.local.outlier_detection.ejections_detected_local_origin_failure_percentage: 0 
  8. cluster.outbound|18888||micro-pay.default.svc.cluster.local.outlier_detection.ejections_detected_local_origin_success_rate: 0 
  9. cluster.outbound|18888||micro-pay.default.svc.cluster.local.outlier_detection.ejections_detected_success_rate: 0 
  10. cluster.outbound|18888||micro-pay.default.svc.cluster.local.outlier_detection.ejections_enforced_consecutive_5xx: 0 
  11. cluster.outbound|18888||micro-pay.default.svc.cluster.local.outlier_detection.ejections_enforced_consecutive_gateway_failure: 0 
  12. cluster.outbound|18888||micro-pay.default.svc.cluster.local.outlier_detection.ejections_enforced_consecutive_local_origin_failure: 0 
  13. cluster.outbound|18888||micro-pay.default.svc.cluster.local.outlier_detection.ejections_enforced_failure_percentage: 0 
  14. cluster.outbound|18888||micro-pay.default.svc.cluster.local.outlier_detection.ejections_enforced_local_origin_failure_percentage: 0 
  15. cluster.outbound|18888||micro-pay.default.svc.cluster.local.outlier_detection.ejections_enforced_local_origin_success_rate: 0 
  16. cluster.outbound|18888||micro-pay.default.svc.cluster.local.outlier_detection.ejections_enforced_success_rate: 0 
  17. cluster.outbound|18888||micro-pay.default.svc.cluster.local.outlier_detection.ejections_enforced_total: 1 
  18. cluster.outbound|18888||micro-pay.default.svc.cluster.local.outlier_detection.ejections_overflow: 0 
  19. cluster.outbound|18888||micro-pay.default.svc.cluster.local.outlier_detection.ejections_success_rate: 0 
  20. cluster.outbound|18888||micro-pay.default.svc.cluster.local.outlier_detection.ejections_total: 0 

具體的觸發需要模擬上游服務失敗的情況,可以通過編寫錯誤代碼的方式進行模擬!

后記 

本文從原理到實踐比較詳細地介紹了以Istio為代表的Service Mesh微服務架構實現熔斷、限流的基本方法。希望本文可以幫助各位老鐵進一步理解服務網格的架構內涵,并打開大家學習Service Mesh微服務架構的大門!

 

責任編輯:武曉燕 來源: 無敵碼農
相關推薦

2020-07-28 08:32:57

微服務API網關熔斷

2022-01-17 10:55:50

微服務API網關

2024-11-29 16:02:17

2019-05-23 14:59:21

PythonPDF編程語言

2023-11-19 22:59:48

微服務開發

2020-09-26 10:56:33

服務器熔斷服務隔離

2018-04-10 10:15:48

微服務架構Nginx

2018-12-06 14:56:46

微服務隔離熔斷

2021-10-08 20:12:22

微服務架構Service

2021-12-11 22:21:00

服務配置文件

2021-03-16 08:31:59

微服務Sentinel雪崩效應

2019-03-20 09:28:42

Service Mes高可用架構

2021-10-22 09:28:15

開發技能代碼

2020-09-08 06:48:07

微服務算法限流

2022-07-05 09:44:25

服務治理熔斷限流

2021-12-08 17:54:55

架構控制平面

2022-08-21 07:17:16

LinkerdKubernetes服務網格

2021-09-06 11:34:47

架構微服務Hystrix

2019-09-26 10:07:00

微服務熔斷線程

2021-06-12 07:38:21

Linkerd 2.Service Mes微服務
點贊
收藏

51CTO技術棧公眾號

一区二区三区国产免费| www.亚洲.com| 国产视频在线观看一区| 欧美一区二区三区精美影视| 国产尤物av一区二区三区| 中文字幕国产综合| 日本免费在线观看| 一区二区精品视频在线观看| 久久青青草原一区二区| 国产三区精品| 青青草手机在线视频| 99re热视频| 日韩中文av| 日本色综合中文字幕| av电影天堂一区二区在线观看| 久久夜色精品一区| 欧美日韩久久一区| 中文字幕成人在线| 久久精品免费一区二区| 国产高清视频免费最新在线| 免费成人在线网站| 色综合伊人色综合网| 亚洲人成77777| 久久伊人一区二区| 亚洲AV成人精品| 国产又粗又猛又爽又黄av | 干日本少妇首页| 日本久久一级片| av片在线观看免费| 欧美a在线观看| 国产精品私房写真福利视频| 久久久精品国产99久久精品芒果 | 久久99精品久久只有精品| 正在播放欧美一区| 999精品网站| 真实新婚偷拍xxxxx| 五十路熟女丰满大屁股| 国产精品高清无码| 麻豆一区一区三区四区| 91久久精品一区二区三| 97在线视频免费播放| 激情五月开心婷婷| 女人偷人在线视频| 极品束缚调教一区二区网站 | 风间由美一二三区av片| 成人精品免费在线观看| 97精品在线| 欧美精品一区二区精品网| 狠狠干 狠狠操| 青青久草在线| 国产99久久久久| 国产精品久久久久久婷婷天堂 | 91丨九色丨丰满| 亚洲精品国产偷自在线观看| 6080yy午夜一二三区久久| 国产精品综合网站| 欧美国产日韩激情| 久久久久亚洲av成人片| 成人video亚洲精品| 久久色在线观看| 91久色国产| 中文字幕一区二区三区人妻四季 | 丰满少妇一区二区三区| 亚洲大奶少妇| 亚洲成av人片在www色猫咪| 欧美午夜一区二区三区| 精品奇米国产一区二区三区| 国产视频九色蝌蚪| 亚洲精品国产精品国自产观看| 国产精品成人免费观看| 日韩a在线看| 日本成人在线视频网站| 欧洲一区二区视频| 国产一级av毛片| 欧美在线精品一区| 美女啪啪无遮挡免费久久网站| 国产综合中文字幕| 欧美激情一区二区三区免费观看| 亚洲综合不卡| 日本中文字幕成人| chinese少妇国语对白| 欧洲伦理片一区 二区 三区| 国产在线日韩精品| 久久丁香综合五月国产三级网站| 亚洲丝袜av一区| 午夜精产品一区二区在线观看的| 奇米777国产一区国产二区| 7777精品久久久大香线蕉| 真人做人试看60分钟免费| 国产黄色片在线播放| 国产成人99久久亚洲综合精品| 九九视频这里只有精品| 热久久最新地址| 色网站在线看| 18涩涩午夜精品.www| 国产精品国产三级欧美二区 | 成人午夜精品久久久久久久蜜臀| 日本动漫理论片在线观看网站| 日韩免费高清| xnxx国产精品| 久久中国妇女中文字幕| 欧美巨胸大乳hitomi| 中文字幕一区二区人妻电影| zzzwww在线看片免费| 亚洲欧洲99久久| 蜜桃麻豆www久久国产精品| 亚洲国产精品久久人人爱潘金莲| 国产白丝精品91爽爽久久| 91在线视频九色| 亚洲国产精品二区| 91美女片黄在线| 精品一区二区视频| 深爱激情五月婷婷| 91色婷婷久久久久合中文| 91午夜理伦私人影院| 国产一区二区女内射| 老汉av免费一区二区三区| 成人激情春色网| 污污的视频在线免费观看| 奇米亚洲欧美| 久久精品国产色蜜蜜麻豆| 亚洲精品在线看| 婷婷综合在线视频| 国产伊人精品| 欧美在线免费视频| 久久精品久久久久久久| 99热国内精品| 亚洲精品美女久久久久| 黄色av网址在线播放| av小片在线| 国产xxx精品视频大全| 91亚洲精品久久久| a毛片在线免费观看| 欧美91视频| 久久视频中文字幕| 日本特黄特色aaa大片免费| 奶水喷射视频一区| 国产精品污www一区二区三区| 精品人妻少妇AV无码专区 | 91亚洲永久精品| 久久嫩草精品久久久精品一| 91精品网站| 久久精品蜜桃| 亚洲欧洲av另类| 在线观看成人免费| av剧情在线观看| 91精品国产美女浴室洗澡无遮挡| 国产精品jizz| 亚洲影视一区| 国产激情视频一区| 免费黄视频在线观看| 日韩精品福利一区二区三区| 精品久久一区二区| 99久久久无码国产精品不卡| 老牛嫩草一区二区三区日本 | 在线观看亚洲| 99久久国产综合精品麻豆| 国产精品99免视看9| а√中文在线资源库| 欧美韩国一区二区| 国产在线视频一区| 国产youjizz在线| 天天综合色天天综合| 三年中国国语在线播放免费| **精品中文字幕一区二区三区| 一区二区三区欧美久久| 久久国产精品免费观看| 97视频精彩视频在线观看| 亚洲欧美视频在线观看视频| 韩国中文字幕av| 天堂资源在线亚洲| 久久久极品av| 午夜一级黄色片| japanese色系久久精品| 成人做爰69片免费看网站| 麻豆一区区三区四区产品精品蜜桃| 午夜福利视频一区二区| 亚洲精品中文在线观看| 免费看日b视频| 色呦呦视频在线观看| 欧美日韩卡一卡二| 911国产在线| 极品美女销魂一区二区三区| 青青视频免费在线观看| 黄色成人在线观看网站| 美女av一区二区三区| 狠狠躁夜夜躁av无码中文幕| 一区av在线播放| 精品1卡二卡三卡四卡老狼| 日韩亚洲在线| 欧美精品v日韩精品v国产精品| 精品久久久久一区二区| heyzo高清在线| 日韩精品专区在线影院观看| 日本少妇aaa| 一区二区三区四区日韩| 欧美丰满少妇xxxxx做受| 亚洲天堂网在线视频| 26uuu亚洲| 日韩国产欧美亚洲| www.欧美视频| 91精品国产91久久久久久| 国产精品视频免费播放| 久久久综合精品| 亚洲一级片免费| 日韩一区二区中文| 国产精华一区二区三区| 午夜av成人| 久久99国产精品自在自在app| 日本久久一级片| 精品视频一区二区三区免费| 自拍视频一区二区三区| 久久久999久久久| 国产精品沙发午睡系列990531| www亚洲成人| 久久精品亚洲人成影院 | 污片在线免费看| 亚洲人成网www| 国产精品999999| 天堂成人在线| |精品福利一区二区三区| 欧美激情第四页| av在线不卡精品| 日韩精品在线观看网站| 一级黄色片免费看| 婷婷一区二区三区| 大胸美女被爆操| 狠狠色丁香久久婷婷综| 黑人糟蹋人妻hd中文字幕| 99热国内精品| 日本成人三级| 91亚洲国产成人精品一区| 日韩欧美视频在线播放| 国产欧美最新羞羞视频在线观看| 国产在线88av| 久久夜精品va视频免费观看| 无码精品视频一区二区三区| 亚洲一区精品在线| 色哟哟精品观看| 麻豆国产欧美一区二区三区| 91亚色免费| 欧美性爽视频| 538在线一区二区精品国产| 清纯粉嫩极品夜夜嗨av| 成人免费毛片嘿嘿连载视频| 久草精品在线播放| 国产欧美一区二区三区精品酒店| 久久免费视频观看| 日本乱理伦在线| 欧美成人免费在线视频| 亚洲av成人精品一区二区三区在线播放 | 国产人妖在线观看| 亚洲毛片播放| 欧美国产一区二区在线| 亚洲欧美韩国| 午夜精品久久久久久久99黑人| av综合在线观看| 午夜a成v人精品| 午夜国产福利一区二区| 国产日韩欧美综合在线| 亚洲精品第三页| 日韩制服丝袜先锋影音| 性做爰过程免费播放| av成人综合| 91久久爱成人| 亚洲欧洲二区| 国产999精品久久久| 国产视频精选在线| 蜜臀精品久久久久久蜜臀| 亚洲精品按摩视频| 中文字幕激情视频| 精品日本高清在线播放| 国产精品成人久久| av欧美精品.com| 亚洲欧美色图视频| 久久99久久精品| 9l视频白拍9色9l视频| 2023国产精华国产精品| 国产精品日韩专区| 精品欧美日韩精品| 成人欧美一区二区三区在线湿哒哒| av一区在线播放| 91爱视频在线| 色婷婷av在线| 一区二区在线视频| www久久久久久| 欧美va亚洲va国产综合| 中文字幕av在线免费观看| 麻豆极品一区二区三区| 欧美激情videos| 天天影视久久综合| 久久久精品电影| 91九色美女在线视频| 欧美最顶级的aⅴ艳星| 日韩不卡免费高清视频| 成人午夜黄色影院| 怡红院在线播放| 欧美放荡办公室videos4k| 精品人妻少妇嫩草av无码专区| 在线播放日韩导航| jizz国产视频| 欧美日韩在线亚洲一区蜜芽| 国产视频在线免费观看| 日韩一区二区三区四区五区六区| 国产福利第一页| 亚洲精品国产免费| 国产高清自拍视频在线观看| 免费不卡在线观看av| 18视频在线观看网站| 午夜精品三级视频福利| 忘忧草在线影院两性视频| 男女av一区三区二区色多| 亚洲不卡中文字幕| 久久亚洲专区| 激情五月五月婷婷| 久久精品一本| 欧美一区二区三区影院| 久久久精品综合| 国产精品国产三级国产传播| 久久一夜天堂av一区二区三区| 在线观看一区二区三区四区| 国产日韩欧美制服另类| 久久综合亚洲色hezyo国产| 亚洲欧美色图小说| 九九免费精品视频| 欧美在线一区二区| 男人天堂手机在线观看| 日韩小视频网址| 成人影院入口| 国产免费成人av| 国产精品一区二区99| 国产中文字幕二区| 三级精品在线观看| 亚洲午夜未删减在线观看| 羞羞色院91蜜桃| 日韩午夜小视频| 国产三级精品三级观看| 精品国产91乱高清在线观看| 欧美熟妇激情一区二区三区| 国产精品视频观看| 亚洲日本韩国在线| 欧美一级午夜免费电影| 1024国产在线| 国产亚洲一级高清| 91九色在线porn| 久久99久久亚洲国产| av有声小说一区二区三区| 精品日本一区二区三区在线观看| 欧美日本亚洲韩国国产| 国产成人av影视| 久久综合丝袜日本网| 天海翼一区二区| 亚洲精品98久久久久久中文字幕| 成人在线直播| 国产成a人无v码亚洲福利| 免费看的黄色大片| 免费亚洲网站| 亚洲第一狼人区| 欧美极品少妇xxxxⅹ高跟鞋| 97人人澡人人爽人人模亚洲| 亚洲高清一区二| 日韩激情电影| 亚洲一区二区中文字幕| 日韩美香港a一级毛片| 日韩欧美亚洲v片| 日韩国产欧美一区二区三区| 中国极品少妇videossexhd| 夜夜精品视频一区二区| 亚洲av无码一区二区三区dv| 亚洲国产精品va在线看黑人| 超碰在线视屏| 国产麻豆日韩| 国产一区二区三区成人欧美日韩在线观看 | 国产成人在线中文字幕| 中国一区二区三区| 888久久久| 美女黄色免费看| 国产一区中文字幕| 久久久久无码国产精品| 日韩一区二区不卡| 在线中文免费视频| 国产另类第一区| 国产午夜久久| 天天插天天射天天干| 欧美日韩免费观看中文| 国产又黄又粗又硬| 国产视频久久网| sm在线观看| 不卡视频一区二区| 欧美在线三级| 玖玖爱在线精品视频| 夜夜嗨av一区二区三区中文字幕 | 免费高清视频精品| 高清日韩一区| www国产黄色| 国产高清一区| 日本久久高清视频| 日本不卡免费在线视频| 少妇一级淫片免费放播放| 日韩理论片在线|