主頁 >  其他 > 支撐百萬商戶、千億級呼叫:微盟如何通過鏈路設計降本40%?

支撐百萬商戶、千億級呼叫:微盟如何通過鏈路設計降本40%?

2023-04-27 07:31:39 其他

一分鐘精華速覽

在典型的分布式系統中,用戶的一個請求到達組合的前端服務后,前端服務會分發請求到內部的各個服務,每次呼叫都涉及跨系統的一次請求和一次回應,在有大規模、高并發請求量的系統中,如何標識這些請求及存盤這些呼叫資訊,并形成呼叫鏈?如果系統的某兩個服務間出了問題,又如何為業務方提供可視化的展現形式以快速排障?

本文總結了微盟支持千億級規模的呼叫鏈實踐,詳解平臺的建設目標、設計思路和落地效果,

file

作者介紹

file

微盟APM團隊負責人——向明亨

TakinTalks穩定性社區專家團成員,2017年加入微盟,目前負責公司APM體系建設,包含APM體系從規范到實施,推動APM體系在公司的落地,主導了微盟APM平臺、監控告警平臺等平臺的建設,

溫馨提醒:本文約5000字,預計花費10分鐘閱讀,
后臺回復 “交流” 進入讀者交流群;回復“0411”獲取課件資料;

背景

作為SaaS領域唯二在港交所上市的企業之一,微盟累計服務了300萬+入駐商家,并基于騰訊社交網路為眾多商家提供SaaS和營銷服務,微盟業務的復雜性,體現在其技術團隊不僅需要滿足內部能力建設需求,也需兼顧營銷云上大量外部租戶的使用需求,

在流量生態方面,微盟集團SaaS產品拓展了多個流量平臺,如QQ小程式、QQ瀏覽器、抖音小店等,隨著業務端的渠道復雜化和流量的日益增長,業務方的觀測和排障需求也產生了變化,

一、微盟為什么自主設計呼叫鏈體系?

1.1 多集群排障,依賴呼叫鏈工具

在單應用場景下,大家通常通過監控或者日志來排障,但在集群狀態下它就會出現問題,比如一個下單流程,同時涉及了 A/B/C/D/E 服務,此時需先確定故障出現在哪個應用,而依賴傳統的日志或者監控,無法做到快速定位故障,

file

利用呼叫鏈工具,則可以串起請求的全程序,在鏈路中能直觀看到是哪個服務出現了問題,幫助快速定位故障,它是多集群狀態下排障的最佳解決方案,

1.2 鏈路開源組件多,但無法滿足需求

1.2.1 開源呼叫鏈工具

業界常用的鏈路開源工具有Skywalking 、ZipKin、 Jaeger 等等,我們根據微盟需求做了以下比對和分析,
file

1.2.2 為何不選用開源鏈路系統

市面上有如此多開源工具,微盟為何還要做自己的呼叫鏈體系?

從整體設計要求考慮——
主Java:微盟大部分應用都是Java;
多語言:除Java外,還有Go、Node.js、Python等語言;
海量資料:要求監控資料盡可能多,因此資料規模較大;
業務復雜:既有 SaaS 也有PaaS,業務背景相對比較復雜,
file

從技術選型角度分析——
SDK動態配置:呼叫鏈的SDK動態配置是一個強訴求,而開源的呼叫鏈工具不支持自定義配置,比如,需要設定攔截哪些組件、哪些組件不收集呼叫鏈等,開源工具無法實作;

自定義視圖:業務方需要有自己業務線的監控視圖,微盟業務線眾多,業務方會有基于團隊和業務線的監控訴求,而開源工具無法滿足該類訴求;

鏈路檢索需求不滿足:通常開源的鏈路不提供根據業務欄位進行檢索,識別業務錯誤的能力,需要在不侵入業務方業務流程的前提下,滿足業務方的更高階要求;

多租戶:微盟云對外提供應用托管能力,除滿足對內需求外,也對在微盟云平臺部署應用的租戶提供呼叫鏈服務,

file

二、微盟呼叫鏈體系做了哪些設計?

2.1 新呼叫鏈架構設計

我將從三個部分來講述新的呼叫鏈設計——資料收集、資料傳輸協議、資料應用,
file

資料收集:采用 JavaAgent 來提供無侵入的支持,同時我們也在設計階段預留了多語言的支持,

