程式員必須練就的「性能調優」組合拳【1】

来源:https://www.cnblogs.com/itlaobingge/archive/2020/01/18/12209482.html
-Advertisement-
Play Games

X 維度本身超出了技術範疇,但為了更好地服務業務,技術人也有必要懂得一些基礎的業務優化思路。如果只知道埋頭趕路,不知道抬頭看天,那我們技術人很容易做了費力不討好的事情,例如:某些性能瓶頸是由於業務流程設計不合理導致的,在業務流程優化完善之前,我們僅僅從技術視角去優化改善,極有可能事倍功半。具體說來,... ...


在【 程式員必須掌握的性能調優 XYZ 】這篇文章中,老兵哥結合個人經歷解釋了程式員往架構師方向發展時為什麼要跨越性能調優這一關,這是我們建立流程化、結構化、系統化的思維的契機。另外,老兵哥還介紹了從 X、Y、Z 三個維度優化性能的思路。接下來,我們將從 X 維度來談談優化業務交互設計的思路。

  • X 維度,即業務維度,技術始終是服務業務的,任何技術問題的原點就是業務需求。在啟動技術層面的性能優化之前,我們有必要先審視一下業務流程是否合理,交互設計上有沒有可以優化的空間等。
  • Y 維度,待業務維度優化完畢,接下來就是審視技術在實現當前業務流程或交互設計的全鏈路上有沒有可優化的地方,即 HTTP 請求處理全流程,從瀏覽器到應用容器,再到 Spring、Hibernate、資料庫等。
  • Z 維度,除了沿著 HTTP 請求的橫向鏈路,我們還要審視支持應用系統的縱向技術棧,從上到下包括 JVM、操作系統和硬體等,這是整套應用系統運行的環境,許多性能問題都跟運行環境存在關係。

X 維度本身超出了技術範疇,但為了更好地服務業務,技術人也有必要懂得一些基礎的業務優化思路。如果只知道埋頭趕路,不知道抬頭看天,那我們技術人很容易做了費力不討好的事情,例如:某些性能瓶頸是由於業務流程設計不合理導致的,在業務流程優化完善之前,我們僅僅從技術視角去優化改善,極有可能事倍功半。具體說來,哪些業務優化思路是值得我們借鑒實踐的呢?老兵哥我分享幾點個人經驗供大家做引子參考。

讓客戶端分擔部分計算存儲任務。面向公網的互聯網應用最顯著的特點就是用戶基數非常大,每項業務操作本身的計算量可能不大,但是乘上用戶量之後情況就完全不一樣了,為了保障業務正常高效運轉,我們就要投入更多伺服器和帶寬資源。如果資源投入跟不上業務量的增長,那麼系統性能就會變差,用戶操作就會超時或失敗,用戶體驗就會變差,最終導致業務受損。有沒有辦法在不增加資源投入的情況下來改善系統性能呢?如果把用戶的終端(手機或電腦等)也納入到系統範疇,那麼把某些任務放到客戶端計算是緩解服務端資源的有效辦法。

具體有哪些任務適合交給客戶端處理呢?數據合法性的初步驗證、數據的加工轉換、數據呈現形式變換等等,例如在註冊登錄過程中,客戶端可以對用戶填寫的信息做格式層面的校驗,如果不符合要求可以直接給出提示信息讓用戶重新填寫,這樣就免去了將信息發送至伺服器的資源消耗。在現在流行的人臉或聲紋驗證身份的場景下,客戶端可以直接提取照片或聲音的特征碼發往伺服器端做校驗,而不是把照片或聲音文件直接發送過去。還有就是對已呈現數據的排序或展示轉換上,客戶端也完全可以勝任。現在的客戶端計算存儲能力都很強大,關鍵是我們要識別出哪些任務適合在客戶端運行,這是提升性能一個思路方向。

