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

性能優(yōu)化之Hystrix請求合并&自實(shí)現(xiàn)簡化版本

開發(fā) 前端
在業(yè)務(wù)開發(fā)過程中,存在這樣的場景:程序接收到數(shù)據(jù)后,調(diào)用其他接口再將數(shù)據(jù)轉(zhuǎn)發(fā)出去;如果接收一條轉(zhuǎn)發(fā)一條,效率是比較低的,所以一個(gè)思路是先將數(shù)據(jù)緩存起來,緩存到一定數(shù)量后一次性轉(zhuǎn)發(fā)出去。

背景介紹

在業(yè)務(wù)開發(fā)過程中,存在這樣的場景:程序接收到數(shù)據(jù)后,調(diào)用其他接口再將數(shù)據(jù)轉(zhuǎn)發(fā)出去;如果接收一條轉(zhuǎn)發(fā)一條,效率是比較低的,所以一個(gè)思路是先將數(shù)據(jù)緩存起來,緩存到一定數(shù)量后一次性轉(zhuǎn)發(fā)出去。

有優(yōu)點(diǎn)就有缺點(diǎn),需要根據(jù)業(yè)務(wù)場景進(jìn)行考量:

  • 在QPS較小的情況下,達(dá)到閾值的等待時(shí)間較長,造成數(shù)據(jù)延遲較大
  • 在應(yīng)用發(fā)布的時(shí)候,緩存的數(shù)據(jù)存在丟失的可能性
  • 在應(yīng)用非正常down掉的情況下,緩存的數(shù)據(jù)存在丟失的可能性

下面內(nèi)容是對Hystrix請求合并及根據(jù)Hystrix請求合并原理自定義實(shí)現(xiàn)的簡化版本。

Hystrix請求合并

什么是請求合并

Without Collapsing

without collapsing

With Collapsing

with collapsing

請求合并設(shè)計(jì)思路

design

Hystrix使用示例

示例采用Spring-Boot編寫,下面代碼拷貝到工程中可以直接運(yùn)行。

添加依賴

下面是spring與hystrix集成的依賴pom。

pom

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
<version>2.1.6.RELEASE</version>
</dependency>

啟動(dòng)類

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.hystrix.EnableHystrix;

@EnableHystrix
@SpringBootApplication
public class Application {
public static void main(String[] args){
SpringApplication.run(Application.class, args);
}
}

使用示例

HystrixController

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;

@RestController
public class HystrixController {
@Resource
private HystrixService hystrixService;

@RequestMapping("/byid")
public Long byId(Long id) throws InterruptedException, ExecutionException {
Future<Long> future = hystrixService.byId(id);
return future.get();
}
}

HystrixService

import org.springframework.stereotype.Service;

import java.util.List;
import java.util.concurrent.Future;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCollapser;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixProperty;

@Service
public class HystrixService {
@HystrixCollapser(batchMethod="byIds",scope= com.netflix.hystrix.HystrixCollapser.Scope.GLOBAL,
collapserProperties={
@HystrixProperty(name="maxRequestsInBatch",value="10"),
@HystrixProperty(name="timerDelayInMilliseconds",value="1000")
})
public Future<Long> byId(Long id){
return null;
}

@HystrixCommand
public List<Long> byIds(List<Long> ids){
System.out.println(ids);
return ids;
}
}

測試類

發(fā)送請求進(jìn)行驗(yàn)證。

import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class HystrixTest {

public static void main(String[] args) throws Exception{
CloseableHttpClient httpClient = HttpClients.custom().setMaxConnPerRoute(100).build();
String url = "http://localhost:8086/byid?id=";
ExecutorService executorService = Executors.newFixedThreadPool(20);

int requestCount = 20;
for(int i = 0;i < requestCount;i++){
final int id = i;
executorService.execute(new Runnable() {
@Override
public void run(){
try{
HttpGet httpGet = new HttpGet(url+ id);
HttpResponse response = httpClient.execute(httpGet);
System.out.println(response);
}catch (Exception e){
e.printStackTrace();
}
}
});
}

Thread.sleep(1000*10);
executorService.shutdown();
httpClient.close();
}
}

