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

解鎖轉(zhuǎn)轉(zhuǎn)門店業(yè)務(wù)靈活性:如何利用MVEL引擎優(yōu)化結(jié)算流程

開發(fā)
隨著門店結(jié)算業(yè)務(wù)的不斷擴展,我們面臨了日益增長的復(fù)雜性。目前,需要聚合計算的結(jié)算指標數(shù)量龐大,每個指標都依托于一套復(fù)雜的公式,而這些公式又是由眾多業(yè)務(wù)配置參數(shù)構(gòu)成的。

1 業(yè)務(wù)現(xiàn)狀

隨著門店結(jié)算業(yè)務(wù)的不斷擴展,我們面臨了日益增長的復(fù)雜性。目前,需要聚合計算的結(jié)算指標數(shù)量龐大,每個指標都依托于一套復(fù)雜的公式,而這些公式又是由眾多業(yè)務(wù)配置參數(shù)構(gòu)成的。業(yè)務(wù)的復(fù)雜化導(dǎo)致需要維護的公式數(shù)量急劇增加,帶來了一系列挑戰(zhàn):

  1. 配置分散問題:業(yè)務(wù)配置目前分散在代碼、Apollo配置中心以及數(shù)據(jù)庫中,這種分散性使得維護工作變得繁瑣且低效。
  2. 頻繁更新問題:隨著業(yè)務(wù)的不斷調(diào)整,結(jié)算公式需要頻繁更新。每一次微小的改動都要求進行系統(tǒng)上線,這增加了開發(fā)的負擔(dān)。
  3. 代碼維護問題:每次新公式的上線,都需要保留舊版本的指標公式。這導(dǎo)致在代碼中需要同時維護多套指標公式,嚴重影響了代碼的可讀性和可維護性。

圖片

指標計算流程

基于這些問題,我們的優(yōu)化方案是建立一個公式管理中心,將所有的這些指標運算進行收攏。同時引入了強大的表達式引擎來處理這些運算,本文就如何使用表達式引擎解決這些問題展開分析。

2 調(diào)研分析

2.1 為什么選擇表達式引擎

在門店結(jié)算業(yè)務(wù)的核心環(huán)節(jié),我們專注于對關(guān)鍵指標的公式進行精確計算,并有效管理不同版本的公式。通過引入表達式引擎,我們能夠?qū)⒂嬎氵壿嫃臉I(yè)務(wù)代碼中解耦,實現(xiàn)業(yè)務(wù)邏輯與計算邏輯的分離。這種方法不僅集中化了指標公式的管理,而且由于許多表達式引擎原生支持高精度的BigDecimal類型,它還確保了金融級精度的貨幣計算需求得到滿足。

此外,表達式引擎的動態(tài)執(zhí)行特性允許我們在不重新部署的情況下實時更新公式,這樣的靈活性對于快速響應(yīng)業(yè)務(wù)需求變化至關(guān)重要,大大提升了業(yè)務(wù)調(diào)整的敏捷性和系統(tǒng)的可維護性。

2.2 表達式引擎的對比

本文主要對幾種常見的表達式引擎AviatorScript MVEL QLExpress OGNL 進行對比分析。

2.2.1 簡介

AviatorScript: 是一款高性能、輕量級的Java語言實現(xiàn)的表達式求值引擎,Aviator可直接將表達式編譯成Java字節(jié)碼,交給JVM去執(zhí)行。
MVEL(MVFLEX Expression Language): 是一種動態(tài)/靜態(tài)的可嵌入的表達式語言和為Java平臺提供Runtime(運行時)的語言,在很大程度上受到了Java語法的啟發(fā),支持解釋模式執(zhí)行,也支持編譯模式執(zhí)行。
QLExpress(Quick Language Express):  是阿里巴巴開源的一門動態(tài)腳本引擎解析工具,起源于阿里巴巴的電商業(yè)務(wù),旨在解決業(yè)務(wù)規(guī)則、表達式、數(shù)學(xué)計算等動態(tài)腳本的解析問題。具有線程安全、高效執(zhí)行、代碼依賴小等特性。
OGNL(Object-Graph Navigation Language): 即對象圖導(dǎo)航語言,是一種功能強大的開源表達式語言,通過簡單一致的表達式語法,可以存取對象的任意屬性,調(diào)用對象的方法,遍歷整個對象的結(jié)構(gòu)圖,并實現(xiàn)字段類型的轉(zhuǎn)化等功能,常用于Java中。

