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

WebAssembly + Dapr = 下一代云原生運行時?

云計算 云原生
云計算已經成為了支撐數字經濟發展的關鍵基礎設施。云計算基礎設施也在持續進化,從 IaaS,到容器即服務CaaS),再到 Serverless 容器和函數 PaaS (fPaaS 或者 FaaS),新的計算形態相繼出現。以容器和 Serverless 為代表的云原生技術正在重塑整個應用生命周期。

 

云計算已經成為了支撐數字經濟發展的關鍵基礎設施。云計算基礎設施也在持續進化,從 IaaS,到容器即服務(CaaS),再到 Serverless 容器和函數 PaaS (fPaaS 或者 FaaS),新的計算形態相繼出現。以容器和 Serverless 為代表的云原生技術正在重塑整個應用生命周期。

在 Gartner 分析報告中,云計算基礎設施的發展路徑,也是云原生特質逐漸增強的過程。其具體表現在:

模塊化越來越高- 更加細粒度的計算單元,如容器和 Serverless 函數,更加適于微服務架構的應用交付,可以更加充分利用云的能力,提升架構敏捷性。可編程性越來越高- 可以通過聲明式 API 和策略進行實現自動化管理與運維,可以通過 Immutable Infrastructure (不可變基礎設施)進一步提升分布式應用運維的確定性。彈性效率越來越高- VM 可以實現分鐘級擴容;容器與 Serverless 容器可以實現秒級擴容;借助調度優化,函數可以做到毫秒級擴容。韌性越來越高- Kubernetes 提供了強大自動化編排能力,提升應用系統自愈性。而 Serverless 進一步將穩定性、可伸縮性和安全等系統級別復雜性下沉到基礎設施,開發者只需關注自身業務應用邏輯,進一步釋放了生產力,提升系統的可恢復能力。

分布式云則是云計算發展的另外一個重要趨勢,公有云的服務可以拓展到不同的物理位置,讓計算進一步貼近客戶。分布式云讓客戶享受云計算的便利的同時,也可以滿足對計算實時性和安全合規的訴求。這也推動了企業應用架構的變化 - 應用要能夠在不同的環境進行部署、遷移,以最優化的方式提供服務。

進一步隨著移動互聯網,AI 與 IoT 等新技術的涌現,無處不在的計算已經成為現實。與此同時,這也在催生算力的多樣性,X86 架構一統天下的時代已經過去,ARM/RISC-V 等芯片新勢力不但稱雄移動通信和嵌入式設備領域,也在向邊緣計算和數據中心市場發起進攻。開發者甚至需要讓應用支持不同的 CPU 體系架構,比如我們可以將一個圖像識別應用部署在邊緣或者 IoT 等不同環境、不同體系架構的設備之上運行。

在分布式云、邊緣計算、云端一體等新的云計算場景下,下一代云原生應用運行時將具備什么樣的特點?

下一代云原生應用運行時

1. 無處不在的計算催生下一代可移植、高性能、輕量化的安全沙箱

容器應用采用自包含的打包方式 -- 容器鏡像,它包含了應用代碼和依賴的系統組件,可以實現應用與基礎設施解耦,讓應用可以在公共云、專有云等不同的運行環境以一致的方式進行部署、運維,簡化了彈性和遷移。此外 Docker 鏡像規范支持多架構(Multi-Arch)鏡像,可以簡化不同 CPU 體系架構(如 x86, ARM 等)的應用鏡像的構建與分發。

函數應用只包含用于事件響應的代碼包,這將應用交付格式從原生二進制文件提升到了高級語言層面。這也給應用的可移植性帶來了更大的想象空間,理論上甚至可以屏蔽執行環境 CPU 體系架構的差異。比如對于不依賴本地代碼的 Python/NodeJS 等腳本或者 Java 應用,無需修改就可以在 x86 或者 ARM 等不同 CPU 架構上運行。

然而理想很豐滿,現實很骨感,可移植性和廠商鎖定是函數 PaaS 發展的攔路虎。

