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

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

B站直播的極速排障建設-全鏈路Trace追蹤

來源: 責編: 時間:2024-09-10 09:49:27 193觀看
導讀一、概述直播業務具有實時性強,復雜度高,排查鏈路長,影響面大等特征,線上問題如果不能立刻排查處理,分分秒秒都在影響用戶的觀看體驗、主播的收入。但各端的問題可能都只是表象,例如,一個看似簡單的畫面卡頓問題,可能涉及到編

一、概述

QzF28資訊網——每日最新資訊28at.com

QzF28資訊網——每日最新資訊28at.com

QzF28資訊網——每日最新資訊28at.com

直播業務具有實時性強,復雜度高,排查鏈路長,影響面大等特征,線上問題如果不能立刻排查處理,分分秒秒都在影響用戶的觀看體驗、主播的收入。QzF28資訊網——每日最新資訊28at.com

但各端的問題可能都只是表象,例如,一個看似簡單的畫面卡頓問題,可能涉及到編碼器配置、網絡帶寬分配、服務器負載等多個方面,各個團隊經常在等待合作方的反饋,一整套流程下來,一個線上問題的定位可能要消耗掉數小時的人力。QzF28資訊網——每日最新資訊28at.com

我們迫切的需要一套高效的跨端實時排障系統!QzF28資訊網——每日最新資訊28at.com

QzF28資訊網——每日最新資訊28at.com

為此我們采取了以下措施:QzF28資訊網——每日最新資訊28at.com

  1. 關鍵業務監控:聯合各協作方,對關鍵業務的接口、廣播和核心處理邏輯實施了實時埋點監控,并附加了相關場景信息,確保了問題定位的準確性和全面性。
  2. 統一追蹤系統:為了實現單個業務鏈路所有埋點的跨端聯絡,我們設計了統一的trace_id字段,并在數據層進行串聯,通過看板直觀展示,極大地提升了問題追蹤和定位的效率。

這些措施帶來了顯著的成效:QzF28資訊網——每日最新資訊28at.com

  • 跨部門協作效率提升:通過實時數據共享和統一追蹤系統,直播移動端、PC端、Web端、服務端以及流媒體等各個團隊協作效率大幅提升。在開播、視頻連線等9個核心業務的故障排查中,排障率達到了91%,異常定位的平均時間從2小時縮短至僅需5分鐘。兄弟部門也采納了我們的方案,有效減輕了工作壓力。
  • 系統穩定性增強:這些措施還幫助我們優化了開播異常斷流、連麥發布訂閱失敗等多項關鍵業務問題,確保了系統的高效運行,減少了因技術問題導致的用戶流失。
  • 用戶體驗改善:我們的快速響應和問題解決能力極大地提升了主播和用戶的直播體驗。用戶和主播的正面反饋絡繹不絕,間接提高了主播收入穩定性,增強了平臺的吸引力。

QzF28資訊網——每日最新資訊28at.com

二、技術方案詳解

QzF28資訊網——每日最新資訊28at.com

QzF28資訊網——每日最新資訊28at.com

QzF28資訊網——每日最新資訊28at.com

QzF28資訊網——每日最新資訊28at.com

1. 方案設計

QzF28資訊網——每日最新資訊28at.com

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

QzF28資訊網——每日最新資訊28at.com

如上圖所示,整體全鏈路排障建設可以分為數據采集、數據處理&存儲、可視化工具建設3大塊。QzF28資訊網——每日最新資訊28at.com

在開始介紹實現方案之前,需要簡單介紹一下OpenTracing,它是業內實現分布式鏈路追蹤系統通常會采用的方案,我們在后續的埋點和上報組件設計也對它進行了一些參考。OpenTracing定義了追蹤數據所需要的操作和數據結構,幫助開發人員實現分布式追蹤的能力。OpenTracing里面有兩個比較核心的概念,簡單說明一下:QzF28資訊網——每日最新資訊28at.com

QzF28資訊網——每日最新資訊28at.com

Trace:Trace代表一條追蹤路徑,它由多個Span組成,存在一個唯一IDQzF28資訊網——每日最新資訊28at.com

