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

當(dāng)前位置:首頁(yè) > 科技  > 軟件

從 Dapper 到 OpenTelemetry:分布式追蹤的演進(jìn)之旅

來(lái)源: 責(zé)編: 時(shí)間:2024-06-07 17:20:36 319觀看
導(dǎo)讀從基本概念到如何部署 demo 實(shí)戰(zhàn)了解 OpenTelemetry,從那個(gè) demo 中也可以得知整個(gè) OpenTelemetry 體系的復(fù)雜性,包含了太多的組件和概念。為了能更清晰的了解每個(gè)關(guān)鍵組件的作用以及原理,我打算分為幾期來(lái)講解 OpenTele

Y5K28資訊網(wǎng)——每日最新資訊28at.com

從基本概念到如何部署 demo 實(shí)戰(zhàn)了解 OpenTelemetry,從那個(gè) demo 中也可以得知整個(gè) OpenTelemetry 體系的復(fù)雜性,包含了太多的組件和概念。Y5K28資訊網(wǎng)——每日最新資訊28at.com

為了能更清晰的了解每個(gè)關(guān)鍵組件的作用以及原理,我打算分為幾期來(lái)講解 OpenTelemetry 的三個(gè)核心組件:Y5K28資訊網(wǎng)——每日最新資訊28at.com

  • Trace
  • Metrics
  • Logs

首先以 Trace 講起。Y5K28資訊網(wǎng)——每日最新資訊28at.com

Trace

開(kāi)始之前還是先復(fù)習(xí)一下 Trace 的歷史背景。Y5K28資訊網(wǎng)——每日最新資訊28at.com

如今現(xiàn)代的分布式追蹤的起源源自于 Google 在 2010 年發(fā)布的一篇論文:Y5K28資訊網(wǎng)——每日最新資訊28at.com

  • Dapper, a Large-Scale Distributed Systems Tracing Infrastructure

在這篇論文中提出了分布式追蹤的幾個(gè)核心概念:Y5K28資訊網(wǎng)——每日最新資訊28at.com

  • Trace
  • Span
  • Span 的一些基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)
  • 可視化追蹤以及展示

之后 Twitter 受到了 Dapper 的啟發(fā)開(kāi)源了現(xiàn)在我們熟知的 Zipkin,包含了存儲(chǔ)和可視化 UI 展示我們的追蹤鏈路。Y5K28資訊網(wǎng)——每日最新資訊28at.com

Uber 也在 2015 年開(kāi)源了 Jaeger 項(xiàng)目,它的功能和 Zipkin 類似,但目前我們用的較多的還是 Jaeger;現(xiàn)在已經(jīng)成為 CNCF 的托管項(xiàng)目。Y5K28資訊網(wǎng)——每日最新資訊28at.com

之后陸續(xù)出現(xiàn)過(guò) OpenTracing 和 OpenCensus 項(xiàng)目,他們都企圖統(tǒng)一分布式追蹤這一領(lǐng)域。Y5K28資訊網(wǎng)——每日最新資訊28at.com

直到 OpenTelemetry 的出現(xiàn)整合了以上兩個(gè)項(xiàng)目,并且逐漸成為可觀測(cè)領(lǐng)域的標(biāo)準(zhǔn)。Y5K28資訊網(wǎng)——每日最新資訊28at.com

更多歷史背景可以參考之前的文章:OpenTelemetry 實(shí)踐指南:歷史、架構(gòu)與基本概念Y5K28資訊網(wǎng)——每日最新資訊28at.com

Y5K28資訊網(wǎng)——每日最新資訊28at.com

Y5K28資訊網(wǎng)——每日最新資訊28at.com

這里我們結(jié)合 Dapper 論文中的資料進(jìn)行分析,在這個(gè)調(diào)用中用戶發(fā)起了一次請(qǐng)求,內(nèi)部系統(tǒng)經(jīng)歷了 4 次 RPC 調(diào)用。Y5K28資訊網(wǎng)——每日最新資訊28at.com

