性能調優,程式員轉型架構師的攔路虎【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
更多相關文章
  • 在Vue進行前端開發中,事件監聽是必不可少的功能,本文通過簡單的小例子,簡述v-on的簡單用法,僅供學習分享使用,如有不足之處,還請指正。 ...
  • react native運行helloword 今天是個特殊的時刻,我前天開始學習react native,一直環境塔建出錯,運行打包出錯,今晚,我終於把這個難搞的環境給搭建好了,併成功運行了第一個helloword!! 這個環境:python2+java jdk+Android 我全部是照著官網弄 ...
  • 分享一些基礎小白們可能不知道的東西、以及一些基礎的知識的註意事項 ...
  • 引言 在 "上一篇文章" 中我們通過 腳手架快速搭建了一個簡單的示例,並基於該示例講解了在類組件中 和`React.PureComponent @babel/preset react render React.createElement React.createElement ReactElemen ...
  • Json的介紹和Json結構 JSON是JavaScript Object Notation的縮寫,意思是JavaScript 對象表示法 是存儲和交換文本信息的語法。類似 XML,不過它比 XML 更小、更快,更易解析 官網的介紹 http://www.json.org/json zh.html ...
  • 在用到el-tree的懶載入和預設勾選功能時,若第一次勾選前幾個連續節點,第二次進入預設勾選時,由於el-tree子節點尚未完全載入(只載入出來前幾個),預設勾選已經開始(已載入出來的子節點被預設勾選),這時el-tree會認為子節點全部勾選,所以父節點也被勾選,這就導致所有子節點都被勾選; 解決方 ...
  • 本篇不會過多講述 ts 語法,著重記錄下 在 React 中使用 ts 的方法以及踩坑經過。 ...
  • 0.效果演示 插入視頻插不進來,就很煩。可以出門右拐去優酷看下(點我!)。 1.準備工作 1.1前端框架 前端使用了基於vue.js的nuxt.js。為什麼使用nuxt.js? 首先我做的是博客的項目,所以SSR至關重要。雖然跟本文要講的登錄註冊沒有什麼關係,但是文章如果用axios來非同步獲取的話, ...
一周排行
    -Advertisement-
    Play Games
  • 前言 在我們開發過程中基本上不可或缺的用到一些敏感機密數據,比如SQL伺服器的連接串或者是OAuth2的Secret等,這些敏感數據在代碼中是不太安全的,我們不應該在源代碼中存儲密碼和其他的敏感數據,一種推薦的方式是通過Asp.Net Core的機密管理器。 機密管理器 在 ASP.NET Core ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 順序棧的介面程式 目錄順序棧的介面程式頭文件創建順序棧入棧出棧利用棧將10進位轉16進位數驗證 頭文件 #include <stdio.h> #include <stdbool.h> #include <stdlib.h> 創建順序棧 // 指的是順序棧中的元素的數據類型,用戶可以根據需要進行修改 ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • C總結與剖析:關鍵字篇 -- <<C語言深度解剖>> 目錄C總結與剖析:關鍵字篇 -- <<C語言深度解剖>>程式的本質:二進位文件變數1.變數:記憶體上的某個位置開闢的空間2.變數的初始化3.為什麼要有變數4.局部變數與全局變數5.變數的大小由類型決定6.任何一個變數,記憶體賦值都是從低地址開始往高地 ...
  • 如果讓你來做一個有狀態流式應用的故障恢復,你會如何來做呢? 單機和多機會遇到什麼不同的問題? Flink Checkpoint 是做什麼用的?原理是什麼? ...
  • C++ 多級繼承 多級繼承是一種面向對象編程(OOP)特性,允許一個類從多個基類繼承屬性和方法。它使代碼更易於組織和維護,並促進代碼重用。 多級繼承的語法 在 C++ 中,使用 : 符號來指定繼承關係。多級繼承的語法如下: class DerivedClass : public BaseClass1 ...
  • 前言 什麼是SpringCloud? Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的開發便利性簡化了分散式系統的開發,比如服務註冊、服務發現、網關、路由、鏈路追蹤等。Spring Cloud 並不是重覆造輪子,而是將市面上開發得比較好的模塊集成進去,進行封裝,從 ...
  • class_template 類模板和函數模板的定義和使用類似,我們已經進行了介紹。有時,有兩個或多個類,其功能是相同的,僅僅是數據類型不同。類模板用於實現類所需數據的類型參數化 template<class NameType, class AgeType> class Person { publi ...
  • 目錄system v IPC簡介共用記憶體需要用到的函數介面shmget函數--獲取對象IDshmat函數--獲得映射空間shmctl函數--釋放資源共用記憶體實現思路註意 system v IPC簡介 消息隊列、共用記憶體和信號量統稱為system v IPC(進程間通信機制),V是羅馬數字5,是UNI ...