很多腳本代碼依然需要通過調用原生代碼來實現數據處理和調用中間件(如數據庫驅動),但是編譯原生代碼需要構建環境與目標執行環境一致才能保障兼容性。比如 AWS Lambda / 阿里云函數計算都要求二進制原生代碼依賴指定的內核和 libc 版本。因此,越來越多的函數 PaaS 服務支持容器鏡像作為載體,來簡化函數應用打包和依賴管理。函數應用通常依賴后端服務(BaaS, Backend as a Service)實現數據訪問與計算處理等能力,由于 BaaS 不存在任何標準,這樣很難將在 AWS Lambda 上開發的函數應用移植到阿里云的函數計算服務。

在 Serverless 計算中,現有的主流技術是利用沙箱容器技術,如 AWS Firecraker 或者阿里云沙箱容器,來實現強隔離的安全執行環境,但是也帶來更大的資源消耗。雖然現在阿里云沙箱容器經過優化可以實現 300ms 的冷啟動速度,接近 Docker 這樣的 OS 容器啟動速度,但是還無法滿足函數 PaaS 毫秒級的啟動要求,目前需要通過的調度策略,預留一定的 standby 實例才可以滿足,但是這樣也引入了更多的資源消耗。

WebAssembly(WASM) 是一個新的 W3C 規范,是一個通用、開放、高效、安全的底層虛擬機抽象。它的設計初衷是為了解決JavaScript的性能問題,使得 Web 應用有接近本機原生應用的性能。可以將現有編程語言應用,如 C/C++, Rust 等,編譯成為 WASM 的字節碼,運行在瀏覽器中的一個沙箱環境中。

WASM 讓應用開發技術與運行時環境解耦,極大促進了代碼復用。Mozilla 更在 2019 年推出了 WebAssembly System Interface(WASI),它提供類似 POSIX 這樣的標準 API 來標準化 WebAssembly 與系統資源的交互抽象,比如文件系統訪問,內存管理等。WASI 的出現拓展了 WASM 的應用場景,可以讓其作為一個虛擬機運行各種類型的服務端應用。WASM/WASI 為應用的可移植性帶來全新的希望,為了進一步推動 WebAssembly 生態發展,Mozilla、Fastly、英特爾和紅帽公司攜手成立了字節碼聯盟(Bytecode Alliance),共同領導 WASI 標準、 WebAssembly 運行時、工具等工作。

WebAssembly 所具備的的安全、可移植、高效率,輕量化的特點,為應用沙箱的發展帶來了全新的思路。WASM 可以輕松實現毫秒級冷啟動時間和極低的資源消耗。同時 WASM 字節碼比原生機器碼有更高的安全級別。此外,WASI 實現了細粒度基于能力的安全模型,遵循最小權限原則。在執行過程中,WASI 應用只能訪問由依賴注入指明的確切資源集,這種方式與傳統粗粒度的操作系統級隔離相比,進一步收斂了安全攻擊面。

正因如此,WASM/WASI 得到了 Serverless、IoT/邊緣計算等社區的廣泛關注。Fastly、Cloudflare 等廠商相繼發布了基于 WebAssembly 技術實現了更加輕量化的 Serverless 服務。

然而 WebAssembly 在服務器端的應用之路依然布滿荊棘。首先 WASI 的能力還在非常早期的狀態,一些關鍵能力依然缺失,首當其沖的就是缺乏標準化的網絡訪問能力:https://github.com/WebAssembly/WASI/issues/315。

目前 WASI 應用僅能做一些計算類任務,基本無法實現分布式應用,也無法調用多樣性的后端服務和 Redis、MySQL、Kafka 等應用中間件。這大大限制了 WASI 的應用場景。

當理想撞上現實,頭破血流還是絕處逢生?

2. 下一代可移植應用運行時加速編程界面上移,應用基礎設施能力下沉

Dapr 是微軟開源的面向云原生應用的分布式應用運行時,目標使所有開發人員能夠使用任何語言和任何框架輕松地構建彈性的、事件驅動的、可移植的微服務應用。

Dapr 實現了一系列構建高性能、可伸縮、高可用的分布式應用的設計模式,比如提供了服務發現和服務調用能力,也實現了一個簡單、一致的編程模型來支持事件驅動應用架構。

