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

SaaS多租戶架構(gòu)數(shù)據(jù)源動態(tài)切換解決方案

開發(fā) 架構(gòu)
在實際應(yīng)用中,數(shù)據(jù)同步操作可能涉及到復(fù)雜的數(shù)據(jù)映射和處理邏輯,需要根據(jù)具體的業(yè)務(wù)需求進行設(shè)計和實現(xiàn)。同時,為了保障系統(tǒng)的穩(wěn)定性和性能,可能還需要考慮引入事務(wù)管理、批量處理和異步處理等機制。

概述

隨著云計算和SaaS(Software as a Service)模型的興起,多租戶系統(tǒng)成為了構(gòu)建靈活、高效應(yīng)用的重要架構(gòu)。在構(gòu)建多租戶SaaS平臺時,數(shù)據(jù)庫方案的選擇直接關(guān)系到數(shù)據(jù)隔離、性能和可擴展性。

在SaaS平臺項目中,根據(jù)前端不同的域名查詢不同的數(shù)據(jù)庫,通常涉及到多租戶架構(gòu)的實現(xiàn)。在這種架構(gòu)中,一個應(yīng)用實例可以服務(wù)多個客戶(租戶)【數(shù)據(jù)庫】,每個租戶的數(shù)據(jù)需要隔離存儲。實現(xiàn)這一目標(biāo)的關(guān)鍵技術(shù)之一就是動態(tài)切換數(shù)據(jù)庫連接。

設(shè)計多租戶數(shù)據(jù)模型

在數(shù)據(jù)庫設(shè)計階段,你需要決定數(shù)據(jù)隔離的級別。通常有以下幾種隔離級別:

  • 獨立數(shù)據(jù)庫:每個租戶擁有一個獨立的數(shù)據(jù)庫實例。
  • 共享數(shù)據(jù)庫,獨立Schema:所有租戶共享同一個數(shù)據(jù)庫,但每個租戶有獨立的Schema。
  • 共享數(shù)據(jù)庫,共享Schema,共享數(shù)據(jù)表:所有租戶共享數(shù)據(jù)庫、Schema和數(shù)據(jù)表,但通過租戶ID字段進行數(shù)據(jù)隔離。

共享數(shù)據(jù)庫,獨立Schema

"共享數(shù)據(jù)庫,獨立Schema" 是一種在SaaS平臺中實現(xiàn)多租戶架構(gòu)的策略,它在數(shù)據(jù)庫層面上提供了一種折中的數(shù)據(jù)隔離方法。

Oracle數(shù)據(jù)庫:在Oracle中一個數(shù)據(jù)庫可以具有多個用戶,那么一個用戶一般對應(yīng)一個Schema,表都是建立在Schema中的,(可以簡單的理解:在Oracle中一個用戶一套數(shù)據(jù)庫表)

圖片圖片

在 MySQL 中,Schema 和 Database 可以認為是相同的概念。在 SQL 語句中,CREATE DATABASE 和 CREATE SCHEMA 基本上是等效的。所以,當(dāng)你創(chuàng)建一個數(shù)據(jù)庫時,你也在事實上創(chuàng)建了一個模式。模式是一個邏輯上的容器,用于組織和管理數(shù)據(jù)庫對象,如表、視圖、存儲過程等。在 MySQL 中,模式和數(shù)據(jù)庫可以互換使用。

共享數(shù)據(jù)庫

在這種模式下,所有的租戶(即SaaS平臺的客戶)共享同一個物理數(shù)據(jù)庫服務(wù)器或數(shù)據(jù)庫實例。這意味著,盡管每個租戶都有自己的數(shù)據(jù),但這些數(shù)據(jù)都存儲在同一個數(shù)據(jù)庫文件或數(shù)據(jù)庫集群中。這樣做的好處是可以減少硬件資源和維護成本,因為不需要為每個租戶單獨設(shè)置和維護數(shù)據(jù)庫實例。

獨立Schema

盡管數(shù)據(jù)庫是共享的,但每個租戶都有自己獨立的Schema。Schema是數(shù)據(jù)庫中的一種邏輯分組,它包含了一系列的數(shù)據(jù)庫對象,如表、視圖、索引、存儲過程等。在這個模式下,每個租戶的數(shù)據(jù)都存儲在自己的Schema中,這樣可以保證租戶之間的數(shù)據(jù)邏輯上是隔離的。