Span:Span代表追蹤路徑中的一個時間跨度,包括操作名稱、開始時間、結束時間等信息,由SpanID作為標識。由多個 Span 可以形成一條追蹤路徑。Span還定義了父子、跟隨兩種關系。在Span上下文中,記錄和維護了Trace的ID和當前Span的ID。QzF28資訊網——每日最新資訊28at.com

QzF28資訊網——每日最新資訊28at.com

下圖是OpenTracing的模型圖,它描述了由多個Span組成一條追蹤路徑:QzF28資訊網——每日最新資訊28at.com

QzF28資訊網——每日最新資訊28at.com

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

QzF28資訊網——每日最新資訊28at.com

OpenTracing在服務端得到了廣泛的使用,但是面臨客戶端業務現狀和問題,我們調整了最終方案的實現方式QzF28資訊網——每日最新資訊28at.com

  • 直播場景用戶行為一般都是即時操作,時間片段的設計并太不合適
  • OpenTracing是跨編程語言的標準,一些API的設計比較抽象,在業務中使用不友好

考慮到這些,我們借鑒了OpenTracing中核心的概念:trace_id和事件上下文,并簡化了OpenTracing中Span的概念,嘗試復用端上已有的埋點,擴展字段來實現全鏈路Trace的能力。下面我們開始介紹。QzF28資訊網——每日最新資訊28at.com

首先要確認的是必須上報的埋點字段。為了減輕理解和上報的成本,在設計上我們希望盡可能簡單。實際上,這些字段的設計也是為了解決幾個關鍵的問題:QzF28資訊網——每日最新資訊28at.com

QzF28資訊網——每日最新資訊28at.com

QzF28資訊網——每日最新資訊28at.com

1.1 如何將各端的埋點關聯起來?

QzF28資訊網——每日最新資訊28at.com

trace_id:一個復雜的事件鏈路往往并不是單端閉環的。拿邀請上麥舉例,它涉及到主播客戶端A -> 業務服務 -> 廣播服務 -> 觀眾客戶端B -> RTC。我們希望將這一次事件鏈路中相關的日志都能聚合起來呈現,而不是各端查各端的。為了解決這個問題,我們生成一個全鏈路都會透傳的唯一ID,在每個端的上報中都會攜帶這個ID,然后通過這個ID,把這次事件關聯的上報檢索出來,一起展示。QzF28資訊網——每日最新資訊28at.com

QzF28資訊網——每日最新資訊28at.com

QzF28資訊網——每日最新資訊28at.com

1.2 如何解決日志中缺失的上下文?

QzF28資訊網——每日最新資訊28at.com

extends:我們在上報中增加了擴展數據,用于攜帶上下文以及自己關心的信息,同時在可視化工具中展示出來。QzF28資訊網——每日最新資訊28at.com

QzF28資訊網——每日最新資訊28at.com

QzF28資訊網——每日最新資訊28at.com

1.3 如何快速的找到異常的環節?

QzF28資訊網——每日最新資訊28at.com

level:我們給每一個上報定義了3種狀態,正常、警告和異常。在可視化工具中,針對警告和異常狀態的上報,用黃色和紅色展示出來,這樣可以第一時間定位到出現問題的地方,找到負責的端和同學。QzF28資訊網——每日最新資訊28at.com

QzF28資訊網——每日最新資訊28at.com

QzF28資訊網——每日最新資訊28at.com

1.4 如何衡量這次的事件是否正常?

QzF28資訊網——每日最新資訊28at.com

type:我們給每一個上報節點定義了3種類型,起始、過程和結束。一次事件執行中,會有一個起始節點,一個結束節點和多個過程節點。如果這次事件執行鏈路里面,有結束節點,并且所有節點的狀態都是正常的,那我們就認為這次事件執行是正常,否則就是異常的QzF28資訊網——每日最新資訊28at.com

到這里,最主要的埋點字段就介紹完了,接下來就只需要各端在關鍵路徑上添加上報即可。QzF28資訊網——每日最新資訊28at.com

QzF28資訊網——每日最新資訊28at.com