資料傳輸協議:資料傳輸協議相對來說沒那么好改,它需要具有前瞻性、支撐性和擴展性,在協議設計時需更慎重,

資料應用:支撐豐富的檢索、監控、告警的訴求,

基于以上三點考慮,我們設計了微盟呼叫鏈體系,其整體架構如圖所示,
file
(微盟呼叫鏈體系架構圖)

2.2 前臺鏈路服務

前臺鏈路服務的建設,我們需要達到的三個目標:

  • 降低接入成本;
  • 支持動態化配置;
  • 支持多語言,

2.2.1 降低接入成本-JavaAgent

從節省成本的角度,我們選擇了無侵入的JavaAgent技術,而非使用SDK構建,
這里簡單先介紹JavaAgent的技術實作程序——在啟動JVM時注入一個插件,這個插件相當于一個“外掛”,我們在插件里對業務的一系列關鍵流程注入了觀察埋點,
file

我們基于JavaAgent技術搭建了Agent管理平臺,實作Agent的上傳、版本發布、灰度、發布系統差異化等的一站式管理,同時由于微盟的主要語言是Java,所以大部分接入成本是非常低的,從業務方使用的角度,只需要在后臺通過開關操作,打開呼叫鏈并進行專案重啟后,即可自動顯示應用,并快速觀測其鏈路情況,

為何不選擇常規的SDK構建?因為業務方需要引入SDK并進行相關代碼注入和配置,隨著微盟業務的擴張,后續如果需要支撐更多組件,當系統需要升級或SDK出問題時,推動業務方升級的成本則會非常高,

因此最終我們推薦采用JavaAgent技術來實作,其在減少業務方接入成本、提高整體收益、多方協作滿意度等方面表現都相對出色,

2.2.2 動態化配置

1)實作原理-借助apollo配置中心
我們借助了開源的apollo(阿波羅)配置中心來支持動態化配置,其實作程序如圖,服務會動態地、實時地下發配置,Agent 接收到配置后進行相應的行為驗證,
file
2)踩坑分享-Agent 類加載問題
在Agent接入時,也會碰到一些問題,其中踩過的最大的坑就是類加載問題,
在Agent中使用到的類和jar包和業務方使用的類產生了沖突,比如Agent 使用了一個低版本、業務方使用了高版本的類,此時既有可能加載高版本,也有可能加載低版本,就產生了版本沖突進而導致業務方系統故障,
我們的解決辦法是Agent利用Shade工具進行依賴包重命名,這樣類加載時就不再互相干擾,這個踩坑經驗希望能對其他實踐者產生幫助,避免重走彎路,
file
2.2.3 多語言支持
微盟老的呼叫鏈體系是基于自制的背景關系實作的,支持 Trace ID 、 RPC ID 等等,那么如何進一步提供多語言支持,盡可能地減少基礎架構的維護成本?
我們選擇借助開源的力量,除支持微盟協議外,平臺還支持了Skywalking的跨行程傳播的協議,借助Skywalking豐富的SDK,既能滿足的業務方更小眾的語言的監控訴求,也能同時減少維護成本,
file

2.3 呼叫鏈資料結構

調鏈資料結構上我們想達成的三個目標——支撐性、擴展性、前瞻性,
file
我們借鑒了OpenTelemetry標準和Skywalking的協議,構建了微盟自己的鏈路資料結構,如下圖所示,
file

2.4 后臺鏈路服務

后臺鏈路服務我們需要達到以下四個目標:
file
那么如何才能做到?首先是上面提到的資料結構擴展,然后構建了高性能的監控體系,把資料存盤到VictoriaMetrics(時序資料庫),做更多可視化展示,最后是支撐業務例外的檢索和關鍵業務的檢索,以滿足業務方多樣性的檢索、監控、可視化訴求,

三、呼叫鏈體系在微盟的落地效果如何?

該部分我將結合微盟的實際落地效果,展開講解上一章末的目標是如何達成的,

3.1 業務關鍵字能力

基于對微盟業務的思考,我們做了業務關鍵字的能力,這里不在于技術的實作,而在于這個訴求本身如何滿足,
file
傳統的呼叫鏈體系通常會支持 Tag 類檢索,但是 Tag 檢索需要業務方做手動埋點,才能進行后續的檢索,除了業務方的人力投入問題,這類檢索常常不能完全滿足業務方檢索需求,而業務關鍵字能力則能以最小的人力、存盤成本,達成更好的效果,