除此之外,優化交互設計是提升性能非常有效的途徑。如果交互設計不合理,那就容易產生許多無效的操作,這就是對資源最大的浪費。舉一個非常普遍的場景為例,不管何種類型的業務,都會存在耗時較長的操作,比如將某批任務分派給許多人,分配時要綜合考慮任務和執行者的匹配度,這個匹配過程的耗時跟任務和執行者的數量成正比,我們習慣性做法就是提交操作指令後阻塞輪詢進度直至完成,而輪詢會導致大量無效的查詢請求,尤其在海量用戶的情況下,這就是一場 DDos 攻擊,很容易自己就把自己給搞死了。

化解這種問題的關鍵就是優化交互,把阻塞輪詢改成非同步通知,批量操作指令提交之後就不再輪詢進度了,而是等待伺服器端的進度更新通知,這樣就避免了大量無效的查詢請求。當然,業務流程優化依賴對業務的深刻理解,這更多是產品的職責,但我們技術也要懂得常見業務模式對性能的影響。下一篇我們將從 Y 技術維度來看看如何優化應用的性能。

關註「 IT老兵哥 」,賦能程式人生!推薦原創軟技能文章,請點擊鏈接:程式員,怎樣打造個人影響力?

 

 

近期熱評系列《 程式員必須懂的架構師入門課 》:


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • todolist小案例 "該案例的模板文件下載地址" 走外國伺服器, ̄□ ̄|| app.module.ts 核心組件app.component.ts 發現這倆不是同一類文件,哈哈哈,٩(๑ ◡ !t.done) } else if (this.visibility === 'completed') ...
  • Node.js簡介 Node.js是一個能夠在伺服器端運行JavaScript的開源代碼、跨平臺JavaScript運行環境 Node採用Google開發的V8引擎運行js代碼,使用事件驅動、非阻塞和非同步I/O模型等技術來提高性能,可優化應用程式的傳輸量和規模 Node大部分基本模塊都用JavaSp ...
  • 前言 最近在學習研究 Nest 框架,但是在學習過程中除了參考翻閱官方文檔外國內幾乎沒有多少資料能系統的講解 Nest 的相關內容,所以打算想通過我自己學習的角度講解下 Nest 框架,不知道能堅持多久,也可能有錯誤或遺漏的地方,歡迎大家批評指正。 下麵我學習 Nest 的主要信息來源,在編寫過程中 ...
  • 7)onloadonload就是等頁面載入完後才執行。例 3.7.1<HEAD> <meta http-equiv="content-type" content="text/html; charset=utf-8"/> <SCRIPT LANGUAGE="JavaScript"> <!-- func ...
  • Vue開發環境跨域訪問其他伺服器或者本機其他埠,需要配置項目中config/index.js文件,修改如下 module.exports = { dev: { // Paths assetsSubDirectory: 'static', assetsPublicPath: '/', proxyTa ...
  • 程式員在轉型架構師的過程中需要建立流程化、結構化、系統化的思維方式,而性能調優是非常難得的契機,它既給了我們壓力,也給了我們動力,跨越它就是突破自己的過程。Y 維度,就是從業務 HTTP 請求的橫向處理流程來看,HTTP 請求會穿越網路、電腦、應用容器(Tomcat)、Spring、ORM(Hib... ...
  • Y 維度就是從業務 HTTP 請求的橫向處理流程來看,HTTP 請求會穿越網路、電腦、應用容器(Tomcat)、Spring、ORM(Hibernate)、資料庫等節點,在這個流程中每個節點都有許多可以可優化的地方,今天老兵哥將介紹通過優化開發框架 Spring 來優化系統性能的方法。 ...
  • 程式員在轉型架構師的過程中需要建立流程化、結構化、系統化的思維方式,而性能調優是非常難得的契機,它既給了我們壓力,也給了我們動力,跨越它就是突破自己的過程。Y 維度,就是從業務 HTTP 請求的橫向處理流程來看,HTTP 請求會穿越網路、電腦、應用容器(Tomcat)、Spring、ORM(Hib... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...