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

阿里二面:使用 Nacos 做注冊中心怎么做優雅發布?

開發 前端
無論是哪一款注冊中心,優雅發布要解決的問題都是優雅上線和優雅下線。本文結合 Nacos 的原理講解了 Nacos 的優雅發布,希望對你有所幫助。

大家好,我是君哥。今天重新發一下這篇文章。

今天來聊一聊使用 Nacos 做注冊中心怎么做優雅發布。

跟其他的注冊中心一樣,Nacos 作為注冊中心的使用如下圖:

圖片圖片

Service Provider 啟動后注冊到 Nacos Server,Service Consumer 則從 Nacos Server 拉取服務列表,根據一定算法選擇一個 Service Provider 來發送請求。

1.優雅要求

對于優雅發布,要求是 Service Provider 上線(注冊到 Nacos)后,服務能夠正常地接收和處理請求,而 Service Provider 停服后,則不會再收到請求。這就有兩個要求:

  1. 優雅上線:Service Provider 發布完成之前,Service Consumer 不應該從服務列表中拉取到這個服務地址;
  2. 優雅下線:Service Provider 下線后,Service Consumer 不會從服務列表中拉取到這個服務地址。

解決了這兩個問題,優雅發布就可以做到了。

2.搭建環境

搭建環境是為了看 Nacos 日志,通過日志找到對應的源代碼。本文搭建的環境如下圖:

圖片圖片

2.1 啟動 provider

啟動 springboot-provider 的應用,注冊到 Nacos,啟動日志如下:

2023-06-11 18:58:10,120 [main] [INFO] com.alibaba.nacos.client.naming - [BEAT] adding beat: BeatInfo{port=8083, ip='192.168.31.94', weight=1.0, serviceName='DEFAULT_GROUP@@springboot-provider', cluster='DEFAULT', metadata={management.endpoints.web.base-path=/actuator, management.port=18082, preserved.register.source=SPRING_CLOUD, management.address=127.0.0.1}, scheduled=false, period=5000, stopped=false} to beat map.
2023-06-11 18:58:10,121 [main] [INFO] com.alibaba.nacos.client.naming - [REGISTER-SERVICE] public registering service DEFAULT_GROUP@@springboot-provider with instance: Instance{instanceId='null', ip='192.168.31.94', port=8083, weight=1.0, healthy=true, enabled=true, ephemeral=true, clusterName='DEFAULT', serviceName='null', metadata={management.endpoints.web.base-path=/actuator, management.port=18082, preserved.register.source=SPRING_CLOUD, management.address=127.0.0.1}}
2023-06-11 18:58:10,133 [main] [INFO] com.alibaba.cloud.nacos.registry.NacosServiceRegistry - nacos registry, DEFAULT_GROUP springboot-provider 192.168.31.94:8083 register finished
2023-06-11 18:58:10,221 [main] [INFO] org.springframework.boot.web.embedded.tomcat.TomcatWebServer - Tomcat initialized with port(s): 18082 (http)
2023-06-11 18:58:10,222 [main] [INFO] org.apache.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-127.0.0.1-18082"]
2023-06-11 18:58:10,223 [main] [INFO] org.apache.catalina.core.StandardService - Starting service [Tomcat]
2023-06-11 18:58:10,223 [main] [INFO] org.apache.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/9.0.21]
2023-06-11 18:58:10,239 [main] [INFO] org.apache.catalina.core.ContainerBase.[Tomcat-1].[localhost].[/] - Initializing Spring embedded WebApplicationContext
2023-06-11 18:58:10,239 [main] [INFO] org.springframework.web.context.ContextLoader - Root WebApplicationContext: initialization completed in 99 ms
2023-06-11 18:58:10,268 [main] [INFO] org.springframework.boot.actuate.endpoint.web.EndpointLinksResolver - Exposing 22 endpoint(s) beneath base path '/actuator'
2023-06-11 18:58:10,336 [main] [INFO] org.apache.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-127.0.0.1-18082"]
2023-06-11 18:58:10,340 [main] [INFO] org.springframework.boot.web.embedded.tomcat.TomcatWebServer - Tomcat started on port(s): 18082 (http) with context path ''
2023-06-11 18:58:10,342 [main] [INFO] boot.Application - Started Application in 7.051 seconds (JVM running for 7.874)
2023-06-11 18:58:10,358 [main] [INFO] com.alibaba.nacos.client.config.impl.ClientWorker - [fixed-39.105.183.91_8848] [subscribe] springboot-provider.properties+DEFAULT_GROUP
2023-06-11 18:58:10,359 [main] [INFO] com.alibaba.nacos.client.config.impl.CacheData - [fixed-39.105.183.91_8848] [add-listener] ok, tenant=, dataId=springboot-provider.properties, group=DEFAULT_GROUP, cnt=1
2023-06-11 18:58:10,359 [main] [INFO] com.alibaba.nacos.client.config.impl.ClientWorker - [fixed-39.105.183.91_8848] [subscribe] springboot-provider-dev.properties+DEFAULT_GROUP
2023-06-11 18:58:10,359 [main] [INFO] com.alibaba.nacos.client.config.impl.CacheData - [fixed-39.105.183.91_8848] [add-listener] ok, tenant=, dataId=springboot-provider-dev.properties, group=DEFAULT_GROUP, cnt=1
2023-06-11 18:58:10,360 [main] [INFO] com.alibaba.nacos.client.config.impl.ClientWorker - [fixed-39.105.183.91_8848] [subscribe] springboot-provider+DEFAULT_GROUP
2023-06-11 18:58:10,360 [main] [INFO] com.alibaba.nacos.client.config.impl.CacheData - [fixed-39.105.183.91_8848] [add-listener] ok, tenant=, dataId=springboot-provider, group=DEFAULT_GROUP, cnt=1
2023-06-11 18:58:10,639 [RMI TCP Connection(1)-192.168.31.94] [INFO] org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet'
2023-06-11 18:58:10,839 [com.alibaba.nacos.client.naming.updater] [INFO] com.alibaba.nacos.client.naming - [BEAT] adding beat: BeatInfo{port=8083, ip='192.168.31.94', weight=1.0, serviceName='DEFAULT_GROUP@@springboot-provider', cluster='DEFAULT', metadata={management.endpoints.web.base-path=/actuator, management.port=18082, preserved.register.source=SPRING_CLOUD, management.address=127.0.0.1}, scheduled=false, period=5000, stopped=false} to beat map.
2023-06-11 18:58:10,840 [com.alibaba.nacos.client.naming.updater] [INFO] com.alibaba.nacos.client.naming - modified ips(1) service: DEFAULT_GROUP@@springboot-provider@@DEFAULT -> [{"instanceId":"192.168.31.94#8083#DEFAULT#DEFAULT_GROUP@@springboot-provider","ip":"192.168.31.94","port":8083,"weight":1.0,"healthy":true,"enabled":true,"ephemeral":true,"clusterName":"DEFAULT","serviceName":"DEFAULT_GROUP@@springboot-provider","metadata":{"management.endpoints.web.base-path":"/actuator","management.port":"18082","preserved.register.source":"SPRING_CLOUD","management.address":"127.0.0.1"},"ipDeleteTimeout":30000,"instanceHeartBeatInterval":5000,"instanceHeartBeatTimeOut":15000}]
2023-06-11 18:58:10,841 [com.alibaba.nacos.client.naming.updater] [INFO] com.alibaba.nacos.client.naming - current ips:(1) service: DEFAULT_GROUP@@springboot-provider@@DEFAULT -> [{"instanceId":"192.168.31.94#8083#DEFAULT#DEFAULT_GROUP@@springboot-provider","ip":"192.168.31.94","port":8083,"weight":1.0,"healthy":true,"enabled":true,"ephemeral":true,"clusterName":"DEFAULT","serviceName":"DEFAULT_GROUP@@springboot-provider","metadata":{"management.endpoints.web.base-path":"/actuator","management.port":"18082","preserved.register.source":"SPRING_CLOUD","management.address":"127.0.0.1"},"ipDeleteTimeout":30000,"instanceHeartBeatInterval":5000,"instanceHeartBeatTimeOut":15000}]

我們再看下 Nacos 的日志,這里看的文件 naming-server.log,日志如下:

2023-06-11 18:58:09,723 INFO Client connection 192.168.31.94:51885#true connect
2023-06-11 18:58:10,105 INFO Client change for service Service{namespace='public', group='DEFAULT_GROUP', name='springboot-provider', ephemeral=true, revisinotallow=1}, 192.168.31.94:8083#true
2023-06-11 18:58:18,204 INFO Client connection 192.168.31.94:60850#true disconnect, remove instances and subscribers