在上線驗證階段,移動端先通過透傳trace_id的方式快速上線并打通了整條鏈路,驗證了可行性。但是這種方式弊端很大,代碼入侵嚴重而且健壯性差,對于業務同學來說這是非常勸退的,所以我們針對上報組件做了一些設計,目的是降低接入和維護成本,減少代碼入侵。QzF28資訊網——每日最新資訊28at.com

QzF28資訊網——每日最新資訊28at.com

QzF28資訊網——每日最新資訊28at.com

2. 上報組件設計

QzF28資訊網——每日最新資訊28at.com

上報組件隨項目發展共迭代了三個版本,每一版都比上一版更加易用和完善。下面介紹我們的迭代過程,共分為“快速驗證可行性”、“大幅提升易用性” 和 “繼續增強魯棒性”。QzF28資訊網——每日最新資訊28at.com

QzF28資訊網——每日最新資訊28at.com

QzF28資訊網——每日最新資訊28at.com

2.1 快速驗證可行性

QzF28資訊網——每日最新資訊28at.com

在項目初期,為了快速驗證鏈路可行性,上報組件未做過多設計,僅實現了最基礎的功能:QzF28資訊網——每日最新資訊28at.com

將上述的基礎字段(trace_id, level, type等)、業務方自定義參數以及公共參數(房間信息、網絡、推流、設備、外設情況、線程id等)進行上報。QzF28資訊網——每日最新資訊28at.com

在最初版中,我們將所有的非公共參數都寫到了函數入參中,并在業務層透傳了trace_id。如圖所示:QzF28資訊網——每日最新資訊28at.com

QzF28資訊網——每日最新資訊28at.com

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

QzF28資訊網——每日最新資訊28at.com

QzF28資訊網——每日最新資訊28at.com

2.2 大幅提升易用性

QzF28資訊網——每日最新資訊28at.com

2.2.1 快速方案遇到的問題

基礎功能上線后,驗證了我們通過trace_id串聯起多個埋點的想法是可行的。隨著越來越多的業務接入,顯而易見的兩個問題便浮上水面:QzF28資訊網——每日最新資訊28at.com

  1. 上報代碼過于繁雜:由于需要8個參數,需要多行代碼才能完成一次上報,在業務代碼中插入這一塊又一塊的和業務無關的代碼,會嚴重降低可讀性和可維護性;
  2. 業務入侵性大:在低耦合的代碼架構下,一個功能點的實現經常橫跨1~3個模塊、縱深5~10層方法調用,想要做到精確的全鏈路追蹤,勢必要將trace_id透傳,這樣就需要在每個方法的入參都增加一個trace_id的參數,不僅寫起來麻煩,還對業務的入侵性巨大;

這里舉兩個實際的代碼例子:QzF28資訊網——每日最新資訊28at.com

QzF28資訊網——每日最新資訊28at.com

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

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

QzF28資訊網——每日最新資訊28at.com

接下來我們就這兩個問題對埋點組件進行優化:QzF28資訊網——每日最新資訊28at.com

QzF28資訊網——每日最新資訊28at.com

2.2.2 解決埋點代碼冗長

需要在業務層和上報層中間插入一個埋點聚合層,負責組裝參數,并針對每一個節點向外提供一個簡明的方法,在業務層就只需要一行簡短的代碼就可以完成上報了。QzF28資訊網——每日最新資訊28at.com

在埋點聚合層中,我們也做了一些簡單的設計,旨在減少業務方的代碼量:QzF28資訊網——每日最新資訊28at.com

  1. 盡力減少上報方法傳參的數量,將需要的參數都封裝進一個事件模型類中,并針對起始節點提供便利構造方法。且將入參node_type、trace_id、level、extends字段加上默認值,這樣對于大部分的節點,就不再需要攜帶所有的參數了。
  2. 針對每個業務類型都額外做了一層封裝,這樣就不用每次都填寫event_type字段了,進一步的減少了代碼量。至此,對于普通節點,甚至只需要指定key和log兩個字段就可以完成上報了。

下面是解決第一個問題(埋點代碼冗長)的簡單圖示:QzF28資訊網——每日最新資訊28at.com

