主頁 >  其他 > 當 K8s 集群達到萬級規模,阿里巴巴如何解決系統各組件性能問題?

當 K8s 集群達到萬級規模,阿里巴巴如何解決系統各組件性能問題?

2020-09-17 12:17:45 其他

作者 | 阿里云容器平臺高級技術專家 曾凡松(逐靈)

本文主要介紹阿里巴巴在大規模生產環境中落地 Kubernetes 的程序中,在集群規模上遇到的典型問題以及對應的解決方案,內容包含對 etcd、kube-apiserver、kube-controller 的若干性能及穩定性增強,這些關鍵的增強是阿里巴巴內部上萬節點的 Kubernetes 集群能夠平穩支撐 2019 年天貓 618 大促的關鍵所在,

背景

從阿里巴巴最早期的 AI 系統(2013)開始,集群管理系統經歷了多輪的架構演進,到 2018 年全面的應用 Kubernetes ,這期間的故事是非常精彩的,有機會可以單獨給大家做一個分享,這里忽略系統演進的程序,不去討論為什么 Kubernetes 能夠在社區和公司內部全面的勝出,而是將焦點關注到應用 Kubernetes 中會遇到什么樣的問題,以及我們做了哪些關鍵的優化,

file

在阿里巴巴的生產環境中,容器化的應用超過了 10k 個,全網的容器在百萬的級別,運行在十幾萬臺宿主機上,支撐阿里巴巴核心電商業務的集群有十幾個,最大的集群有幾萬的節點,在落地 Kubernetes 的程序中,在規模上面臨了很大的挑戰,比如如何將 Kubernetes 應用到超大規模的生產級別,

羅馬不是一天就建成的,為了了解 Kubernetes 的性能瓶頸,我們結合阿里的生產集群現狀,估算了在 10k 個節點的集群中,預計會達到的規模:

  • 20w pods
  • 100w objects

file

我們基于 Kubemark 搭建了大規模集群模擬的平臺,通過一個容器啟動多個(50個)Kubemark 行程的方式,使用了 200 個 4c 的容器模擬了 10k 節點的 kubelet,在模擬集群中運行常見的負載時,我們發現一些基本的操作比如 Pod 調度延遲非常高,達到了驚人的 10s 這一級別,并且集群處在非常不穩定的狀態,

file

當 Kubernetes 集群規模達到 10k 節點時,系統的各個組件均出現相應的性能問題,比如:

  1. etcd 中出現了大量的讀寫延遲,并且產生了拒絕服務的情形,同時因其空間的限制也無法承載 Kubernetes 存盤大量的物件;
  2. API Server 查詢 pods/nodes 延遲非常的高,并發查詢請求可能地址后端 etcd oom;
  3. Controller 不能及時從 API Server 感知到在最新的變化,處理的延時較高;當發生例外重啟時,服務的恢復時間需要幾分鐘;
  4. Scheduler 延遲高、吞吐低,無法適應阿里業務日常運維的需求,更無法支持大促態的極端場景,

etcd improvements

為了解決這些問題,阿里云容器平臺在各方面都做了很大的努力,改進 Kubernetes 在大規模場景下的性能,

首先是 etcd 層面,作為 Kubernetes 存盤物件的資料庫,其對 Kubernetes 集群的性能影響至關重要,

file

  • 第一版本的改進,我們通過將 etcd 的資料轉存到 tair 集群中,提高了 etcd 存盤的資料總量,但這個方式有一個顯著的弊端是額外增加的 tair 集群,增加的運維復雜性對集群中的資料安全性帶來了很大的挑戰,同時其資料一致性模型也并非基于 raft 復制組,犧牲了資料的安全性,

  • 第二版本的改進,我們通過將 API Server 中不同型別的物件存盤到不同的 etcd 集群中,從 etcd 內部看,也就對應了不同的資料目錄,通過將不同目錄的資料路由到不同的后端 etcd 中,從而降低了單個 etcd 集群中存盤的資料總量,提高了擴展性,

  • 第三版本的改進,我們深入研究了 etcd 內部的實作原理,并發現了影響 etcd 擴展性的一個關鍵問題在底層 bbolt db 的 page 頁面分配演算法上:隨著 etcd 中存盤的資料量的增長,bbolt db 中線性查找“連續長度為 n 的 page 存盤頁面”的性能顯著下降,

為了解決該問題,我們設計了基于 segregrated hashmap 的空閑頁面管理演算法,hashmap 以連續 page 大小為 key, 連續頁面起始 page id 為 value,通過查這個 segregrated hashmap 實作 O(1) 的空閑 page 查找,極大地提高了性能,在釋放塊時,新演算法嘗試和地址相鄰的 page 合并,并更新 segregrated hashmap,更詳細的演算法分析可以見已發表在 CNCF 博客的博文:

https://www.cncf.io/blog/2019/05/09/performance-optimization-of-etcd-in-web-scale-data-scenario/

file

通過這個演算法改進,我們可以將 etcd 的存盤空間從推薦的 2GB 擴展到 100GB,極大的提高了 etcd 存盤資料的規模,并且讀寫無顯著延遲增長,除此之外,我們也和谷歌工程師協作開發了 etcd raft learner(類 zookeeper observer)/fully concurrent read 等特性,在資料的安全性和讀寫性能上進行增強,這些改進已貢獻開源,將在社區 etcd 3.4 版本中發布,

API Server improvements

Efficient node heartbeats

在 Kubernetes 集群中,影響其擴展到更大規模的一個核心問題是如何有效的處理節點的心跳,在一個典型的生產環境中 (non-trival),kubelet 每 10s 匯報一次心跳,每次心跳請求的內容達到 15kb(包含節點上數十計的鏡像,和若干的卷資訊),這會帶來兩大問題:

  1. 心跳請求觸發 etcd 中 node 物件的更新,在 10k nodes 的集群中,這些更新將產生近 1GB/min 的 transaction logs(etcd 會記錄變更歷史);
  2. API Server 很高的 CPU 消耗,node 節點非常龐大,序列化/反序列化開銷很大,處理心跳請求的 CPU 開銷超過 API Server CPU 時間占用的 80%,

file

為了解決這個問題,Kubernetes 引入了一個新的 build-in Lease API ,將與心跳密切相關的資訊從 node 物件中剝離出來,也就是上圖中的 Lease ,原本 kubelet 每 10s 更新一次 node 物件升級為:

  1. 每 10s 更新一次 Lease 物件,表明該節點的存活狀態,Node Controller 根據該 Lease 物件的狀態來判斷節點是否存活;
  2. 處于兼容性的考慮,降低為每 60s 更新一次 node 物件,使得 Eviction_ _Manager 等可以繼續按照原有的邏輯作業,

因為 Lease 物件非常小,因此其更新的代價遠小于更新 node 物件,kubernetes 通過這個機制,顯著的降低了 API Server 的 CPU 開銷,同時也大幅減小了 etcd 中大量的 transaction logs,成功將其規模從 1000 擴展到了幾千個節點的規模,該功能在社區 Kubernetes-1.14 中已經默認啟用,

API Server load balancing

在生產集群中,出于性能和可用性的考慮,通常會部署多個節點組成高可用 Kubernetes 集群,但在高可用集群實際的運行中,可能會出現多個 API Server 之間的負載不均衡,尤其是在集群升級或部分節點發生故障重啟的時候,這給集群的穩定性帶來了很大的壓力,原本計劃通過高可用的方式分攤 API Server 面臨的壓力,但在極端情況下所有壓力又回到了一個節點,導致系統回應時間變長,甚至擊垮該節點繼而導致雪崩,

下圖為壓測集群中模擬的一個 case,在三個節點的集群,API Server 升級后所有的壓力均打到了其中一個 API Server 上,其 CPU 開銷遠高于其他兩個節點,

file

解決負載均衡問題,一個自然的思路就是增加 load balancer,前文的描述中提到,集群中主要的負載是處理節點的心跳,那我們就在 API Server 與 kubelet 中間增加 lb,有兩個典型的思路:

  1. API Server 測增加 lb,所有的 kubelets 連接 lb,典型的云廠商交付的 Kubernetes 集群,就是這一模式;
  2. kubelet 測增加 lb,由 lb 來選擇 API Server,

file

通過壓測環境驗證發現,增加 lb 并不能很好的解決上面提到的問題,我們必須要深入理解 Kubernetes 內部的通信機制,深入到 Kubernetes 中研究發現,為了解決 tls 連接認證的開銷,Kubernetes 客戶端做了很多的努力確保“盡量復用同樣的 tls 連接”,大多數情況下客戶端 watcher 均作業在下層的同一個 tls 連接上,僅當這個連接發生例外時,才可能會觸發重連繼而發生 API Server 的切換,其結果就是我們看到的,當 kubelet 連接到其中一個 API Server 后,基本上是不會發生負載切換,為了解決這個問題,我們進行了三個方面的優化:

  1. API Server:認為客戶端是不可信的,需要保護自己不被過載的請求擊潰,當自身負載超過一個閾值時,發送 409 - too many requests 提醒客戶端退避;當自身負載超過一個更高的閾值時,通過關閉客戶端連接拒絕請求;
  2. Client:在一個時間段內頻繁的收到 409 時,嘗試重建連接切換 API Server;定期地重建連接切換 API Server 完成洗牌;
  3. 運維層面,我們通過設定 maxSurge=3 的方式升級 API Server,避免升級程序帶來的性能抖動,