springboot-provider 啟動成功后,從Nacos 管理后臺可以看到下圖:

圖片圖片

2.2 provider 下線

服務下線后,Nacos 日志如下:

2023-06-11 19:01:03,375 INFO Client connection 192.168.31.94:51885#true disconnect, remove instances and subscribers
2023-06-11 19:01:05,048 INFO [AUTO-DELETE-IP] service: Service{namespace='public', group='DEFAULT_GROUP', name='springboot-provider', ephemeral=true, revisinotallow=2}, ip: {"ip":"192.168.31.94","port":8083,"healthy":false,"cluster":"DEFAULT","extendDatum":{"management.endpoints.web.base-path":"/actuator","management.port":"18082","preserved.register.source":"SPRING_CLOUD","management.address":"127.0.0.1","customInstanceId":"192.168.31.94#8083#DEFAULT#DEFAULT_GROUP@@springboot-provider"},"lastHeartBeatTime":1686481231604,"metadataId":"192.168.31.94:8083:DEFAULT"}
2023-06-11 19:01:05,048 INFO Client remove for service Service{namespace='public', group='DEFAULT_GROUP', name='springboot-provider', ephemeral=true, revisinotallow=2}, 192.168.31.94:8083#true
2023-06-11 19:01:08,379 INFO Client connection 192.168.31.94:8083#true disconnect, remove instances and subscribers

2.3 服務調用

在 springboot-consumer 上跑一個單元測試的用例,用 FeignClient 調用下面的方法:

@FeignClient(value = "springboot-provider", configuration = FeignMultipartSupportConfig.class)
public interface FeignAsEurekaClient {

    @PostMapping("/employee/save")
    String saveEmployeebyName(@RequestBody Employee employee);

}

日志如下:

2023-06-11 19:15:47,694 [main] [INFO] org.springframework.test.context.transaction.TransactionContext - Began transaction (1) for test context [DefaultTestContext@5bf0d49 testClass = TestFeignAsEurekaClient, testInstance = boot.service.TestFeignAsEurekaClient@10683d9d, testMethod = testPostEmployByFeign@TestFeignAsEurekaClient, testException = [null], mergedContextConfiguration = [WebMergedContextConfiguration@5b7a5baa testClass = TestFeignAsEurekaClient, locations = '{}', classes = '{class boot.Application, class boot.Application}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{org.springframework.boot.test.context.SpringBootTestCnotallow=true, server.port=0}', contextCustomizers = set[org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@166fa74d, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@588df31b, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@7fad8c79, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@10b48321], resourceBasePath = 'src/main/webapp', contextLoader = 'org.springframework.boot.test.context.SpringBootContextLoader', parent = [null]], attributes = map['org.springframework.test.context.web.ServletTestExecutionListener.activateListener' -> false]]; transaction manager [org.springframework.jdbc.datasource.DataSourceTransactionManager@693676d]; rollback [true]
2023-06-11 19:15:47,941 [main] [INFO] com.netflix.config.ChainedDynamicProperty - Flipping property: springboot-provider.ribbon.ActiveConnectionsLimit to use NEXT property: niws.loadbalancer.availabilityFilteringRule.activeConnectionsLimit = 2147483647
2023-06-11 19:15:47,962 [main] [INFO] com.netflix.loadbalancer.BaseLoadBalancer - Client: springboot-provider instantiated a LoadBalancer: DynamicServerListLoadBalancer:{NFLoadBalancer:name=springboot-provider,current list of Servers=[],Load balancer stats=Zone stats: {},Server stats: []}ServerList:null
2023-06-11 19:15:47,969 [main] [INFO] com.netflix.loadbalancer.DynamicServerListLoadBalancer - Using serverListUpdater PollingServerListUpdater
2023-06-11 19:15:48,064 [main] [INFO] com.netflix.config.ChainedDynamicProperty - Flipping property: springboot-provider.ribbon.ActiveConnectionsLimit to use NEXT property: niws.loadbalancer.availabilityFilteringRule.activeConnectionsLimit = 2147483647
2023-06-11 19:15:48,064 [main] [INFO] com.netflix.loadbalancer.DynamicServerListLoadBalancer - DynamicServerListLoadBalancer for client springboot-provider initialized: DynamicServerListLoadBalancer:{NFLoadBalancer:name=springboot-provider,current list of Servers=[192.168.31.94:8083],Load balancer stats=Zone stats: {unknown=[Zone:unknown; Instance count:1; Active connections count: 0; Circuit breaker tripped count: 0; Active connections per server: 0.0;]
},Server stats: [[Server:192.168.31.94:8083; Zone:UNKNOWN; Total Requests:0; Successive connection failure:0; Total blackout seconds:0; Last connection made:Thu Jan 01 08:00:00 CST 1970; First connection made: Thu Jan 01 08:00:00 CST 1970; Active Connections:0; total failure count in last (1000) msecs:0; average resp time:0.0; 90 percentile resp time:0.0; 95 percentile resp time:0.0; min resp time:0.0; max resp time:0.0; stddev resp time:0.0]
]}ServerList:com.alibaba.cloud.nacos.ribbon.NacosServerList@24d998ba