此外 Dapr 通過基礎設施屏蔽了應用訪問后端服務的技術細節,如資源綁定、安全管理,可觀測性等等。這個對 Serverless 應用非常重要,一方面將開發和部署進行了解耦,讓開發者和運維團隊可以通過關注點分離簡化系統復雜性;一方面,可以將短生命周期、無狀態的 Serverless 應用邏輯,與數據庫連接池管理這樣的長期運行,有狀態的中間件訪問能力進行解耦,提升了 Serverless 應用的可伸縮性和運行效率。

“Any language, any framework, anywhere” 是 Dapr 的重要設計目標。Dapr 通過在應用和后端服務之間,通過 Sidecar 方式提供一個抽象層,并通過標準化的 HTTP/gRPC API 實現了應用的可移植性,和后端服務的可替換性。

走向詩和遠方

我們可以將 WebAssembly 和 Dapr 相結合,來實現可移植、強隔離、輕量化的微服務應用架構。Dapr sidecar 與 WASM 虛擬機部署在一起。WASI 應用通過 HTTP/gRPC 訪問本地的 Dapr 服務端點,由 Dapr 代理連接各種后端服務或者實現服務間通信。

這樣的架構設計讓 WASI 應用的安全邊界非常清晰,符合 WASI 安全模型,WASI 應用只能通過 Dapr sidecar 實現外部服務訪問。同時在這個架構中,只有 WASM 虛擬機和 Dapr 作為可信的環境依賴以原生機器碼運行。而應用是可移植的 WASM 字節碼,大大提升了架構的可移植性和安全性。

來自微軟 Deis Labs 的 Radu Matei,最近提供了一個實驗性項目可以為 WASI 添加 HTTP 支持。詳見:https://deislabs.io/posts/wasi-experimental-http/ 。

在此基礎上,我們來構建一個最小原型,驗證 WebAssembly 與 Dapr 相結合的技術可行性。

1. Dapr 環境準備

我們首先按照 https://docs.dapr.io/getting-started/ 的流程:

$ dapr init Making the jump to hyperspace... Downloading binaries and setting up components... Downloaded binaries and completed components set up. daprd binary has been installed to /Users/yili/.dapr/bin. dapr_placement container is running. dapr_redis container is running. dapr_zipkin container is running. Use `docker ps` to check running containers. Success! Dapr is up and running. To get started, go here: https://aka.ms/dapr-getting-started$ dapr run --app-id myapp --dapr-http-port 3500WARNING: no application command found. Starting Dapr with id myapp. HTTP Port: 3500. gRPC Port: 63734 Checking if Dapr sidecar is listening on HTTP port 3500... Checking if Dapr sidecar is listening on GRPC port 63734 Dapr sidecar is up and running. You're up and running! Dapr logs will appear here.

2. 利用 Redis 作為 WASI 應用的狀態存儲

我們下面利用 Dapr 的 Get Started 的例子,利用 Redis 作為 WASI 應用的狀態存儲。具體邏輯如下圖。

注:下面的應用需要 Rust 和 AssemblyScript 環境配置,請大家自行完成。

我們在 Radu 項目的基礎上 fork 了一個版本,首先來下載代碼,并進行構建。

$ git clone https://github.com/denverdino/wasi-experimental-http$ cd wasi-experimental-http$ cargo build... Finished dev [unoptimized + debuginfo] target(s) in 3m 02s

我們利用 AssemblyScript 來實現了這個測試應用,測試代碼如下:

$ cat tests/dapr/index.ts// @ts-ignoreimport { Console } from "as-wasi";import { DaprClient, StateItem } from "./dapr";import { JSON } from "assemblyscript-json";Console.log("Testing Dapr API ....")let dapr = new DaprClient()dapr.saveState("statestore", "weapon", JSON.Value.String("Death Star"))let o = JSON.Value.Object()o.set("name", "Tatooine")o.set("test", 123)let item = new StateItem("planets", o)let items: StateItem[] = [item]dapr.saveBulkState("statestore", items)let testObj = dapr.getState("statestore", "planets")let testStr = dapr.getState("statestore", "weapon")if (testStr.toString() == "Death Star" && testObj.isObj && (<JSON.Integer>(<JSON.Obj>testObj).getInteger("test")).valueOf() == 123) { Console.log("Test successfully!")} else { Console.log("Test failed!")}

代碼邏輯非常簡單,就是創建一個 Dapr 客戶端,然后通過 REST API,進行 Dapr 的狀態管理。我們可以快速驗證一下。