從第二張圖會(huì)看到一些關(guān)鍵信息:Y5K28資訊網(wǎng)——每日最新資訊28at.com

  • spanName
  • parentId
  • spanId

parentId 很好理解,主要是定義調(diào)用的主次關(guān)系;要注意的是并行調(diào)用時(shí) parentId 是同一個(gè)。Y5K28資訊網(wǎng)——每日最新資訊28at.com

spanId 在可以理解為每一個(gè)獨(dú)立的操作,在這里就是一次 RPC 調(diào)用;同理一次數(shù)據(jù)庫(kù)操作、消息的收發(fā)都是一個(gè) span。Y5K28資訊網(wǎng)——每日最新資訊28at.com

span 的更多內(nèi)容在后文繼續(xù)講解。Y5K28資訊網(wǎng)——每日最新資訊28at.com

Span

Y5K28資訊網(wǎng)——每日最新資訊28at.com

當(dāng)我們把某一個(gè)具體的 span 放大會(huì)看到更加詳細(xì)的信息,其中最關(guān)鍵的如下:Y5K28資訊網(wǎng)——每日最新資訊28at.com

  • traceId
  • spanName
  • spanId
  • parentId
  • 開(kāi)始時(shí)間
  • 結(jié)束時(shí)間

由于一個(gè)完整的 trace 鏈路由 N 個(gè) span 組成,所以這個(gè)鏈路必須得有一個(gè)唯一的 traceId 將這些 span 串聯(lián)起來(lái)。這樣才可以在可視化的時(shí)候更好的展示鏈路信息。Y5K28資訊網(wǎng)——每日最新資訊28at.com

以上的這些字段很容易理解,都是一些必須的信息。Y5K28資訊網(wǎng)——每日最新資訊28at.com

在 Dapper 論文中使用 Annotations 來(lái)存放 span 的屬性,也就是剛才那些字段,當(dāng)然也可以自定義存放一些數(shù)據(jù),比如圖中的 "foo"Y5K28資訊網(wǎng)——每日最新資訊28at.com

OpenTelemetry 中的 Span

OpenTelemetry 的 trace 自然也是基于 Dapper 的,只是額外做了一些優(yōu)化,比如在剛才那些字段的基礎(chǔ)上新增了一些概念:Y5K28資訊網(wǎng)——每日最新資訊28at.com

{  "name": "/v1/sys/health",  "context": {    "trace_id": "7bba9f33312b3dbb8b2c2c62bb7abe2d",    "span_id": "086e83747d0e381e"  },  "parent_id": "",  "start_time": "2021-10-22 16:04:01.209458162 +0000 UTC",  "end_time": "2021-10-22 16:04:01.209514132 +0000 UTC",  "status_code": "STATUS_CODE_OK",  "status_message": "",  "attributes": {    "net.transport": "IP.TCP",    "net.peer.ip": "172.17.0.1",    "net.peer.port": "51820",    "net.host.ip": "10.177.2.152",    "net.host.port": "26040",    "http.method": "GET",    "http.target": "/v1/sys/health",    "http.server_name": "mortar-gateway",    "http.route": "/v1/sys/health",    "http.user_agent": "Consul Health Check",    "http.scheme": "http",    "http.host": "10.177.2.152:26040",    "http.flavor": "1.1"  },  "events": [    {      "name": "",      "message": "OK",      "timestamp": "2021-10-22 16:04:01.209512872 +0000 UTC"    }  ]}

以這個(gè) JSON 為例,新增了:Y5K28資訊網(wǎng)——每日最新資訊28at.com

  • [ ] Span Context
  • Span 的上下文,存放的都是不可變的數(shù)據(jù),因?yàn)槊總€(gè) Span 之間是存在關(guān)聯(lián)關(guān)系的,這些關(guān)聯(lián)關(guān)系都是存放在 context 中,主要就是 trace_id, span_id.
  • Attributes: 可以理解為 Dapper 中的 Annotations,存放的是我們自定義的鍵值對(duì),通常是由我們常用第三方開(kāi)源 Instrumentation 內(nèi)置的一些屬性。
  • Span Events: Span 的一些關(guān)鍵事件。