如上圖左下角監控圖所示,增強后的版本可以做到 API Server 負載基本均衡,同時在顯示重啟兩個節點(圖中抖動)時,能夠快速的自動恢復到均衡狀態,

List-Watch & Cacher

List-Watch 是 Kubernetes 中 Server 與 Client 通信最核心一個機制,etcd 中所有物件及其更新的資訊,API Server 內部通過 Reflector 去 watch etcd 的資料變化并存盤到記憶體中,controller/kubelets 中的客戶端也通過類似的機制去訂閱資料的變化,

file

在 List-Watch 機制中面臨的一個核心問題是,當 Client 與 Server 之間的通信斷開時,如何確保重連期間的資料不丟,這在 Kubernetes 中通過了一個全域遞增的版本號 resourceVersion 來實作,如下圖所示 Reflector 中保存這當前已經同步到的資料版本,重連時 Reflector 告知 Server 自己當前的版本(5),Server 根據記憶體中記錄的最近變更歷史計算客戶端需要的資料起始位置(7),

這一切看起來十分簡單可靠,但是...

file

在 API Server 內部,每個型別的物件會存盤在一個叫做 storage 的物件中,比如會有:

  1. Pod Storage
  2. Node Storage
  3. Configmap Storage
  4. ...

每個型別的 storage 會有一個有限的佇列,存盤物件最近的變更,用于支持 watcher 一定的滯后(重試等場景),一般來說,所有型別的型別共享一個遞增版本號空間(1, 2, 3, ..., n),也就是如上圖所示,pod 物件的版本號僅保證遞增不保證連續,Client 使用 List-Watch 機制同步資料時,可能僅關注 pods 中的一部分,最典型的 kubelet 僅關注和自己節點相關的 pods,如上圖所示,某個 kubelet 僅關注綠色的 pods (2, 5),

因為 storage 佇列是有限的(FIFO),當 pods 的更新時佇列,舊的變更就會從佇列中淘汰,如上圖所示,當佇列中的更新與某個 Client 無關時,Client 進度仍然保持在 rv=5,如果 Client 在 5 被淘汰后重連,這時候 API Server 無法判斷 5 與當前佇列最小值(7)之間是否存在客戶端需要感知的變更,因此回傳 Client too old version err 觸發 Client 重新 list 所有的資料,為了解決這個問題,Kubernetes 引入 Watch bookmark 機制:

file

bookmark 的核心思想概括起來就是在 Client 與 Server 之間保持一個“心跳”,即使佇列中無 Client 需要感知的更新,Reflector 內部的版本號也需要及時的更新,如上圖所示,Server 會在合適的適合推送當前最新的 rv=12 版本號給 Client,使得 Client 版本號跟上 Server 的進展,bookmark 可以將 API Server 重啟時需要重新同步的事件降低為原來的 3%(性能提高了幾十倍),該功能有阿里云容器平臺開發,已經發布到社區 Kubernetes-1.15 版本中,

Cacher & Indexing

除 List-Watch 之外,另外一種客戶端的訪問模式是直接查詢 API Server,如下圖所示,為了保證客戶端在多個 API Server 節點間讀到一致的資料,API Server 會通過獲取 etcd 中的資料來支持 Client 的查詢請求,從性能角度看,這帶來了幾個問題:

  1. 無法支持索引,查詢節點的 pod 需要先獲取集群中所有的 pod,這個開銷是巨大的;
  2. 因為 etcd 的 request-response 模型,單次請求查詢過大的資料會消耗大量的記憶體,通常情況下 API Server 與 etcd 之間的查詢會限制請求的資料量,并通過分頁的方式來完成大量的資料查詢,分頁帶來的多次的 round trip 顯著降低了性能;
  3. 為了確保一致性,API Server 查詢 etcd 均采用了 Quorum read ,這個查詢開銷是集群級別,無法擴展的,

file

為了解決這個問題,我們設計了 API Server 與 etcd 的資料協同機制,確保 Client 能夠通過 API Server 的 cache 獲取到一致的資料,其原理如下圖所示,整體作業流程如下:

  1. t0 時刻 Client 查詢 API Server;
  2. API Server 請求 etcd 獲取當前的資料版本 rv@t0;
  3. API Server 請求進度的更新,并等待 Reflector 資料版本達到 rv@t0;
  4. 通過 cache 回應用戶的請求,