$ cargo run Finished dev [unoptimized + debuginfo] target(s) in 0.19s Running `target/debug/wasi-experimental-http-wasmtime-sample`Testing Dapr API ....POST http://127.0.0.1:3500/v1.0/state/statestore with [{"key":"weapon","value":"Death Star"}]POST http://127.0.0.1:3500/v1.0/state/statestore with [{"key":"planets","value":{"name":"Tatooine","test":123}}]GET http://127.0.0.1:3500/v1.0/state/statestore/planetsGET http://127.0.0.1:3500/v1.0/state/statestore/weaponTest successfully!module instantiation time: 333.16637ms

3. 關鍵要點分析

wasi-experimental-http 項目在 Wasmtime (來自 Bytecode Alliance 的一個 WASM 實現)虛擬機上實現了擴展,支持在 WASI 應用中,訪問 HTTP 服務。它還提供了一個 AssemblyScript 的 HTTP Client 實現。

wasi-experimental-http 項目:https://github.com/deislabs/wasi-experimental-http/。

在此之上,我們為 AssemblyScript 提供一個 Dapr 的封裝,可以參見:https://github.com/denverdino/wasi-experimental-http/blob/main/tests/dapr/dapr.ts。

// @ts-ignoreimport { Console } from "as-wasi";import { Method, RequestBuilder, Response } from "../../crates/as";import { JSONEncoder, JSON } from "assemblyscript-json";export class StateItem { key: string value: JSON.Value etag: string | null metadata: Map<string, string> | null constructor(key: string, value: JSON.Value) { this.key = key this.value = value this.etag = null this.metadata = null }}...export class DaprClient { port: i32 address: string constructor() { this.address = "127.0.0.1" this.port = 3500 } stateURL(storeName: string): string { return "http://" + this.address + ":" + this.port.toString() + "/v1.0/state/" + storeName } saveState(storeName: string, key: string, value: JSON.Value): boolean { let item = new StateItem(key, value) let items: StateItem[] = [item] return this.saveBulkState(storeName, items) } saveBulkState(storeName: string, items: StateItem[]): boolean { // Handle field let encoder = new JSONEncoder(); // Construct necessary object encoder.pushArray(null); for (let i = 0, len = items.length; i < len; i++) { let item = items[i] encoder.pushObject(null); encoder.setString("key", item.key) encodeValue(encoder, "value", item.value) if (item.etag != null) { encoder.setString("etag", <string>item.etag) } encoder.popObject() }; encoder.popArray(); // Or get serialized data as string let jsonString = encoder.toString(); let url = this.stateURL(storeName); Console.log("POST " + url + " with " + jsonString); let res = new RequestBuilder(url) .method(Method.POST) .header("Content-Type", "application/json") .body(String.UTF8.encode(jsonString)) .send(); let ok = res.status.toString() == "200" res.close(); return ok } getState(storeName: string, key: string): JSON.Value { let url = this.stateURL(storeName) + "/" + key; Console.log("GET " + url); let res = new RequestBuilder(url) .method(Method.GET) .send(); let ok = res.status.toString() == "200" let result = <JSON.Value> new JSON.Null() if (ok) { let body = res.bodyReadAll(); result = <JSON.Value>JSON.parse(body) } res.close(); return result }};

測試應用的 main 函數,會創建一個 Wasmtime 運行時環境,并為其添加為 HTTP 擴展,并加載執行測試應用的 WASM 字節碼:https://github.com/denverdino/wasi-experimental-http/blob/main/src/main.rs。

fn main() { let allowed_domains = Some(vec![ "http://127.0.0.1:3500".to_string(), ]); let module = "tests/dapr/build/optimized.wasm"; create_instance(module.to_string(), allowed_domains.clone()).unwrap();}/// Create a Wasmtime::Instance from a compiled module and/// link the WASI imports.fn create_instance( filename: String, allowed_domains: Option<Vec<String>>,) -> Result<Instance, Error> { let start = Instant::now(); let store = Store::default(); let mut linker = Linker::new(&store); let ctx = WasiCtxBuilder::new() .inherit_stdin() .inherit_stdout() .inherit_stderr() .build()?; let wasi = Wasi::new(&store, ctx); wasi.add_to_linker(&mut linker)?; // Link `wasi_experimental_http` let http = HttpCtx::new(allowed_domains, None)?; http.add_to_linker(&mut linker)?; let module = wasmtime::Module::from_file(store.engine(), filename)?; let instance = linker.instantiate(&module)?; let duration = start.elapsed(); println!("module instantiation time: {:#?}", duration); Ok(instance)}