以微盟的典型場景為例,某用戶下單出現問題,找到業務部門投訴,傳統的呼叫鏈此時是無法確定用戶鏈路的,而通過提取入參的關鍵業務引數,把它分析到業務關鍵字里去,此時只需要輸入該用戶的ID,在平臺進行檢索即可完成此項訴求,平臺會默認收集入參中的脫敏關鍵引數,其他無關資訊則不做保留,以此減輕ES存盤成本,用約10%的成本來完成100%的觀測訴求,

3.2 業務例外能力

收集業務場景的所有Dobbo介面的出參資訊并做序列化,業務方則可以通過例外碼來識別例外,
file
假設業務上有下單流程失敗了,此時會拋出一個例外碼,此時呼叫鏈上可以一目了然,并能下鉆到詳細資訊,
file
業務例外梳理后不僅可以做展示,也可以做監控大盤,看到業務例外的整體概況,
file
如果業務方有監控告警的訴求,也可以在平臺上設定想要監控的例外,并選擇業務例外碼進行監控,
file

3.3 指標能力

把指標存盤到了時序資料庫,它支持Prometheus 標準的查詢,在此基礎上,業務方可以各自進行大盤構建,
file
在大盤上可以看到總呼叫量、總例外量、例外占比、TP線等等,如業務方需要了解某介面的場景,也可輸入進行檢索,端點耗時、端點例外等排行,基于業務側應用維度的概況在平臺上一目了然,
平臺也和灰度做了打通,在呼叫鏈體系,也能深入識別到灰度環境下的鏈路概況,
file

3.4 端點分析

3.4.1 當前端點分析

端點分析中可以進行趨勢分析,查看高耗時鏈路,查看例外鏈路,點擊例外鏈路可以進入例外鏈路頁面,查看例外鏈路詳細情況,整個查詢體系、監控體系、告警體系、日志體系都互相聯動,
file
(微盟呼叫鏈-端點級別的展示查詢)

3.4.2 上下游分析

業務方有個比較普遍的訴求,是能看到應用的上下游呼叫情況,而不僅僅只是當前應用的概況,因此,我們基于呼叫鏈的資料采集功能,收集上下游呼叫的應用服務名稱、服務實體以及其他資訊,再進一步分析出上下游的鏈路呼叫情況,比如呼叫總量、例外次數、例外率、平均耗時等等,
file

3.5 APM一體化

3.5.1 觀測能力

APM一體化不僅為鏈路提供了更豐富的能力,還和指標體系、日志體系打通,實作了體系間相互跳轉,為業務方提供更好的觀測能力,包括實體、CPU、記憶體以及其他應用自定義的指標觀測,
file

3.5.2 告警能力

一體化平臺的告警能力支持按Span型別、層次、所屬組件、端點名稱等進行資料指定或排除,
file

3.6 一個降本增效的案例

1)問題描述

微盟此前資料存盤了 6000 多億條,但是線上呼叫鏈服務查詢可能只有幾千次,其中有非常大的資源浪費,在滿足業務方查詢訴求的基礎上,存盤成本需要做持續優化,

file

2)解決程序

  • 采集例外鏈路資訊,丟棄正常資料
    我們通過鏈路染色采樣來實作,其具體實作程序如下,

file

鏈路采樣中,系統發現需要保存的鏈路就會觸發染色,染色后的鏈路都會保存,染色的場景包括耗時染色采樣、例外染色采樣,比如某些耗時較高的鏈路則會染色保留,其他正常的鏈路會執行采樣流程,命中采樣規則后,Span會丟棄,微盟采樣有組件比例采樣和白名單模式兩種規則,

DB請求和Cache請求均僅保留10%
在實踐中我們發現鏈路有50%以上是 Redis 請求和DB請求,正常情況下呼叫鏈觀測的是應用和應用之間的呼叫,對于業務方不太關注和價值度不高的鏈路,微盟目前線上保留比例是10%,以節省整體存盤成本,

file