QzF28資訊網——每日最新資訊28at.com

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

QzF28資訊網——每日最新資訊28at.com

2.2.3 解決業務入侵性

業內流行使用插樁的方式來進行非入侵式的埋點,但切面的形式很難獲取業務上下文,無法解決方法A調用方法B的trace_id透傳問題,因此并不適用于這個場景。QzF28資訊網——每日最新資訊28at.com

對于trace_id透傳的問題,解決方案是把trace_id緩存一下。但是需要解決以下場景的問題:QzF28資訊網——每日最新資訊28at.com

  1. 多線程并發:并行啟動了多次同一個事件,且他們的完成時間也不固定,如同時上傳了多張大小不一的封面。
  2. 事件中斷:前一次事件因為某些原因中斷了,永遠的停留在了某個節點。

為此,我們首先引入狀態機的概念,將所有節點使用有向圖進行表示,這樣我們便能清晰的感知到事件的發生到結束,以及某個節點后續可以流轉至哪些節點、是否發生錯誤中斷。QzF28資訊網——每日最新資訊28at.com

QzF28資訊網——每日最新資訊28at.com

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

QzF28資訊網——每日最新資訊28at.com

下面舉一個具體的例子,上麥流程圖和其對應的有向圖:QzF28資訊網——每日最新資訊28at.com

QzF28資訊網——每日最新資訊28at.com

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

QzF28資訊網——每日最新資訊28at.com

圖中使用了虛實線來區分跨端或者跨線程的動作,其必要性可參見下文第(2)點。QzF28資訊網——每日最新資訊28at.com

(1)自動化尋找trace_idQzF28資訊網——每日最新資訊28at.com

當一個起始節點準備上報時:QzF28資訊網——每日最新資訊28at.com

  1. 為其創建一個上報實例
  2. 在實例中記錄trace_id、當前的節點,以及它之后可能會流轉到的節點
  3. 將這個實例扔到池子中

QzF28資訊網——每日最新資訊28at.com

當一個非起始節點準備上報時:QzF28資訊網——每日最新資訊28at.com

  1. 組件會根據有向圖去池子中查找需要流轉到的節點
  2. 使用實例的trace_id進行上報
  3. 更新實例的時間戳
  4. 將實例流轉到下一個節點,若無后續節點,則移除實例

QzF28資訊網——每日最新資訊28at.com

(2)解決多線程問題QzF28資訊網——每日最新資訊28at.com

這個方案似乎很完美,但從B到E是一個網絡接口請求,如果先后很快地發出了兩次請求,很可能會出現下面的情況:QzF28資訊網——每日最新資訊28at.com

QzF28資訊網——每日最新資訊28at.com

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

QzF28資訊網——每日最新資訊28at.com

如果遵照上述的方案,B和E之間就會被錯誤的關聯起來。為了規避這個問題,trace_id會在跨線程時從埋點組件中外拋,需要業務方短暫記錄,并傳遞到下一個節點。當然,針對常用的網絡請求,我們也做了易用的封裝,詳見2.3.1。QzF28資訊網——每日最新資訊28at.com

于是之前上麥的有向圖會變為:QzF28資訊網——每日最新資訊28at.com

QzF28資訊網——每日最新資訊28at.com

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

QzF28資訊網——每日最新資訊28at.com

在多線程問題解決之后,當一個含有trace_id的節點進入上報組件時,即會為其創建一個上報實例,按上文記錄字段后放到池子里。QzF28資訊網——每日最新資訊28at.com

至于無trace_id的上報則完全相同,唯一的區別就是在查找節點時,加上線程id的校驗,這樣可以防止同一事件在不同的線程中同時啟動。QzF28資訊網——每日最新資訊28at.com

在trace_id已經被自動化后,整體的上報流程圖如下:QzF28資訊網——每日最新資訊28at.com

QzF28資訊網——每日最新資訊28at.com

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

QzF28資訊網——每日最新資訊28at.com

2.2.4 提升易用性后的代碼架構

QzF28資訊網——每日最新資訊28at.com

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

QzF28資訊網——每日最新資訊28at.com