注意,這里使用了 OpenFeign,其中用到了 Ribbon 做負載均衡,那就需要考慮到 Ribbon 刷新本地服務列表的時間,從源代碼中看,刷新周期是 30s。如下圖:

圖片圖片

Ribbon 刷新緩存的邏輯參考下面代碼:

public synchronized void start(final UpdateAction updateAction) {
 if (isActive.compareAndSet(false, true)) {
  final Runnable wrapperRunnable = new Runnable() {
   @Override
   public void run() {
    //...
   }
  };

  scheduledFuture = getRefreshExecutor().scheduleWithFixedDelay(
    wrapperRunnable,
    initialDelayMs,
    refreshIntervalMs,//這里定義的是30s
    TimeUnit.MILLISECONDS
  );
 }//...
}

3.優雅發布

前面第一節提到過,優雅發布有兩個要求:優雅上線和優雅下線。

Service Consumer 初始化時會從 Nacos Server 獲取服務列表并更新本地緩存,同時會向 Nacos Server 訂閱服務列表(如果 Nacos Server 上的服務列表發生變化,會主動通知 Service Consumer)。之后會定時(默認間隔 1s )拉取服務列表并更新本地緩存。代碼如下:

//NacosNamingService 類
public List<Instance> selectInstances(String serviceName, String groupName, List<String> clusters, boolean healthy,
  boolean subscribe) throws NacosException {
 
 ServiceInfo serviceInfo;
 String clusterString = StringUtils.join(clusters, ",");
 if (subscribe) {
  serviceInfo = serviceInfoHolder.getServiceInfo(serviceName, groupName, clusterString);
  if (null == serviceInfo) {
   serviceInfo = clientProxy.subscribe(serviceName, groupName, clusterString);
  }
 } else {
  serviceInfo = clientProxy.queryInstancesOfService(serviceName, groupName, clusterString, 0, false);
 }
 return selectInstances(serviceInfo, healthy);
}

在訂閱的代碼中,加入了定時更新服務列表的代碼,如下:

//NamingClientProxyDelegate 類
public ServiceInfo subscribe(String serviceName, String groupName, String clusters) throws NacosException {
 NAMING_LOGGER.info("[SUBSCRIBE-SERVICE] service:{}, group:{}, clusters:{} ", serviceName, groupName, clusters);
 String serviceNameWithGroup = NamingUtils.getGroupedName(serviceName, groupName);
 String serviceKey = ServiceInfo.getKey(serviceNameWithGroup, clusters);
 serviceInfoUpdateService.scheduleUpdateIfAbsent(serviceName, groupName, clusters);
 ServiceInfo result = serviceInfoHolder.getServiceInfoMap().get(serviceKey);
 if (null == result || !isSubscribed(serviceName, groupName, clusters)) {
  result = grpcClientProxy.subscribe(serviceName, groupName, clusters);
 }
 serviceInfoHolder.processServiceInfo(result);
 return result;
}

Nacos Server 會定時(每隔 5s)檢查 Service Provider 是否健康(根據心跳來檢查),如果 15s (默認,可以配置)沒有收到心跳,則會把服務置為不健康,并且通知 Service Consumer。代碼如下:

//UnhealthyInstanceChecker 類
public void doCheck(Client client, Service service, HealthCheckInstancePublishInfo instance) {
 if (instance.isHealthy() && isUnhealthy(service, instance)) {
  changeHealthyStatus(client, service, instance);
 }
}