道阻且長,行則將至

WASM/WASI 為輕量化、可移植、缺省安全的應用運行時提供了良好的基礎,在區塊鏈等領域 WebAssembly 已經得到了廣泛的應用。然而,對于通用性的服務器端應用,WASM/WASI 的差距還非常明顯。由于 berkeley socket 這樣標準化的網絡編程接口的缺失,只能通過擴展 WASM 虛擬機的方式來進行補齊。此外 WASM 的多線程能力還沒有被標準化,目前的 HTTP 調用采用阻塞式同步調用,還無法實現高效和穩定的網絡通信。

此外,另外 WASM/WASI 的一個短板就是開發效率和生態建設。目前而言,雖然眾多的編程語言已經逐漸開始提供 WebAssembly 的支持,但是對于普通開發者而言,AssemblyScript 這樣的腳本語言是更加合適的選擇。AssemblyScript 復用了 TypeScript 的語法,與 Rust/C++ 相比,大大降低了學習曲線,也提供了非常好的 IDE 工具體驗,如 VS Code 等。但是與 TypeScripty 通過翻譯成為 JavaScript 執行不同,AssemblyScript 應用會被編譯成 WASM 字節碼執行。AssemblyScript 本質上是一個靜態類型的編譯型語言,本質上與 JS/TS 這樣的動態類型的解釋型語言非常不同。二者在語法上也有一些不同,比如目前 AssemblyScript 缺少對閉包 (closure) 和正則表達式 (Regex) 等常用功能支持,這讓開發 WASM 應用還是有一定的技術門檻。

另外與 NPM 強大的生態相比,AssemblyScript 社區也很年輕。很多功能都需要從頭構建,比如對 JSON 的序列化與反序列化,我們選擇了 _https://github.com/nearprotocol/assemblyscript-json_ ,但是其易用性和性能與成熟的 JSON 類庫還有一定差距。當然我們也看到 AssemblyScript 的快速成長,以及越來越多的開發者開始貢獻 AssemblyScript 代碼庫,比如 regex 支持等等。

Dapr 的出現為 WASM/WASI 開發通用的分布式應用,尤其是為可移植的、Serverless 化的應用帶來另外一縷曙光。然而 Dapr 也并非完美:API 標準化在提升對后端服務可移植性的同時也阻礙了對差異化能力的支持。Sidecar 架構在提升靈活性的同時增加了部署和管理復雜性。

作為一個理性樂觀派,任何技術都有其青澀的時代,期待社區的共同努力讓計算無處不在、創新觸手可及的理想成為現實。

責任編輯:梁菲 來源: 阿里云云棲號
相關推薦

2024-11-13 09:03:38

云原生SpinKubeKubernetes

2013-07-27 21:28:44

2011-11-08 11:10:34

操作系統Windows 9

2013-06-27 11:21:17

2015-12-03 17:38:18

云桌面

2024-02-04 09:53:27

2011-06-20 12:51:55

Android 4.0

2025-01-03 09:24:10

模型架構論文

2020-09-16 10:28:54

邊緣計算云計算數據中心

2020-09-27 17:27:58

邊緣計算云計算技術

2015-09-29 11:24:23

云桌面

2013-09-09 16:28:36

2016-01-26 11:58:12

2012-10-16 15:32:57

2012-07-16 10:08:31

下一代ITBYOD

2012-12-10 16:15:43

下一代防火墻NGWF

2023-04-28 10:02:50

2020-06-02 08:05:28

智能電表蜂窩物聯網NB-IoT

2021-05-22 23:01:21

人工智能網絡安全

2024-02-26 14:46:53

移動計算人工智能5G
點贊
收藏

51CTO技術棧公眾號