Y5K28資訊網(wǎng)——每日最新資訊28at.com

比如我們常用的 Redis 客戶端 lettuce,它就會(huì)自己記錄一些 Attributes。Y5K28資訊網(wǎng)——每日最新資訊28at.com

如果有多個(gè) span 存在依賴關(guān)系:Y5K28資訊網(wǎng)——每日最新資訊28at.com

[Span A]  ←←←(the root span)            |     +------+------+     |             | [Span B]      [Span C] ←←←(Span C is a `child` of Span A)     |             | [Span D]      +---+-------+               |           |           [Span E]    [Span F]

大部分的可視化工具都是以時(shí)間線的方式進(jìn)行展示:Y5K28資訊網(wǎng)——每日最新資訊28at.com

––|–––––––|–––––––|–––––––|–––––––|–––––––|–––––––|–––––––|–> time [Span A···················································]   [Span B··········································]      [Span D······································]    [Span C····················································]         [Span E·······]        [Span F··]

這些和 Dapper 中描述的概念沒(méi)有本質(zhì)區(qū)別。Y5K28資訊網(wǎng)——每日最新資訊28at.com

Span Status

Span 還內(nèi)置了一些 Status:Y5K28資訊網(wǎng)——每日最新資訊28at.com

  • Unset
  • Error
  • Ok

默認(rèn)情況下是 Unset,出現(xiàn)錯(cuò)誤時(shí)則是 Error,一切正常時(shí)則是 Ok。Y5K28資訊網(wǎng)——每日最新資訊28at.com

Y5K28資訊網(wǎng)——每日最新資訊28at.com

通過(guò)可視化頁(yè)面很容易得知某個(gè) trace 中 span 的異常情況,點(diǎn)進(jìn)去后可以看到具體的異常 span 以及它的錯(cuò)誤日志。Y5K28資訊網(wǎng)——每日最新資訊28at.com

Span Kind

最后是 Span 的類型:Y5K28資訊網(wǎng)——每日最新資訊28at.com

  • Client
  • Server
  • Internal
  • Producer
  • Consumer

Y5K28資訊網(wǎng)——每日最新資訊28at.com

Client 和 Server 非常好理解,比如我們有一個(gè) gRPC 接口,調(diào)用方的 Span 是 client,而服務(wù)端的 Span 自然就是 Server。Y5K28資訊網(wǎng)——每日最新資訊28at.com

Internal 則是內(nèi)部組件調(diào)用產(chǎn)生的 Span,這類 Span 相對(duì)會(huì)少一些。Y5K28資訊網(wǎng)——每日最新資訊28at.com

Producer 和 Consumer 一般指的是發(fā)起異步調(diào)用時(shí)的 Span,我們常見(jiàn)的就是往消息隊(duì)列里生產(chǎn)和消費(fèi)消息。Y5K28資訊網(wǎng)——每日最新資訊28at.com

通過(guò)這幾種類型的 Span 也可以了解到什么情況下會(huì)創(chuàng)建 Span,通常是以下幾種場(chǎng)景:Y5K28資訊網(wǎng)——每日最新資訊28at.com

  • RPC 調(diào)用
  • 數(shù)據(jù)庫(kù)(Redis、MySQL、Mongo 等等)操作
  • 生產(chǎn)和消費(fèi)消息
  • 有意義的內(nèi)部調(diào)用

通常在一個(gè)函數(shù)內(nèi)部再調(diào)用其他的本地函數(shù)是不用創(chuàng)建 span 的,不然這個(gè)鏈路會(huì)非常的長(zhǎng)。Y5K28資訊網(wǎng)——每日最新資訊28at.com

Annotations

當(dāng)然也有一些特殊情況,比如我的某個(gè)內(nèi)部函數(shù)非常重要,需要單獨(dú)關(guān)心它的調(diào)用時(shí)長(zhǎng)。Y5K28資訊網(wǎng)——每日最新資訊28at.com