例如,假設(shè)有兩個租戶A和B,他們共享同一個數(shù)據(jù)庫"SaaSDB"。在"SaaSDB"中,可以分別為租戶A和租戶B創(chuàng)建兩個Schema(數(shù)據(jù)庫),分別是"SchemaA"和"SchemaB"。租戶A的所有數(shù)據(jù)都存儲在"SchemaA"中,而租戶B的數(shù)據(jù)存儲在"SchemaB"中。

優(yōu)缺點

優(yōu)點
  1. 資源利用率高:由于所有租戶共享同一個數(shù)據(jù)庫,硬件資源和數(shù)據(jù)庫維護成本較低。
  2. 易于管理:數(shù)據(jù)庫管理員只需要管理一個數(shù)據(jù)庫實例,簡化了維護和升級的工作。
  3. 隔離性:每個租戶的數(shù)據(jù)存儲在獨立的Schema中,邏輯上實現(xiàn)了數(shù)據(jù)隔離,減少了數(shù)據(jù)交叉污染的風(fēng)險。
缺點
  1. 隔離性不如獨立數(shù)據(jù)庫:雖然Schema提供了一定程度的隔離,但如果Schema之間存在依賴關(guān)系或需要進行復(fù)雜的數(shù)據(jù)操作,隔離性可能不如完全獨立的數(shù)據(jù)庫。
  2. 性能問題:如果租戶數(shù)量增多,可能會導(dǎo)致數(shù)據(jù)庫性能問題,因為所有租戶都在競爭同一個數(shù)據(jù)庫資源。

總體來說,"共享數(shù)據(jù)庫,獨立Schema" 的模式在SaaS平臺中是一種常見的多租戶數(shù)據(jù)隔離策略,它在資源利用率和數(shù)據(jù)隔離性之間取得了平衡。開發(fā)者需要根據(jù)具體的業(yè)務(wù)需求和預(yù)期的租戶規(guī)模來決定是否采用這種模式。

SaaS多租戶架構(gòu)數(shù)據(jù)庫設(shè)計

重點:在 SQL 語句中,CREATE DATABASE 和 CREATE SCHEMA 基本上是等效的。所以,當(dāng)你創(chuàng)建一個SCHEMA時,就是在一個RDS實例下創(chuàng)建一個數(shù)據(jù)庫DATABASE。

圖片圖片

以newtrain.tinywan.com、hz_newtrain.tinywan.com、bj_newtrain.tinywan.com三個域名為例,每個域名對應(yīng)一個租戶平臺站點,分別對應(yīng)各自的數(shù)據(jù)源數(shù)據(jù)庫newtrain.tinywan.com、hangzhou.tinywan.com、beijing.tinywan.com。

實施方案

域名解析與路由

  • 在DNS系統(tǒng)中為每個域名配置A記錄,指向SaaS平臺的服務(wù)器
  • 在服務(wù)器上部署Web應(yīng)用,并根據(jù)請求的Host頭部信息,確定租戶身份。

數(shù)據(jù)源配置

  • 在應(yīng)用程序的配置文件中,定義每個租戶的數(shù)據(jù)源配置,包括數(shù)據(jù)庫URL、用戶名和密碼
  • 可以使用環(huán)境變量或配置中心來動態(tài)加載這些配置。

動態(tài)數(shù)據(jù)源切換

根據(jù)請求的域名或其他標(biāo)識符,動態(tài)確定使用哪個數(shù)據(jù)庫連接。這通常通過中間件、攔截器或全局函數(shù)來實現(xiàn)。

示例:使用PHP實現(xiàn)域名路由中間件

<?php
/**
 * @desc 域名路由中間件
 * @author Tinywan(ShaoBo Wan)
 * @date 2024/11/20 18:14
 */
declare(strict_types=1);

namespace app\middleware;

use app\common\model\SaasModel;
use Webman\Http\Request;
use Webman\Http\Response;
use Webman\MiddlewareInterface;

class ConnectionMiddleware implements MiddlewareInterface
{
    /**
     * @param Request $request
     * @param callable $handler
     * @return Response
     */
    public function process(Request $request, callable $handler): Response
    {
        $domain = $request->header()['x-site-domain']?? 'https://newtrain.tinywan.com';
        $platform = SaasModel::where('domain', $domain)->field('id, domain, website')->findOrEmpty();
        if (!$platform->isEmpty()) {
            $request->website = $platform['website'];
        }
        return $handler($request);
    }
}

