久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術(shù)文章
文章詳情頁

AspNetCore&MassTransit Courier實(shí)現(xiàn)分布式事務(wù)的詳細(xì)過程

瀏覽:529日期:2022-06-09 11:41:00
目錄
  • 分布式事務(wù)
  • Saga模式
    • 執(zhí)行過程
    • 恢復(fù)策略
    • 協(xié)作方式
      • 編排式(Orchestrator)
      • 協(xié)同式(Choreography)
  • MassTransit Courier
    • 補(bǔ)償服務(wù)
      • 服務(wù)建立
        • 服務(wù)配置
          • 服務(wù)編排
            • 執(zhí)行請求
              • 執(zhí)行成功
              • 執(zhí)行補(bǔ)償
          • 參考文獻(xiàn)

            在之前的一篇博文中,CAP框架可以方便我們實(shí)現(xiàn)非實(shí)時(shí)、異步場景下的最終一致性,而有些用例總是無法避免的需要在實(shí)時(shí)、同步場景下進(jìn)行,可以借助Saga事務(wù)來解決這一困擾。在一些博文和倉庫中也搜尋到了.Net下實(shí)現(xiàn)Saga模式的解決方案MassTransit,這就省得自己再造輪子了。

            分布式事務(wù)

            分布式系統(tǒng)中,分布式事務(wù)是一個(gè)不能避免的問題,如何保證不同節(jié)點(diǎn)間的數(shù)據(jù)一致性。舉個(gè)常見的例子,下訂單、減庫存、扣余額,三者在單個(gè)節(jié)點(diǎn)時(shí),可以借助本地事務(wù),實(shí)現(xiàn)要么成功要么失敗。而當(dāng)三者處于不同節(jié)點(diǎn)時(shí),又參雜了如網(wǎng)絡(luò)環(huán)境、節(jié)點(diǎn)自身環(huán)境、服務(wù)環(huán)境等各種因素,使得三個(gè)節(jié)點(diǎn)想要實(shí)現(xiàn)要么成功、要么失敗就增加了許多困難。

            CAP理論和BASE理論很好的詮釋了這一問題,也有了許多的解決分布式事務(wù)的方案,如2PC、3PC、TCC、本地消息表、Saga等一系列解決方案,面對不同場景、不同要求等可選擇不同的解決方案。

            數(shù)據(jù)一致性容錯(cuò)性復(fù)雜性性能維護(hù)成本2PC強(qiáng)低中低低3PC強(qiáng)低高低中TCC弱高高中高本地消息表弱高低中中MQ事務(wù)弱高低高中Saga事務(wù)弱高高中高

            在之前提到過一個(gè)基于本地消息表的CAP框架,借助最終一致性很方便的解決了異步非實(shí)時(shí)請求下的分布式事務(wù),而對于大部分場景雖然可以直接或者妥協(xié)方式使用著異步非實(shí)時(shí),如同步實(shí)時(shí)場景的下訂單且減庫存變更到異步非實(shí)時(shí)場景的下訂單后發(fā)事件減庫存,但是總有那么一些場景,不得不去考慮同步實(shí)時(shí)請求下的分布式事務(wù)。

            Saga模式

            Saga模式又叫做長時(shí)間運(yùn)行事務(wù)(Long-running-transaction), 由普林斯頓大學(xué)的 Hector Garcia-Molina和Kenneth Salem 1987年發(fā)表的論文《Sagas》。核心思想是將長事務(wù)拆分為多個(gè)本地短事務(wù),通過保證所有短事務(wù)的成功或失敗來決定整體的成功或失敗,由Saga事務(wù)協(xié)調(diào)器協(xié)調(diào)管理,所有節(jié)點(diǎn)執(zhí)行成功,則成功,如有節(jié)點(diǎn)失敗,則反向執(zhí)行前置節(jié)點(diǎn)的補(bǔ)償操作。

            • 每個(gè)Saga事務(wù)由一系列冪等的有序子事務(wù)(sub-transaction) Ti 組成。
            • 每個(gè)Ti 都有對應(yīng)的冪等補(bǔ)償動(dòng)作Ci,補(bǔ)償動(dòng)作用于撤銷Ti造成的結(jié)果。

            執(zhí)行過程

            當(dāng)正常執(zhí)行時(shí),依照T1、T2、T3三個(gè)短事務(wù)正常執(zhí)行下去,直到最后一個(gè)Tn事務(wù)執(zhí)行完畢,宣告整個(gè)事務(wù)的成功。

            而當(dāng)執(zhí)行到某個(gè)Tj出現(xiàn)故障時(shí),則反向補(bǔ)償之前的Tj-1..T1,每個(gè)對應(yīng)的補(bǔ)償操作Cj-1...C1,其中Tj事務(wù)由于在執(zhí)行階段就已失敗,所以Tj對應(yīng)的補(bǔ)償動(dòng)作Cj不需要執(zhí)行,即也確定了最后一個(gè)Tn事務(wù)可以不設(shè)置補(bǔ)償動(dòng)作Cn。

            恢復(fù)策略

            • 向前恢復(fù)(forward recovery):對于Ti事務(wù)的執(zhí)行,部分場景下可能因?yàn)閿?shù)據(jù)庫的連接、網(wǎng)絡(luò)的波動(dòng)等導(dǎo)致短暫的失敗,對Ti事務(wù)重試執(zhí)行,以確保整個(gè)事務(wù)的執(zhí)行,如執(zhí)行T1, T2, T3,當(dāng)執(zhí)行T3失敗時(shí),不直接宣告失敗,對T3執(zhí)行重試以排除部分不穩(wěn)定因素,如在若干次重試無效后,再考慮向后恢復(fù)。

            • 向后恢復(fù)(backward recovery):按照執(zhí)行順序方式作為向前的指向,則向后為反向補(bǔ)償,對已執(zhí)行過的節(jié)點(diǎn)順序倒退執(zhí)行各Ti的補(bǔ)償動(dòng)作Ci,也就是把走過的路往回走,對執(zhí)行過的操作執(zhí)行業(yè)務(wù)上的反操作,如正向流程執(zhí)行減庫存則補(bǔ)償操作時(shí)執(zhí)行加庫存。

            協(xié)作方式

            對于服務(wù)與服務(wù)間的協(xié)作,我們通常有兩種模式:Orchestration(編排式) 和 Choreography(協(xié)同式),在Saga模式中也有著這兩種的實(shí)現(xiàn)。

            • 編排式(Orchestrator):把 Saga 的決策和執(zhí)行順序邏輯集中在一個(gè) Saga 編排器類中。Saga 編排器發(fā)出命令式消息給各個(gè) Saga 參與方,指示這些參與方服務(wù)完成具體操作(本地事務(wù))。
            • 協(xié)同式(Choreography):把 Saga 的決策和執(zhí)行順序邏輯分布在 Saga 的每個(gè)參與方中,它們通過交換事件的方式來進(jìn)行溝通。

            編排式與協(xié)同式的差異僅在于服務(wù)之間的協(xié)作方式,每個(gè)參與服務(wù)的接口定義卻沒有任何區(qū)別。

            編排式(Orchestrator)

            編排式的 Saga 需要開發(fā)人員定義一個(gè)編排器類,用于編排一個(gè)Saga中多個(gè)參與服務(wù)執(zhí)行的流程。如果整個(gè)業(yè)務(wù)流程正常結(jié)束,業(yè)務(wù)就成功完成,一旦這個(gè)過程的任何環(huán)節(jié)出現(xiàn)失敗,Saga編排器類就會(huì)以相反的順序調(diào)用補(bǔ)償操作,重新進(jìn)行業(yè)務(wù)回滾。

            對于每個(gè)參與的服務(wù)而言,需要做的事情是

            • 訂閱并處理命令消息
            • 執(zhí)行命令后返回響應(yīng)消息
            • 設(shè)計(jì)執(zhí)行邏輯和補(bǔ)償邏輯

            以提交訂單為例,假設(shè)場景是分布式系統(tǒng)下,進(jìn)程間以消息傳遞進(jìn)行通信:

            1、事務(wù)發(fā)起方的主業(yè)務(wù)邏輯請求預(yù)先定義好的Saga編排器類(內(nèi)部編排了執(zhí)行順序)。

            2、Saga編排器類向MQ發(fā)送減庫存事件,庫存服務(wù)訂閱事件、執(zhí)行處理并返回MQ處理結(jié)果。

            3、Saga編排器類向MQ發(fā)送減余額事件,支付服務(wù)訂閱事件、執(zhí)行處理并返回MQ處理結(jié)果。

            4、Saga編排器類向MQ發(fā)送創(chuàng)建訂單命令,訂單服務(wù)訂閱事件并按照命令創(chuàng)建訂單。

            5、主業(yè)務(wù)邏輯接收并處理Saga編排器類處理結(jié)果。

            6、整個(gè)過程由Saga 編排器類對接收到的回復(fù)進(jìn)行判決,來決定是繼續(xù)執(zhí)行還是懸崖勒馬。

            協(xié)同式(Choreography)

            沒有集中式的編排類,而是各參與方間相互訂閱,一個(gè)服務(wù)訂閱另一個(gè)服務(wù)的事件。

            先由事務(wù)發(fā)起方執(zhí)行邏輯并發(fā)布一個(gè)事件,該事件被一個(gè)或多個(gè)服務(wù)進(jìn)行訂閱,這些服務(wù)執(zhí)行本地?cái)?shù)據(jù)庫操作并發(fā)布(或不發(fā)布)新的事件,該部分需要保證本地?cái)?shù)據(jù)庫的操作成功且寫入MQ的消息也成功,可考慮使用本地消息表或是基于MQ事務(wù)。當(dāng)最后一個(gè)服務(wù)執(zhí)行本地事務(wù)并且不發(fā)布任何事件或者發(fā)布的事件沒有被任何Saga參與者訂閱意味著事務(wù)結(jié)束,則整個(gè)業(yè)務(wù)流程的分布式事務(wù)完成。如果某一服務(wù)出現(xiàn)故障,那么則反向發(fā)布事件,執(zhí)行補(bǔ)償操作,以此回滾。

            以提交訂單為例,假設(shè)場景是分布式系統(tǒng)下,進(jìn)程間以消息傳遞進(jìn)行通信:

            1、事務(wù)發(fā)起方執(zhí)行主業(yè)務(wù)邏輯發(fā)送提交訂單命令。

            2、庫存服務(wù)訂閱事件、扣減庫存并發(fā)布已扣減事件。

            3、訂單服務(wù)訂閱庫存已扣減事件,創(chuàng)建訂單并發(fā)布訂單已創(chuàng)建事件。

            4、支付服務(wù)訂閱訂單已創(chuàng)建事件,執(zhí)行支付并發(fā)布訂單已支付事件。

            5、主業(yè)務(wù)邏輯訂閱訂單已支付事件并處理。

            當(dāng)某服務(wù)內(nèi)執(zhí)行時(shí)如存在異常,則反向發(fā)布事件,如訂單創(chuàng)建失敗,則發(fā)布OrderCreatedFailed事件,庫存服務(wù)訂閱該事件并執(zhí)行補(bǔ)償操作。

            相比而言,編排式中參與服務(wù)無需向協(xié)同式中訂閱上游服務(wù)的事件,減少了服務(wù)間對事件協(xié)議的依賴,而只需要關(guān)心集權(quán)的編排器類發(fā)送的消息。

            MassTransit Courier

            補(bǔ)償服務(wù)

            當(dāng)開啟一個(gè)事務(wù)前,需要做一些準(zhǔn)備,準(zhǔn)備一個(gè)事務(wù)Id,記錄整個(gè)事務(wù)執(zhí)行情況,各Tj事務(wù)執(zhí)行情況,當(dāng)前請求上下文參數(shù),入?yún)?shù)記錄等,以方便執(zhí)行補(bǔ)償操作時(shí)需要用到。如當(dāng)Tj事務(wù)執(zhí)行失敗時(shí),需要對Cj-1到C1執(zhí)行補(bǔ)償操作,此時(shí)各補(bǔ)償操作需要一些正向執(zhí)行T1,Tj-1的請求參數(shù)或執(zhí)行結(jié)果,因此都需要記錄下來。

            在Courier中,通過Routing Slip來完成這些記錄,創(chuàng)建一個(gè)Guid,記錄請求上下文參數(shù)信息,可以綁定幾個(gè)內(nèi)置事件,在各階段到來時(shí)會(huì)發(fā)送事件,如有需要可以訂閱。

            var builder = new RoutingSlipBuilder(NewId.NextGuid());builder.AddSubscription(context.ReceiveContext.InputAddress, RoutingSlipEvents.Completed | RoutingSlipEvents.Faulted | RoutingSlipEvents.CompensationFailed);builder.AddVariable("RequestId", context.RequestId);builder.AddVariable("ResponseAddress", context.ResponseAddress);builder.AddVariable("FaultAddress", context.FaultAddress);builder.AddVariable("Request", context.Message);//組合一系列Activityvar routingSlip = builder.Build();await context.Execute(routingSlip).ConfigureAwait(false);

            服務(wù)建立

            弄了個(gè)Demo,建立了三個(gè)服務(wù),此處我使用編排式來完成,但無論是選用編排式還是協(xié)同式,都借助RabbitMQ實(shí)現(xiàn)消息傳遞。

            每個(gè)服務(wù)都安裝了MassTransit相關(guān)的包

            MassTransit.AspNetCoreMassTransit.RabbitMQ

            將Saga編排器類放置在OrderService中了,對于編排器類的放置,個(gè)人認(rèn)為是應(yīng)該看用例的主服務(wù)是誰而放置,想過放在BFF去協(xié)調(diào)三個(gè)服務(wù),但是總是感覺不是BFF的職責(zé)范圍。

            服務(wù)配置

            在各服務(wù)中對MassTransit配置,如下在OrderService中對MassTransit需要使用到的RabbitMQ配置,對需要進(jìn)行多個(gè)服務(wù)協(xié)作的用例配置Routing Slip,對消息隊(duì)列偵聽訂閱需要的事件并配置相應(yīng)的Activity處理。

            services.AddMassTransit(x =>{    var currentAssembly = Assembly.GetExecutingAssembly();    x.AddActivities(currentAssembly);    x.AddConsumers(currentAssembly);    x.AddRequestClient<createordercommand>();    x.UsingRabbitMq((context, cfg) =>    {// 配置RabbitMQcfg.Host(Configuration["RabbitmqConfig:HostIP"], ushort.Parse(Configuration["RabbitmqConfig:HostPort"]), Configuration["RabbitmqConfig:VirtualHost"], h =>{    h.Username(Configuration["RabbitmqConfig:Username"]);    h.Password(Configuration["RabbitmqConfig:Password"]);});//配置Routing Slipcfg.ReceiveEndpoint("CreateOrderCommand", ep =>{    ep.ConfigureConsumer<createorderrequestproxy>(context);    ep.ConfigureConsumer<createorderresponseproxy>(context);});// 配置訂閱隊(duì)列及Handler處理cfg.ReceiveEndpoint("CreateOrder_execute", ep =>{    ep.ExecuteActivityHost<createorderactivity, createordermodel="">(context);});    });});services.AddMassTransitHostedService();

            服務(wù)編排

            構(gòu)建Routing Slip,此處依據(jù)用例的需求,對需要協(xié)作的服務(wù)編排,組合一系列的Activity。

            Task BuildRoutingSlip(RoutingSlipBuilder builder, ConsumeContext<createordercommand> request){    builder.AddActivity("ReduceStock", new Uri("..."), new {});    builder.AddActivity("DeductBalance", new Uri("..."), new {});    builder.AddActivity("CreateOrder", new Uri("..."), new { });    return Task.CompletedTask;}

            執(zhí)行請求

            當(dāng)請求進(jìn)入后,通過RequestClient發(fā)送CreateOrderCommand,同步等待執(zhí)行結(jié)果,再由編排器類負(fù)責(zé)協(xié)調(diào)預(yù)設(shè)好的Activity,發(fā)送事件到消息隊(duì)列,經(jīng)各Activity訂閱處理最終返回結(jié)果。

            [Route("[controller]")]public class OrderController : ControllerBase{    private readonly IRequestClient<createordercommand> _createOrderClient;    public OrderController(IRequestClient<createordercommand> createOrderClient)    {_createOrderClient = createOrderClient;    }    [HttpGet("CreateOrder")]    public async Task<commoncommandresponse<createorderresult>> CreateOrder()    {var result = await _createOrderClient.GetResponse<commoncommandresponse<createorderresult>>(new CreateOrderCommand(){    // ...});return result.Message;    }}

            各服務(wù)中對于Activity設(shè)置偵聽隊(duì)列以及請求信息,調(diào)用Execute執(zhí)行邏輯,當(dāng)出現(xiàn)異常時(shí)返回到MQ通知編排器類,在對之前執(zhí)行的Activity執(zhí)行Compensate。如在CreateOrderActivity中執(zhí)行異常,由編排器類執(zhí)行補(bǔ)償,ReduceStockActivity調(diào)用Compensate,執(zhí)行增加庫存邏輯

            public class ReduceStockActivity : IActivity<ReduceStockModel, ReduceStockLog>{    public async Task<ExecutionResult> Execute(ExecuteContext<ReduceStockModel> context)    {var argument = context.Arguments;// 扣減庫存await Task.Delay(100);return context.Completed(new ReduceStockLog() { ProductId = argument.ProductId, Amount = 1 });    }    public async Task<CompensationResult> Compensate(CompensateContext<ReduceStockLog> context)    {// 增加庫存await Task.Delay(100);return context.Compensated();    }}

            執(zhí)行成功

            用例請求執(zhí)行后,先由Controller發(fā)送請求,再由庫存服務(wù)扣減庫存,支付服務(wù)扣減余額,最后由訂單服務(wù)創(chuàng)建訂單,當(dāng)創(chuàng)建失敗時(shí),執(zhí)行補(bǔ)償操作,庫存服務(wù)增加庫存,支付服務(wù)增加余額。

            執(zhí)行補(bǔ)償

            用例請求執(zhí)行后,先由Controller發(fā)送請求,再由庫存服務(wù)扣減庫存,支付服務(wù)扣減余額,最后由訂單服務(wù)創(chuàng)建訂單,當(dāng)創(chuàng)建失敗時(shí),執(zhí)行補(bǔ)償操作,庫存服務(wù)增加庫存,支付服務(wù)增加余額。

            在整個(gè)事務(wù)失敗后,先會(huì)返回異常,再由編排器執(zhí)行補(bǔ)償操作,實(shí)現(xiàn)最終的數(shù)據(jù)一致性。MassTransit也提供了重試機(jī)制以實(shí)現(xiàn)向前恢復(fù),避免因數(shù)據(jù)庫連接超時(shí)、網(wǎng)絡(luò)波動(dòng)等問題造成的失敗。

            參考文獻(xiàn)

            到此這篇關(guān)于AspNetCore&amp;MassTransit Courier實(shí)現(xiàn)分布式事務(wù)的文章就介紹到這了,更多相關(guān)AspNetCore分布式事務(wù)內(nèi)容請搜索以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持!

            標(biāo)簽: ASP.NET
            主站蜘蛛池模板: 亚洲日本欧美日韩高观看 | 逼逼av| 综合婷婷 | 久久久久无码国产精品一区 | 国产精品免费视频一区 | 亚洲成人伦理 | 国产精品久久久久久久美男 | 久久成人综合 | 日韩精品www| 国产精品久久久久久妇女6080 | 欧美精品二区 | 色爱区综合五月激情 | 欧美精品一区视频 | 337p亚洲欧洲 | 欧美日韩中文字幕 | 国产一区二区三区久久久 | 欧美日韩专区 | 亚洲一区二区三区四区五区午夜 | 午夜妇女aaaa区片 | 盗摄精品av一区二区三区 | 国产精品777 | 我看午夜视频 | 亚洲人成网站999久久久综合 | 在线观看国产wwwa级羞羞视频 | 黄色片视频在线观看 | 国产黄色网址在线观看 | 91精品久久久久久久 | 一本色道精品久久一区二区三区 | 在线看av网址 | 91精品综合久久久久久五月天 | 欧美日韩精品一区二区 | 精品日韩一区二区 | 欧美一区二区三 | 99视频在线看 | 欧洲毛片| 成人日韩 | 欧美日韩二区三区 | 精品人伦一区二区三区蜜桃视频 | 日韩一区精品视频 | 久久亚洲综合 | 三区在线观看 | 久久久久国产精品免费免费搜索 | 国产精品久久久久久久久久 | 精品亚洲一区二区三区 | 亚洲精品久久久久久久久久久 | 久久av网 | 日韩久久久久久 | 久久国产欧美一区二区三区精品 | 91社影院在线观看 | 国产二区视频 | 日韩国产欧美精品 | 欧美一级久久久 | 一级毛片,一级毛片 | 国产精品久久久久久久久免费丝袜 | 日韩国产欧美一区 | 精品欧美日韩 | 亚洲免费成人av | 不卡一区 | 大象视频成人在线观看 | 国产片在线观看 | 久久中文字幕一区 | 在线观看成人网 | 一区二区三区四区视频 | 精品一区二区三区在线观看 | 国产精品久久久久久 | 国产精品美女久久久久久久久久久 | 欧美久久精品 | 男女视频在线观看 | 国产成人一级片 | 国产精品久久久久无码av | 日本亚洲国产一区二区三区 | 国产成人午夜高潮毛片 | 日韩精品在线一区 | h视频网站在线 | 99福利视频 | 欧美国产日韩在线观看 | 亚洲免费一区 | 99国产精品久久久 | a视频在线免费观看 | 日本黄色大片免费 | 日韩精品1区2区3区 成人黄页在线观看 | 伊人最新网址 | 精品一区二区三区免费毛片爱 | 亚洲综合成人网 | 一区二区三区在线 | 欧 | 午夜视频在线 | 日本成人片网站 | 久久久成人av | 日韩成人一区二区 | 日韩三级在线 | 日韩欧美国产网站 | 国产欧美精品一区二区 | 在线婷婷 | 亚洲欧美在线观看 | 日韩免费一区二区 | 欧美精品在线免费观看 | 精品日韩一区二区 | 日韩国产欧美视频 | 亚洲成人黄色 | 99re在线 | 精品国产乱码久久久久久1区2区 | 国产精品日韩欧美 | 中文字幕电影在线 | 国产欧美综合一区 | 毛片视频免费 | 欧美一区二区黄色片 | 日本成人午夜影院 | 国产精品中文 | 人人澡人人射 | 精品一区二区久久 | 成人av网站在线观看 | 欧美日韩一二三区 | 女人毛片 | a一级黄| 欧美一级爆毛片 | 极品久久 | 免费在线一区二区三区 | 国产在线日韩 | 国产精品一二 | 精品中文字幕在线观看 | 午夜寂寞少妇aaa片毛片 | 一级毛片大全免费播放 | 欧美一区二区三区视频 | 久久精品亚洲精品国产欧美 | 国产精品毛片久久久久久 | av免费在线播放 | 久久久久久久久久影院 | 国产最好的av国产大片 | 超碰97人人人人人蜜桃 | 亚洲首页 | 国产成人午夜高潮毛片 | 久久精品国产视频 | 欧美专区中文字幕 | 最近日韩中文字幕 | 日韩一区二区三区在线观看 | 色婷婷国产精品综合在线观看 | 午夜三区 | 亚洲91精品 | 久久精品久久久久 | 国产精品久久久久影院色老大 | 涩涩综合| jav成人av免费播放 | 欧美日本免费一区二区三区 | 国产91久久精品一区二区 | aaaa网站| 在线国产91| 国产又粗又长又硬又猛电影 | 午夜影院免费观看视频 | 北条麻妃国产九九九精品小说 | √天堂在线| 影音先锋男人网 | 亚洲一区二区福利 | 在线视频一区二区三区 | 欧美精品一区久久 | 一区二区三区久久 | 亚洲日韩中文字幕一区 | 中文字幕亚洲欧美日韩在线不卡 | 久久久久中文字幕 | 涩涩视频网站在线观看 | www.麻豆 | 免费在线亚洲 | 99视频免费 | 99精品全国免费观看视频软件 | 久久久综合色 | 成人在线激情 | 可以免费看的av | 国产91久久精品 | 欧美一区二区三区电影 | 99视频在线 | 亚洲av毛片一区二二区三三区 | 欧美激情一区二区三区在线观看 | 成人免费黄色毛片 | 亚洲精品一区二区三区中文字幕 | 日本黄色短片 | 国产成年免费视频 | 成人一级| 剑来高清在线观看 | 欧美激情精品久久久久久 | a级在线观看免费 | 国产大学生援交视频在线观看 | 91中文字幕在线观看 | 久草视频在线播放 | 亚洲二区在线视频 | 999视频在线免费观看 | 色天天综合久久久久综合片 | 中文字幕第一页在线 | 国产精品免费观看 | 国产精产国品一二三产区视频 | 日韩欧美国产一区二区三区 | 欧美成人在线影院 | 精品久久av| 羞羞视频在线观看免费 | 四虎永久免费 | 亚洲欧美一区二区在线观看 | 性视频一区 | 国产日韩一区 | 波多野结衣一二三 | 日韩欧美二区 | 国产亚洲综合一区二区 | 国产天天操 | 在线成人亚洲 | 毛片久久 | 国产成人精品一区二区三区 | 美女超碰在线 | 最新黄色网页 | 日本一区二区三区四区 | 国产精品99久久久久久www | 国产精品日韩在线观看 | 欧美一区二区免费 | 亚洲精品国产a久久久久久 国产毛片毛片 | 欧美日韩精品一区二区在线播放 | 久久99精品久久久久久琪琪 | 91视频在线看 | 成人久久久久久久久 | 都市激情av | 欧美精品成人一区二区三区四区 | 欧美精品一区二区在线观看 | 亚洲一区二区精品视频 | 国产96精品久久久 | 天天看夜夜爽 | 亚洲 中文 欧美 日韩 在线观看 | 日韩欧美视频一区 | 欧美福利二区 | 欧美日韩国产精品一区 | 日韩国产一区二区三区 | 婷婷激情五月 | 国产精品日韩欧美一区二区三区 | 亚洲天堂久久 | 日本黄a三级三级三级 | 国产精品福利视频 | 一区二区三区四区在线 | 国产精品一区二区久久久久 | 日韩中文一区二区三区 | 欧美日韩国产一区二区三区 | 在线h观看 | 国产精品永久免费自在线观看 | 日本久久久久久久久久 | 97久久久 | 国产a一三三四区电影 | 播放毛片 | 99免费视频 | 亚洲成人精品 | 日韩中文在线 | 欧洲一区二区在线观看 | 激情福利视频 | 欧美一级片在线观看 | 2020亚洲视频 | 国产91久久精品一区二区 | 日韩高清中文字幕 | 国产女人爽到高潮免费视频 | 亚洲欧洲精品视频在线观看 | 黄色在线 | 日韩精品免费在线视频 | 亚洲av毛片一区二二区三三区 | 视频1区2区 | 91超碰在线播放 | 嫩呦国产一区二区三区av | 龙珠z国语291集普通话 | 久久人爽| 国产精品久久一区二区三区 | 视频一区二区三区在线观看 | 韩日视频在线观看 | 日韩欧美在线观看视频 | 亚洲国产精品成人 | 一级毛片免费看 | 羞羞午夜| 国产精品成人国产乱一区 | 免费观看一级特黄欧美大片 | www国产免费| 天天色天天色 | 免费av一区二区三区 | 亚洲不卡在线 | 久久精品国产99国产精品 | 久热热 | 日韩一区二区中文字幕 | 日韩国产一区二区 | 亚洲天堂男人 | 国产视频精品视频 | 在线中文字幕日韩 | 国产精品18hdxxxⅹ在线 | 一区二区三区欧美在线 | 久久久91精品国产一区二区三区 | 中文字幕av亚洲精品一部二部 | 国产精品网站在线观看 | 精品久久久久久 | 大黄网站在线观看 | 久久久久久久国产精品 | 伦理午夜电影免费观看 | 在线观看免费av的网址 | 一区二区中文字幕 | 亚洲精品在线观看免费 | 久久国 | 国产一区亚洲 | 成人片网址 | 日本污视频在线观看 | 国产视频久久久久久 | 久草视频在线播放 | 精品欧美乱码久久久久久 | 精品亚洲一区二区三区 | 亚洲综合视频在线观看 | 午夜三区 | 丁香婷婷综合激情五月色 | 亚洲国产成人精品女人 | 免费的av在线 | av黄色在线免费观看 | 日本黄色a级 | 国产精品伦一区二区三级视频 | 国产精品久久久久久久久久久久久久 | 在线观看一级片 | 亚洲福利免费 | 婷婷免费视频 | 欧美日韩一级在线观看 | 毛片区 | 中文字幕在线一区 | 欧美精品久久一区 | 久久久久久亚洲精品 | 亚洲不卡视频在线 | 精品不卡 | 国产精品中文字幕在线播放 | 美女福利视频网站 | 一道本一区二区三区 | 国产免费黄色 | 成人三级免费 | 免费大片在线观看网站 | 伊人春色网 | 欧美日韩中文 | 日韩精品第一页 | 欧美第一页 | 九九精品视频在线 | 成人免费视屏 | 日韩欧美在线看 | 亚洲国产精品一区二区久久 | 国产精品第一国产精品 | 亚洲成人av| 国产亚洲精品精品国产亚洲综合 | 午夜黄色影院 | 中文字幕视频在线观看 | 日韩视频在线视频 | 婷婷午夜激情 | 色婷婷久久 | 中文字幕一二三区 | 91国内外精品自在线播放 | 国产一级淫免费播放m | 国产精品久久久久久二区 | 久久精品欧美一区二区三区不卡 | 伊人青青久 | 亚洲嫩草| 亚洲视频在线免费观看 | 一区二区精品在线 | 午夜不卡视频 | 精品日韩一区二区 | 国产中文一区二区三区 | 久久国产精品无码网站 | 成人免费淫片aa视频免费 | 天天摸天天操 | 91porn在线 | 精品一区二区三区在线视频 | 色综合天天天天做夜夜夜夜做 | www一起操| 免费国产一区二区 | 久久噜噜噜精品国产亚洲综合 | 国产在线精品一区二区三区 | 操人网 | 国产午夜精品一区二区三区视频 | 久久精品一区二区三区四区 | 亚洲视频一区在线 | 久久久久久麻豆 | 日韩中文久久 | 成人免费视频网站在线看 | 毛片网| 九九只有精品 | 精品国产一区二区三区在线观看 | 国产亚洲精品v | bxbx成人精品一区二区三区 | 久久久精品国产 | 欧美三级网 | 日本免费在线 | 精品在线91 | 欧美综合在线一区 | 最新精品在线 | 99久久国产| 亚洲欧洲在线观看 | 国产精品成av人在线视午夜片 | 国产特级毛片 | 91av在线视频播放 | 99精品99 | 狠狠操综合网 | 精品国产一区二区在线 | 激情欧美一区二区三区中文字幕 | 美日韩免费视频 | 97久久久国产精品 | 欧美一区二区三区免费在线观看 | 狠狠操狠狠操 | 三级视频在线观看 | 国产亚洲欧美一区 | 久久精品免费视频观看 | 99精品国自产在线 | 国产精品第一国产精品 | 亚洲久草 | 国产精品亚洲成人 | 久久男女 | 久久99国产精品久久99大师 | 亚洲视频在线播放 | 精品国产一区探花在线观看 | 国产日韩欧美三级 | 91一区二区三区 | 亚洲精品电影在线一区 | 欧美精品国产精品 | 久久国产精品一区二区三区 | 9久久婷婷国产综合精品性色 | 精品国产乱码久久久久久蜜柚 | 日产精品久久 | 天天看天天爽 | 精品国产污网站污在线观看15 | 久久久国产一区二区 | av网站久久| 国产一区二区欧美 | 亚洲一区二区三区四区五区午夜 | 国产伊人一区 | 久久久久久国产精品高清 | 久久精品中文字幕 | 青草久操| 国产干干干| 国产成人精品久久 | 91伦理片| 日韩高清中文字幕 | 日韩欧美在线免费观看 | 午夜av毛片| www.国产视频| 亚洲高清不卡视频 | 国产精品一区二区在线 | 一区二区三区久久久久久 | 久久高清| 国产精品资源在线 | 丰满少妇久久久久久久 | 一区二区三区日韩 | 日韩在线视频一区 | 欧美午夜视频在线观看 | 免费黄看片 | 国产拍揄自揄精品视频麻豆 | 成人一区二区三区 | 精品国产乱码久久久久久闺蜜 | 欧美三级电影在线播放 | 一区二区日韩精品 | 久久精品综合 | 色婷婷一区二区三区 | 国产中文一区 | 欧美日韩在线观看中文字幕 | 国产精品精品视频 | 国产伦精品一区二区三区高清 | www.蜜桃av | 欧美一级网站 | 一区亚洲 | 日韩免费视频一区二区 | 日韩超级大片免费看国产国产播放器 | 午夜影院免费 | 91精品国产高清自在线观看 | 嫩草影院网站入口 | 在线播放一区二区三区 | 欧美激情一区二区三区蜜桃视频 | 国产精品亚洲综合 | 亚洲欧美激情精品一区二区 | 真实国产露脸乱 | 亚洲中出| 国产高清在线精品一区二区三区 | 午夜家庭影院 | 日韩精品一区二区三区中文在线 | 综合伊人 | 日韩精品免费在线观看 | 福利在线看 | 久久人人爽人人爽人人片av不 | 久久91精品久久久久久9鸭 | 91视频播放 | 欧美午夜精品久久久久免费视 | 久久人人爽人人爽 | 极黄视频 | 亚洲国产精久久久久久久 | 亚洲精品视频一区 | a级毛片免费高清视频 | 伊人伊人| 人人艹人人爽 | 亚洲xx站| 黄色在线免费观看 | 美女视频一区 | 一区二区三区日韩 | 精品视频一区二区三区 | 国产区免费在线观看 | 亚洲一区 | 日韩素人在线 | 91aiai| 99热在线播放 | 91av爱爱 | 美女网站视频免费黄 | 久久精品免费 | 亚洲精品视频在线播放 | 精品久久久久久久久久久久久久久久久久 | 久久密| 国产激情视频 | 久久亚洲一区 | 国产精品美女在线观看 | 国产www网站 | 日本黄网站在线观看 | 亚洲精品视 | 欧美激情视频一区二区三区在线播放 | 欧美人体一区二区三区 | 国产区久久 | 热re99久久精品国99热线看 | 久久久精 | 伊人精品视频在线观看 | 99久久夜色精品国产亚洲1000部 | 国偷自产一区二区免费视频 | 成人午夜免费视频 | 91久久久久久久 | 亚洲一区中文字幕在线观看 | 无码少妇一区二区三区 | 精品第一区 | 可以免费在线观看av的网站 | 国产成人精品一区二区 | 欧美一区二区三区精品 | 波多野结衣亚洲 | 日本在线网 | 久久成人精品一区二区三区 | 成人在线精品 | 亚洲 国产 另类 精品 专区 | 亚洲成人精品在线 | 国产精品美女久久久久久久久久久 | 国产成人片| 国产精品1区2区在线观看 | 欧美激情欧美激情在线五月 | 韩日av在线 | 在线免费毛片 | 一区二区三区日韩 | 一级在线观看 | 夜夜夜夜夜操 | 亚洲视频一区二区 | 久久久久国产一区二区三区 | 日韩视频免费在线播放 | 九九视频网 | 最新中文字幕视频 | 国产一区二精品区在线 | 成人中文网 | 国产精品欧美日韩 | 亚洲怡红院在线观看 | 午夜免费福利在线 | 一区亚洲 | 99久久99久久 | 色吊丝2288sds中文字幕 | 国产男女免费视频 | 一本一道久久精品综合 | 999久久久国产999久久久 | 国产精品伦理一区 | 特一级毛片| 亚洲一区二区三区在线 | 极品女神高潮呻吟av久久 | 欧美午夜在线观看 | 天天爽夜夜爽夜夜爽精品视频 | 91大神免费在线观看 | 午夜精选视频 | 国产精品久久久久久妇女6080 | 久久精品一区视频 | 日本一区二区三区四区视频 | 韩日在线观看视频 | 日韩2020狼一二三 | 在线播放国产精品 | 特大毛片 | 国产91在线观看 | 亚洲免费影院 | 成人精品 | 成人黄色一级片 | 日本欧美久久久久免费播放网 | 亚洲成人av电影 | 欧美成人一区二区三区片免费 | 日韩三区 | 超碰一区 | 久久精品综合 | 成人欧美一区二区三区黑人孕妇 | 久久精品网| 日本一区二区不卡视频 | 亚洲国产精品99久久久久久久久 | 亚洲午夜精品 | 91色视频在线观看 | 91av久久| 91麻豆精品国产91久久久久久 | 欧美精品一区二区在线观看 | 欧美激情a∨在线视频播放 成人免费共享视频 | 欧美日韩电影一区 | 91免费在线视频 | 日本高清视频在线播放 | 亚洲国产精品99久久久久久久久 | 亚洲黄色国产 | 一级毛片色一级 | 特黄特黄a级毛片免费专区 av网站免费在线观看 | 欧美日韩一级视频 | 国产精品久久久久毛片软件 | 大香伊在人线免97 | 成人精品视频99在线观看免费 | h色视频在线观看 | 免费国产视频在线观看 | 日韩性xxx | 91亚洲国产成人精品性色 | 久久首页 | 欧美一级毛片免费观看 | 国产欧美日韩 | 91高清免费看 | 成人精品视频99在线观看免费 | 亚洲精品久久久久久下一站 | 国产在线资源 | 中文字幕第100页 | 亚洲一二三区在线观看 | 久热免费在线观看 | 91色在线观看 | 中文字幕一区二区三区不卡 | h小视频 | 国产人成免费视频 | 天天操,夜夜操 |