日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

火山引擎 ByteHouse:ClickHouse 如何保證海量數據一致性

來源: 責編: 時間:2023-09-18 21:41:04 418觀看
導讀背景ClickHouse是一個開源的OLAP引擎,不僅被全球開發者廣泛使用,在字節各個應用場景中也可以看到它的身影?;诟咝阅?、分布式特點,ClickHouse可以滿足大規模數據的分析和查詢需求,因此字節研發團隊以開源ClickHouse為基

圖片圖片xiX28資訊網——每日最新資訊28at.com

為了保證數據一致性,ByteHouse提供了以下能力:xiX28資訊網——每日最新資訊28at.com

  1. event engine: 事件處理中心
  2. workflow engine:輕量級流程引擎
  3. 對賬系統

保障數據一致性最簡單的方式是通過狀態機來監聽流程執行過程:xiX28資訊網——每日最新資訊28at.com

  • 首先,將所有的任務請求下發到event engine,由event engine將任務分發對應的handler執行,統一管理所有下發任務的生命周期,并提供異步重試、回滾補償等功能。流量匯總到event engine以后,會讓服務后續的業務擴展更加便捷。
  • 其次,對于比較復雜的任務請求,我們可以下發到workflow engine執行,由workflow生成實例,并編排任務隊列,管理流程執行實例的生命周期,統一失敗回滾,失敗重試。
  • 最后,對于服務不可用等特殊場景產生的臟數據,由對賬服務兜底。

圖片圖片xiX28資訊網——每日最新資訊28at.com

架構設計

在流程監控的架構設計中,主要包含以下:xiX28資訊網——每日最新資訊28at.com

  • 流程管理層:主要負責流程配置的解析初始化,并完成編排策略的工作
  • 策略behavior層:編排執行節點,并下發執行任務到執行器
  • 執行器:管理執行節點執行
  • 執行節點:負責業務具體實現

圖片圖片xiX28資訊網——每日最新資訊28at.com

實現方案

執行節點

圖片圖片xiX28資訊網——每日最新資訊28at.com

流程引擎的核心為“責任鏈”,按照責任鏈上的節點順序依次執行所有任務,所以我們需要的三個基本單元分別為:xiX28資訊網——每日最新資訊28at.com

  • request:入參
  • processlist:流程執行節點list
  • response:出參

在研發工作中,我們時常會遇到以下問題:xiX28資訊網——每日最新資訊28at.com

  • 如果同時出現了一個問題,node1、node2、node3之間的數據交互如何實現?
  • 如果node1入參、出參與node2,node3不一樣該如何處理?
  • 參數類型不同的node又該如何統一調度?

最簡單的處理辦法,是讓node使用相同的上下文信息,將整個執行node模版化。我們讓所有的執行節點node實現相同的接口Delegation,統一使用相同的上下文executionContext作為執行方法的入參。xiX28資訊網——每日最新資訊28at.com

對于流程中的request和response,我們可以放入executionContext中,讓每個執行節點都可以通過上下文操作response。xiX28資訊網——每日最新資訊28at.com

// Delegation -type Delegation interface {   Execute(ctx context.Context, executionContext ExecutionContextInterface) apperror.AppError   TryExecute(ctx context.Context, executionContext ExecutionContextInterface) apperror.AppError   ConfirmExecute(ctx context.Context, executionContext ExecutionContextInterface) apperror.AppError   CancelExecute(ctx context.Context, executionContext ExecutionContextInterface) apperror.AppError   Code() string   Type() value.DelegationType}

執行策略

如果確定好了最小的執行節點,我們需要考慮到,業務場景并不會永遠順序執行node,再返回結果,流程執行過程中跳轉、循環、并發執行都是比較常見的操作??紤]不同業務場景復用性,我們在執行節點之上加了一層執行策略,用策略behaivor來重新編排觸發執行節點的任務。xiX28資訊網——每日最新資訊28at.com

  • 下圖將流程分成了behavior1和behavior2,分別對應不同的策略。
  • 簡單的策略舉例:按順序執行、并發執行、循環執行、條件跳轉執行等。
  • 我們可以根據自身業務實際需要定制,后續會有實例介紹。

圖片圖片xiX28資訊網——每日最新資訊28at.com