(鏈路采樣&實時診斷頁面)
若業務方希望在上線后觀測應用情況,可以開啟實時診斷,開啟實時診斷后的10分鐘內,鏈路資訊可以做全保留,在此期間不涉及采樣規則的限制,

3)實踐效果

成本降低40%,線上推廣鏈路采樣后,DB和Cache的流量下降非常明顯,鏈路的存盤規模降低了40%左右,整體存盤成本也降低了40%,

file

基本覆寫Online及QA環境中核心關鍵業務,

file

研發排障效率大幅提升,通過體系化的一站式APM平臺大幅度提升了用戶體驗,同時減少了用戶的排障成本,舉個例子,業務方接到訂單介面告警后,到鏈路指標排查訂單介面指標,發現需要進一步排查,點擊進入鏈路查詢板塊,直接定位例外鏈路,查看鏈路詳情,假如需要進一步排障,點擊查看日志,進入日志板塊查看具體的鏈路資訊,整個排障流程,清晰明了,而在此之前,同樣的場景,排障流程繁瑣,用戶需要在多個平臺檢索,用戶同樣接收到訂單介面告警后,需要到鏈路平臺根據時間段檢索鏈路ID,或者從回應體中抓取鏈路ID,假如沒有及時抓到,那只能根據時間段進行檢索了,抓到鏈路后,再到ELK中根據時間檢索對應日志,
file

四、未來規劃

在鏈路體系和指標體系的基礎上,接下來我們會健全流量漏斗和告警溯源相關能力,

在大促場景下,通過流量拓撲圖,為業務方提供入口到后端應用的流量放大比例,讓業務方直觀看到流量可能會對哪些應用產生影響,當某個應用出現問題后,業務方能快速進行應用級別的定位,

目前我們正在做相關的調研和探索,也歡迎有經驗的朋友做交流,(全文完)

Q&A

1、技術實作上微盟還踩了哪些典型的坑?如何避坑?

2、Agent發布節奏如何把握?是否可以支持在運行時帶上?

3、異步訊息場景,上下游呼叫鏈如何串聯?

4、整個呼叫鏈平臺有開源計劃嗎?外部租戶是否可以接入?

5、幾千億的資料有沒有其他的資料價值,怎么利用?

更多詳細內容:https://news.shulie.io/?p=6157,
觀看完整版解答!
file
file
添加助理小姐姐,憑截圖免費領取以上所有資料

并免費加入「TakinTalks讀者交流群」

file

宣告:本文由公眾號「TakinTalks穩定性社區」聯合社區專家共同原創撰寫,如需轉載,請后臺回復“轉載”獲得授權,

本文由博客一文多發平臺 OpenWrite 發布!

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

標籤:其他

上一篇:億級榷訓業務穩如磐石,華為云CodeArts PerfTest發布

下一篇:返回列表