QzF28資訊網——每日最新資訊28at.com

2.3 繼續增強魯棒性

QzF28資訊網——每日最新資訊28at.com

2.3.1 對“接口與廣播”的封裝

在端上遇到的跨線程/跨端場景絕大多數都是網絡請求和廣播,因此,為了避免出錯和降低復雜度,我們做了一套易用的封裝:QzF28資訊網——每日最新資訊28at.com

1.  網絡請求QzF28資訊網——每日最新資訊28at.com

(1)組件會在發起指定請求之前通過有向圖自動尋路獲取此次trace_idQzF28資訊網——每日最新資訊28at.com

(2)使用該trace_id上報請求事件,并會自動帶上所有的業務請求參數QzF28資訊網——每日最新資訊28at.com

(3)將trace_id置于請求頭,用于串聯服務端節點QzF28資訊網——每日最新資訊28at.com

(4)在接口返回后,自動上報響應數據,若接口錯誤,會將該節點標記為errorQzF28資訊網——每日最新資訊28at.com

2.  廣播QzF28資訊網——每日最新資訊28at.com

(1)組件會在指定廣播到達時,嘗試去獲取trace_id字段。QzF28資訊網——每日最新資訊28at.com

(2)若獲取成功,則自動進行上報,若沒有,則會走自動化上報流程。QzF28資訊網——每日最新資訊28at.com

這樣,業務方即使遇到跨線程/跨端,也無需關心trace_id了,在這兩種場景下徹底做到了業務無感。QzF28資訊網——每日最新資訊28at.com

QzF28資訊網——每日最新資訊28at.com

2.3.2 對“抗風險能力”的補足

當業務鏈路與對應的有向圖不符時,trace_id的自動化管理便會失效。為此我們設計了特殊異常case的監控:QzF28資訊網——每日最新資訊28at.com

1.  事件跟蹤上下文丟失QzF28資訊網——每日最新資訊28at.com

自動化尋找trace_id失敗,此種情況多發生在上報的埋點與有向圖描述不符,此時埋點組件會上報一個警告埋點觸達開發及時修改鏈路。QzF28資訊網——每日最新資訊28at.com

2.  事件跟蹤超時QzF28資訊網——每日最新資訊28at.com

即上次單線程的流轉還未結束,新的節點就已到達。此種情況多發生在流轉過程被意外打斷,如check失敗后直接return。此時原事件在看板中會表現為鏈路中斷的錯誤。同樣的,會上報一個警告埋點。QzF28資訊網——每日最新資訊28at.com

QzF28資訊網——每日最新資訊28at.com

QzF28資訊網——每日最新資訊28at.com

2.4 上報組件整體概覽

QzF28資訊網——每日最新資訊28at.com

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

QzF28資訊網——每日最新資訊28at.com

QzF28資訊網——每日最新資訊28at.com

3. 數據處理和存儲

QzF28資訊網——每日最新資訊28at.com

在處理上報的海量數據時,需要清洗掉錯誤的數據,并解析各個終端上報的不同數據結構,轉化為統一數據模型。由于數據是逐條上報的,必須將這些離散數據串聯成完整的事件鏈路,這樣就知道用戶操作了什么、經歷了哪些端、哪些節點出了問題或漏了哪些節點。QzF28資訊網——每日最新資訊28at.com

QzF28資訊網——每日最新資訊28at.com

QzF28資訊網——每日最新資訊28at.com

3.1 事件串聯

QzF28資訊網——每日最新資訊28at.com

(1)單trace_id串聯:事件由唯一的trace_id串聯整個流程。QzF28資訊網——每日最新資訊28at.com

QzF28資訊網——每日最新資訊28at.com

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

QzF28資訊網——每日最新資訊28at.com

(2)多trace_id串聯:事件由多端各自的trace_id組合而成。QzF28資訊網——每日最新資訊28at.com

為兼容業務服務和廣播服務各自獨立的trace追蹤系統,我們實現了一套多重映射算法,且無縫兼容了單trace_id方案,最終溯源成事件開始的原始trace_id。QzF28資訊網——每日最新資訊28at.com

QzF28資訊網——每日最新資訊28at.com

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

