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

分布式系統中接口的冪等性

開發 前端 分布式
支付系統將這些支付信息生成對應的支付訂單并落庫,同時針對每筆還款記錄生產一個消息信息到消息系統,消息的消費者就是訂單系統。訂單系統接受到消息后去結算當前用戶的金額清算:先還本金,本金還清再還滯納金,都還清則該筆訂單結清并提升可借貸額度。

業務場景 #

某公司有個借貸的項目,具體業務類似于阿里的螞蟻借唄,用戶在平臺上借款,然后規定一個到期時間,在該時間內用戶需將借款還清并收取一定的手續費,如果規定時間逾期未還上,則會產生滯納金。

[[375620]]

用戶發起借款因此會產生一筆借款訂單,用戶可通過支付寶或在系統中綁定銀行卡到期自動扣款等方式進行還款。還款流程都走支付系統,因此用戶還款是否逾期以及逾期天數、逾期費等都通過系統來計算。

 

分布式系統中接口的冪等性

但是在做訂單系統的時候,遇到這樣一個業務場景,由于業務原因允許用戶通過線下支付寶還款,即我們提供一個公司官方的支付寶二維碼,用戶掃碼還款,然后財務不定期的去拉取該支付寶賬戶下的還款清單并生成規范化的Excel表格錄入到支付系統。

支付系統將這些支付信息生成對應的支付訂單并落庫,同時針對每筆還款記錄生產一個消息信息到消息系統,消息的消費者就是訂單系統。訂單系統接受到消息后去結算當前用戶的金額清算:先還本金,本金還清再還滯納金,都還清則該筆訂單結清并提升可借貸額度,……,整個流程大致如下:

 

分布式系統中接口的冪等性

從上面的流程描述可以知道,相當于原來線上的支付現在轉移到線下進行,這會產生一個問題:支付結算的不及時。例如用戶的訂單在今天19-05-27到期,但是用戶在19-05-26還清,財務在19-05-27甚至更晚的時候從支付寶拉取清單錄入支付系統。這樣就造成了實際上用戶是未逾期還清借款而我們這邊卻記錄的是用戶未還清且產生了滯納金。

當然以上的是業務范疇的問題,我們今天要說的是支付系統發送消息到訂單系統的環節中的一個問題。大家都知道為了避免消息丟失或者訂單系統處理異常或者網絡問題等問題,我們設計消息系統的時候都需要考慮消息持久化和消息的失敗重試機制。

 

分布式系統中接口的冪等性

對于重試機制,假如訂單系統消費了消息,但是由于網絡等問題消息系統未收到反饋是否已成功處理。這時消息系統會根據配置的規則隔段時間就 retry 一次。你 retry 一次沒錯,是為了保證系統的處理正常性,但是如果這時網絡恢復正常,我第一次收到的消息成功處理了,這時我又收到了一條消息,如果沒有做一些防護措施,會產生如下情況:用戶付款一次但是訂單系統計算了兩次,這樣會造成財務賬單異常對不上賬的情況發生。那就可能用戶笑呵呵老板哭兮兮了。

接口冪等性 #

為了防止上述情況的發生,我們需要提供一個防護措施,對于同一筆支付信息如果我其中某一次處理成功了,我雖然又接收到了消息,但是這時我不處理了,即保證接口的 冪等性 。

維基百科上的定義:

  • 冪等(idempotent、idempotence)是一個數學與計算機學概念,常見于抽象代數中。

在編程中一個冪等操作的特點是其任意多次執行所產生的影響均與一次執行的影響相同。冪等函數,或冪等方法,是指可以使用相同參數重復執行,并能獲得相同結果的函數。這些函數不會影響系統狀態,也不用擔心重復執行會對系統造成改變。例如,“setTrue()”函數就是一個冪等函數,無論多次執行,其結果都是一樣的,更復雜的操作冪等保證是利用唯一交易號(流水號)實現.