標籤雲
其他(158178) Python(38107) JavaScript(25394) Java(18001) C(15217) 區塊鏈(8260) C#(7972) AI(7469) 爪哇(7425) MySQL(7148) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5870) 数组(5741) R(5409) Linux(5329) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4562) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2431) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1960) Web開發(1951) HtmlCss(1927) python-3.x(1918) 弹簧靴(1913) C++(1912) xml(1889) PostgreSQL(1874) .NETCore(1855) 谷歌表格(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
最新发布
  • 支撐百萬商戶、千億級呼叫:微盟如何通過鏈路設計降本40%?

    一分鐘精華速覽 在典型的分布式系統中,用戶的一個請求到達組合的前端服務后,前端服務會分發請求到內部的各個服務,每次呼叫都涉及跨系統的一次請求和一次回應。在有大規模、高并發請求量的系統中,如何標識這些請求及存盤這些呼叫資訊,并形成呼叫鏈?如果系統的某兩個服務間出了問題,又如何為業務方提供可視化的展現形 ......

    uj5u.com 2023-04-27 07:31:39 more
  • 億級榷訓業務穩如磐石,華為云CodeArts PerfTest發布

    摘要:近日,華為云性能測驗服務CodeArts PerfTest全新上線,提供低門檻、低成本的一站式云化性能測驗解決方案。 本文分享自華為云社區《億級榷訓業務穩如磐石,華為云CodeArts PerfTest發布》,作者:華為云頭條 。 計算機軟體作為人類邏輯智慧的偉大結晶之一,已經滲透到了人類社會 ......

    uj5u.com 2023-04-27 07:30:59 more
  • SRC相關知識分享

    SRC是企業采用眾測的方式,將企業內部的部分系統開發出來,供社會上散布的白帽子黑客進行滲透測驗,通過獎金和榮譽等激勵措施,鼓勵白帽在黑客在SRC平臺上傳漏洞,以此獲取實時的漏洞,進而第一時間修復漏洞。 ......

    uj5u.com 2023-04-27 07:30:33 more
  • Vulnhub之Hacksudo Thor靶機詳細測驗程序(提權成功)

    Hacksudo Thor 作者:jason huawen 靶機資訊 名稱:hacksudo: Thor 地址: https://www.vulnhub.com/entry/hacksudo-thor,733/ 識別目標主機IP地址 (kali?kali)-[~/Desktop/Vulnhub/Ha ......

    uj5u.com 2023-04-27 07:30:07 more
  • 記一次某應用虛擬化系統遠程代碼執行

    微步在線漏洞團隊通過“X漏洞獎勵計劃”獲取到瑞友天翼應用虛擬化系統遠程代碼執行漏洞情報(0day),攻擊者可以通過該漏洞執行任意代碼,導致系統被攻擊與控制。瑞友天翼應用虛擬化系統是基于服務器計算架構的應用虛擬化平臺,它將用戶各種應用軟體集中部署到瑞友天翼服務集群,客戶端通過WEB即可訪問經服務器上授... ......

    uj5u.com 2023-04-26 09:08:52 more
  • 記一次某應用虛擬化系統遠程代碼執行

    微步在線漏洞團隊通過“X漏洞獎勵計劃”獲取到瑞友天翼應用虛擬化系統遠程代碼執行漏洞情報(0day),攻擊者可以通過該漏洞執行任意代碼,導致系統被攻擊與控制。瑞友天翼應用虛擬化系統是基于服務器計算架構的應用虛擬化平臺,它將用戶各種應用軟體集中部署到瑞友天翼服務集群,客戶端通過WEB即可訪問經服務器上授... ......

    uj5u.com 2023-04-26 08:58:28 more
  • Midjourney的一些學習心得:如何高效的圖生圖

    注意本文沒有什么長篇大論,全部是自己的學習心得。 心得體會:如何圖生圖 今天在一篇midjourney看到好圖應該怎么抄。 相信經常會看到好圖也想要的,但是要么抄不出感覺,要么抄過來把水印也抄了,這一篇給你說清楚。 我們知道,AI 繪畫的核心就是給他怎么樣的Prompt 。 然而想讓Midjourn ......

    uj5u.com 2023-04-26 07:54:56 more
  • 棋盤覆寫問題——分治法

    問題描述 有一個 x (k>0)的棋盤,恰好有一個方格與其他方格不同,稱之為特殊方格。現在要用如下圖所示的L形骨牌覆寫除了特殊方格以外的其他全部方格,骨牌可以任意旋轉,并且任何兩個骨牌不能重復。請給出一種覆寫方式。 樣例: 輸入: 輸出: 思路——分治法: 將一個規模為n的問題分解為k個規模較小的子 ......

    uj5u.com 2023-04-26 07:54:45 more
  • [白嫖]阿里云服務器ECS以及無影云桌面

    [白嫖]aliyun 阿里云ECS和無影云桌面 [云服務器 ECS]學生認證約7個月 適合入門級開發者,用于搭建網站、小程式、云博客、部署主流開發環境,如 lamp、node.js、wordpress 等。 1核2GB 每月750小時 規格資訊:s6 1核 2GB,1Mbps 帶寬,40GB 系統盤 ......

    uj5u.com 2023-04-26 07:54:36 more
  • 排序演算法之詳解選擇排序

    引入 選擇排序顧名思義是需要進行選擇的,那么就要問題了,選擇到底是選擇什么呢? 選擇排序的選擇是選擇陣列中未排序的陣列中最小的值,將被選擇的元素放在未排序陣列的首位 如果你對 ‘未排序陣列’ , ‘選擇’ 的概念不理解,那么你可以看看下面的圖 思路 有了上面的一些基礎之后,我們再來說說選擇排序演算法的 ......

    uj5u.com 2023-04-26 07:54:29 more