file

這個方式并未打破 Client 的一致性模型(感興趣的可以自己論證一下),同時通過 cache 回應用戶請求時我們可以靈活的增強查詢能力,比如支持 namespace nodename/labels 索引,該增強大幅提高了 API Server 的讀請求處理能力,在萬臺規模集群中典型的 describe node 的時間從原來的 5s 降低到 0.3s(觸發了 node name 索引),其他如 get nodes 等查詢操作的效率也獲得了成倍的增長,

Controller failover

在 10k node 的生產集群中,Controller 中存盤著近百萬的物件,從 API Server 獲取這些物件并反序列化的開銷是無法忽略的,重啟 Controller 恢復時可能需要花費幾分鐘才能完成這項作業,這對于阿里巴巴規模的企業來說是不可接受的,為了減小組件升級對系統可用性的影響,我們需要盡量的減小 controller 單次升級對系統的中斷時間,這里通過如下圖所示的方案來解決這個問題:

  1. 預啟動備 controller informer ,提前加載 controller 需要的資料;
  2. 主 controller 升級時,會主動釋放 Leader Lease,觸發備立即接管作業,

file

通過這個方案,我們將 controller 中斷時間降低到秒級別(升級時 < 2s),即使在例外宕機時,備僅需等待 leader lease 的過期(默認 15s),無需要花費幾分鐘重新同步資料,通過這個增強,顯著的降低了 controller MTTR,同時降低了 controller 恢復時對 API Server 的性能沖擊,該方案同樣適用于 scheduler,

Customized scheduler

由于歷史原因,阿里巴巴的調度器采用了自研的架構,因時間的關系本次分享并未展開調度器部分的增強,這里僅分享兩個基本的思路,如下圖所示:

  1. Equivalence classes:典型的用戶擴容請求為一次擴容多個容器,因此我們通過將 pending 佇列中的請求劃分等價類的方式,實作批處理,顯著的降低 Predicates/Priorities 的次數;
  2. Relaxed randomization:對于單次的調度請求,當集群中的候選節點非常多時,我們并不需要評估集群中全部節點,在挑選到足夠的節點后即可進入調度的后續處理(通過犧牲求解的精確性來提高調度性能),

file

總結

阿里巴巴通過一系列的增強與優化,成功將 Kubernetes 應用到生產環境并達到了單集群 10000 節點的超大規模,具體包括:

  1. 通過將索引和資料分離、資料 shard 等方式提高 etcd 存盤容量,并最終通過改進 etcd 底層 bbolt db 存盤引擎的塊分配演算法,大幅提高了 etcd 在存盤大資料量場景下的性能,通過單 etcd 集群支持大規模 Kubernetes 集群,大幅簡化了整個系統架構的復雜性;
  2. 通過落地 Kubernetes 輕量級心跳、改進 HA 集群下多個 API Server 節點的負載均衡、ListWatch 機制中增加 bookmark、通過索引與 Cache 的方式改進了 Kubernetes 大規模集群中最頭疼的 List 性能瓶頸,使得穩定的運行萬節點集群成為可能;
  3. 通過熱備的方式大幅縮短了 controller/scheduler 在主備切換時的服務中斷時間,提高了整個集群的可用性;
  4. 阿里巴巴自研調度器在性能優化上最有效的兩個思路:等價類處理以及隨機松弛演算法,

通過這一系列功能增強,阿里巴巴成功將內部最核心的業務運行在上萬節點的 Kubernetes 集群之上,并經歷了 2019 年天貓 618 大促的考驗,

作者簡介:

曾凡松(花名:逐靈),阿里云云原生應用平臺高級技術專家,

有豐富的分布式系統設計研發經驗,在集群資源調度這一領域,曾負責的自研調度系統管理了數十萬規模的節點,在集群資源調度、容器資源隔離、不同作業負載混部等方面有豐富的實踐經驗,當前主要負責 Kubernetes 在阿里內部的規模化落地,將 Kubernetes 應用于阿里內部的最核心電商業務,提高了應用發布效率及集群資源利用率,并穩定支撐了 2018 雙十一 及 2019 618 大促,

** “ 阿里巴巴云原生微信公眾號(ID:Alicloudnative)關注微服務、Serverless、容器、Service Mesh 等技術領域、聚焦云原生流行技術趨勢、云原生大規模的落地實踐,做最懂云原生開發者的技術公眾號,”**

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/65558.html

標籤:其他

上一篇:最近被網路故障折騰的夠嗆,求解放

下一篇:兩個二級路由下的pc如何實作互訪?

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more