此時(shí)我們就可以使用 Annotations 來(lái)單獨(dú)創(chuàng)建自己的 Span。Y5K28資訊網(wǎng)——每日最新資訊28at.com

這個(gè) Annotations 和 Dapper 中的不是同一個(gè),只是 Java 中的注解。Y5K28資訊網(wǎng)——每日最新資訊28at.com

@Override  public void sayHello(HelloRequest request, StreamObserver<HelloReply> responseObserver) {      Executors.newFixedThreadPool(1).execute(() -> {          myMethod(request.getName());      });            HelloReply reply = HelloReply.newBuilder()              .setMessage("Hello ==> " + request.getName())              .build();      responseObserver.onNext(reply);      responseObserver.onCompleted();  }    @SneakyThrows  @WithSpan  public void myMethod(@SpanAttribute("request.name") String name) {      TimeUnit.SECONDS.sleep(1);      log.info("myMethod:{}", name);  }

以這段代碼為例,這是一個(gè) gRPC 的服務(wù)端接口,在這個(gè)接口中調(diào)用了一個(gè)函數(shù) myMethod,默認(rèn)情況下并不會(huì)為它單獨(dú)創(chuàng)建一個(gè) Span。Y5K28資訊網(wǎng)——每日最新資訊28at.com

但如果我們想單獨(dú)記錄它,就可以使用 @WithSpan 這個(gè)注解,同時(shí)也可以使用  @SpanAttribute 來(lái)自定義 attribute。Y5K28資訊網(wǎng)——每日最新資訊28at.com

最終的效果如下:Y5K28資訊網(wǎng)——每日最新資訊28at.com

Y5K28資訊網(wǎng)——每日最新資訊28at.com

此時(shí)就會(huì)單獨(dú)為這個(gè)函數(shù)創(chuàng)建一個(gè) Span。Y5K28資訊網(wǎng)——每日最新資訊28at.com

需要單獨(dú)引入一個(gè)依賴:Y5K28資訊網(wǎng)——每日最新資訊28at.com

<dependencies>  <dependency>    <groupId>io.opentelemetry.instrumentation</groupId>    <artifactId>opentelemetry-instrumentation-annotations</artifactId>    <version>2.3.0</version>  </dependency></dependencies>

Context Propagation

上下文傳播也是 Trace 中非常重要的概念,剛才提到了每個(gè) Span 都有自己不可變的上下文,那么后續(xù)的 Span 如何和上游的 Span 進(jìn)行關(guān)聯(lián)呢?Y5K28資訊網(wǎng)——每日最新資訊28at.com

這里有兩種情況:Y5K28資訊網(wǎng)——每日最新資訊28at.com

  • 同一進(jìn)程
  • 垮進(jìn)程

同一進(jìn)程

同一個(gè)進(jìn)程也分為兩種情況:Y5K28資訊網(wǎng)——每日最新資訊28at.com

  • 單線程
  • 多線程

單線程的比較好處理,我們只需要把數(shù)據(jù)寫入 ThreadLocal 中就可以做到線程隔離。Y5K28資訊網(wǎng)——每日最新資訊28at.com

private static final ThreadLocal<Context> THREAD_LOCAL_STORAGE = new ThreadLocal<>();@Override  @Nullable  public Context current() {    return THREAD_LOCAL_STORAGE.get();  }

這點(diǎn)我們可以通過(guò)源碼 io.opentelemetry.context.ThreadLocalContextStorage看到具體的實(shí)現(xiàn)過(guò)程。Y5K28資訊網(wǎng)——每日最新資訊28at.com

而如果是多線程時(shí):Y5K28資訊網(wǎng)——每日最新資訊28at.com

Executors.newFixedThreadPool(1).execute(() -> {      myMethod(request.getName());  });