簡化版本實(shí)現(xiàn)

由于Hystrix已不再維護(hù),同時(shí)考慮到Hystrix使用RxJava的學(xué)習(xí)門檻,根據(jù)HystrixCollapser設(shè)計(jì)思路及常見業(yè)務(wù)功能需求實(shí)現(xiàn)了一個(gè)簡化版本。

實(shí)現(xiàn)

RequestCollapserFactory

import java.util.concurrent.*;
import java.util.concurrent.atomic.AtomicInteger;

public class RequestCollapserFactory {
private static RequestCollapserFactory factory;
private static final int MAXBATCHSIZE = 20;
private static final long DELAY = 1000L;
private static final long PERIOD = 500L;
private ConcurrentHashMap<String,RequestCollapser> collapsers;
private ScheduledExecutorService executor;

private RequestCollapserFactory(){
collapsers = new ConcurrentHashMap<>();
ThreadFactory threadFactory = new ThreadFactory() {
final AtomicInteger counter = new AtomicInteger();
@Override
public Thread newThread(Runnable r){
Thread thread = new Thread(r, "RequestCollapserTimer-" + counter.incrementAndGet());
thread.setDaemon(true);
return thread;
}
};
executor = new ScheduledThreadPoolExecutor(Runtime.getRuntime().availableProcessors(), threadFactory);
}

public static RequestCollapserFactory getInstance(){
if(factory != null){
return factory;
}
synchronized (RequestCollapserFactory.class){
if(factory != null){
return factory;
}
factory = new RequestCollapserFactory();
}
return factory;
}

public RequestCollapser getRequestCollapser(String key,RequestBatch requestBatch){
return getRequestCollapser(key,requestBatch,MAXBATCHSIZE,DELAY,PERIOD);
}
public RequestCollapser getRequestCollapser(String key,RequestBatch requestBatch,int maxBatchSize){
return getRequestCollapser(key,requestBatch,maxBatchSize,DELAY,PERIOD);
}
public RequestCollapser getRequestCollapser(String key,RequestBatch requestBatch,int maxBatchSize,long delay, long period){
RequestCollapser collapser = collapsers.get(key);
if(collapser != null){
return collapser;
}

synchronized (collapsers){
collapser = collapsers.get(key);
if(collapser != null){
return collapser;
}
collapser = new RequestCollapser(requestBatch,maxBatchSize,delay,period,executor);
collapsers.put(key,collapser);
return collapser;
}
}
}

RequestCollapser

import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;

public class RequestCollapser {
private int maxBatchSize;
private long delay;
private long period;
private LinkedBlockingQueue<Object> queue = new LinkedBlockingQueue();
private ScheduledExecutorService executor;
private RequestBatch requestBatch;
private AtomicBoolean timerscheduled = new AtomicBoolean();
protected RequestCollapser(RequestBatch requestBatch,int maxBatchSize,long delay,long period,ScheduledExecutorService executor){
if(requestBatch == null){
throw new IllegalArgumentException("requestBatch can not be null");
}
this.maxBatchSize = maxBatchSize;
this.delay = delay;
this.period = period;
this.executor = executor;
this.requestBatch = requestBatch;
}

public List<Object> submitRequest(Object obj,boolean ifFullThenBatchExecute){
if(timerscheduled.compareAndSet(false,true)){
this.startSchedule();
}
List<Object> objectList = null;
synchronized (queue){
if(obj instanceof Collection){
queue.addAll((Collection)obj);
}else {
queue.offer(obj);
}

if(queue.size() >= this.maxBatchSize){
objectList = new LinkedList<>();
queue.drainTo(objectList);
}
}

if(!ifFullThenBatchExecute){
return objectList;
}

this.doBatch(objectList);
return null;
}

private boolean doBatch(List<Object> objectList){
if(objectList == null){
return true;
}
try{
return requestBatch.batch(objectList);
}catch (Throwable t){
t.printStackTrace();
}
return false;
}

private void startSchedule(){
Runnable r = new Runnable() {
@Override
public void run(){
List<Object> objectList = null;
synchronized (queue){
if(queue.size() > 0) {
objectList = new LinkedList<>();
queue.drainTo(objectList);
}
}
doBatch(objectList);
}
};

this.executor.scheduleAtFixedRate(r,this.delay,this.period, TimeUnit.MILLISECONDS);
}
}