任意多次執行所產生的影響均與一次執行的影響相同,這是冪等性的核心特點。其實在我們編程中主要操作就是CURD,其中讀取(Retrieve)操作和刪除(Delete)操作是天然冪等的,受影響的就是創建(Create)、更新(Update)。

對于業務中需要考慮冪等性的地方一般都是接口的重復請求,重復請求是指同一個請求因為某些原因被多次提交。導致這個情況會有幾種場景:

  • 前端重復提交 :提交訂單,用戶快速重復點擊多次,造成后端生成多個內容重復的訂單。
  • 接口超時重試 :對于給第三方調用的接口,為了防止網絡抖動或其他原因造成請求丟失,這樣的接口一般都會設計成超時重試多次。
  • 消息重復消費 :MQ消息中間件,消息重復消費。

對于一些業務場景影響比較大的,接口的冪等性是個必須要考慮的問題,例如金錢的交易方面的接口。否則一個錯誤的、考慮不周的接口可能會給公司帶來巨額的金錢損失,那么背鍋的肯定是程序員自己了。

冪等性實現方式 #

對于和web端交互的接口,我們可以在前端攔截一部分,例如防止表單重復提交,按鈕置灰、隱藏、不可點擊等方式。

但是前端做控制實際效益不是很高,懂點技術的都會模擬請求調用你的服務,所以安全的策略還是需要從后端的接口層來做。

那么后端要實現分布式接口的冪等性有哪些策略方式呢?主要可以從以下幾個方面來考慮實現:

Token機制 #

針對前端重復連續多次點擊的情況,例如用戶購物提交訂單,提交訂單的接口就可以通過 Token 的機制實現防止重復提交。

 

分布式系統中接口的冪等性

主要流程就是:

  1. 服務端提供了發送token的接口。我們在分析業務的時候,哪些業務是存在冪等問題的,就必須在執行業務前,先去獲取token,服務器會把token保存到redis中。(微服務肯定是分布式了,如果單機就適用jvm緩存)。
  2. 然后調用業務接口請求時,把token攜帶過去,一般放在請求頭部。
  3. 服務器判斷token是否存在redis中,存在表示第一次請求,這時把redis中的token刪除,繼續執行業務。
  4. 如果判斷token不存在redis中,就表示是重復操作,直接返回重復標記給client,這樣就保證了業務代碼,不被重復執行。

數據庫去重表 #