以上根據(jù)前端請求的域名標(biāo)識符x-site-domain,動態(tài)確定使用哪個數(shù)據(jù)庫連接,通過中間件動態(tài)賦予全局請求對象$request->website,后續(xù)就可以使用。

項目應(yīng)用

項目架構(gòu)

項目使用超高性能可擴展PHP框架webman。webman是一款基于workerman開發(fā)的高性能HTTP服務(wù)框架。webman用于替代傳統(tǒng)的php-fpm架構(gòu),提供超高性能可擴展的HTTP服務(wù)。你可以用webman開發(fā)網(wǎng)站,也可以開發(fā)HTTP接口或者微服務(wù)。

數(shù)據(jù)庫連接使用ThinkORM。ThinkORM是一個基于PHP和PDO的數(shù)據(jù)庫中間層和ORM類庫,之前一直作為ThinkPHP5.*系列的內(nèi)置ORM類,以優(yōu)異的功能和突出的性能著稱,現(xiàn)已經(jīng)支持獨立使用,并作了升級改進,提供了更優(yōu)秀的性能和開發(fā)體驗,最新版本要求PHP7.1+。

數(shù)據(jù)庫連接中間

示例:域名路由中間件

<?php
/**
 * @desc 域名路由中間件
 * @author Tinywan(ShaoBo Wan)
 * @date 2024/11/20 18:14
 */
declare(strict_types=1);

namespace app\middleware;

use app\common\model\SaasModel;
use Webman\Http\Request;
use Webman\Http\Response;
use Webman\MiddlewareInterface;

class ConnectionMiddleware implements MiddlewareInterface
{
    /**
     * @param Request $request
     * @param callable $handler
     * @return Response
     */
    public function process(Request $request, callable $handler): Response
    {
        $domain = $request->header()['x-site-domain']?? 'https://newtrain.tinywan.com';
        $platform = SaasModel::where('domain', $domain)->field('id, domain, website')->findOrEmpty();
        if (!$platform->isEmpty()) {
            $request->website = $platform['website'];
        }
        return $handler($request);
    }
}

數(shù)據(jù)庫配置

ThinkORM配置文件:config/thinkorm.php

<?php
/**
 * @desc ThinkORM配置文件
 * @author Tinywan(ShaoBo Wan)
 * @date 2024/11/14 15:14
 */
declare(strict_types=1);

return [
    'default' => 'train',
    'connections' => [
        'train' => [
            'type' => 'mysql',
            'hostname' => '127.0.0.1',
            'database' => 'newtrain.tinywan.com',
            'username' => 'root',
            'password' => '123456'
        ],
        'hangzhou' => [
            'type' => 'mysql',
            'hostname' => '127.0.0.1',
            'database' => 'hangzhou.tinywan.com',
            'username' => 'root',
            'password' => '123456'
        ],
        'beijing' => [
            'type' => 'mysql',
            'hostname' => '127.0.0.1',
            'database' => 'beijing.tinywan.com',
            'username' => 'root',
            'password' => '123456'
        ]
    ],
];

Model模型使用

BaseModel.php 基礎(chǔ)模型

<?php
/**
 * @desc 基礎(chǔ)模型
 * @author Tinywan(ShaoBo Wan)
 * @date 2024/11/2 15:09
 */
declare(strict_types=1);

namespace app\common\model;

use think\Model;

class BaseModel extends Model
{
    /**
     * 設(shè)置當(dāng)前模型的數(shù)據(jù)庫連接
     * @var string
     */
    protected $connection;

    /**
     * BaseModel constructor.
     * @param array $data
     */
    public function __construct(array $data = [])
    {
        $this->connection = \request()->website ?? 'train';
        parent::__construct($data);
    }
}

CityModel.php 公共模型,對應(yīng)數(shù)據(jù)庫表名common_city。

<?php
/**
 * @desc 市模型
 * @author Tinywan(ShaoBo Wan)
 * @date 2024/12/13 14:59
 */
declare(strict_types=1);

namespace app\common\model;

use think\Model;