// ActivityBehavior -type ActivityBehavior interface {   Enter(ctx context.Context, executionContext ExecutionContextInterface, pvmActivity PvmActivity) apperror.AppError   Execute(ctx context.Context, executionContext ExecutionContextInterface, pvmActivity PvmActivity) apperror.AppError   Leave(ctx context.Context, executionContext ExecutionContextInterface, pvmActivity PvmActivity) apperror.AppError   Code() value.ActivityBehaviorCode}

策略behavior提供有Enter,Execute,Leave三個接口,Enter負責生成執行節點任務instance,Execute負責編排并觸發執行任務instance操作,Leave負責跳轉到下一個behavior。xiX28資訊網——每日最新資訊28at.com

可以看出來策略behaivor的跳轉方式類似于鏈表,不斷執行next方法,所以編碼過程中需要注意不要出現死循環,小心stackoverflow。xiX28資訊網——每日最新資訊28at.com

Executor

執行器Executor的主要作用是串聯執行策略和執行節點,策略behavior將執行的命令下發給Executor,由Executor對執行節點的觸發操作。這里會根據執行節點的type,映射到三種執行節點的執行方式,包含tcc,執行一次,重試多次。xiX28資訊網——每日最新資訊28at.com

// DelegationExecutor -type DelegationExecutor interface {   execute(ctx context.Context, executionContext ExecutionContextInterface) apperror.AppError   postExecute(ctx context.Context, executionContext ExecutionContextInterface) apperror.AppError}func (de *DefaultDelegationExecutor) execute(ctx context.Context, executionContext ExecutionContextInterface) apperror.AppError {   delegationCode := executionContext.GetExecutionInstance().GetDelegationCode()   if len(delegationCode) == 0 || de.DelegationMap[delegationCode] == nil {      logger.Info(ctx, "DefaultDelegationExecutor delegation code not found,use default delegation", zap.String("delegationCode", delegationCode))      delegationCode = string(value.DefaultDelegation)      executionContext.GetExecutionInstance().SetDelegationCode(delegationCode)   }   return de.dumpExecute(ctx, executionContext, delegationCode)}func (de *DefaultDelegationExecutor) dumpExecute(ctx context.Context, executionContext ExecutionContextInterface, delegationCode string) apperror.AppError {   FireEvent(ctx, executionContext, value.ExecutionStart)   var err apperror.AppError   delegation := de.DelegationMap[delegationCode]   switch delegation.Type() {   case value.TccDelegation:      err = tccExecute(ctx, executionContext, delegation)   case value.SingleDelegation:      err = singleExecute(ctx, executionContext, delegation)   case value.RetryDelegation:      err = retryExecute(ctx, executionContext, delegation)   }   if err != nil {      logger.Error(ctx, "delegation.Execute_err", zap.Error(err))      return apperror.Trace(err)   }   FireEvent(ctx, executionContext, value.ExecutionEnd)   return nil}

ExecutionContext

ExecutionContext上下文是用來記錄了流程執行的所有細節,包含以下:xiX28資訊網——每日最新資訊28at.com

  • ProcessEngineConfigurationInterface: 流程定義信息
  • ExecutionInstanceInterface: 執行節點實例
  • ActivityInstanceInterface: 執行策略實例
  • ProcessInstanceInterface: 流程實例
  • request:入參
  • response:返回值

為了保證整個流程執行的穩定性,這里除了response之外,所以其他的實例參數都不建議開放寫接口,response可以用來存儲流程實例執行過程中會產生的變量信息。xiX28資訊網——每日最新資訊28at.com

對于整個流程的定義ProcessEngineConfiguration,我們可以選擇最簡單的方式,即在數據庫里,將配置信息映射成json字符串。當然也可以選擇讀取配置文件,只要能滿足讀取方便,數據不丟即可。xiX28資訊網——每日最新資訊28at.com