QzF28資訊網——每日最新資訊28at.com

QzF28資訊網——每日最新資訊28at.com

3.2 數據清洗與存儲

QzF28資訊網——每日最新資訊28at.com

為應對直播的實時性要求,我們采用流計算技術。先快速篩選出trace相關事件,再清洗掉異常數據,在單次流計算執行過程中進行映射建立關系并落表存儲,實現小于5min級別的數據響應處理。數據表支持靈活的定制化查詢和分析需求。QzF28資訊網——每日最新資訊28at.com

QzF28資訊網——每日最新資訊28at.com

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

QzF28資訊網——每日最新資訊28at.com

QzF28資訊網——每日最新資訊28at.com

4. 數據可視化

QzF28資訊網——每日最新資訊28at.com

可視化簡化了查詢過程,能快速準確地捕捉異常和關鍵信息。適用于開發、測試、產品、運營、客服等角色。QzF28資訊網——每日最新資訊28at.com

QzF28資訊網——每日最新資訊28at.com

QzF28資訊網——每日最新資訊28at.com

4.1 覆蓋場景

QzF28資訊網——每日最新資訊28at.com

從App啟動到退出,從開播到關播,從上麥到下麥,從PK發起到結束等關鍵業務場景。QzF28資訊網——每日最新資訊28at.com

QzF28資訊網——每日最新資訊28at.com

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

QzF28資訊網——每日最新資訊28at.com

QzF28資訊網——每日最新資訊28at.com

4.2 落地效果

QzF28資訊網——每日最新資訊28at.com

在日常業務中,已經有效解決了很多實際問題,以下是遇到的一些案例查詢:QzF28資訊網——每日最新資訊28at.com

QzF28資訊網——每日最新資訊28at.com

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

QzF28資訊網——每日最新資訊28at.com

三、結束語

QzF28資訊網——每日最新資訊28at.com

QzF28資訊網——每日最新資訊28at.com

QzF28資訊網——每日最新資訊28at.com

不知何時起,“用關鍵鏈路查一下”已經成了身邊同事常說的口頭禪,整套排障體系的價值,也得到了驗證。QzF28資訊網——每日最新資訊28at.com

未來還有許多要做的事,我們將致力于拓展業務覆蓋面、建立業務健康度監控體系、提升上下文信息的有效性等。QzF28資訊網——每日最新資訊28at.com

我們相信,通過不斷的技術創新和服務優化,我們的業務能夠迎接更大的挑戰,為用戶創造更大的價值。QzF28資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-112747-0.htmlB站直播的極速排障建設-全鏈路Trace追蹤

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

上一篇: GitHub上Stars最多的五個低代碼平臺,再也不需要為低代碼問題發愁啦!

下一篇: .NET 掌握 LINQ 神器:揭秘 AsEnumerable、DefaultIfEmpty 和 Empty 的真正用法