class CityModel extends Model
{
    /** 數(shù)據(jù)庫配置 */
    protected $connection = 'train';

    /** 設(shè)置當(dāng)前模型對應(yīng)的完整數(shù)據(jù)表名稱 */
    protected $table = 'common_city';
}

公共模型CityModel類里面定義了connection屬性,則該模型操作的時候會自動按照給定的數(shù)據(jù)庫配置進行連接,而不是配置文件中設(shè)置的默認連接信息.

業(yè)務(wù) MeetingModel.php 會議模型類。對應(yīng)數(shù)據(jù)庫表名resty_meeting

<?php
/**
 * @desc 會議模型類
 * @author Tinywan(ShaoBo Wan)
 * @date 2024/11/17 11:55
 */
declare(strict_types=1);

namespace app\common\model;

class MeetingModel extends BaseModel
{
    /** 設(shè)置當(dāng)前模型對應(yīng)的完整數(shù)據(jù)表名稱 */
    protected $table = 'resty_meeting';
}

業(yè)務(wù)控制器或者服務(wù)使用

<?php
/**
 * @desc 會議
 * @author Tinywan(ShaoBo Wan)
 * @date 2023/11/9 16:57
 */
declare(strict_types=1);

public function meetingList(\support\Request $request, int $organizationId) : \support\Response
{
    $meetingList = \app\common\model\MeetingModel::where([
        'organization_id' => $organizationId,
        'create_user_id' => $this->userId
    ])->select();
    return json($meetingList->toArray());
}

Db類使用

可以調(diào)用Db::connect方法動態(tài)配置數(shù)據(jù)庫連接信息

<?php
/**
 * @desc 會議
 * @author Tinywan(ShaoBo Wan)
 * @date 2023/11/9 16:57
 */
declare(strict_types=1);

public function datasetList(\support\Request $request) : \support\Response
{
    $res = \think\facade\Db::connect(\request()->website)
        ->table('resty_meeting')
        ->field('id,name')
        ->select();
    return json($res->toArray());
}

connect方法必須在查詢的最開始調(diào)用,而且必須緊跟著調(diào)用查詢方法,否則可能會導(dǎo)致部分查詢失效或者依然使用默認的數(shù)據(jù)庫連接。動態(tài)連接數(shù)據(jù)庫的connect方法僅對當(dāng)次查詢有效。這種方式的動態(tài)連接和切換數(shù)據(jù)庫比較方便,經(jīng)常用于多數(shù)據(jù)庫連接的應(yīng)用需求。

動態(tài)連接到目標(biāo)數(shù)據(jù)庫

在SaaS平臺中,如果需要根據(jù)前端傳遞的配置信息動態(tài)連接到目標(biāo)數(shù)據(jù)庫并將數(shù)據(jù)拉取到本地數(shù)據(jù)庫,可以采用以下步驟實現(xiàn)

  • 前端傳遞配置信息。前端在用戶操作時,將目標(biāo)數(shù)據(jù)庫的連接信息作為請求參數(shù)發(fā)送到后端。這些配置信息通常包括數(shù)據(jù)庫類型、主機地址、端口、數(shù)據(jù)庫名、用戶名和密碼等。
  • 驗證和解析配置信息。后端接收到配置信息后,首先進行驗證,確保其合法性和安全性。解析配置信息,并準(zhǔn)備用于數(shù)據(jù)庫連接的參數(shù)。
  • 動態(tài)數(shù)據(jù)源管理。創(chuàng)建一個動態(tài)數(shù)據(jù)源管理器,它可以根據(jù)傳入的配置信息動態(tài)創(chuàng)建數(shù)據(jù)庫連接。
  • 數(shù)據(jù)同步。根據(jù)目標(biāo)數(shù)據(jù)庫的連接信息,建立連接并執(zhí)行數(shù)據(jù)查詢操作。然后將查詢結(jié)果同步到本地數(shù)據(jù)庫。這可能涉及到以下步驟:

建立連接:使用動態(tài)數(shù)據(jù)源管理器創(chuàng)建的目標(biāo)數(shù)據(jù)庫連接。

執(zhí)行查詢:在目標(biāo)數(shù)據(jù)庫上執(zhí)行SQL查詢,獲取所需數(shù)據(jù)。

映射數(shù)據(jù):將查詢結(jié)果映射到本地數(shù)據(jù)庫的表結(jié)構(gòu)中。