// ExecutionContextInterface -type ExecutionContextInterface interface {   GetProcessEngineConfiguration() ProcessEngineConfigurationInterface   SetProcessEngineConfiguration(processEngineConfiguration ProcessEngineConfigurationInterface)   GetExecutionInstance() instance.ExecutionInstanceInterface   SetExecutionInstance(executionInstance instance.ExecutionInstanceInterface)   GetActivityInstance() instance.ActivityInstanceInterface   SetActivityInstance(activityInstance instance.ActivityInstanceInterface)   GetProcessInstance() instance.ProcessInstanceInterface   SetProcessInstance(processInstance instance.ProcessInstanceInterface)   SetNeedPause(needPause bool)   IsNeedPause() bool   SetActivityIndex(activityIndex int)   GetActivityIndex() int   SetActivityBehaviorCode(activityBehaviorCode value.ActivityBehaviorCode)   GetActivityBehaviorCode() value.ActivityBehaviorCode   SetBizUniqueKey(bizUniqueKey string)   GetBizUniqueKey() string   GetRequest() map[string]interface{}   SetRequest(request map[string]interface{})   GetResponse() map[string]string   SetResponse(response map[string]string)   AtomicAddResponse(key string, value string)}

Listener

監聽器的主要作用是用來監聽流程執行中的重要參數信息。從上述executor接口可以看到fireEvent,它的作用是發送消息event,讓listener監聽到對應的event類型,完成一些定制化的行為。xiX28資訊網——每日最新資訊28at.com

類似于面向切面編程,我們可以在執行節點的前后增加定制化的邏輯,如打日志、監聽節點執行時間,持久化流程中產生的response信息、增加鏈路追蹤等。xiX28資訊網——每日最新資訊28at.com

API

圖片圖片xiX28資訊網——每日最新資訊28at.com

最后,我們將上述的內容拼接串聯起來,主要提供三個接口:xiX28資訊網——每日最新資訊28at.com

  • Start: 啟動流程
  • Signal: 暫?;蚴钱惓M顺龊螅^續執行流程
  • Abort: 強制中斷流程