2.2.2 性能分析

性能測試工具使用JMH(Java Microbenchmark Harness),是由 OpenJDK/Oracle 官方發(fā)布的工具,他們對JIT和JVM對于基準測試影響非常了解,能得到一個更好的結(jié)果。
在當前的業(yè)務(wù)場景中,主要對帶有變量和條件判斷的表達式進行高精度的求值,測試表達式:(cate==101&&brand==1276)?((a*18 +b*3)*x/y)-c%3+99.64 : a*18

圖片

在本機環(huán)境下,執(zhí)行五次,AviatorScript的性能要略優(yōu)于 OGNL 優(yōu)于 MVEL ,前三者的性能遠遠優(yōu)于QLExpress

2.2.3 社區(qū)活躍度

社區(qū)活躍度主要看這幾個項目在GitHub上的 StarForkWatchLast Commit 來進行分析,截止到發(fā)稿時間的對比如下:

項目

Star

Fork

watch

Last Commit

AviatorScript

4.4K

821

171

Jun 11, 2024

MVEL

1.1K

305

78

May 16, 2024

OGNL

215

77

19

Jul 21, 2024

QLExpress

4.7K

1.1K

215

Jul 16, 2024

通過對比可以看到 AviatorScriptMVELQLExpress的 Star、Fork、Watch 更高,說明他們的影響力更高,更受歡迎。

2.3 最終選擇

通過以上的對比分析,最終選擇使用 MVEL,因為在性能、社區(qū)活躍度上都有很大的優(yōu)勢,在語法上更加的接近Java語法,更容易上手。在一些開源項目中都有使用如:DroolsQuartz SchedulerJBPM 等。
MVEL的執(zhí)行流程:

圖片

MVEL執(zhí)行流程

每次執(zhí)行都要去解析,編譯,再執(zhí)行表達式,這種在表達式執(zhí)行比較頻繁的場景下會很消耗性能。MVEL 提供了兩種執(zhí)行模式來應(yīng)對不同的需求:

解釋模式:這種模式在每次執(zhí)行時都會重新編譯表達式,雖然提供了動態(tài)執(zhí)行的能力,但頻繁的編譯過程會顯著影響性能。

編譯模式:編譯模式通過將表達式預(yù)先編譯成字節(jié)碼,然后在后續(xù)執(zhí)行中直接運行這些字節(jié)碼,從而避免了每次執(zhí)行時的編譯開銷。這種方法顯著提高了執(zhí)行效率,但需要一種機制來處理在系統(tǒng)運行期間對公式的實時更新。

通過這兩種模式,我們可以根據(jù)實際需求選擇最合適的執(zhí)行策略,以實現(xiàn)性能和靈活性的最佳平衡。

3 業(yè)務(wù)應(yīng)用

3.1 整體設(shè)計

抽取出三個模塊,配置中心、公式管理中心、公式運算中心。配置中心維護指標配置數(shù)據(jù),公式中心維護指標公式,公式運算中心在前兩者維護好的基礎(chǔ)上運算獲取結(jié)果。

圖片

新的指標運算流程

3.2 表結(jié)構(gòu)設(shè)計

需要兩張表來存儲配置數(shù)據(jù),業(yè)務(wù)指標配置和計算公式配置。