則需要對(duì)使用的線程池進(jìn)行單獨(dú)處理,將父線程中 threadlocal 中的數(shù)據(jù)拷貝出來(lái)進(jìn)行傳遞,比如有阿里提供的 TransmittableThreadLocal,可以提供對(duì)線程池的支持。Y5K28資訊網(wǎng)——每日最新資訊28at.com

跨進(jìn)程

而如果是垮進(jìn)程的場(chǎng)景,就需要將 context 的信息進(jìn)行序列化傳遞。Y5K28資訊網(wǎng)——每日最新資訊28at.com

如果是 gRPC 調(diào)用會(huì)將信息存放到 metadata 中。Y5K28資訊網(wǎng)——每日最新資訊28at.com

HTTP 調(diào)用則是存放在 header 中。Y5K28資訊網(wǎng)——每日最新資訊28at.com

消息隊(duì)列,比如 Pulsar 也可以將數(shù)據(jù)存放在消息中的 header 中進(jìn)行傳遞。Y5K28資訊網(wǎng)——每日最新資訊28at.com

數(shù)據(jù)一旦跨進(jìn)程傳輸成功后,就和單進(jìn)程一樣的處理方式了。Y5K28資訊網(wǎng)——每日最新資訊28at.com

Baggage

Y5K28資訊網(wǎng)——每日最新資訊28at.com

有時(shí)候我們需要通過(guò)垮 Span 傳遞信息,比如如上圖所示:我們需要在 serverB 中拿到 serverA 中收到的一個(gè)請(qǐng)求參數(shù):http://127.0.0.1:8181/request/?name/=1232。Y5K28資訊網(wǎng)——每日最新資訊28at.com

Y5K28資訊網(wǎng)——每日最新資訊28at.com

這個(gè)數(shù)據(jù)默認(rèn)會(huì)作為 span 的 attribute ,但只會(huì)存在于第一個(gè) span。Y5K28資訊網(wǎng)——每日最新資訊28at.com

如果我們想要在后續(xù)的 span 中也能拿到這個(gè)數(shù)據(jù),甚至是垮進(jìn)程也能獲取到。Y5K28資訊網(wǎng)——每日最新資訊28at.com

那就需要使用 Baggage 這個(gè)對(duì)象了。Y5K28資訊網(wǎng)——每日最新資訊28at.com

它的使用也很簡(jiǎn)單:Y5K28資訊網(wǎng)——每日最新資訊28at.com