往去重表里插入數據的時候,利用數據庫的唯一索引特性,保證唯一的邏輯。唯一序列號可以是一個字段,例如訂單的訂單號,也可以是多字段的唯一性組合。例如設計如下的數據庫表。

 

  1. CREATE TABLE `t_idempotent` ( 
  2.   `id` int(11) NOT NULL COMMENT 'ID'
  3.   `serial_no` varchar(255)  NOT NULL COMMENT '唯一序列號'
  4.   `source_type` varchar(255)  NOT NULL COMMENT '資源類型'
  5.   `status` int(4) DEFAULT NULL COMMENT '狀態'
  6.   `remark` varchar(255)  NOT NULL COMMENT '備注'
  7.   `create_by` bigint(20) DEFAULT NULL COMMENT '創建人'
  8.   `create_time` datetime DEFAULT NULL COMMENT '創建時間'
  9.   `modify_by` bigint(20) DEFAULT NULL COMMENT '修改人'
  10.   `modify_time` datetime DEFAULT NULL COMMENT '修改時間'
  11.   PRIMARY KEY (`id`) 
  12.   UNIQUE KEY `key_s` (`serial_no`,`source_type`, `remark`)  COMMENT '保證業務唯一性' 
  13. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='冪等性校驗表'

我們注意看如下這幾個關鍵性字段,

  1. @IdempotentKey 

由于數據建立了 serial_no , source_type , remark 三個字段組合構成的唯一索引,所以可以通過這個來去重達到接口的冪等性,具體的代碼設計如下,

 

  1. public class PaymentOrderReq { 
  2.     /** 
  3.      * 支付寶流水號 
  4.      */ 
  5.     @IdempotentKey(order=1) 
  6.     private String alipayNo; 
  7.     /** 
  8.      * 支付訂單ID 
  9.      */ 
  10.     @IdempotentKey(order=2) 
  11.     private String paymentOrderNo; 
  12.     /** 
  13.      * 支付金額 
  14.      */ 
  15.     private Long amount; 

因為支付寶流水號和訂單號在系統中是唯一的,所以唯一序列號可由他們組合 MD5 生成,具體的生成方式如下:

 

  1. private void getIdempotentKeys(Object keySource, Idempotent idempotent) { 
  2.     TreeMap<Integer, Object> keyMap = new TreeMap<Integer, Object>(); 
  3.     for (Field field : keySource.getClass().getDeclaredFields()) { 
  4.         if (field.isAnnotationPresent(IdempotentKey.class)) { 
  5.             try { 
  6.                 field.setAccessible(true); 
  7.                 keyMap.put(field.getAnnotation(IdempotentKey.class).order(), 
  8.                         field.get(keySource)); 
  9.             } catch (IllegalArgumentException | IllegalAccessException e) { 
  10.                 logger.error("", e); 
  11.                 return
  12.             } 
  13.         } 
  14.     } 
  15.     generateIdempotentKey(idempotent, keyMap.values().toArray()); 

生成冪等Key,如果有多個key可以通過分隔符 "|" 連接,

 

  1. private void generateIdempotentKey(Idempotent idempotent, Object... keyObj) { 
  2.      if (keyObj.length == 0) { 
  3.          logger.info("idempotentkey is empty,{}", keyObj); 
  4.          return
  5.      } 
  6.      StringBuilder serialNo= new StringBuilder(); 
  7.      for (Object key : keyObj) { 
  8.          serialNo.append(key.toString()).append("|"); 
  9.      } 
  10.      idempotent.setRemark(serialNo.toString()); 
  11.      idempotent.setSerialNo(md5(serialNo)); 
  12.  } 

一切準備就緒,則可對外提供冪等性校驗的接口方法,接口方法為:

 

  1. public <T> void idempotentCheck(IdempotentTypeEnum idempotentType, T keyObj) throws IdempotentException { 
  2.     Idempotent idempotent = new Idempotent(); 
  3.     getIdempotentKeys(keyObj, idempotent ); 
  4.     if (StringUtils.isBlank(idempotent.getSerialNo())) { 
  5.         throw new ServiceException("fail to get idempotentkey"); 
  6.     } 
  7.     idempotentEvent.setSourceType(idempotentType.name()); 
  8.     try { 
  9.         idempotentMapper.saveIdempotent(idempotent); 
  10.     } catch (DuplicateKeyException e) { 
  11.         logger.error("idempotent check fail", e); 
  12.         throw new IdempotentException(idempotent); 
  13.     } 

當然這個接口的方法具體在項目中合理的使用就看項目要求了,可以通過 @Autowire 注解注入到需要使用的地方,但是缺點就是每個地方都需要調用。我個人推薦的是自定義一個注解,在需要冪等性保證的接口上加上該注解,然后通過攔截器方法攔截使用。這樣簡單便不會造成代碼侵入和污染。

另外,使用數據庫防重表的方式它有個嚴重的缺點,那就是系統容錯性不高,如果冪等表所在的數據庫連接異常或所在的服務器異常,則會導致整個系統冪等性校驗出問題。如果做數據庫備份來防止這種情況,又需要額外忙碌一通了啊。

Redis實現 #

上面介紹過防重表的設計方式和偽代碼,也說過它的一個很明顯的缺點。所以我們另外介紹一個Redis的實現方式。

Redis實現的方式就是將唯一序列號作為Key,唯一序列號的生成方式和上面介紹的防重表的一樣,value可以是你想填的任何信息。唯一序列號也可以是一個字段,例如訂單的訂單號,也可以是多字段的唯一性組合。當然這里需要設置一個 key 的過期時間,否則 Redis 中會存在過多的 key。具體校驗流程如下圖所示,實現代碼也很簡單這里就不寫了。

 

分布式系統中接口的冪等性

由于企業如果考慮在項目中使用 Redis,因為大部分會拿它作為緩存來使用,那么一般都會是集群的方式出現,至少肯定也會部署兩臺Redis服務器。所以我們使用Redis來實現接口的冪等性是最適合不過的了。

狀態機 #

對于很多業務是有一個業務流轉狀態的,每個狀態都有前置狀態和后置狀態,以及最后的結束狀態。例如流程的待審批,審批中,駁回,重新發起,審批通過,審批拒絕。訂單的待提交,待支付,已支付,取消。

以訂單為例,已支付的狀態的前置狀態只能是待支付,而取消狀態的前置狀態只能是待支付,通過這種狀態機的流轉我們就可以控制請求的冪等。

 

  1. public enum OrderStatusEnum { 
  2.     UN_SUBMIT(0, 0, "待提交"), 
  3.     UN_PADING(0, 1, "待支付"), 
  4.     PAYED(1, 2, "已支付待發貨"), 
  5.     DELIVERING(2, 3, "已發貨"), 
  6.     COMPLETE(3, 4, "已完成"), 
  7.     CANCEL(0, 5, "已取消"), 
  8.     ; 
  9.     //前置狀態 
  10.     private int preStatus; 
  11.     //狀態值 
  12.     private int status; 
  13.     //狀態描述 
  14.     private String desc
  15.     OrderStatusEnum(int preStatus, int status, String desc) { 
  16.         this.preStatus = preStatus; 
  17.         this.status = status; 
  18.         this.desc = desc
  19.     } 
  20.     //... 

假設當前狀態是已支付,這時候如果支付接口又接收到了支付請求,則會拋異常或拒絕此次處理。

總結

通過以上的了解我們可以知道,針對不同的業務場景我們需要靈活的選擇冪等性的實現方式。

例如防止類似于前端重復提交、重復下單的場景就可以通過 Token 的機制實現,而那些有狀態前置和后置轉換的場景則可以通過狀態機的方式實現冪等性,對于那些重復消費和接口重試的場景則使用數據庫唯一索引的方式實現更合理。

責任編輯:未麗燕 來源: segmentfault.com
相關推薦

2023-03-07 08:19:16

接口冪等性SpringBoot

2024-07-03 11:59:40

2025-02-14 14:22:40

2025-07-10 02:00:00

2023-10-26 07:32:42

2025-10-29 01:21:00

2025-09-02 07:16:37

2021-12-01 10:13:48

場景分布式并發

2022-01-12 09:01:24

分布式系統容錯服務

2021-01-18 14:34:59

冪等性接口客戶端

2021-07-28 08:39:25

分布式架構系統

2023-05-12 08:23:03

分布式系統網絡

2024-03-13 15:18:00

接口冪等性高并發

2024-10-18 08:00:00

分布式系統背壓數據庫

2023-07-19 08:22:01

分布式系統數據

2023-02-11 00:04:17

分布式系統安全

2018-12-14 10:06:22

緩存分布式系統

2025-06-10 08:02:15

2023-05-29 14:07:00

Zuul網關系統

2020-07-15 08:14:12

高并發
點贊
收藏

51CTO技術棧公眾號

国产欧美精品日韩区二区麻豆天美| 色欧美自拍视频| 婷婷综合五月天| 欧美日韩国产精品一卡| 在线观看中文字幕码| 久久久久免费av| 亚洲精品动漫久久久久| 天天综合网日韩| 激情影院在线| 久久精品欧美一区二区三区不卡| 成人黄色大片在线免费观看| 日本天堂网在线观看| 欧美午夜精彩| 亚洲成人精品久久久| 91看片在线免费观看| 久草在线资源站资源站| 国产精品美女久久久久久久久久久| av一区二区在线看| 波多野结衣高清视频| 国内在线观看一区二区三区| 在线看国产精品| 第一页在线视频| 久久国产三级| 色综合久久久久综合体| av在线com| 午夜免费视频在线国产| jiyouzz国产精品久久| 91精品在线观| 中文字幕人成人乱码亚洲电影| 亚洲黄网站黄| 欧美精品videos| 一本一本久久a久久| 国产不卡一二三区| 亚洲精品成人av| 欧洲熟妇的性久久久久久| 亚洲成人精品综合在线| 欧美在线看片a免费观看| 国产真人做爰毛片视频直播| 99视频免费在线观看| 国产精品欧美极品| 欧美久久在线| 日韩在线无毛| 91一区二区在线| 国产视频99| 蜜桃91麻豆精品一二三区| 国产麻豆视频一区| 国产精品日本精品| 麻豆精品久久久久久久99蜜桃| 影音先锋中文字幕一区| 欧美丰满少妇xxxx| 久久久久久久久久久网| 伊人情人综合网| 麻豆乱码国产一区二区三区| 三上悠亚作品在线观看| 99精品在线观看| 日韩中文在线中文网三级| 欧美丰满美乳xxⅹ高潮www| 国产精品欧美在线观看| 亚洲一二在线观看| 国精产品一区一区| 99久久99久久精品国产片果冰| 中文一区二区视频| 欧美爱爱免费视频| 国产精品a级| 欧美激情一区二区三区高清视频| 国产一级av毛片| 激情丁香综合| 欧美又大又硬又粗bbbbb| 51国产偷自视频区视频| 日韩电影在线看| 国产精品一区二区电影| 国产精品久久久久久久久毛片| 国产一区二区三区四区五区入口 | 亚洲日本欧美日韩高观看| 搡老熟女老女人一区二区| 亚洲资源网站| 日韩中文字幕精品| 久久99久久98精品免观看软件| 亚洲黄色大片| 国产精品视频26uuu| 国产精品老熟女视频一区二区| 国产一区二区三区四| 国产欧美丝袜| youjizz在线播放| 亚洲免费视频中文字幕| 亚洲人成无码网站久久99热国产 | 99re在线视频观看| 十八禁一区二区三区| 国产欧美日韩久久| 免费在线精品视频| 蜜桃视频m3u8在线观看| 欧美色综合网站| 一级全黄裸体片| 国产中文精品久高清在线不| 欧美成年人视频| 国产精品100| 国产麻豆91精品| 久久99精品久久久久久青青日本| 国产高清在线| 亚洲香蕉伊在人在线观| 三级a在线观看| 成人免费在线电影网| 国产一区二区精品丝袜| 久久久久久国产精品视频| 久色成人在线| 国产精品视频在线免费观看| av女优在线| 亚洲电影在线播放| www.com操| 日本国产精品| 欧美区在线播放| 中文资源在线播放| 99久久久久久| 日韩成人午夜影院| 一区在线影院| 日韩毛片中文字幕| 久久无码精品丰满人妻| 久88久久88久久久| 久久偷窥视频| 678在线观看视频| 欧美一区二区三区影视| 欧美一区二区三区粗大| 国产女优一区| 国产综合动作在线观看| 91黄色在线| 欧美福利视频一区| 久久一级免费视频| 日韩1区2区日韩1区2区| 欧美黄色大片网站| 亚洲黄色免费三级| 久久精品亚洲a| 奇米影视一区二区三区| 奇米影视首页 狠狠色丁香婷婷久久综合| 国产羞羞视频在线播放| 日韩一区二区电影在线| 182在线观看视频| 久久成人久久爱| 亚洲欧美国产一区二区| 欧美成人精品三级网站| 亚洲精品视频网上网址在线观看| 天海翼一区二区| 成人少妇影院yyyy| 成年人网站国产| www.豆豆成人网.com| 欧美激情综合亚洲一二区| 国产情侣自拍小视频| 中文字幕亚洲精品在线观看| 五月天开心婷婷| 亚洲91视频| 亚洲xxx自由成熟| 国产www.大片在线| 欧美日韩国产中文| h色网站在线观看| 国产不卡在线视频| 亚洲一区二区三区av无码| 日韩精品视频一区二区三区| 欧美超级免费视 在线| 超碰在线观看99| 韩国一区二区在线观看| 免费视频久久| 日韩精品a在线观看91| 范冰冰一级做a爰片久久毛片| 天堂va在线| 在线视频国产区| 国产美女精品写真福利视频| 精精国产xxxx视频在线野外| 免费看电影在线| 欧洲一级精品| 国产福利视频在线观看| 91在线不卡| 成人欧美一区二区三区在线播放| 亚洲免费999| 欧美va天堂| 国产日韩二区| 日韩a**中文字幕| 国产一区二区在线观看免费| 精品不卡一区二区三区| 欧美艳星kaydenkross| 色哟哟网站入口亚洲精品| 亚洲国产精品99久久| 日韩欧美三级在线观看| 国产午夜亚洲精品羞羞网站| 天天插天天操天天射| 一区二区三区四区在线观看国产日韩 | 成人激情视频在线播放| 女同一区二区免费aⅴ| 国产视频久久网| 国产精品久久久久久69| 五月天一区二区三区| 国产成人一区二区在线观看| 黄一区二区三区| 无码人妻丰满熟妇区96| av资源久久| 成人av影视在线| 在线一区视频观看| 久久久久久久久久亚洲| 国产片在线观看| 精品国产a毛片| 亚洲天堂自拍偷拍| 免费污视频在线一区| 69堂国产成人免费视频| 日韩女优在线观看| 国产精品久久三区| 女尊高h男高潮呻吟| 国产一区二区0| 国产成人综合一区| 亚洲二区免费| avove在线观看| 国内精品久久久久久久久电影网 | 国产日韩免费视频| 91国内精品野花午夜精品| 免费在线观看黄色av| 国产精品久线观看视频| 亚洲午夜久久久久久久久红桃| 国产传媒欧美日韩成人| 亚洲 欧美 另类人妖| 久久不射中文字幕| 国产 日韩 亚洲 欧美| 91精品一区二区三区综合| 日韩免费av一区二区三区| 久久九九热re6这里有精品| 91九色综合久久| 精品久久毛片| 国产精品96久久久久久又黄又硬 | 日韩欧美aaa| 日本一区二区三区四区五区| 亚洲欧美视频在线观看视频| 免费一级特黄3大片视频| 91麻豆福利精品推荐| 日本一区二区在线观看视频| 国产一区在线视频| 一级黄色特级片| 日本午夜一区二区| 熟妇人妻va精品中文字幕| 亚洲一区二区三区高清不卡| 男人插女人视频在线观看| 欧美激情1区2区3区| 黄色一级视频播放| 欧美熟乱15p| 91成人在线免费观看| 日本黄色录像视频| 中文字幕第一页久久| 国产一区二区三区四区五区六区| 在线观看爽视频| 亚洲伊人色欲综合网| 欧美爱爱免费视频| 亚洲男同性视频| avtt天堂在线| 亚洲高清免费在线| 国产一级淫片a| 精品久久久久久中文字幕| 国产情侣自拍av| 日本高清免费不卡视频| 中文字幕码精品视频网站| 欧美日韩视频第一区| 亚洲自拍第二页| 91精品国产福利| 亚洲第一页在线观看| 精品成人一区二区三区四区| 日韩在线观看视频一区| 日韩av在线免费看| 国产资源在线观看| 日韩最新在线视频| 亚洲妇熟xxxx妇色黄| 欧美激情综合色综合啪啪五月| 欧洲一区精品| 国产精品久久久久久亚洲影视| 色诱色偷偷久久综合| 91aaaa| 久久电影天堂| 不卡一区二区三区视频| 欧美成人午夜77777| 日韩福利影院| 欧美高清不卡| 国产精品无码专区av在线播放| 美女视频一区二区| 国产免费无码一区二区| 91视频你懂的| 成年人视频软件| 蜜臀久久99精品久久久久宅男| 欧美成人精品不卡视频在线观看| www视频在线观看免费| 久久亚洲国产精品| 欧美hdxxxx| 91av在线影院| 亚洲在线资源| 精品在线视频一区二区三区| 欧美自拍偷拍| 欧美一级免费播放| 美腿丝袜亚洲一区| 影音先锋人妻啪啪av资源网站| 国产欧美一区视频| 久草福利资源在线观看| 日本高清不卡视频| 亚洲精品一区二区三区不卡| 国产香蕉一区二区三区在线视频| 永久免费网站在线| 日韩av免费一区| 18国产精品| 亚洲日本精品国产第一区| 亚洲清纯自拍| 天天av天天操| 亚洲国产精品二十页| 国产污污视频在线观看 | 国产欧美一级片| 亚洲欧美色图片| 免费在线中文字幕| 91久久国产精品| 精品国产一区一区二区三亚瑟| 久久av综合网| 精品制服美女丁香| 婷婷色一区二区三区| 亚洲成人一区二区在线观看| 91亚洲精品国偷拍自产在线观看| 亚洲精品综合精品自拍| 免费在线看电影| 97超级碰碰| 外国成人免费视频| 亚洲欧美日韩一级| 国产亚洲精品资源在线26u| 国产无套粉嫩白浆内谢| 欧美一区二区三区在线看| 在线免费观看黄色| 国产精品女视频| 国产精品日韩精品中文字幕| 北条麻妃69av| 成人sese在线| 精品视频久久久久| 欧美成人女星排名| 麻豆av在线免费看| 国产精品美女主播| 精品国产不卡| 老熟妇仑乱视频一区二区| 2023国产精品自拍| 欧美 日韩 精品| 国产偷亚洲偷欧美偷精品| h片在线观看下载| 国产精品免费在线| 国产伦精品一区二区三区四区| 91黄色激情网站| 天堂影院在线| 日本精品性网站在线观看| 日韩三级av| 国产精品免费入口| 97久久人人超碰| 免费黄色网址在线| 亚洲女人被黑人巨大进入| 成人线上视频| 日韩精品久久久免费观看| 日韩av高清在线观看| 亚洲色图第四色| 欧美日韩高清一区二区| 黄色网址免费在线观看| 亚洲精品女av网站| 欧美视频四区| 午夜剧场免费看| 欧美日韩国产色| 男男激情在线| 国产精品流白浆视频| 婷婷综合五月| 日本少妇xxxx软件| 欧美天堂在线观看| 高清美女视频一区| 成人两性免费视频| 最新国产精品| 97香蕉碰碰人妻国产欧美| 福利一区视频在线观看| 国产小视频在线播放| 国产欧美精品在线| 欧美高清不卡| 中文字字幕码一二三区| 欧美午夜片在线观看| 黄色免费网站在线观看| 国产欧美丝袜| 日韩电影在线观看电影| 国精产品一区一区二区三区mba| 欧美一级生活片| 小早川怜子影音先锋在线观看| 日韩欧美精品一区二区| 国产美女精品在线| 国产成人免费观看视频| 一区二区在线视频播放| 色悠久久久久综合先锋影音下载| 欧美在线一区视频| 国产精品女上位| 秋霞网一区二区| 国产综合久久久久久| 在线看片欧美| 懂色av粉嫩av蜜臀av一区二区三区| 欧美sm极限捆绑bd| a成人v在线| 国产精品一线二线三线| 国产视频在线观看一区二区三区| 国产乱淫片视频| 日本电影亚洲天堂| 欧美aa国产视频| 亚洲精品91在线| 亚洲国产精品va在线观看黑人| 欧美综合影院| 成人在线看视频|