private void changeHealthyStatus(Client client, Service service, HealthCheckInstancePublishInfo instance) {
 instance.setHealthy(false);

 NotifyCenter.publishEvent(new ServiceEvent.ServiceChangedEvent(service));
 NotifyCenter.publishEvent(new ClientEvent.ClientChangedEvent(client));
 NotifyCenter.publishEvent(new HealthStateChangeTraceEvent(System.currentTimeMillis(),
   service.getNamespace(), service.getGroup(), service.getName(), instance.getIp(), instance.getPort(),
   false, "client_beat"));
}

3.1 優雅上線

優雅上線存在的問題主要在于 Service Provider 注冊到 Nacos 后,服務還沒有完成初始化,請求已經到來。這種情況主要原因是 Service Provider 啟動后立刻注冊 Naocs,而本身提供的接口可能還沒有初始化完成。

這種情況的解決方法是關閉自動注冊:

spring.cloud.nacos.discovery.registerEnabled=false

在服務初始化后使用代碼手動注冊,代碼如下:

Properties setting8 = new Properties();
String serverIp8 = "127.0.0.1:8848";
setting8.put(PropertyKeyConst.SERVER_ADDR, serverIp8);
setting8.put(PropertyKeyConst.USERNAME, "nacos");
setting8.put(PropertyKeyConst.PASSWORD, "nacos");
NamingService inaming8 = NacosFactory.createNamingService(setting7);
inaming8.registerInstance("springboot-provider", "192.168.31.94", 8083);

3.2 優雅下線

對于正常下線,Nacos Server 收到 Provider 發送的下線請求后,會通知訂閱的 Server Consumer,而且 Consumer 也會每隔 1s 去更新本地服務列表,這個過程已經非常接近優雅下線了。

而對于異常下線,Nacos Server 采用心跳檢測機制來更新服務列表。心跳周期是 5s,Nacos Server 如果 15s 沒收到心跳就才會將實例設置為不健康。

3.2.1 正常停服

正常下線的情況下,最優雅的方式是先向 Nacos Server 發送下線通知,發送通知一段時間(比如 5s)后,再停服。比如增加一個 API 接口,服務下線之前增加 preStopHook 函數調用這個 API 接口來實現下線。API 接口示例代碼如下:

@GetMapping(value = "/nacos/deregisterInstance")
public String deregisterInstance() {
 Properties prop = new Properties();
 prop.setProperty("serverAddr", "localhost");
 prop.put(PropertyKeyConst.NAMESPACE, "test");
 NacosNamingService client = new NacosNamingService(prop);
 client.deregisterInstance("springboot-provider", "192.168.31.94", 8083);
 return "success";
}

在使用 Ribbon 的場景,也需要考慮 Ribbon 更新本地緩存服務列表的機制,手動下線后,可以再等待 30s 后關閉服務。

3.2.1 服務故障

對于服務故障的情況,Nacos Server 需要采用心跳來檢測服務在線,如果 15s 沒收到心跳才會將實例設置為不健康,在 30s 沒收到心跳才會把這個服務從列表中刪除。這個時間可以做優化設置:

spring.cloud.nacos.discovery.metadata.preserved.heart.beat.interval=1000 #心跳間隔5s->1s
spring.cloud.nacos.discovery.metadata.preserved.heart.beat.timeout=3000 #超時時間15s->3s
spring.cloud.nacos.discovery.metadata.preserved.ip.delete.timeout=5000 #刪除時間30s->5s

但是,Service Provider 故障情況下,即使做優化配置,也是很難讓 Service Consumer 無感知。

極端情況下,可能 Provider 部分服務已經不能正常提供了,但還是會向 Nacos Server 發送心跳,這種情況可以采用服務本身的健康檢查來通知 Nacos Server 服務下線。

4 總結

無論是哪一款注冊中心,優雅發布要解決的問題都是優雅上線和優雅下線。本文結合 Nacos 的原理講解了 Nacos 的優雅發布,希望對你有所幫助。

責任編輯:武曉燕 來源: 君哥聊技術
相關推薦

2023-06-13 08:25:14

注冊中心Nacos上線

2024-11-01 12:45:28

2015-09-20 18:31:29

阿里云心電數據云上安心

2022-03-10 11:25:51

InnoDB優化

2023-09-27 22:44:18

數據遷移數據庫

2022-01-05 18:21:11

網絡編程web

2024-09-29 08:21:11

2016-09-21 10:18:26

阿里Dubbo性能測試