@RequestMapping("/request")  public String request(@RequestParam String name) {   // 寫入    Baggage.current().toBuilder().            put("request.name", name).build()            .storeInContext(Context.current()).makeCurrent();}         // 獲取String value = Baggage.current().getEntryValue("request.name");  log.info("request.name: {}", value);

只要是屬于同一個(gè) trace 的調(diào)用就可以直接獲取到數(shù)據(jù)。Y5K28資訊網(wǎng)——每日最新資訊28at.com

Y5K28資訊網(wǎng)——每日最新資訊28at.com

traceId 也是垮 Span 傳遞的。Y5K28資訊網(wǎng)——每日最新資訊28at.com

而它的原理也是通過(guò)往 context 中寫入數(shù)據(jù)實(shí)現(xiàn)的:Y5K28資訊網(wǎng)——每日最新資訊28at.com

@Immutable  class BaggageContextKey {    static final ContextKey<Baggage> KEY = ContextKey.named("opentelemetry-baggage-key");      private BaggageContextKey() {}  }

Y5K28資訊網(wǎng)——每日最新資訊28at.com

而這個(gè) context 是通過(guò)一個(gè) entries 數(shù)據(jù)存儲(chǔ)數(shù)據(jù)的,不管是在內(nèi)部還是外部的跨進(jìn)程調(diào)用,OpenTelemetry 都會(huì)將 context 通過(guò) Context Propagation 傳遞出去。Y5K28資訊網(wǎng)——每日最新資訊28at.com

總結(jié)

Trace 這部分的內(nèi)容我覺(jué)得比 Metrics 和 Logs 更加復(fù)雜一些,畢竟多了一些數(shù)據(jù)結(jié)構(gòu);現(xiàn)在的內(nèi)容也只是冰山一角,現(xiàn)在也在做 trace 的一些定制化開(kāi)發(fā),后續(xù)有新的進(jìn)展會(huì)接著更新。Y5K28資訊網(wǎng)——每日最新資訊28at.com

參考鏈接:Y5K28資訊網(wǎng)——每日最新資訊28at.com

  • https://static.googleusercontent.com/media/research.google.com/zh-CN//archive/papers/dapper-2010-1.pdf。
  • https://opentelemetry.io/docs/languages/java/automatic/annotations/。
  • https://opentelemetry.io/docs/specs/otel/overview/#tracing-signal。
  • https://opentelemetry.io/docs/concepts/context-propagation/。
  • https://opentelemetry.io/docs/concepts/observability-primer/#distributed-traces。
  • https://tech.meituan.com/2023/04/20/traceid-google-dapper-mtrace.html。

本文鏈接:http://m.www897cc.com/showinfo-26-92748-0.html從 Dapper 到 OpenTelemetry:分布式追蹤的演進(jìn)之旅

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: React 19 出手解決了異步請(qǐng)求的競(jìng)態(tài)問(wèn)題,是好事還是壞事?

下一篇: 華為回應(yīng)“投資柔宇”:未有此計(jì)劃,也未提出投資要求

標(biāo)簽:
  • 熱門焦點(diǎn)
  • K60 Pro官方停產(chǎn) 第三方瞬間漲價(jià)

    雖然沒(méi)有官方宣布,但Redmi的一些高管也已經(jīng)透露了,Redmi K60 Pro已經(jīng)停產(chǎn)且不會(huì)補(bǔ)貨,這一切都是為了即將到來(lái)的K60 Ultra鋪路,屬于廠家的正常操作。但有意思的是該機(jī)在停產(chǎn)之后
  • CSS單標(biāo)簽實(shí)現(xiàn)轉(zhuǎn)轉(zhuǎn)logo

    轉(zhuǎn)轉(zhuǎn)品牌升級(jí)后更新了全新的Logo,今天我們用純CSS來(lái)實(shí)現(xiàn)轉(zhuǎn)轉(zhuǎn)的新Logo,為了有一定的挑戰(zhàn)性,這里我們只使用一個(gè)標(biāo)簽實(shí)現(xiàn),將最大化的使用CSS能力完成Logo的繪制與動(dòng)畫效果。新logo
  • 谷歌KDD'23工作:如何提升推薦系統(tǒng)Ranking模型訓(xùn)練穩(wěn)定性

    谷歌在KDD 2023發(fā)表了一篇工作,探索了推薦系統(tǒng)ranking模型的訓(xùn)練穩(wěn)定性問(wèn)題,分析了造成訓(xùn)練穩(wěn)定性存在問(wèn)題的潛在原因,以及現(xiàn)有的一些提升模型穩(wěn)定性方法的不足,并提出了一種新
  • 一篇文章帶你了解 CSS 屬性選擇器

    屬性選擇器對(duì)帶有指定屬性的 HTML 元素設(shè)置樣式。可以為擁有指定屬性的 HTML 元素設(shè)置樣式,而不僅限于 class 和 id 屬性。一、了解屬性選擇器CSS屬性選擇器提供了一種簡(jiǎn)單而
  • 使用LLM插件從命令行訪問(wèn)Llama 2

    最近的一個(gè)大新聞是Meta AI推出了新的開(kāi)源授權(quán)的大型語(yǔ)言模型Llama 2。這是一項(xiàng)非常重要的進(jìn)展:Llama 2可免費(fèi)用于研究和商業(yè)用途。(幾小時(shí)前,swyy發(fā)現(xiàn)它已從LLaMA 2更名為L(zhǎng)la
  • 阿里大調(diào)整

    來(lái)源:產(chǎn)品劉有媒體報(bào)道稱,近期淘寶天貓集團(tuán)啟動(dòng)了近年來(lái)最大的人力制度改革,涉及員工績(jī)效、層級(jí)體系等多個(gè)核心事項(xiàng),目前已形成一個(gè)初步的&ldquo;征求意見(jiàn)版&rdquo;:1、取消P序列
  • 華為發(fā)布HarmonyOS 4:更好玩、更流暢、更安全

    在8月4日的華為開(kāi)發(fā)者大會(huì)2023(HDC.Together)大會(huì)上,HarmonyOS 4正式發(fā)布。自2019年發(fā)布以來(lái),HarmonyOS一直以用戶為中心,經(jīng)歷四年多的發(fā)展HarmonyOS已
  • iQOO 11S屏幕細(xì)節(jié)公布:首發(fā)三星2K E6全感屏 安卓最好的直屏手機(jī)

    日前iQOO手機(jī)官方宣布,新一代電競(jìng)旗艦iQOO 11S將會(huì)在7月4日19:00正式與大家見(jiàn)面。隨著發(fā)布時(shí)間的日益臨近,官方關(guān)于該機(jī)的預(yù)熱也更加密集,截至目前已
  • 蘋果MacBook Pro 2021測(cè)試:仍不支持平滑滾動(dòng)

    據(jù)10月30日9to5 Mac 消息報(bào)道,蘋果新的 14 英寸和 16 英寸 MacBook Pro 2021 上市后獲得了不錯(cuò)的評(píng)價(jià),亮點(diǎn)包括行業(yè)領(lǐng)先的性能,令人印象深刻的電池續(xù)航,精美豐
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
久久精品在线免费观看| 夜夜精品视频| 黄色在线成人| 亚洲福利视频在线| 亚洲最新在线| 亚洲欧洲av一区二区| 老色批av在线精品| 欧美日韩国产欧美日美国产精品| 欧美体内she精视频在线观看| 国产欧美一区二区精品仙草咪 | 国产精品美女久久久| 国产亚洲一区在线播放| 亚洲国产清纯| 亚洲在线观看免费| 可以看av的网站久久看| 欧美日韩在线视频一区二区| 国产亚洲一级高清| 亚洲精品乱码久久久久久按摩观| 午夜国产欧美理论在线播放| 免费久久久一本精品久久区| 国产精品久久久久aaaa九色| 1204国产成人精品视频| 亚洲女ⅴideoshd黑人| 麻豆成人在线观看| 国产精品久久久久久久久婷婷| 伊人久久婷婷| 亚洲自拍啪啪| 欧美成人资源| 国产日本亚洲高清| 夜夜嗨av一区二区三区| 久久久999| 国产精品电影在线观看| 亚洲国内精品| 久久成人综合网| 国产精品扒开腿爽爽爽视频| 亚洲成人在线视频播放| 午夜久久影院| 欧美色视频在线| 91久久线看在观草草青青| 久久精品一区四区| 国产精品欧美日韩| 99在线精品视频| 蜜月aⅴ免费一区二区三区| 国产欧美日韩精品专区| 99热这里只有成人精品国产| 老鸭窝91久久精品色噜噜导演| 国产精品视频xxxx| 一本久久综合亚洲鲁鲁五月天| 卡通动漫国产精品| 国产亚洲欧美色| 亚洲在线视频观看| 欧美日韩情趣电影| 亚洲经典在线看| 久久亚裔精品欧美| 国产综合香蕉五月婷在线| 亚洲欧美国产日韩中文字幕| 欧美日韩调教| 亚洲美女中文字幕| 欧美成人久久| 亚洲高清在线| 六十路精品视频| 黄色av日韩| 久久国产精品99国产精| 国产九九精品视频| 亚洲尤物在线| 国产精品拍天天在线| 亚洲无限乱码一二三四麻| 欧美日韩一卡| av成人福利| 欧美三级电影精品| 亚洲美女av电影| 欧美激情精品久久久六区热门| 亚洲第一页中文字幕| 久久久久免费视频| 国外成人在线视频网站| 久久成人精品电影| 国产亚洲亚洲| 久久不射电影网| 韩日欧美一区二区三区| 久久精品在线播放| 韩国精品主播一区二区在线观看| 久久精品夜色噜噜亚洲aⅴ | 国产精品99久久久久久久女警| 欧美人成在线视频| 99riav1国产精品视频| 欧美日韩国产亚洲一区| 亚洲美女网站| 欧美日韩三级| 中文一区二区| 国产精品一区二区久久久| 性欧美长视频| 国产综合视频在线观看| 久久综合中文色婷婷| 亚洲高清免费| 欧美精品日韩www.p站| 一本色道久久| 国产精品五月天| 久久精品国产亚洲5555| 在线电影国产精品| 欧美国产欧美亚州国产日韩mv天天看完整| 亚洲国产成人av| 欧美精品在线观看播放| 中文一区在线| 国产欧美日韩精品在线| 久久久国产精品一区二区中文| 在线成人国产| 欧美日韩美女一区二区| 亚洲女性裸体视频| 国产一区二区三区日韩| 免费一级欧美在线大片| 日韩午夜在线播放| 国产精品羞羞答答| 久久婷婷久久| 夜夜嗨av色综合久久久综合网| 国产精品你懂的在线欣赏| 久久久久久噜噜噜久久久精品| 91久久久国产精品| 国产精品wwwwww| 久久精品一本久久99精品| 亚洲日本电影| 国产精品综合不卡av| 久久频这里精品99香蕉| 亚洲精品免费看| 国产精品每日更新| 老司机免费视频一区二区三区| 日韩亚洲视频| 国产亚洲网站| 欧美日韩一区二区三区四区五区| 欧美中文字幕精品| 亚洲精品免费一区二区三区| 国产九九精品视频| 欧美国产日韩一区| 欧美亚洲免费| 亚洲精品国产系列| 国产日本亚洲高清| 欧美精品久久久久久久| 欧美亚洲免费电影| 亚洲免费观看高清在线观看| 国产亚洲亚洲| 欧美体内she精视频在线观看| 久久婷婷激情| 亚洲女爱视频在线| 亚洲精品视频在线观看免费| 国产一区二区久久| 欧美午夜大胆人体| 老色鬼精品视频在线观看播放| 亚洲一区在线播放| 91久久久久久| 国产一区二区三区直播精品电影| 欧美剧在线观看| 久久久久久亚洲精品杨幂换脸| 亚洲小说春色综合另类电影| 亚洲国产精品女人久久久| 国产精品视频精品| 欧美精品电影在线| 久久久久久一区| 亚洲欧美日韩国产| 日韩午夜精品| 亚洲成人原创| 国内免费精品永久在线视频| 国产精品mm| 欧美精品在欧美一区二区少妇| 久久久亚洲高清| 午夜天堂精品久久久久| 99视频一区| 亚洲区一区二| 在线观看视频免费一区二区三区 | 日韩亚洲精品电影| 在线成人av网站| 国产一区美女| 国产精品一区二区三区成人| 欧美视频在线观看一区| 欧美久久久久免费| 欧美 日韩 国产精品免费观看| 久久国产精品免费一区| 亚洲女爱视频在线| 亚洲私人影吧| 99亚洲精品| 亚洲毛片在线观看| 91久久一区二区| 亚洲第一福利在线观看| 国模一区二区三区| 国产深夜精品福利| 国产伦理一区| 国产精品视频免费观看| 国产精品成人免费| 欧美午夜精品久久久| 欧美日韩久久精品| 欧美日韩1区2区3区| 欧美日韩国产一中文字不卡| 欧美激情第10页| 欧美成人一区二区三区| 欧美v国产在线一区二区三区| 久久综合色综合88| 免费成人黄色av| 美女亚洲精品| 久久久欧美一区二区| 久久久久久日产精品| 久久在线免费观看视频| 久久久久久综合| 免费成人网www| 欧美1区2区3区| 欧美国产日韩精品免费观看| 欧美成人在线免费视频|