RequestBatch

import java.util.List;

public interface RequestBatch {
boolean batch(List<Object> objectList);
}

驗(yàn)證測試

RequestCollapserTest

import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicInteger;

public class RequestCollapserTest {
private static AtomicInteger counter = new AtomicInteger();
private static long delay = 1;
private static long period = 1;
private static int maxBatchSize = 20;
private static int requestCount = 50000;
private static RequestCollapserFactory factory = RequestCollapserFactory.getInstance();
private static RequestBatch requestBatch = new RequestBatch() {
@Override
public boolean batch(List<Object> objectList){
int size = objectList.size();
counter.addAndGet(size);
System.out.println(counter + ":::::" + size + ":::::" + objectList);
return true;
}
};

public static void main(String[] args) throws Exception{
//sync();
async();
}

public static void async() throws Exception{
ExecutorService executorService = Executors.newFixedThreadPool(20);
CountDownLatch countDownLatch = new CountDownLatch(requestCount);
for(int i = 0;i < requestCount;i++){
final int id = i;
executorService.execute(new Runnable() {
@Override
public void run(){
try{
RequestCollapser requestCollapser =
factory.getRequestCollapser("1",requestBatch,maxBatchSize,delay,period);
requestCollapser.submitRequest(id,true);
}catch (Exception e){
e.printStackTrace();
}
countDownLatch.countDown();
}
});
}

executorService.shutdown();
countDownLatch.await();
Thread.sleep(1000);
System.out.println(counter.get());
}

public static void sync() throws Exception{
for(int i = 0;i < requestCount;i++){
final int id = i;
RequestCollapser requestCollapser =
factory.getRequestCollapser("1",requestBatch,maxBatchSize,delay,period);
requestCollapser.submitRequest(id,true);
}
Thread.sleep(1000);
System.out.println(counter.get());
}
}


責(zé)任編輯:武曉燕 來源: 今日頭條
相關(guān)推薦

2023-02-03 15:16:42

SpringHystrix

2017-12-01 08:54:18

SpringCloudHystrix

2023-11-28 12:49:01

AI訓(xùn)練

2017-04-03 21:52:30

隔離線程池分布式

2021-07-29 14:20:34

網(wǎng)絡(luò)優(yōu)化移動(dòng)互聯(lián)網(wǎng)數(shù)據(jù)存儲(chǔ)

2010-05-17 15:50:06

2021-11-29 11:13:45

服務(wù)器網(wǎng)絡(luò)性能

2022-02-16 14:10:51

服務(wù)器性能優(yōu)化Linux

2011-02-13 09:37:55

ASP.NET

2009-12-17 15:59:44

VS2010簡化版

2018-01-09 16:56:32

數(shù)據(jù)庫OracleSQL優(yōu)化

2019-12-13 10:25:08

Android性能優(yōu)化啟動(dòng)優(yōu)化

2009-06-30 11:23:02

性能優(yōu)化

2015-03-16 14:09:33

GoogleUbuntuDocker

2009-06-01 09:04:15

Windows 7微軟操作系統(tǒng)

2025-01-20 09:09:59

2023-07-19 12:24:48

C++constexpr?語句

2011-07-11 15:26:49

性能優(yōu)化算法

2013-02-20 14:32:37

Android開發(fā)性能

2010-08-04 13:30:07

Visual Stud
點(diǎn)贊
收藏

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