2024-10-10 14:34:49

2015-10-19 10:30:44

物聯網營銷

2011-07-05 17:05:15

CIO

2023-12-14 17:21:28

前端性能優化

2023-07-10 15:35:46

2012-05-24 14:58:55

開源代碼

2020-07-28 08:36:54

數據安全數據泄露數據

2024-12-04 10:47:26

2022-06-27 14:21:09

Spring語言

2024-04-10 12:22:19

DubboNacos微服務

2018-10-14 16:24:47

工業物聯網IIoT物聯網

2019-07-02 10:22:15

TCP流量數據
點贊
收藏

51CTO技術棧公眾號

在线国产99| 欧美福利视频在线观看| 日本wwww视频| 三区在线观看| 丝袜亚洲精品中文字幕一区| 亚洲欧美在线免费观看| www.com操| 9191在线播放| 成人福利视频在线| 欧美在线视频免费| 黄色三级生活片| 看亚洲a级一级毛片| 午夜在线电影亚洲一区| 高清不卡一区二区三区| 销魂美女一区二区| 欧美激情综合| 亚洲视频网站在线观看| 91精品视频国产| 自由日本语热亚洲人| 中文字幕一区免费在线观看 | 青青青手机在线视频| 粉嫩av国产一区二区三区| 天天免费综合色| 国产又爽又黄ai换脸| 亚洲aⅴ在线观看| 精品一区二区三区免费毛片爱 | 日韩伦理av| 国产片一区二区| 99se婷婷在线视频观看| 无码一区二区三区在线观看| 一区二区三区午夜探花| 国产婷婷97碰碰久久人人蜜臀 | 在线播放一区二区三区| 亚洲欧洲日产国码无码久久99| 男人天堂久久久| 91丝袜美腿高跟国产极品老师| 成人性生交xxxxx网站| 国产精品免费av一区二区| 91精品99| 自拍偷拍亚洲区| 一级黄色片大全| 999精品视频在这里| 欧美日韩精品一区二区三区| 好男人www社区| 欧美日韩尤物久久| 欧美午夜免费电影| 亚洲福利精品视频| 成人在线中文| 欧美日韩免费一区二区三区视频 | 国产在线精品国自产拍免费| 国产精品一区二区三区毛片淫片 | 成人h在线观看| 在线日韩av片| 午夜免费福利在线| 久久婷婷五月综合色丁香| 欧美片网站yy| 天堂在线一区二区三区| 久久9999免费视频| 欧美不卡激情三级在线观看| a级片在线观看视频| 卡通动漫国产精品| 亚洲欧美另类中文字幕| 性猛交娇小69hd| 日韩1区2区| 久久夜色精品国产欧美乱| 天天天天天天天天操| 国产精品theporn| 国模视频一区二区三区| 亚洲 欧美 日韩 在线| 美洲天堂一区二卡三卡四卡视频| 91丝袜美腿美女视频网站| 国产成人精品无码高潮| 成人小视频在线| 欧美日韩精品一区| 国产精品久久久久一区二区国产 | 热久久最新网址| 精品精品导航| 色婷婷综合久久久久中文| 超碰在线97免费| 美女精品久久| 国产视频久久久| 天天操天天操天天操天天操天天操| 欧美激情精品久久久六区热门| 国内精品伊人久久| 亚洲精品无码久久久久| 国产成人精品免费看| 久久久久久久有限公司| 欧美jizz18性欧美| 亚洲一级电影视频| 色综合天天色综合| heyzo欧美激情| 在线播放国产精品| 久久久精品国产sm调教网站| 日韩中文欧美在线| 99re在线国产| 九色国产在线观看| 一区二区在线看| 男女无套免费视频网站动漫| 亚洲大奶少妇| 在线观看视频99| 男女视频免费看| 激情五月激情综合网| 欧美精品欧美精品| 色呦呦在线看| 欧美日韩国产高清一区二区| 国产精品伦子伦| 亚洲成人三区| 国产精品专区第二| 欧美拍拍视频| 欧美亚洲另类小说| 天堂蜜桃91精品| 国产91亚洲精品一区二区三区| 成人免费黄色网页| 亚洲五月六月丁香激情| 一个色综合久久| 欧美人与牛zoz0性行为| 欧美极品第一页| 91欧美日韩麻豆精品| 91麻豆成人久久精品二区三区| 波多野结衣与黑人| 午夜精品久久久久久毛片| 亚洲精品天天看| 日韩少妇高潮抽搐| 成人午夜碰碰视频| av中文字幕av| 国产剧情一区二区在线观看| 在线观看国产成人av片| 国产精品久久久久久99| 国产91精品久久久久久久网曝门| 亚洲一区二区在| 亚洲第一会所001| 亚洲精品二三区| 久久久久无码国产精品| 国产做a爰片久久毛片| 亚洲国产激情一区二区三区| 粉嫩一区二区| 精品中文字幕久久久久久| 国产午夜性春猛交ⅹxxx| 成人动漫中文字幕| 拔插拔插海外华人免费| 果冻天美麻豆一区二区国产| 欧美激情视频在线观看| 国产免费黄色网址| 亚洲视频在线一区| 亚洲无在线观看| 91成年人网站| 海角社区69精品视频| 99re在线播放| 成av人片在线观看www| 精品国产91久久久久久久妲己 | 偷偷www综合久久久久久久| 国产精品中文在线| 麻豆传媒在线完整视频| 欧美精品v国产精品v日韩精品 | 一本色道**综合亚洲精品蜜桃冫| av无码一区二区三区| 亚洲精品专区| 欧美福利精品| 伊人久久高清| 日韩中文字幕视频| 国产av一区二区三区精品| 亚洲日本在线天堂| 91超薄肉色丝袜交足高跟凉鞋| 欧美日韩mv| 精品国产乱码久久久久| 在线看片福利| 最近日韩中文字幕中文| 一区二区视频网站| 亚洲黄色av一区| 大桥未久恸哭の女教师| 蜜桃av一区| 亚洲资源在线网| 一区二区三区国产好| 91国产高清在线| 高清福利在线观看| 在线综合视频播放| 精品91久久久| 国产精品久久精品日日| 国产乱淫av麻豆国产免费| 99视频精品免费观看| 日本不卡免费新一二三区| 久久亚洲精品人成综合网| 欧美夫妻性视频| 黄色影院在线播放| 日韩午夜在线影院| 久久久久久久久久成人| 亚洲色欲色欲www| 中文成人无字幕乱码精品区| 日韩电影在线免费观看| 91视频 - 88av| 色棕色天天综合网| 高清日韩一区| 电影一区电影二区| 欧美大尺度激情区在线播放| 欧美日韩激情视频一区二区三区| 538prom精品视频线放| 亚洲精品视频在线观看免费视频| 中文字幕欧美一| 国产男男chinese网站| 久久精品99久久久| www.中文字幕在线| 午夜国产欧美理论在线播放| 欧美亚洲另类久久综合| 天堂久久av| 国产精品视频免费在线| 天堂中文av在线资源库| www.日本在线播放| 免费在线观看黄色av| 91在线云播放| √天堂资源在线| 欧美亚洲一区| 97av中文字幕| 欧美成人直播| 欧美日产一区二区三区在线观看| 国产精品中文| 国产一区红桃视频| 日韩电影网站| 国产91精品久久久久| 中文字幕在线播放网址| 色999日韩欧美国产| 性xxxx18| 精品国产乱码久久久久久夜甘婷婷| 一级成人免费视频| 91久久精品一区二区二区| 国产一级片视频| 亚洲欧美电影院| 婷婷国产成人精品视频| 国产性色一区二区| 波多野结衣 在线| 99在线热播精品免费| 韩国三级在线看| 激情综合色播五月| www.欧美激情.com| 久久国内精品视频| 国产又大又黄又粗又爽| 日本成人中文字幕在线视频| 久久久免费视频网站| 亚洲免费中文| 欧美成人精品欧美一级乱| 亚洲欧美日韩国产| 狠狠97人人婷婷五月| 国产欧美一级| 日本一区二区黄色| 欧美一区=区| 欧美xxxxx在线视频| 日韩精品福利网| 免费看a级黄色片| 天堂一区二区在线| 久草综合在线观看| 奇米综合一区二区三区精品视频| 午夜免费一区二区| 蜜臀av国产精品久久久久| 亚洲精品20p| 国产毛片精品一区| 成人欧美精品一区二区| 不卡的看片网站| 中文字幕在线免费看线人| 久久久久久日产精品| 懂色av粉嫩av浪潮av| 亚洲色图在线播放| 久草视频中文在线| 午夜欧美一区二区三区在线播放 | 亚洲精品免费在线播放| 岛国毛片在线观看| 午夜欧美在线一二页| 四虎精品永久在线| 欧美亚洲国产一卡| 99久久精品免费看国产交换| 欧美tk丨vk视频| 理论视频在线| 久久久999国产| 久久免费电影| 国产精品18久久久久久麻辣| 欧美美女福利视频| 国产精品国模大尺度私拍| 天美av一区二区三区久久| 日韩中文一区二区三区| 欧美hd在线| 69sex久久精品国产麻豆| 老司机午夜免费精品视频| 特级西西444www| 久久综合色播五月| 99久久99久久精品国产| 婷婷久久综合九色国产成人 | 日韩欧美精品三级| 欧美在线一卡| 久久艳片www.17c.com| 天堂av在线| 成人在线中文字幕| 羞羞色国产精品网站| 欧美性视频在线播放| 亚洲久久一区二区| 中文字幕av不卡在线| 成人黄色综合网站| 免费黄色国产视频| 黄色一区二区在线| 国产精品久久久久久久久久久久久久久久 | 日韩一级裸体免费视频| 99热99re6国产在线播放| 国产精品成熟老女人| 爱爱精品视频| 一区二区视频国产| 免费国产自线拍一欧美视频| 深爱五月综合网| 国产三级精品在线| 国产无遮挡免费视频| 欧美一区二区三区爱爱| 精华区一区二区三区| 久久久久久美女| 欧美专区一区| 一区二区三区国| 日韩vs国产vs欧美| yy6080午夜| 一个色综合av| 91亚洲国产成人久久精品麻豆| 亚洲人成伊人成综合网久久久| 久久99亚洲网美利坚合众国| 91久久精品国产91久久| 久久亚洲国产| 日本免费观看网站| 91在线porny国产在线看| 久久高清无码视频| 6080国产精品一区二区| 在线日本视频| 国产精品99久久99久久久二8| 私拍精品福利视频在线一区| 精品少妇在线视频| 国产91在线观看| 免费网站观看www在线观| 日韩欧美在线番号| 国产一区二区日韩| 亚洲综合电影| 精品欧美日韩在线| 99精品国产99久久久久久福利| 人妻体体内射精一区二区| 亚洲视频资源在线| h狠狠躁死你h高h| 超薄丝袜一区二区| 久久9999免费视频| 大陆极品少妇内射aaaaaa| 国产综合色在线视频区| 国产67194| 日韩视频免费观看高清完整版| av电影高清在线观看| 91亚洲国产成人精品性色| 天天做天天爱天天综合网2021| 色噜噜狠狠一区二区三区狼国成人| 国产精品女主播av| 一级二级三级视频| 久久精品最新地址| 日韩成人18| 成人免费性视频| 97久久精品人人做人人爽50路| 亚洲精品午夜国产va久久成人| 日韩精品在线影院| 成人开心激情| 亚洲在线观看一区| 国产老女人精品毛片久久| 欧美毛片在线观看| 亚洲第一av网| 欧美舌奴丨vk视频| 伊人久久大香线蕉精品| 韩国毛片一区二区三区| 久久久精品91| 日韩精品高清在线| 亚洲爱爱视频| 日本一区二区免费高清视频| 国产suv精品一区二区883| 日本熟妇毛茸茸丰满| 亚洲欧美自拍一区| 91精品麻豆| 毛片在线视频播放| 国产欧美va欧美不卡在线| 国产欧美久久久| 91av视频在线| 99欧美视频| 97香蕉碰碰人妻国产欧美| 色老汉av一区二区三区| 国产日产一区二区| 久久国产精品99久久久久久丝袜| 日本不卡不码高清免费观看| 麻豆视频在线免费看| 亚洲精品国产免费| 欧美性aaa| 人妻夜夜添夜夜无码av| 国产精品天干天干在线综合| 午夜精品久久久久久久96蜜桃| 日本成熟性欧美| 欧美粗暴jizz性欧美20| mm131丰满少妇人体欣赏图| 日韩一区二区免费在线观看| 电影一区二区三区| 水蜜桃在线免费观看| 国产欧美日本一区视频| 免费观看a视频| 国产色综合天天综合网| 一本色道久久综合亚洲精品不| av黄色免费在线观看| 国产丝袜一区二区三区免费视频| 国内不卡的一区二区三区中文字幕|