CREATE TABLE `business_config` (
  `id` bigint(20) NOT NULL DEFAULT '0' COMMENT '主鍵',
  `indicator_key` varchar(255) NOT NULL DEFAULT '' COMMENT '指標key',
  `attribute_key` varchar(255) NOT NULL DEFAULT '' COMMENT '屬性key',
  `attribute_desc` varchar(255) NOT NULL DEFAULT '' COMMENT '屬性詳細描述',
  `attribute_value` varchar(255) NOT NULL DEFAULT '' COMMENT '屬性值',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創(chuàng)建時間',
  `create_by` varchar(32) NOT NULL DEFAULT '' COMMENT '創(chuàng)建人',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新時間',
  `update_by` varchar(32) NOT NULL DEFAULT '' COMMENT '更新人',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uniq_indicator` (`indicator_key`) USING BTREE COMMENT '指標唯一索引'
) ENGINE=InnoDB COMMENT='業(yè)務(wù)指標配置表';
CREATE TABLE `formula_config`  (
  `id` bigint NOT NULL DEFAULT 0 COMMENT '主鍵',
  `indicator_key` varchar(255) NOT NULL DEFAULT '' COMMENT '指標key',
  `formula` varchar(500) NOT NULL DEFAULT '' COMMENT '公式',
  `effective_timestamp` bigint NOT NULL DEFAULT 0 COMMENT '生效的時間戳',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創(chuàng)建時間',
  `create_by` varchar(32) NOT NULL DEFAULT '' COMMENT '創(chuàng)建人',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新時間',
  `update_by` varchar(32) NOT NULL DEFAULT '' COMMENT '更新人',
  PRIMARY KEY (`id`) 
  INDEX `idx_business_key`(`business_key`) USING BTREE
) ENGINE=InnoDB COMMENT='計算公式表';

3.3 公式運算主代碼流程

public BigDecimal cal(String businessKey, Map<String, Object> paramMap) {
        //1.根據(jù)businessKey 獲取配置數(shù)據(jù)
        Map<String, Object> configMap = qfConfigService.getConfigMapByBusinessKey(businessKey);
        //添加業(yè)務(wù)單據(jù)參數(shù)
        configMap.putAll(paramMap);
        //2.根據(jù)businessKey 和時間戳獲取 計算公式
        String formula = getFormula(businessKey, System.currentTimeMillis());
        //3.引擎計算
        return MvelExecutor.evalExpression(formula, configMap);
    }

所有的指標運算都復(fù)用了同一套運算邏輯,配置和公式解耦。
這里說的兩者之間的解耦并不是公式一點都不關(guān)心運算需要的配置參數(shù),而是指兩者在遵守約定的前提下,在公式運算中,會根據(jù)屬性配置自動填充公式的參數(shù)。

舉個例子,現(xiàn)在有一個指標的公式為 (cate==101&&brand==1276)?26:38 在這個公式中有 cate 和 brand 兩個參數(shù),這兩個參數(shù)會提前在配置中心配好,在配置表中就是 attribute_key 這個字段。attribute_key 和 attribute_value 會作為表達式運算參數(shù)的 key 和 value 參與運算。

Object object = MVEL.executeExpression(expression, paramMap);

3.4 編譯模式下的緩存策略

考慮到系統(tǒng)的性能問題,項目中使用了編譯執(zhí)行模式,通過一次性編譯并緩存結(jié)果,實現(xiàn)了多次高效運行。這就需要在系統(tǒng)運行過程中,對于實時改變的公式,能夠及時刷新緩存,公式及時生效。由于隨著業(yè)務(wù)的發(fā)展,指標越來越多,使用本地緩存,可能會造成內(nèi)存占用過高,所以使用Redis緩存編譯后的公式。每次公式修改,就刪除緩存,下次執(zhí)行重新編譯,從而確保緩存中始終存儲的是最新版本的公式。

/**
      *  執(zhí)行表達式
     **/
    public  BigDecimal evalExpression(String expression, Map<String, Object> map) {
        Serializable cache = getCache(DesEncryptUtil.encrypt(expression));
        Object object = MVEL.executeExpression(cache, map);
        return (BigDecimal) object;
    }

    private  Serializable getCache(String expression) {
        String cacheExpression = redisUtils.get(expression);
        if (StringUtils.isNotEmpty(cacheExpression)) {
            return JsonUtil.silentString2Object(cacheExpression, Serializable.class);
        }
        Serializable compileExpression = MVEL.compileExpression(expression);
        redisUtils.setex(expression,ONE_DAY,JsonUtil.silentObject2String(compileExpression));
        return compileExpression;
    }

3.5 業(yè)務(wù)指標遷移

明確了設(shè)計方案后,具體的遷移過程不是一蹴而就的,要考慮在不影響線上業(yè)務(wù)的前提下,有計劃的逐步完成。遷移主要分代碼邏輯遷移和配置遷移,新的遷移邏輯已經(jīng)在上文的設(shè)計方案里有介紹了,不同的指標運算是一個統(tǒng)一的調(diào)用入口,只需要在不同的指標運算處替換即可。配置遷移主要包含指標配置遷移和公式遷移。
具體遷移過程分五步進行:

  1. 代碼邏輯遷移
    將指標運算邏輯替換為新邏輯。
  2. 指標配置整理入庫管理
    整理代碼中、Apollo配置中、數(shù)據(jù)庫中不同的指標配置,包括歷史改變的版本,都加入配置表,以生效時間判定生效的版本。
  3. 公式整理入庫管理
    遷移前所有的公式都在代碼中,把代碼中的計算公式,同樣包含歷史的版本,轉(zhuǎn)化為MVEL表達式,加入公式表,以生效時間判定生效的版本。
  4. 數(shù)據(jù)準確性驗證
    以線上最近兩個月的數(shù)據(jù)為數(shù)據(jù)源,計算遷移后指標的運算結(jié)果,與遷移前的指標運算結(jié)果作對比。如果有不一致的結(jié)果,定位原因并修復(fù),然后重新跑數(shù)據(jù)對比,直到完全一致為止。
  5. 灰度&全量
    先在2個門店開放新邏輯,先灰度幾個指標,如果沒有問題,就開放所有指標,最后再開放全量門店。

4 總結(jié)

本文就如何在業(yè)務(wù)中使用MVEL表達式引擎進行了分析,旨在解決當前結(jié)算系統(tǒng)面臨的若干關(guān)鍵問題:

  1. 集中管理配置:通過建立一個公式管理中心,實現(xiàn)配置的統(tǒng)一管理,簡化維護流程。
  2. 即時生效的公式修改:對公式很小的改動,直接修改公式立即生效,無需代碼上線。
  3. 降低代碼復(fù)雜度:通過將公式的歷史版本存儲在數(shù)據(jù)庫中,并根據(jù)時間戳獲取當前生效的公式,減少了代碼中多套公式的維護負擔(dān)。

當然實際使用,還需結(jié)合具體的使用場景具體分析決定是否要使用,對于比較簡單的場景,沒有必要引入,這樣會增加系統(tǒng)的復(fù)雜度,一定是系統(tǒng)存在痛點情況下的綜合考量。

5 參考資料

責(zé)任編輯:龐桂玉 來源: 轉(zhuǎn)轉(zhuǎn)技術(shù)
相關(guān)推薦

2024-07-31 20:45:45

2016-11-08 13:50:57

2023-07-27 07:00:01

轉(zhuǎn)轉(zhuǎn)門店商編程

2012-02-24 09:03:11

云計算虛擬化

2010-02-01 18:23:54

Python

2024-01-22 09:00:00

編程C++代碼

2009-01-01 22:08:15

企業(yè)網(wǎng)絡(luò)提高

2011-03-21 09:34:48

SET選項客戶端靈活性

2013-10-12 16:48:14

SAP

2021-02-09 10:55:10

物聯(lián)網(wǎng)人工智能邊緣計算

2012-03-07 15:22:02

2013-02-26 10:44:26

2015-12-31 09:44:56

公有云谷歌云評測

2021-09-17 16:05:09

戴爾科技

2019-09-05 10:34:02

云計算云管理架構(gòu)

2010-02-23 17:04:32

Python編程語言

2022-10-10 18:39:01

legendapp前端框架

2014-04-30 15:52:59

紅帽

2010-07-22 10:08:39

JavaFXJava

2009-01-22 19:03:32

服務(wù)器虛擬化VMware
點贊
收藏

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

91影院在线观看| 午夜精品久久久久99热蜜桃导演| 欧美在线一二三| 中文字幕久久综合| 国产精品久久久久久免费播放| 亚洲成人av| 亚洲精品久久7777777| 亚洲 中文字幕 日韩 无码| 麻豆网站在线看| 成人一区在线观看| 国产免费一区视频观看免费| 久久久久久久久艹| japanese国产精品| 精品国产亚洲在线| 爱爱爱爱免费视频| 91九色在线看| 国产精品久久久久9999吃药| 国产精品一 二 三| 亚洲自拍第二页| 99在线|亚洲一区二区| 日韩在线视频国产| 国内精品久久99人妻无码| 精品国产亚洲一区二区三区大结局 | 女人香蕉久久**毛片精品| 亚洲精品日韩久久久| 中文字幕avav| 成人国产一区二区三区精品麻豆| 亚洲不卡一区二区三区| 黄色网zhan| 北岛玲一区二区三区| 不卡视频在线观看| 亚洲综合中文字幕在线| 一区二区三区免费观看视频| 久久国产88| 91精品国产沙发| 免费无码毛片一区二区app| 欧美国产美女| 中文字幕欧美视频在线| a视频免费观看| 高清精品xnxxcom| 欧美电影精品一区二区| 国产精品探花在线播放| 日日狠狠久久| 欧日韩精品视频| 99草草国产熟女视频在线| 日韩深夜视频| 黑人巨大精品欧美一区二区一视频 | 在线播放亚洲一区| 午夜国产一区二区三区| 精品3atv在线视频| 色综合网站在线| 香港三级韩国三级日本三级| 高端美女服务在线视频播放| 亚洲高清免费一级二级三级| 天堂8在线天堂资源bt| 久草在线视频资源| 亚洲综合色区另类av| 一本大道东京热无码aⅴ| 中文在线手机av| 一区二区三区四区在线免费观看 | 强伦人妻一区二区三区| 亚洲人成精品久久久 | 久久五月精品| 日韩美女视频一区二区| 不卡中文字幕在线| 污视频网站免费在线观看| 一区二区三区不卡在线观看| av在线免费观看国产| 成人免费高清观看| 欧美午夜片在线免费观看| 国产极品粉嫩福利姬萌白酱 | 欧美丝袜一区二区| 日本美女高潮视频| 亚洲人体在线| 日韩欧美国产麻豆| 人妻丰满熟妇av无码久久洗澡 | 最近中文字幕免费观看| 蜜桃精品视频在线| 亚洲专区中文字幕| 殴美一级特黄aaaaaa| 99久精品国产| 日本不卡一二三区| 黄色一级大片在线免费看产| 亚洲一线二线三线视频| 国产一区二区三区精彩视频| 成人黄色在线| 精品国产一区二区三区不卡| 日韩在线免费观看av| 日韩精品一区二区久久| 欧美国产视频一区二区| 亚洲另类欧美日韩| 九色|91porny| 国产日韩二区| 中文字幕日本在线观看| 一级精品视频在线观看宜春院| 男人天堂1024| 国产日本亚洲| 精品视频中文字幕| 午夜精品福利在线视频| 国产精品久久国产愉拍| 成人精品在线观看| 青青九九免费视频在线| 日韩毛片视频在线看| 国产在线青青草| 国产精品视频一区二区三区| 日韩经典中文字幕| 国产女人被狂躁到高潮小说| 久久在线91| www.av一区视频| av在线播放网| 精品久久久久久久久久久久| 久久6免费视频| 校花撩起jk露出白色内裤国产精品| 三级精品视频久久久久| 日韩欧美一区二区一幕| 精品一区二区三区不卡| 老司机精品福利在线观看| 综合久久2o19| 国产精品v亚洲精品v日韩精品| 国产精品草莓在线免费观看 | 日韩另类在线| 91国在线观看| 精品影片一区二区入口| 欧美超碰在线| 欧洲成人在线视频| 黑人操亚洲女人| 亚洲日本一区二区三区| 国产精品一区二区羞羞答答| 亚洲一区二区电影| 久热精品视频在线观看一区| 夜夜爽妓女8888视频免费观看| 成人妖精视频yjsp地址| 先锋影音男人资源| 国语自产精品视频在线看抢先版结局| 精品一区二区三区三区| 欧美精品久久久久性色| 国产一区二区三区在线观看免费 | 欧美精品色综合| 免费看日本黄色片| 丝袜美腿亚洲色图| 欧美日韩免费高清| 亚洲妇女成熟| 日韩精品在线看| 天天操夜夜操视频| 91最新地址在线播放| 亚洲精品蜜桃久久久久久| 我要色综合中文字幕| 久久伊人精品一区二区三区| 国产精品国产一区二区三区四区| 中文字幕av资源一区| 福利在线一区二区三区| 成人一区不卡| 国产精品中文久久久久久久| av在线1区2区| 欧美日韩电影在线| av男人的天堂av| 免费亚洲一区| 欧美精品尤物在线| 伊人久久高清| 在线播放国产一区二区三区| 天天操天天干视频| 久久精品男人天堂av| 色综合手机在线| 日韩激情免费| 92国产精品久久久久首页 | 欧美有码在线观看| 国产理论电影在线观看| 欧美影视一区二区三区| 免费一级suv好看的国产网站 | 色综合久久中文综合久久97| 男人天堂av电影| 日韩精品一二三区| 亚洲巨乳在线观看| 国产一区2区在线观看| 九九热精品视频国产| 日本精品久久久久| 色哦色哦哦色天天综合| 肉色超薄丝袜脚交69xx图片| 国产一区二区女| 青青青免费在线| 红桃成人av在线播放| 成人av在线天堂| aa视频在线观看| 国产一区二区精品丝袜| 国产精品乱码久久久| 亚洲成人一区在线| 三上悠亚影音先锋| 国产黄人亚洲片| 日本三级免费观看| 婷婷另类小说| 精品蜜桃一区二区三区| 日韩成人在线免费视频| 欧美一级做性受免费大片免费| 久久久美女艺术照精彩视频福利播放| 波多野结衣天堂| 欧美不卡视频| 欧美一区观看| 视频在线亚洲| 国产精品视频区| 超碰97免费在线| 色噜噜狠狠狠综合曰曰曰88av| 亚洲黄色小说网址| 欧美亚州韩日在线看免费版国语版| 国产探花在线播放| 欧美国产精品中文字幕| 久久久久久久久久久久国产精品| 久久精品系列| 日韩精品在线观看av| 欧美偷拍自拍| 久久综合一区| 亚洲国产视频二区| 成人精品视频99在线观看免费| 男人久久天堂| 欧美日韩成人在线视频| av在线电影网| 亚洲天堂网站在线观看视频| 亚洲成a人片在线| 欧美日韩在线播放一区| av图片在线观看| 亚洲国产精品一区二区www| 最新黄色av网址| 国产亚洲美州欧州综合国| 中国极品少妇videossexhd| 国产麻豆一精品一av一免费| 国产主播中文字幕| 午夜在线一区二区| 久久国产精品网| 你懂的视频一区二区| 伊人久久大香线蕉午夜av| 你微笑时很美电视剧整集高清不卡| 99在线视频播放| 精品国产亚洲一区二区三区大结局 | 日韩高清在线一区| 国产91在线视频观看| 亚洲福利国产| 欧美又粗又长又爽做受| 欧美色123| 国产精品一二三在线观看| 三级电影一区| 亚洲三区四区| 色999日韩| 亚洲欧美日韩精品综合在线观看| 国内精品视频在线观看| 欧美精品123| 欧美美乳视频| 欧美中文娱乐网| 精品国产中文字幕第一页| 鲁片一区二区三区| 日韩精选在线| 久久久久久九九九九| 欧美一区 二区| 久久综合久久综合这里只有精品| 婷婷精品视频| 日本福利一区二区三区| 国产精品一区高清| 亚洲精美视频| 亚洲91中文字幕无线码三区| 美女黄色片网站| 欧美日韩午夜| 亚洲不卡中文字幕无码| 久久激情久久| 最新中文字幕2018| 国产毛片精品视频| 天堂www中文在线资源| 99久久精品国产麻豆演员表| 亚洲蜜桃精久久久久久久久久久久| 久久久亚洲精品一区二区三区| 亚洲色成人网站www永久四虎| 欧美激情在线免费观看| 黑人操日本美女| 亚洲国产精品视频| www成人在线| 欧美午夜电影一区| 国产免费视频一区二区三区| 精品久久国产97色综合| 青青操视频在线| 综合国产在线观看| 污视频在线免费观看网站| 97成人精品视频在线观看| 国产私拍福利精品视频二区| 成人午夜激情网| 日韩精品丝袜美腿| 亚洲欧洲一区二区在线观看| 欧美日韩福利| 国产免费一区二区三区视频| 久久精品国产在热久久| 最新国产精品自拍| 久久精品亚洲精品国产欧美| 日韩高清dvd碟片| 欧美日韩免费在线观看| 在线观看国产一区二区三区| 精品久久久久久无| www在线免费观看| 欧美精品在线第一页| 国产精欧美一区二区三区蓝颜男同| 国产自产女人91一区在线观看| 高清日韩欧美| 欧美二区在线| 欧美精选一区| 久久久亚洲高清| 三级在线观看免费大全| 精品美女国产在线| 国产精品久久久久久久久久久久久久久久久久 | 日韩中文综合网| av免费不卡国产观看| 国产美女久久精品香蕉69| 久草在线综合| 天天成人综合网| 久久九九电影| 女性生殖扒开酷刑vk| 国产精品国产三级国产aⅴ无密码| 日本亚洲欧美在线| 91精品国产综合久久久久久久| 午夜在线观看视频18| 久久中文字幕国产| 国产精品亚洲一区二区三区在线观看| 99在线国产| 亚洲h色精品| 久久人人爽av| 国产色综合久久| 精品国产免费观看| 精品久久一区二区三区| 麻豆网站视频在线观看| 日韩暖暖在线视频| 精品在线网站观看| 国产91在线亚洲| 日韩av网站在线观看| caopeng视频| 欧美日韩在线第一页| 免费看日韩av| 欧美黄色三级网站| 日本伊人久久| 三上悠亚免费在线观看| 蜜桃一区二区三区在线观看| 蜜桃精品一区二区| 精品动漫一区二区| 国产成人无码www免费视频播放| 久久天天躁夜夜躁狠狠躁2022| 成人黄色免费观看| 亚洲一卡二卡三卡四卡无卡网站在线看 | 中文字幕日韩三级| 在线播放国产精品| 国产精品毛片久久久久久久久久99999999| 久久99国产精品99久久| 亚洲美女啪啪| xxxxxx黄色| 性感美女久久精品| 性感美女视频一二三| 91成人精品网站| 欧美电影在线观看完整版| 国产美女主播在线播放| www.激情成人| 天天操天天摸天天干| 精品无码久久久久久国产| 手机在线观看av| 欧美午夜精品久久久久久蜜| 天堂av在线一区| 国产一区二区三区精品在线| 在线欧美日韩国产| 日本综合在线| 91精品国产高清久久久久久91裸体 | 一本色道久久88亚洲精品综合| 国产在线精品视频| 久久久国产精华液| 亚洲国产中文字幕在线观看| 色是在线视频| 天堂av一区二区| 精品在线观看视频| 国产在线成人精品午夜| 亚洲黄一区二区| 四虎影视4hu4虎成人| 中文字幕一区二区三区四区五区人 | 一本色道久久hezyo无码| 精品国产福利在线| 福利在线午夜| 91夜夜未满十八勿入爽爽影院 | 中文字幕制服丝袜成人av| 999av视频| 欧美一级视频在线观看| 日韩综合精品| 日韩精品人妻中文字幕有码 | 久久久久久久一区二区三区| 天天躁日日躁狠狠躁欧美| xx欧美撒尿嘘撒尿xx| 一区二区三区免费| 你懂的视频在线| 成人综合网网址| 亚洲麻豆av| 日韩亚洲欧美中文字幕| 精品国内片67194| 成人日韩在线观看| 粉嫩av一区二区三区天美传媒 | 男人天堂2024| 久久国产色av| 欧美精品momsxxx| 亚洲熟妇一区二区| 欧美性猛交xxxx乱大交退制版| 污视频在线看网站| 五码日韩精品一区二区三区视频| 国产成+人+日韩+欧美+亚洲|