国产又粗又猛又黄| 亚洲成人福利在线观看| 亚洲精品国产片| 国产模特精品视频久久久久| 亚洲一品av免费观看| 日本黄大片一区二区三区| dj大片免费在线观看| 99久久国产综合精品色伊| 国产成+人+综合+亚洲欧美丁香花| 免费看的黄色网| 亚洲精品一区二区三区在线| 欧美日韩一区二区三区在线免费观看| 日韩精品一线二线三线| 国产黄a三级三级看三级| 国产精品入口| 免费91麻豆精品国产自产在线观看| 免费的av网站| 91麻豆精品| 欧美性xxxxxx| www.69av| 在线观看av的网站| 99精品热视频| 亚洲一区二区三区四区视频| 无码日韩精品一区二区| 亚洲婷婷在线| 美女福利视频一区| 亚洲色成人网站www永久四虎 | 国产欧美一区二区| 日本一区二区三区四区五区| 99久久这里只有精品| 国产视频精品久久久| 伊人久久久久久久久| 久久av日韩| 色一情一伦一子一伦一区| 国产va亚洲va在线va| 蜜桃视频在线观看www社区| 久久中文字幕电影| 国产视频一区二区三区四区| 日本一区二区不卡高清更新| 国产成人亚洲精品自产在线| 亚洲国产老妈| 日韩在线精品视频| 国产精品美女高潮无套 | 免费h精品视频在线播放| 国产强伦人妻毛片| 麻豆成人久久精品二区三区红| 欧美一区二粉嫩精品国产一线天| 久热这里只有精品在线| 亚洲精品一区二区在线看| 中文国产成人精品| 久久精品ww人人做人人爽| 99久久久国产精品无码免费| 久久99精品久久久久久动态图| 国产不卡一区二区在线播放| 最新中文字幕一区| 一本色道久久| 97视频在线观看视频免费视频 | 影音先锋中文字幕一区二区| 欧美乱人伦中文字幕在线| 手机在线免费看片| 中文在线日韩| 欧美大胆在线视频| 欧美黄色免费在线观看| 午夜国产精品视频| 九色精品免费永久在线| 久久久久免费看| 亚洲高清毛片| 日本成人精品在线| 波多野结衣不卡| 麻豆专区一区二区三区四区五区| 国产免费亚洲高清| 91久久精品国产91性色69| 韩国毛片一区二区三区| 99国产超薄丝袜足j在线观看| 亚洲国产精品国自产拍久久| www.欧美日韩| 欧美午夜精品久久久久久蜜| 国产免费裸体视频| 欧美拍拍视频| 国产精品久久免费看| 一区二区三区久久网| 成年视频在线观看| 精品久久久久久国产| 成人在线看视频| 久久人人视频| 精品国产精品网麻豆系列| 激情综合丁香五月| 不卡一区2区| 九九热最新视频//这里只有精品| 久久精品这里有| 日韩国产欧美在线视频| 91久久久久久久| 日韩在线视频第一页| 国产日韩欧美在线一区| 欧洲金发美女大战黑人| 在线观看爽视频| 精品视频999| 白嫩情侣偷拍呻吟刺激| 精品99久久| 久久99精品视频一区97 | 日本高清不卡在线观看| 久久久久久久久久久久久久久国产 | 中文字幕人妻熟女人妻a片| 色吊丝一区二区| 久久天天躁夜夜躁狠狠躁2022| 久久久精品视频免费| 免费亚洲电影在线| 国产在线精品日韩| 日本在线人成| 色婷婷综合久久久中文字幕| 亚洲高清视频免费| 久久av影视| 欧美国产精品va在线观看| 中文字幕视频在线播放| av男人天堂一区| 一级黄色录像免费看| 亚洲伦乱视频| 亚洲激情在线观看视频免费| 暗呦丨小u女国产精品| 手机精品视频在线观看| 国新精品乱码一区二区三区18| www 日韩| 51一区二区三区| 亚洲综合免费观看高清完整版在线| 别急慢慢来1978如如2| 丁香一区二区| 欧美裸体男粗大视频在线观看| 欧美一区免费看| 不卡的av在线播放| 久久久久福利视频| 亚洲人成网站在线在线观看| 亚洲人在线视频| 四虎永久在线精品| 国产精品综合二区| 欧美日韩在线免费观看视频| a屁视频一区二区三区四区| 亚洲精品国产精品久久清纯直播| 欧美久久久久久久久久久久| 久久9热精品视频| 天天爽天天狠久久久| 日韩伦理三区| 亚洲欧洲中文天堂| 国产伦精品一区二区三区视频我| jvid福利写真一区二区三区| 国产精品国产对白熟妇| 色播一区二区| 久久6精品影院| 国产av精国产传媒| 亚洲免费av高清| 亚洲一二区在线观看| 国产精品二区不卡| 成人免费观看a| 麻豆影院在线| 91精品国产全国免费观看| 日本精品人妻无码77777| 另类小说综合欧美亚洲| 亚洲图片都市激情| 欧美一级免费| 美女视频久久黄| 精品国产av一区二区| 亚洲最大成人网4388xx| 一级全黄裸体片| 亚洲美女毛片| 久久精品ww人人做人人爽| 国产超碰精品| 最近2019中文免费高清视频观看www99 | 国产精品嫩草69影院| 黑人一区二区| 久久99精品久久久久久水蜜桃| 伊人网在线播放| 亚洲图中文字幕| 成人日韩av在线| 国产精品99999| 欧美日韩五月天| 一级黄色录像视频| 成人高清视频在线观看| 男人操女人免费软件| 精品国产一区二区三区久久久樱花| 国产精品男人的天堂| 国产黄a三级三级三级av在线看| 狠狠躁18三区二区一区| 欧美乱熟臀69xxxxxx| 最近更新的2019中文字幕| a一级免费视频| 国产乱人伦精品一区二区在线观看 | 欧美aaaaaaa| 欧美在线观看视频在线| 日本精品人妻无码77777| 99re在线精品| 午夜精品一区二区三区免费视频 | 永久免费未视频| 国产精品一级片| 免费欧美一级视频| 91青青国产在线观看精品| 国产精品免费区二区三区观看| 先锋av资源站| a级片国产精品自在拍在线播放| 91精品专区| 男人的天堂亚洲在线| 区一区二区三区中文字幕| 亚洲一区二区av| 91av视频在线免费观看| 日本网站在线免费观看视频| 精品va天堂亚洲国产| 韩国日本在线视频| 国产精品自拍合集| 欧美人与禽性xxxxx杂性| 日韩av网址在线观看| 在线免费看毛片| 亚洲va天堂va国产va久| 免费黄色国产视频| 91亚洲永久精品| 欧美日韩aaaa| 国产精品21p| 一区二区三区91| 久久久久无码精品国产sm果冻 | 五月天激情开心网| 9191久久久久久久久久久| 国产美女激情视频| 亚洲影视在线播放| 日本午夜在线观看| 国产欧美精品一区aⅴ影院| 久久久久国产精品无码免费看| 国内精品写真在线观看| 国产嫩草在线观看| 先锋亚洲精品| 精品国偷自产一区二区三区| 91精品1区| 亚洲永久激情精品| 日本成a人片在线观看| 91国拍精品国产粉嫩亚洲一区 | 岛国av免费在线观看| 欧美在线影院一区二区| 日本少妇激情舌吻| 亚洲精品乱码久久久久久日本蜜臀| 成人免费无遮挡无码黄漫视频| 成年人午夜久久久| 亚洲精品乱码久久久久久蜜桃欧美| 久国产精品韩国三级视频| 老司机午夜av| 久久久精品日韩| 成人在线激情网| 久久国产日本精品| 国产男女在线观看| 国产亚洲高清视频| 日韩av一二三四区| 亚洲综合二区| 国产1区2区在线| 日本vs亚洲vs韩国一区三区| 免费观看成人在线视频| 欧美一级网站| 成熟老妇女视频| 视频一区二区不卡| 亚洲不卡视频在线| 麻豆国产91在线播放| 午夜视频在线网站| 高潮在线视频| 99re66热这里只有精品8| 久久99在线观看| 亚洲午夜久久久久久久久电影网| 尤物九九久久国产精品的特点| 欧美激情精品久久久久久蜜臀 | 奇米888四色在线精品| 日韩一级在线免费观看| 久久资源在线| 香港日本韩国三级网站| 久久99精品国产麻豆婷婷| 欧美精品 - 色网| 国产一区二区三区黄视频 | 日本少妇高潮喷水视频| 亚洲一区免费| 天天干在线影院| 极品尤物av久久免费看| 激情小说欧美色图| 99久久久久久| 亚洲做受高潮无遮挡| 欧美日韩伦理片| 天堂va欧美ⅴa亚洲va一国产| 91亚洲大成网污www| 人妻丰满熟妇av无码区app| 日韩黄色小视频| 五月天婷婷在线观看视频| 成人丝袜18视频在线观看| 91网站免费视频| 亚洲色图在线播放| 日韩无码精品一区二区三区| 在线看一区二区| 国产强被迫伦姧在线观看无码| 亚洲国产三级网| 久久精品视频免费看| 91精品国产九九九久久久亚洲| 97欧美成人| 精品伦精品一区二区三区视频| 欧美性感美女一区二区| 国产欧美精品aaaaaa片| 日韩激情av在线| 艳妇乳肉豪妇荡乳xxx| 中文字幕不卡三区| 久久午夜鲁丝片午夜精品| 在线亚洲欧美专区二区| 亚洲爱情岛论坛永久| 亚洲图片制服诱惑| 2018av在线| 成人免费黄色网| 国产成人三级| av在线观看地址| 久久91精品国产91久久小草| 91精品视频免费| 1314成人网| 91成人在线网站| 精品日本一区二区三区| 亚洲91精品| 中文字幕在线成人| 亚洲美女福利视频| 中文字幕日韩av电影| 成年人黄色大片在线| 91久久精品国产91久久性色| 国产精品自拍区| 人妻少妇精品无码专区二区| 国产精品一区二区你懂的| 欧洲性xxxx| 色综合久久综合网97色综合| 欧洲精品久久一区二区| 久久精品国产综合| 91在线成人| 日本免费高清不卡| 国产精品试看| 久久人妻一区二区| 亚洲国产精品久久久久秋霞影院| 国产一区二区三区四区视频| 在线成人中文字幕| 色香欲www7777综合网| 蜜桃视频在线观看91| 亚洲每日更新| 亚洲一区二区在线免费| 一区二区三区欧美| 精品久久久久久亚洲综合网站| 综合网日日天干夜夜久久| 韩国成人在线| 青青草成人激情在线| 欧美日韩亚洲在线观看| 欧美丰满少妇xxxx| 亚洲一区二区小说| 综合色婷婷一区二区亚洲欧美国产| 久热精品视频| 亚洲性猛交xxxx乱大交| 色88888久久久久久影院按摩| 亚洲av成人精品一区二区三区在线播放| 欧美日韩第一页| 日韩欧美另类中文字幕| h无码动漫在线观看| 东方欧美亚洲色图在线| 国产无遮挡又黄又爽在线观看| 精品久久一区二区三区| 暧暧视频在线免费观看| 国产一区喷水| 久久精品中文| 手机看片国产日韩| 欧美久久一二区| 国产精品一卡二卡三卡| 99久久精品无码一区二区毛片 | 中文字幕亚洲欧美| 国产成人a视频高清在线观看| 一本一本a久久| 国内不卡的二区三区中文字幕| 亚洲综合网在线| 欧美v亚洲v综合ⅴ国产v| 国产伦久视频在线观看| 欧美主播一区二区三区美女 久久精品人| 老**午夜毛片一区二区三区 | 亚洲最新在线观看| 日本国产在线观看| 国产黑人绿帽在线第一区| 欧美第一精品| 日本成人在线免费| 亚洲色图丝袜| 一本久道久久综合狠狠爱亚洲精品| 精品一区二区三区免费观看| 激情综合网五月天| 日韩精品小视频| 国产香蕉久久| 亚洲乱码日产精品bd在线观看| 99久久国产综合精品色伊| 在线播放亚洲精品| 久久久久久久久网站| 精品国精品国产自在久国产应用| 三级视频中文字幕| 亚洲一区在线免费观看| 黄色片在线免费观看| 91视频免费网站| 国产精品三上| 人妻少妇精品一区二区三区| 日韩毛片中文字幕| 电影一区中文字幕| 亚洲色欲综合一区二区三区| 自拍偷自拍亚洲精品播放| 天天操天天操天天干| 国产精品伦子伦免费视频| 樱桃成人精品视频在线播放| 人与动物性xxxx|