標簽:
  • 熱門焦點
  • Find N3入網:最高支持16+1TB

    OPPO將于近期登場的Find N3折疊屏目前已經正式入網,型號為PHN110。本次Find N3在外觀方面相比前兩代有很大的變化,不再是小號的橫向折疊屏,而是跟別的廠商一樣采用了較為常見的
  • 6月安卓手機好評榜:魅族20 Pro蟬聯冠軍

    性能榜和性價比榜之后,我們來看最后的安卓手機好評榜,數據來源安兔兔評測,收集時間2023年6月1日至6月30日,僅限國內市場。第一名:魅族20 Pro好評率:95%5月份的時候魅族20 Pro就是
  • 太卷!Redmi MAX 100英寸電視便宜了:12999元買Redmi史上最大屏

    8月5日消息,從小米商城了解到,Redmi MAX 100英寸巨屏電視日前迎來官方優惠,到手價12999元,比發布價便宜了7000元,在大屏電視市場開卷。據了解,Redmi MAX 100
  • 學習JavaScript的10個理由...

    作者 | Simplilearn編譯 | 王瑞平當你決心學習一門語言的時候,很難選擇到底應該學習哪一門,常用的語言有Python、Java、JavaScript、C/CPP、PHP、Swift、C#、Ruby、Objective-
  • 十個簡單但很有用的Python裝飾器

    裝飾器(Decorators)是Python中一種強大而靈活的功能,用于修改或增強函數或類的行為。裝飾器本質上是一個函數,它接受另一個函數或類作為參數,并返回一個新的函數或類。它們通常用
  • 新電商三兄弟,“抖快紅”成團!

    來源:價值研究所作 者:Hernanderz 隨著內容電商的概念興起,抖音、快手、小紅書組成的“新電商三兄弟”成為業內一股不可忽視的勢力,給阿里、京東、拼多多帶去了巨大壓
  • 小米汽車電池信息疑似曝光:容量101kWh,支持800V高壓快充

    7月14日消息,今日一名博主在社交媒體發布了一張疑似小米汽車電池信息的照片,顯示該電池包正是寧德時代麒麟電池,容量為101kWh,電壓為726.7V,可以預測小
  • 聯想YOGA 16s 2022筆記本將要推出,屏幕支持觸控功能

    聯想此前宣布,將于11月2日19:30召開聯想秋季輕薄新品發布會,推出聯想 YOGA 16s 2022 筆記本等新品。官方稱,YOGA 16s 2022 筆記本將搭載 16 英寸屏幕,并且是一
  • 英特爾Xe HPG游戲顯卡:擁有512EU,單風扇版本

    據10 月 30 日外媒 TheVerge 消息報道,英特爾 Xe HPG Arc Alchemist 的正面實被曝光,不僅擁有 512 EU 版顯卡,還擁有 128EU 的單風扇版本。另外,這款顯卡 PCB
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
中文久久精品| 在线精品国精品国产尤物884a| 欧美日韩专区| 欧美精品日韩三级| 欧美午夜电影网| 国产日本精品| 亚洲国内高清视频| 一区二区三区高清视频在线观看| 黑丝一区二区三区| 韩日欧美一区| 亚洲国产裸拍裸体视频在线观看乱了中文 | 小辣椒精品导航| 久久久久久久久久码影片| 久久综合九色综合欧美就去吻| 欧美亚洲视频| 久久资源av| 欧美日韩大陆在线| 国产日韩久久| 日韩亚洲精品视频| 欧美在线精品一区| 欧美日韩精品| 红桃视频亚洲| 亚洲视频免费看| 久久亚洲免费| 国产精品久久夜| 亚洲大片av| 午夜精彩国产免费不卡不顿大片| 亚洲无限乱码一二三四麻| 久久精品视频一| 欧美日韩麻豆| 永久久久久久| 午夜精彩国产免费不卡不顿大片| 亚洲欧美久久久久一区二区三区| 亚洲视频 欧洲视频| 久久免费一区| 国产精品爽黄69| 亚洲国产精品久久久久婷婷老年 | 国内成人精品2018免费看| 日韩天堂在线观看| 久久人体大胆视频| 国产精品网站在线观看| 亚洲老板91色精品久久| 久久噜噜亚洲综合| 国产精品美女久久久| 亚洲大片精品永久免费| 亚洲欧美三级伦理| 欧美另类在线观看| 亚洲高清资源综合久久精品| 性视频1819p久久| 欧美视频亚洲视频| 亚洲韩国青草视频| 久久久精品999| 国产精品专区h在线观看| 一本色道久久综合亚洲91| 欧美大片在线看| 在线观看不卡| 欧美在线综合视频| 国产精品永久免费在线| 国产精品99久久不卡二区| 欧美黄色免费网站| …久久精品99久久香蕉国产| 久久av二区| 国产精品久久久久国产a级| 日韩视频免费大全中文字幕| 麻豆国产va免费精品高清在线| 欧美二区在线| 一区二区三区在线免费播放| 欧美亚洲视频| 国产欧美一区二区精品性 | 91久久精品网| 久久久久久久波多野高潮日日 | 欧美日韩国产经典色站一区二区三区 | 欧美精品自拍| 在线国产日韩| 久久在线视频在线| 韩国一区二区三区美女美女秀| 亚洲精选成人| 欧美大胆a视频| 最新国产乱人伦偷精品免费网站| 亚洲一区免费| 国产精品久久久久久久久久尿 | 国产精品亚洲视频| 亚洲欧美成人网| 国产精品自拍一区| 亚洲一区二区免费视频| 国产精品va在线播放| 亚洲小视频在线| 国产精品毛片一区二区三区| 亚洲一区国产| 国产人成一区二区三区影院| 新片速递亚洲合集欧美合集| 国产日韩欧美在线一区| 久久狠狠婷婷| 影音先锋日韩有码| 欧美**人妖| 99re亚洲国产精品| 欧美性猛片xxxx免费看久爱| 亚洲一区在线观看免费观看电影高清| 六月婷婷一区| 伊人久久大香线蕉综合热线| 美腿丝袜亚洲色图| 日韩视频免费观看高清完整版| 久久久精品视频成人| 国内精品国产成人| 蜜臀91精品一区二区三区| 亚洲第一在线视频| 欧美精品久久久久久久久老牛影院| 极品日韩久久| 欧美黑人多人双交| 亚洲一区二区三| 国产自产在线视频一区| 久久亚洲私人国产精品va媚药 | 91久久精品一区二区三区| 欧美激情综合五月色丁香| 亚洲人成在线免费观看| 欧美日韩日日骚| 亚洲欧美在线一区| 一区二区亚洲欧洲国产日韩| 精品成人国产在线观看男人呻吟| 亚洲一区二区三区在线观看视频| 欧美成人免费全部| 日韩一二三区视频| 国产精品久久久久久久久久免费看| 亚洲最新在线| 国产精品一区一区| 久久久噜噜噜久久久| 亚洲精品免费网站| 国产精品羞羞答答| 麻豆成人在线| 亚洲免费在线观看视频| 狠狠色噜噜狠狠色综合久| 欧美激情综合色综合啪啪| 亚洲综合精品一区二区| 在线精品一区| 欧美性感一类影片在线播放 | 欧美一区二区精美| 在线观看精品一区| 国产精品老牛| 久久网站热最新地址| 一区二区三区四区国产| 黄色在线成人| 欧美亚一区二区| 免费短视频成人日韩| 亚洲欧美三级伦理| 亚洲美女av网站| 韩国精品主播一区二区在线观看| 久久久蜜桃一区二区人| 99re66热这里只有精品4| 国产色综合久久| 欧美日韩亚洲视频| 久久亚洲私人国产精品va| 在线午夜精品自拍| 一区二区三区自拍| 国产精品久久久久久一区二区三区 | 欧美二区乱c少妇| 欧美日韩国产美| 91久久久亚洲精品| 国产精品久久久久久久久动漫| 亚洲午夜免费视频| 国一区二区在线观看| 欧美日韩专区| 欧美a一区二区| 久久成人免费电影| 正在播放欧美一区| 亚洲欧洲日本一区二区三区| 国产午夜一区二区三区| 欧美日韩亚洲一区二| 鲁大师成人一区二区三区 | 亚洲永久网站| 亚洲激情二区| 国模精品娜娜一二三区| 国产精品vip| 欧美精品播放| 免费人成精品欧美精品| 欧美在线二区| 亚洲欧美视频在线| 亚洲天堂av图片| 99国产欧美久久久精品| 亚洲国产精品尤物yw在线观看| 欧美日本在线播放| 麻豆免费精品视频| 久久精品视频免费| 久久电影一区| 欧美亚洲一级| 午夜精品久久一牛影视| 亚洲视频axxx| 亚洲私人黄色宅男| 一区二区电影免费在线观看| 亚洲国产欧美日韩| 揄拍成人国产精品视频| 国模大胆一区二区三区| 国产婷婷一区二区| 国产欧美在线视频| 国产精品日日摸夜夜摸av| 欧美性事在线| 国产精品久久福利| 国产精品免费一区豆花| 国产精品国产三级国产专播品爱网 | avtt综合网| 最新亚洲一区| 91久久精品国产91久久| 亚洲欧洲一区二区三区在线观看 | 欧美高清一区| 欧美sm极限捆绑bd|