亚洲成人77777| 国产极品视频在线观看| 青草影视电视剧免费播放在线观看| 久久精品国产一区二区三| 日韩有码片在线观看| 欧美人与性动交α欧美精品| а√天堂8资源在线| 久久综合久久久久88| 国产精品爽爽爽爽爽爽在线观看| 欧美日韩色视频| 久久国际精品| 色综合网色综合| 亚洲第一精品区| 婷婷视频在线观看| 久久精品999| 97精品国产91久久久久久| 99久久精品免费视频| 欧美精品影院| 欧洲一区二区av| 美女扒开大腿让男人桶| 日本视频在线观看| 91丨九色丨蝌蚪丨老版| 亚洲尤物视频网| 亚洲av人无码激艳猛片服务器| 欧美久久视频| 色噜噜久久综合伊人一本| 欧美午夜精品一区二区| 精品久久久网| 色香蕉成人二区免费| 国产片侵犯亲女视频播放| 国产视频精选在线| www.欧美.com| 91视频国产精品| 成人一级免费视频| 亚洲久久一区| 欧美成人免费va影院高清| 美国美女黄色片| 日本福利一区| 亚洲精品久久久一区二区三区| 四川一级毛毛片| 日韩精品一级毛片在线播放| 91福利视频久久久久| 成人毛片视频网站| 国产不卡123| 午夜亚洲国产au精品一区二区| 黄色一级片网址| 五月天婷婷在线视频| 久久久久久毛片| 麻豆视频成人| 欧美日本韩国一区二区| 波多野结衣视频一区| 国产精品免费区二区三区观看| 国产成年妇视频| 国产自产视频一区二区三区| 国产美女被下药99| 中文字幕欧美人妻精品| 日韩不卡一二三区| 国产精品96久久久久久| 亚洲av无码精品一区二区| 亚洲女同在线| 欧美又大又硬又粗bbbbb| 91在线看视频| 美女诱惑黄网站一区| 日韩av黄色在线观看| 无码人妻精品一区二区三区蜜桃91 | 少妇真人直播免费视频| 婷婷成人影院| 亚洲午夜久久久久久久| jizz日本在线播放| 91成人观看| 色综合视频一区中文字幕| 国产在线欧美在线| 亚洲永久免费精品| 国产精品久久久91| 一级片在线免费观看视频| 紧缚奴在线一区二区三区| 96国产粉嫩美女| 理论片中文字幕| 久久婷婷国产综合精品青草| 日韩影片在线播放| 日本精品一区二区三区在线播放| 18成人在线视频| 久久男人资源站| av日韩电影| 欧美日韩精品系列| 一个人看的视频www| 国产一级成人av| 亚洲午夜av久久乱码| 东方av正在进入| 一区二区三区四区五区在线| 国产精品视频内| www.久久久久久久久久| xfplay精品久久| 一区精品视频| sm性调教片在线观看| 日本高清无吗v一区| 91插插插影院| 色天下一区二区三区| 中文字幕日韩高清| 久久艹精品视频| 日韩精品一级二级| 动漫一区二区在线| 91在线不卡| 亚洲在线免费播放| 五月天激情视频在线观看| 在线精品自拍| 国产亚洲人成a一在线v站| 久久久99精品| 美女视频一区在线观看| 久久99精品国产99久久| 精品美女在线观看视频在线观看 | 91麻豆精品秘密| 国产av不卡一区二区| 热三久草你在线| 欧美一级高清大全免费观看| 美女被到爽高潮视频| 欧美日韩免费观看一区=区三区| 国产精品成人aaaaa网站| 黄片毛片在线看| 国产精品久久三区| 国产精品69页| 美女主播精品视频一二三四| www.日韩不卡电影av| 日本高清不卡码| 成人av电影在线观看| 欧美aaa在线观看| 国产精品蜜月aⅴ在线| 亚洲免费视频观看| 国产一级二级三级| 国产精品综合一区二区三区| 日本不卡在线观看| 手机av在线| 欧美va日韩va| 亚洲国产精品免费在线观看| 蜜桃视频一区二区| 日本视频精品一区| 忘忧草在线影院两性视频| 精品欧美一区二区三区精品久久| 国产又色又爽又高潮免费 | 欧美在线a视频| 成人久久一区| 国产精品久久久久久av| 男人天堂网在线观看| 欧美日韩一区免费| 女人被狂躁c到高潮| 国产日韩高清一区二区三区在线| www国产亚洲精品| 色女人在线视频| 日韩女优电影在线观看| 九九视频在线观看| 国产成人久久精品77777最新版本| 7777在线视频| 欧美a级大片在线| 久久91精品国产91久久跳| 国产精品无码一区二区桃花视频| 国产精品久久777777| 在线视频观看一区二区| 欧美96在线丨欧| 99视频免费观看蜜桃视频| 女人黄色免费在线观看| 精品卡一卡二卡三卡四在线| 久久精品国产av一区二区三区| 成熟亚洲日本毛茸茸凸凹| 精品这里只有精品| 久草成人在线| 国产一区二区在线免费| h视频在线免费观看| 日韩精品中文字幕在线一区| 久久免费少妇高潮99精品| 成人免费视频视频| 黄色一级一级片| 日韩免费av| 亚洲伊人一本大道中文字幕| а√天堂中文在线资源8| 日韩精品久久久久久福利| 国产一级片av| 亚洲色图.com| 亚洲精品乱码久久久久久蜜桃图片| 国产日韩欧美| 一区视频二区视频| jizz性欧美23| 国产精品久久久久久久久久小说| 日本在线免费网| 亚洲精品在线免费观看视频| 性色av免费观看| 亚洲天堂av一区| 亚洲综合自拍网| 久久精品国内一区二区三区| 精品视频在线观看一区| 国产精品午夜一区二区三区| 亚洲自拍中文字幕| 亚洲精品88| 久久精品视频中文字幕| 天天躁日日躁狠狠躁喷水| 欧美日韩视频第一区| 精品视频久久久久| 国产精品传媒视频| 999精品免费视频| 久久国产精品免费| 久在线观看视频| 四季av在线一区二区三区| 国产伦精品一区二区| 欧美日韩国产网站| 97高清免费视频| 黄色精品在线观看| 亚洲欧洲免费视频| 国产人妖一区二区三区| 一本一道波多野结衣一区二区| 久久国产波多野结衣| 久久久久久久综合色一本| 成人一区二区三区仙踪林| 美女性感视频久久| 欧美aⅴ在线观看| 国产精品v欧美精品v日本精品动漫| 欧美日韩一区在线观看视频| 成人高潮视频| 亚洲free性xxxx护士hd| 欧美影视资讯| 日本三级久久久| 日本а中文在线天堂| 欧美裸身视频免费观看| 麻豆传媒在线完整视频| 国产亚洲欧美另类中文| 免费毛片在线| 亚洲精品久久在线| 四虎永久在线精品免费网址| 欧美一区二区高清| 97人妻精品一区二区三区动漫| 日韩欧美在线免费观看| 亚洲国产综合久久| 亚洲综合一二三区| 日韩a级片在线观看| 亚洲国产精品ⅴa在线观看| 中文字幕一区二区人妻在线不卡 | 欧美私人免费视频| 永久免费无码av网站在线观看| 一区二区三区免费看视频| 999精品视频在线观看播放| 国产精品网站在线观看| 五月天精品视频| 国产偷国产偷亚洲高清人白洁 | 亚洲a级精品| 久久国产精品久久精品国产| 精品人人人人| 精品无人区一区二区三区| 女同一区二区三区| 久久99欧美| 亚洲免费成人av在线| 久久久精品有限公司| 欧美挤奶吃奶水xxxxx| 国产午夜精品一区| 欧美人妖在线观看| 免费成人看片网址| 国产伦精品一区二区三区千人斩 | 二区三区在线观看| 久热精品视频在线免费观看| 超碰在线caoporn| 欧美猛交ⅹxxx乱大交视频| 久久av色综合| 97免费视频在线播放| 在线天堂资源| 国产精品com| 婷婷成人av| 999日本视频| 激情小说一区| 奇米精品在线| 888久久久| 老子影院午夜伦不卡大全| 亚洲三级电影在线观看| 国产免费毛卡片| 男男成人高潮片免费网站| www.51色.com| 成人高清av在线| 亚洲精品国产91| 中文字幕视频一区二区三区久| 一级黄色录像视频| 香蕉影视欧美成人| 91视频在线视频| 日韩三级中文字幕| 亚洲av片一区二区三区| 国产亚洲视频在线| 伊人电影在线观看| 欧美一区二区色| 日本免费一区二区三区等视频| 99精品国产高清在线观看| 欧美自拍一区| 中文一区一区三区免费| 99精品国产在热久久| 亚洲欧美国产日韩综合| 成人激情免费电影网址| 女人十八毛片嫩草av| 亚洲综合免费观看高清完整版| 天堂中文在线网| 777午夜精品免费视频| 日韩大片b站免费观看直播| 久久综合久久美利坚合众国| av中文字幕在线观看第一页| 国产精品网红直播| 国产精品成人自拍| 亚洲bbw性色大片| 国产精品a久久久久| 成人免费无码av| 成人综合婷婷国产精品久久免费| 影音先锋制服丝袜| 午夜精品123| 99精品在线视频观看| 亚洲人午夜精品免费| 波多野结衣中文在线| 成人国产精品一区二区| 美女久久99| 亚洲 自拍 另类小说综合图区| 韩国成人精品a∨在线观看| 在线不卡av电影| 亚洲国产色一区| 精品国产区一区二| 中文欧美在线视频| 性欧美freesex顶级少妇| 99久久99| 在线国产一区二区| 色片在线免费观看| 国产三级一区二区三区| 久久久精品免费看| 日韩一区二区免费视频| 一级毛片视频在线| 国产精品av网站| 国产一区二区亚洲| 69堂免费视频| av福利精品导航| 久久伊人成人网| 日韩一区二区在线看片| 黄色一级片在线观看| 91精品久久久久久久久不口人| 俺要去色综合狠狠| 99视频在线免费| 国产午夜精品理论片a级大结局| 亚洲精品1区2区3区| 亚洲黄色片网站| 女人高潮被爽到呻吟在线观看| 国产精品亚洲一区| 亚洲激情午夜| 给我免费观看片在线电影的| 天天亚洲美女在线视频| 天天av天天翘| 91精品国产99| 尤物tv在线精品| 成人性视频欧美一区二区三区| 久久精品日韩一区二区三区| 99久久久久久久久| 在线精品国产欧美| 日韩毛片网站| 九九久久九九久久| 成人小视频免费观看| 日韩精品人妻中文字幕| 亚洲美女久久久| 黄色精品视频| 日韩最新中文字幕| 国产a区久久久| 日韩欧美三级在线观看| 亚洲精品自拍视频| 日韩美女在线看免费观看| 亚洲一卡二卡区| 国产成人午夜99999| 欧美成人aaaaⅴ片在线看| 日韩高清av在线| 成人高清一区| 久久免费一级片| 91女神在线视频| 中文字幕a级片| 久久99视频免费| 群体交乱之放荡娇妻一区二区| 已婚少妇美妙人妻系列| 中文字幕日韩一区二区| 亚洲精品国产手机| 日韩美女主播视频| 91嫩草亚洲精品| aaa黄色大片| 在线视频亚洲一区| 51xtv成人影院| 欧美不卡福利| 国产真实乱偷精品视频免| 国产天堂av在线| 精品亚洲一区二区| 不卡的国产精品| ww国产内射精品后入国产| 国产精品视频一二| www.亚洲天堂.com| 国产不卡一区二区在线播放| 亚洲区综合中文字幕日日| 亚洲久久久久久| 欧美日韩三级视频| 538在线精品| 一级特黄录像免费播放全99| 成人动漫在线一区| 一本一道精品欧美中文字幕| 久久久久久中文| 日韩极品一区| 欧美做受喷浆在线观看| 欧美一区二区三区四区五区| 中文字幕在线中文字幕在线中三区| 国产免费一区二区三区四在线播放 |