寫入本地數(shù)據(jù)庫:將映射后的數(shù)據(jù)插入到本地數(shù)據(jù)庫中。

  • 異常處理和日志記錄。在整個數(shù)據(jù)同步過程中,需要妥善處理可能出現(xiàn)的異常情況,并記錄相關(guān)操作日志,以便于問題追蹤和系統(tǒng)維護。
  • 安全性考慮
  • 加密敏感信息:確保所有的數(shù)據(jù)庫憑證信息在存儲和傳輸過程中都是加密的。
  • 權(quán)限控制:確保只有授權(quán)的用戶或服務(wù)才能訪問數(shù)據(jù)同步功能。
  • SQL注入防護:對動態(tài)執(zhí)行的SQL進行嚴(yán)格的安全檢查,避免SQL注入攻擊。

自定義函數(shù)

函數(shù)配置文件app/functions.php新增函數(shù)dynamic_connect_db()

/**
 * @desc: 動態(tài)切換數(shù)據(jù)庫
 * @param string $name
 * @param array $connection
 * @return \think\db\ConnectionInterface
 * @author Tinywan(ShaoBo Wan)
 */
function dynamic_connect_db(string $name, array $connection): \think\db\ConnectionInterface
{
    try {
        $connect = \think\facade\Db::connect($name);
    } catch (\Throwable $e) {
        // 獲取配置參數(shù)
        $config  = \think\facade\Db::getConfig();

        // 配置具體的數(shù)據(jù)庫連接信息
        $config['connections'][$name] = $connection;

        // 初始化配置參數(shù)
        \think\facade\Db::setConfig($config);

        // 創(chuàng)建/切換數(shù)據(jù)庫連接查詢
        $connect = \think\facade\Db::connect($name);
    }
    return $connect;
}

動態(tài)使用

調(diào)用自定義函數(shù)dynamic_connect_db()方法動態(tài)數(shù)據(jù)庫連接查詢,這里查詢一個不存在的配置數(shù)據(jù)庫zhejiang 浙江站點。

/**
 * @desc: 動態(tài)切換數(shù)據(jù)庫
 * @param Request $request
 * @return Response
 * @throws DataNotFoundException
 * @throws DbException
 * @throws ModelNotFoundException
 * @author Tinywan(ShaoBo Wan)
 */
public function dynamicConnectDb(Request $request): Response
{
    $connection = [
        'type' => 'mysql',
        'hostname' => '127.0.0.1',
        'database' => 'zhejiang.tinywan.com',
        'username' => 'root',
        'password' => '123456'
    ];
    $connect = dynamic_connect_db('zhejiang', $connection);
    $result = $connect->table('resty_meeting')->where('id', 1)->find();
    var_dump($result);
    return json($result->toArray());
}

在實際應(yīng)用中,數(shù)據(jù)同步操作可能涉及到復(fù)雜的數(shù)據(jù)映射和處理邏輯,需要根據(jù)具體的業(yè)務(wù)需求進行設(shè)計和實現(xiàn)。同時,為了保障系統(tǒng)的穩(wěn)定性和性能,可能還需要考慮引入事務(wù)管理、批量處理和異步處理等機制。

責(zé)任編輯:武曉燕 來源: 開源技術(shù)小棧
相關(guān)推薦

2015-08-12 15:46:02

SaaS多租戶數(shù)據(jù)存儲

2023-11-29 08:35:28

群多租戶ES運維

2023-06-07 13:50:00

SaaS多租戶系統(tǒng)

2023-12-14 12:26:16

SaaS數(shù)據(jù)庫方案

2022-01-12 17:39:16

Spring多租戶數(shù)據(jù)

2020-09-15 07:00:00

SaaS架構(gòu)架構(gòu)

2025-01-09 14:39:40

2022-05-10 10:43:35

數(shù)據(jù)源動態(tài)切換Spring

2025-01-17 09:11:51

2018-12-03 12:07:54

南京新動態(tài)解決方案

2015-04-02 11:04:27

云應(yīng)用SaaSOFBIZ

2016-12-28 18:08:11

RiverbedSaaS數(shù)字化轉(zhuǎn)型

2009-09-22 11:56:58

ibmdwSaaS

2023-02-06 14:44:00