process start(){    //1.get and create ProcessEngineConfigurationInterface 解析流程定義    //2.create processInstance 創建流程實例    //3.create ExecutionContext 創建執行上下文        //4. lockstrategy trylock         //5. invoke process start     processinstance.start()    //6. persist processInstance and return    //7. lockstrategy unlock }processinstance start(){    // get behavior        // behavior enter    behavior.Enter(ctx, executionContext)    //behavior execute    behavior.Execute(ctx, executionContext)    //behavior leave    behavior.Leave(ctx, executionContext)}

相比于start,signal需要讀取執行的細節信息,找到之前失敗的執行節點位置,并加載到上下文中,再繼續執行。xiX28資訊網——每日最新資訊28at.com

對于失敗節點信息的持久化有兩種方式:第一,可以選擇在流程執行結束持久化;第二,可以通過listener在每個執行節點結束持久化。具體根據實際業務場景對于性能、數據一致性的要求做出抉擇。xiX28資訊網——每日最新資訊28at.com

并發場景考慮

  1. behavior策略中肯定會出現定制、并發、處理多個執行節點到場景的問題,如果同時修改必定會造成數據錯亂。簡單的方法推薦使用帶鎖的容器存儲,可以被修改的信息(response),此處使用的是github.com/bytedance/gopkg包里面封裝的skipmap。
  2. lockstrategy可以自己定義最適配業務場景的,最簡單的方案是redis鎖,同時也考慮到系統異常退出后的恢復問題。可以參考redis官網解決特殊情況下的鎖異常解決方案:https://redis.io/commands/setnx/

后續的工作

輕量級流程引擎的基本功能到此已經實現,后續的擴展優化可以圍繞以下方向進行:xiX28資訊網——每日最新資訊28at.com

  1. 界面化展示,可以將鏈路執行情況展示出來
  2. 策略behavior維度擴展,適配各種業務場景
  3. 增加子流程的維度,可以復用原先的執行邏輯

Demo示例

以下為簡單的processconfiguration的配置信息,此處使用DefaultBehavior,即同步順序執行策略。xiX28資訊網——每日最新資訊28at.com

{    "ProcessContentList":[        {            "Behavior":"DefaultBehavior",            "DelegationList":[                {                    "Code":"sample1"                },                {                    "Code":"sample2"                },                {                    "Code":"sample3"                }            ]        },        {            "Behavior":"DefaultBehavior",            "DelegationList":[                {                    "Code":"sample4"                },                {                    "Code":"sample5"                }            ]        }    ]}

圖片圖片xiX28資訊網——每日最新資訊28at.com

在listener里面加入日志,這樣可以追溯出整個流程的執行流程,以便更好的監控整個流程的運行狀態。xiX28資訊網——每日最新資訊28at.com

實際使用

以ClickHouse集群縮容為例:xiX28資訊網——每日最新資訊28at.com

圖片圖片xiX28資訊網——每日最新資訊28at.com

{    "ProcessContentList":[        // 查詢所有需要重分布的table        {            "Behavior":"DefaultBehavior",// 順序執行            "DelegationList":[                {                    "Code":"hor_reshard_table_loop"                 }            ]        },        // 遍歷所有table進行數據的重分布         {            "LoopKey":"reshard_table_loop_key",            "Behavior":"NonBlockLoopBehavior",// 非阻塞循環處理            "DelegationList":[                {                    "Code":"hor_reshard_table"                }            ]        },        // 進行刪除節點操作        {            "Behavior":"DefaultBehavior",            "DelegationList":[                {                    "Code":"hor_start_remove_node"                },                {                    "Code":"hor_prepare_node_vcloud",                    "PostCode":"hor_rollback_remove_node_vcloud"http:// 統一失敗回滾處理                },                {                    "Code":"hor_update_config_vcloud",                    "PostCode":"hor_rollback_remove_node_vcloud"                },                {                    "Code":"hor_set_cluster_running",                    "PostCode":"hor_rollback_remove_node_vcloud"                },                {                    "Code":"hor_release_node"                },                {                    "Code":"hor_callback_bill"                }            ]        }    ]}

總結

一個流程引擎適配所有的業務場景幾乎是不可能,除非接受復雜的方案設計,而第三方流程引擎對于日常的業務開發顯得太笨重。輕量級流程引擎則會簡化接入方式,減少了過多http請求帶來的性能損耗,更加靈活多變,追述問題也變得簡單。xiX28資訊網——每日最新資訊28at.com

在ByteHouse中加入流程引擎的能力,能以較小的代價給業務更多重試的可能性,而不需要反復回滾,特別對于耗時很長的任務,能帶來更好用戶使用體驗。除此之外,流程引擎還能將業務流程模版化,增加接口服務的復用性,使得業務代碼的可讀性、擴展性得到提升,方便后期維護。xiX28資訊網——每日最新資訊28at.com

火山引擎云原生數據倉庫ByteHouse是火山引擎旗下的一款云原生數據倉庫,為用戶提供極速分析體驗,能夠支撐實時數據分析和海量數據離線分析,同時還具備便捷的彈性擴縮容能力,極致分析性能和豐富的企業級特性,助力客戶數字化轉型。xiX28資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-10443-0.html火山引擎 ByteHouse:ClickHouse 如何保證海量數據一致性

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 火山引擎 DataWind 產品可視化能力揭秘

下一篇: Google 2023開發者大會簡單回顧 - Web 平臺新動向

標簽:
  • 熱門焦點
  • Redmi Buds 4開箱簡評:才199還有降噪 可以無腦入

    在上個月舉辦的Redmi Note11T Pro系列新機發布會上,除了兩款手機新品之外,Redmi還帶來了兩款TWS真無線藍牙耳機產品,Redmi Buds 4和Redmi Buds 4 Pro,此前我們在Redmi Note11T
  • 6月安卓手機好評榜:魅族20 Pro蟬聯冠軍

    性能榜和性價比榜之后,我們來看最后的安卓手機好評榜,數據來源安兔兔評測,收集時間2023年6月1日至6月30日,僅限國內市場。第一名:魅族20 Pro好評率:95%5月份的時候魅族20 Pro就是
  • 使用LLM插件從命令行訪問Llama 2

    最近的一個大新聞是Meta AI推出了新的開源授權的大型語言模型Llama 2。這是一項非常重要的進展:Llama 2可免費用于研究和商業用途。(幾小時前,swyy發現它已從LLaMA 2更名為Lla
  • 2023年,我眼中的字節跳動

    此時此刻(2023年7月),字節跳動從未上市,也從未公布過任何官方的上市計劃;但是這并不妨礙它成為中國最受關注的互聯網公司之一。從2016-17年的抖音強勢崛起,到2018年的“頭騰
  • 破圈是B站頭上的緊箍咒

    來源 | 光子星球撰文 | 吳坤諺編輯 | 吳先之每年的暑期檔都少不了瞄準追劇女孩們的古偶劇集,2021年有優酷的《山河令》,2022年有愛奇藝的《蒼蘭訣》,今年卻輪到小破站抓住了追
  • 小米MIX Fold 3下月亮相:今年唯一無短板的全能折疊屏

    這段時間以來,包括三星、一加、榮耀等等有不少品牌旗下的最新折疊屏旗艦都有新的進展,其中榮耀、三星都已陸續發布了最新的折疊屏旗艦,尤其號榮耀Magi
  • OPPO、vivo、小米等國內廠商Q2在印度智能手機市場份額依舊高達55%

    7月20日消息,據外媒報道,研究機構的報告顯示,在全球智能手機出貨量同比仍在下滑的大背景下,印度這一有潛力的市場也未能幸免,出貨量同比也有下滑,多家廠
  • 滴滴違法違規被罰80.26億 共存在16項違法事實

    滴滴違法違規被罰80.26億 存在16項違法事實開始于2121年7月,歷經一年時間,網絡安全審查辦公室對“滴滴出行”網絡安全審查終于有了一個暫時的結束。據“網信
  • SN570 NVMe SSD固態硬盤 價格與性能兼具

    SN570 NVMe SSD固態硬盤是西部數據發布的最新一代WD Blue系列的固態硬盤,不僅閃存技術更為精進,性能也得到了進一步的躍升。WD Blue SN570 NVMe SSD的包裝外
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
欧美极品aⅴ影院| 日韩视频免费观看| 国产乱肥老妇国产一区二| 国产精品一区二区在线观看网站 | 久久亚洲欧美| 国产日韩成人精品| 国产综合精品| 国产精品毛片| 国内一区二区在线视频观看| 亚洲黄网站黄| 亚洲自拍16p| 久久躁狠狠躁夜夜爽| 欧美日韩国产一中文字不卡| 国产精自产拍久久久久久| 一区在线播放| 亚洲视频网站在线观看| 亚洲在线黄色| 久久综合色一综合色88| 欧美日韩精品综合在线| 免费在线成人av| 国产精品av久久久久久麻豆网| 欧美国产激情二区三区| 国产精品每日更新在线播放网址| 欧美日韩在线一区二区| 国产亚洲制服色| 国产精品久久久久久久浪潮网站| 狠狠色狠色综合曰曰| 一本色道久久88综合日韩精品| 久久疯狂做爰流白浆xx| 欧美高清成人| 久久精品在线| 欧美日韩国产不卡| 狠狠爱综合网| 亚洲一区二区成人在线观看| 久久伊人亚洲| 国产精品色婷婷| 亚洲精品专区| 久久久久久久网| 国产精品普通话对白| 亚洲免费高清视频| 久久全球大尺度高清视频| 国产精品区免费视频| 亚洲国产精品女人久久久| 欧美在线不卡| 国产精品久久| 日韩视频精品| 免费久久精品视频| 国产亚洲一区在线| 亚洲一区二区三区四区五区黄| 欧美大片在线看免费观看| 国产亚洲亚洲| 亚洲综合色在线| 欧美日韩一区二区在线观看视频| 亚洲二区在线视频| 久久精品2019中文字幕| 国产精品日韩在线| 在线综合视频| 欧美日韩免费一区二区三区视频 | 久久久久一本一区二区青青蜜月| 国产精品扒开腿做爽爽爽视频| 亚洲欧洲精品一区二区三区波多野1战4| 久久精品av麻豆的观看方式| 国产精品一区视频| 亚洲视频久久| 欧美日韩三级一区二区| 亚洲精品日韩激情在线电影| 久热爱精品视频线路一| 一区二区在线观看视频| 久久久久成人精品| 国外成人在线视频| 久久爱另类一区二区小说| 国产伦精品一区二区三区四区免费 | 国产欧美精品一区| 亚洲女优在线| 男人的天堂亚洲在线| 欧美激情一二三区| 亚洲高清123| 美女日韩在线中文字幕| 欧美日韩在线精品| 日韩视频在线观看免费| 欧美激情亚洲| 亚洲免费观看视频| 欧美极品影院| 亚洲免费观看高清在线观看 | 国产精品一二一区| 国产一级精品aaaaa看| 亚洲一区欧美一区| 欧美视频精品在线观看| 亚洲乱码精品一二三四区日韩在线| 老司机免费视频一区二区三区 | 欧美99在线视频观看| 国产精品亚洲а∨天堂免在线| 亚洲视频免费在线| 国产精品乱子乱xxxx| 亚洲欧美日韩精品久久久| 免费日韩av| 亚洲日本va在线观看| 亚洲欧美清纯在线制服| 国产精品日韩欧美一区二区| 西瓜成人精品人成网站| 国产一区二区电影在线观看 | 久久免费精品视频| 亚洲国产精品久久久久婷婷884| 欧美大片一区二区三区| 一本色道婷婷久久欧美| 国产精品夜夜夜一区二区三区尤| 欧美在线亚洲在线| 亚洲福利视频网| 久久精品一区二区| 亚洲国产日韩欧美一区二区三区| 欧美激情一区二区三区在线视频 | 久久av一区| 亚洲高清视频一区二区| 欧美日韩不卡视频| 亚洲国产精品va在线看黑人 | 亚洲第一综合天堂另类专| 欧美日本网站| 亚洲欧洲一区二区三区在线观看| 欧美理论大片| 亚洲综合清纯丝袜自拍| 韩国成人精品a∨在线观看| 欧美国产精品v| 亚洲一区3d动漫同人无遮挡| 国产日韩在线视频| 午夜亚洲性色福利视频| 一区二区三区在线免费播放| 欧美激情综合色| 亚洲欧美成人| 亚洲福利视频二区| 国产精品久久久久久久一区探花 | 亚洲欧美制服另类日韩| 国产精品日韩在线一区| 久久―日本道色综合久久| 日韩午夜剧场| 国产日韩欧美日韩大片| 欧美成人免费在线| 亚洲欧美中文日韩v在线观看| 久久精品一区二区三区不卡| 亚洲第一天堂无码专区| 国产精品户外野外| 久久综合九九| 亚洲性图久久| 亚洲国产精品久久久久秋霞蜜臀| 国产精品国产三级国产aⅴ浪潮| 久久亚洲精品一区| 亚洲嫩草精品久久| 亚洲精品黄网在线观看| 国产一区二区三区精品久久久| 欧美日韩理论| 久久香蕉国产线看观看av| 亚洲一区二区三| 亚洲人成网站999久久久综合| 国产日韩av一区二区| 欧美三级精品| 美女脱光内衣内裤视频久久网站| 亚洲欧美日韩一区二区| 亚洲精品美女在线| 狠狠入ady亚洲精品| 麻豆av一区二区三区| 亚洲伊人色欲综合网| 91久久精品国产91久久性色tv| 国产亚洲视频在线| 国产精品国产一区二区| 欧美极品在线观看| 久久中文字幕一区| 欧美一区二区三区在| 亚洲图片欧洲图片av| 国产亚洲成av人在线观看导航| 欧美精品一区二区在线观看| 久久久亚洲一区| 午夜精品久久一牛影视| 一区二区高清在线观看| 亚洲国产91| 国内成+人亚洲| 欧美国产高清| 久久夜色精品国产欧美乱极品| 亚洲欧美成人一区二区三区| 99热在线精品观看| 亚洲日本aⅴ片在线观看香蕉| 一区二区三区在线高清| 国产一区二区久久久| 国产精品视频1区| 国产精品国产福利国产秒拍| 欧美日韩p片| 欧美日本免费| 欧美在线精品一区| 亚洲一区二区三区久久 | 久久夜精品va视频免费观看| 久久精品国产精品亚洲| 香蕉乱码成人久久天堂爱免费 | 欧美一区二区三区四区视频| 亚洲一区二区在线视频| 一区二区三区日韩在线观看| 亚洲乱码久久| 99精品国产在热久久| 亚洲精品日韩欧美| 亚洲精品久久久久久下一站| 亚洲国产午夜| 亚洲精品1区2区| 亚洲日本国产| 日韩一级大片| 一区二区三区视频在线播放| 亚洲深夜福利| 亚洲一级一区|