嚴(yán)選數(shù)據(jù)源DB

2011-07-29 10:21:03

iPad 橫豎屏 切換

2022-09-13 07:14:29

云計算SaaS多租戶

2025-08-26 01:15:00

Spring項目數(shù)據(jù)源

2024-05-28 08:17:54

2023-01-04 09:33:31

SpringBootMybatis
點贊
收藏

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

久久久高清视频| 亚洲欧美日产图| 国产高清中文字幕| 91日韩免费| 欧美精品一区二区三区视频| 久久久亚洲精品无码| 成黄免费在线| 成人高清视频在线| 日韩美女免费视频| 九九免费精品视频| 欧美裸体在线版观看完整版| 91精品久久久久久蜜臀| 国产成人精品视频免费看| 欧美被日视频| 久久久精品一品道一区| 99国产高清| 一区二区视频播放| 亚洲少妇在线| 欧美黑人性猛交| 中文字幕在线观看二区| 老司机精品在线| 制服丝袜一区二区三区| 成人一区二区三| 免费男女羞羞的视频网站在线观看| 国产偷v国产偷v亚洲高清| 99在线影院| 一级做a爰片久久毛片16| 亚洲综合国产| 久久久亚洲精品视频| 亚洲一级黄色录像| 欧美爱爱网站| 欧美成人性福生活免费看| 天堂网在线免费观看| 亚洲一区站长工具| 亚洲二区在线观看| 国风产精品一区二区| 99re热久久这里只有精品34| 久久久不卡网国产精品二区| 国产精品午夜av在线| 99久久国产免费| 久久99国内精品| 国产精品一区二区久久| 亚洲精品一区二三区| 欧美一级专区| 欧美在线视频导航| 女人十八岁毛片| 99亚洲视频| 91av国产在线| 日韩黄色精品视频| 亚洲国产一区二区三区高清 | 黄色网页在线免费观看| 国产精品久久久久久久久快鸭| 玛丽玛丽电影原版免费观看1977 | 97久久亚洲| 日韩视频123| 超碰人人cao| 免费精品一区| 欧美成人vps| 午夜免费视频网站| 91精品尤物| 亚洲国产成人久久综合| 日本少妇xxxx| 亚洲系列另类av| 亚洲天堂第一页| 色欲狠狠躁天天躁无码中文字幕| av永久不卡| 日日噜噜噜夜夜爽亚洲精品| 国产午夜精品理论片在线| 伊人青青综合网| 欧美国产日韩一区二区在线观看 | 99福利在线| 亚洲午夜电影在线| 欧美 日韩 国产 高清| 中文在线免费视频| 色婷婷精品大视频在线蜜桃视频| 日韩视频免费在线播放| 亚洲精品毛片| 日韩精品一区二区在线| 中文字幕日韩三级片| 国产成人手机高清在线观看网站| 中文字幕欧美日韩| 欧美日韩人妻精品一区二区三区| 99亚洲一区二区| 国产精品吹潮在线观看| av免费在线观看不卡| 豆国产96在线|亚洲| 免费在线观看一区二区| 日本三级视频在线观看| 亚洲一区成人在线| 国产裸体免费无遮挡| av成人在线网站| 亚洲国产天堂网精品网站| 欧美人与性囗牲恔配| 欧美在线视屏| 97在线看福利| 一区二区三区精彩视频| av在线不卡免费看| 亚洲一区在线直播| 国产欧洲在线| 欧美精品电影在线播放| 国产精品第七页| 999久久久精品国产| 97久久精品人搡人人玩| 夜夜嗨av禁果av粉嫩avhd| hitomi一区二区三区精品| 一区二区日本伦理| 免费毛片b在线观看| 欧美精品一二三| www.超碰97| 狠狠干成人综合网| 国产欧美va欧美va香蕉在| 日韩一级免费毛片| 亚洲人吸女人奶水| av无码精品一区二区三区| 亚洲一级大片| 久久人体大胆视频| 91在线视频免费播放| 成人高清在线视频| 好吊色视频988gao在线观看| 99久久精品一区二区成人| 亚洲国产欧美一区二区丝袜黑人 | 国产精品黑丝在线播放| 欧洲美女免费图片一区| 亚洲国产成人在线观看| 国产精品高清亚洲| 国产一区二区在线免费播放| 色狼人综合干| 欧美极品欧美精品欧美视频| 国产普通话bbwbbwbbw| 欧美精彩视频一区二区三区| 九九九九免费视频| 精品网站aaa| 欧美黄色片视频| 国产富婆一级全黄大片| 国产精品传媒入口麻豆| 国内自拍视频网| 国内精品伊人久久久| 清纯唯美日韩制服另类| 午夜激情小视频| 亚洲成人一区在线| 超级砰砰砰97免费观看最新一期| 国产精品成人一区二区不卡| 91精品国产综合久久香蕉最新版 | 国产精品热久久久久夜色精品三区| 激情综合在线观看| 清纯唯美亚洲经典中文字幕| 韩国视频理论视频久久| 色婷婷激情五月| 香港成人在线视频| 国产精品久久无码| 国产欧美日韩亚洲一区二区三区| 国产精品免费看一区二区三区| 四虎影视国产在线视频| 日韩欧美在线综合网| 精品无码久久久久久久| 懂色av一区二区三区免费观看| www.日本在线视频| 欧美一区二区三区红桃小说| 欧美在线视频观看| 黄色av网址在线免费观看| 在线中文字幕一区二区| 18精品爽国产三级网站| 九色|91porny| 影音先锋成人资源网站| youjizz亚洲| 日本成人黄色片| 午夜视频成人| 精品卡一卡二卡三卡四在线| 五月婷婷中文字幕| 国产欧美精品国产国产专区| 中国黄色片一级| 欧美黄免费看| 蜜桃视频成人| 狠狠久久伊人中文字幕| 欧美成人精品一区二区三区| 熟妇人妻中文av无码| 色狠狠一区二区三区香蕉| 亚洲图片第一页| 国产风韵犹存在线视精品| 久久这里只有精品23| 自拍偷拍一区| 91精品视频免费看| aa级大片免费在线观看| 亚洲视频网站在线观看| 99视频国产精品免费观看a| 午夜精品影院在线观看| 人与嘼交av免费| 成人午夜av电影| 精品久久久久久久无码| 欧美精品午夜| 日本一区二区三区精品视频| 精品三级国产| 国产精品久久久精品| 日韩av激情| 亚洲性夜色噜噜噜7777| 亚洲av无码一区二区三区dv| 色婷婷激情久久| 免费一级片在线观看| 国产日韩av一区| 日韩少妇一区二区| 狠狠色狠狠色综合| 免费黄色日本网站| 欧美99在线视频观看| 日本一区二区三区视频在线观看| 日韩欧美另类中文字幕| 国产91色在线播放| 三级资源在线| 色悠悠久久88| 日本韩国一区| 精品99999| 中文字幕自拍偷拍| 欧美日韩国产专区| 麻豆疯狂做受xxxx高潮视频| 国产精品久久久久一区二区三区共| 国产伦精品一区三区精东| 国内精品自线一区二区三区视频| 国产又黄又猛视频| 亚洲日本黄色| 最新av网址在线观看| 日韩免费视频| 免费精品视频一区二区三区| 无人区乱码一区二区三区| 国产精品免费久久久久影院| 亚洲欧洲自拍| 午夜精品一区二区三区在线视频 | 九九九九九九九九| 肉色丝袜一区二区| 91精品91久久久中77777老牛| 欧美日韩国产精品一区二区亚洲| 在线观看欧美激情| 欧美手机视频| 涩涩涩999| 亚洲免费专区| 欧美一区二区视频17c| 日本欧美韩国国产| 精品免费二区三区三区高中清不卡| 欧美午夜在线播放| 91在线免费看片| 欧美精品三级在线| 成人精品一二区| 亚洲一区二区三区日本久久九| 91精品在线一区| 国产95亚洲| 2019国产精品视频| 1769国产精品视频| 国产一区在线免费观看| 加勒比色老久久爱综合网| 国产乱码一区| 美国一区二区| 美乳视频一区二区| 激情婷婷综合| 午夜精品一区二区三区四区 | 久久成人18免费网站| 国产剧情在线| 久久69精品久久久久久久电影好| 先锋影音在线资源站91| 久久久久久久久久久成人| 成人在线免费观看黄色| 97精品视频在线观看| 成年美女黄网站色大片不卡| 国产精品久久99久久| 97久久精品一区二区三区的观看方式 | 黄色录像免费观看| 一区二区免费在线| 好吊操这里只有精品| 欧美午夜激情小视频| 日本成人一级片| 91精品国产91综合久久蜜臀| 亚洲国产一二三区| 日韩精品在线免费观看| av免费在线一区二区三区| 久久色精品视频| 91九色在线播放| 国产精品v片在线观看不卡| 欧美成人免费全部网站| 国产精品99久久久久久久 | 亚洲摸下面视频| 91在线品视觉盛宴免费| 欧美激情第1页| 美女一区网站| 69堂成人精品视频免费| 亚洲97av| ijzzijzzij亚洲大全| 国产欧美69| 午夜免费福利网站| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 亚洲性猛交xxxxwww| mm1313亚洲国产精品美女| 久久久久久久香蕉网| 成人国产精品一区二区免费麻豆| 99影视tv| 成人亚洲一区| 大陆极品少妇内射aaaaa| 久久66热偷产精品| 精品夜夜澡人妻无码av| 一区二区中文字幕在线| 在线观看免费av片| 日韩美女主播在线视频一区二区三区| 青青草超碰在线| 欧美人成在线视频| 成人精品高清在线视频| 狠狠干一区二区| 91成人超碰| 999精品视频在线| 99热这里都是精品| 波多野结衣不卡视频| 91国模大尺度私拍在线视频| 亚洲xxx在线| 日韩在线视频免费观看| 日韩欧美另类一区二区| 国产精品对白刺激久久久| 国产精品成人a在线观看| 成人亚洲视频在线观看| 91丝袜呻吟高潮美腿白嫩在线观看| 一级黄色片日本| 欧美色图一区二区三区| 你懂的在线网址| 2019中文字幕在线免费观看| 色妞ww精品视频7777| 一区二区三区免费看| 久久精品1区| 国产精品jizz| 欧美性猛交xxxx乱大交蜜桃| 神马一区二区三区| 欧美日韩高清在线观看| 国产va免费精品观看精品| 亚洲电影免费| 日本人妖一区二区| 亚洲区自拍偷拍| 色综合色综合色综合| 天堂视频中文在线| 97成人精品区在线播放| 高清日韩欧美| 男女啪啪免费视频网站| 成人免费观看视频| 日本一二三区不卡| 亚洲国产小视频| 中文字幕在线直播| 欧美12av| 日韩激情一区二区| 亚洲综合欧美综合| 欧美三片在线视频观看| 成年人视频网站在线| 国产精品最新在线观看| 亚洲国产一区二区三区在线播放| 天天色天天综合网| 亚洲欧美另类小说| 亚洲国产精品一| 91av在线影院| 欧美日本成人| 国产精品视频中文字幕| 1024成人网| 亚洲精品福利网站| 97精品国产97久久久久久| 亚洲激情播播| www黄色av| 国产精品乱码一区二三区小蝌蚪| 一卡二卡三卡在线观看| 欧美日韩不卡合集视频| 老汉色老汉首页av亚洲| 欧美三级午夜理伦三级| 欧美国产精品一区二区| 国产欧美第一页| 韩国视频理论视频久久| 精品国产精品国产偷麻豆| 亚洲视频第二页| 一区二区三区 在线观看视频 | 99久久久久久| 日韩免费av网站| 久久手机免费视频| 加勒比色老久久爱综合网| 热久久精品免费视频| 亚洲人成在线观看一区二区| 国模无码一区二区三区| 国产999在线观看| 亚州av乱码久久精品蜜桃| 亚洲av成人精品一区二区三区 | 精品国自产拍在线观看| 国模私拍一区二区三区| 精品freesex老太交| 超碰91在线播放| 欧美视频在线观看 亚洲欧| 日本三级视频在线播放| 精品1区2区| 久久机这里只有精品| 日韩精品一区三区| 日韩中文字幕视频在线| 琪琪久久久久日韩精品| 日韩成人av免费| 欧美午夜美女看片| 超碰个人在线| 欧美日韩亚洲在线 | 成人精品水蜜桃| 青青草伊人久久| 中文字幕在线观看免费视频| 日韩在线国产精品| 日韩aaa久久蜜桃av| 69久久精品无码一区二区| 欧美伊人久久久久久久久影院| 黄色成人在线网|