0308 軟件系統的非功能需求


image.png

故事開始。

小李是一個一線的java程序員,做軟件開發多年,有一天,被邀請去參加一個大廠的面試,面試前他做了各種准備,有軟件原理方面的,軟件設計方面的,還有軟件架構方面的知識。並不斷總結提煉成了一張知識圖譜。想着即使不成功,也是一次不錯的技術交流,至少可以知道目前大廠需要的程序員具備的技能深度和廣度,給自己定定位。下面是技術一面。

小李:你好,我是李x,今年y歲,做一線開發z年,我來面試。

大廠牛逼架構師:你好,小李。我是a廠的面試官b,我來給你面試。直接開門見山了。問題1,簡單說一下軟件研發的過程?

小李:按照軟件工程的瀑布模型.

軟件研發分為可行性分析,需求分析,概要設計,詳細設計,編碼,測試,發布,交付,維護,下線等節點。但是這些流程比較重,往往當軟件開發完成交付的時候,客戶的需求已經發生了變更,軟件需要重新打回需求分析和概要設計階段開始,導致軟件的工期遠遠超出預期,而且開發方耗時間耗人力,客戶方並不滿意。

那么怎么破呢?

按照當下流行的敏捷研發模式,軟件在需求分析階段,按照優先級別分批次設定發布計划,然后基於發布計划規划迭代,針對單個小迭代,開發,測試同一時間點參與,研發完成立馬發布交付客戶驗收,客戶快速反饋,針對反饋的問題,及時調整規划的需求,這樣小步快跑,快速迭代的而方式去管理軟件的研發過程,解決研發方研發的時間和人力成本高,客戶還不滿意的難題。

image.png

大廠牛逼架構師:問題2:系統概要設計階段的非功能需求有哪幾種?

小李:軟件除了實現客戶的基本功能需求之外,還要滿足預設的非功能性需求,好比冰山下的龐大底座,看不見的東西往往最耗費和考驗軟件工程師的功力,對架構能力,編碼能力要求比較高。主要包含高性能,安全,高可用等。

冰山

高性能

大廠牛逼架構師:問題3:簡單介紹一下高性能的指標?你使用過的性能調優方法?以及你的一個性能調優經歷?

小李:高性能是軟件系統的核心非功能需求,性能調優是軟件架構師的核心職責,一般由高並發引起性能問題。要進行系統的性能優化,必須先進行性能測試。

軟件系統的性能指標如下。

第一,響應時間,即用戶發出請求到獲得響應的總時間;

第二,並發數,即軟件系統可以同時處理的請求數量,即HPS;

第三,吞吐量,有兩個個基本指標,TPS(每秒處理事物數),QPS(每秒處理查詢數);

第四,操作系統的性能計數器,比如CPU,內存的使用率,磁盤IO,系統負載,對象數和線程數量;

性能調優的原動力是提升用戶體驗,比如在異步顯示資源,等待的時候可以轉菊花;

性能調優的客觀方法分為7種:

從軟件系統的范圍由大到小分別說明。

1,多數據中心,讓用戶訪問離他最近的數據中心,可以顯著降低響應時間。

2,使用高配置的硬件,比如更高的cpu,內存,對系統進行垂直擴展。

3,操作系統的參數調優,比如調大TCP的連接數,調小TCP的默認等待時間等;

4,JVM調優,設置合適的jvm的存儲參數,選擇合適的垃圾回收算法等;

5,軟件系統的依賴組件調優,比如web服務器的配置調優,數據庫的調優等;

6,軟件架構調優,比如可以引入集群,緩存,消息隊列等;

7,代碼層面的優化,比如使用更優的數據結構,使用線程池連接池,sql語句調優,反應式框架,異步io,設計模式寫出更簡潔易讀的代碼等;

性能調優的流程是:

1,對要調優的軟件系統進行性能測試,工具有很多比如jmeter,loadrunner等,使用多線程的方式模擬用戶並發訪問系統;

2,觀察軟件系統的性能指標,分析得到產生性能的問題的瓶頸點,需要非常了解整個系統的結構,然后解決這個瓶頸點;

3,然后繼續跑性能測試,對比調優前后的性能指標。如果提高了則結束,沒有提高則重復1步驟;

image.png

安全

大廠牛逼架構師:問題4:簡單介紹一下數據加密的種類?以及常見的軟件安全漏洞?最后講講實際工作中應該如何保證軟件的系統安全?

小李:軟件系統系統只有被攻擊,數據泄漏之后才意識到安全的重要性。

數據加密的種類有3種:

1,單向加密,比如常用的md5,一般使用的時候還要加個salt,並增加輸入的密碼復雜性檢查,防止彩虹表破解密碼;

2,對稱加密,常見的比如RSA加密,通過一個秘鑰進行加密和解密,只要秘鑰不泄漏就是安全的;

3,非對稱加密,常見的比如公鑰私鑰對,數字簽名是非對稱加密的應用,使用私鑰加密獲得密文,發送出去,只有配對的公鑰才能解密,以此來驗證數據來源的合法性。但是性能比較差。

除了數據加密,還需要保證數據在傳輸過程加密,那就要說到https協議了,它是結合使用了對稱加密和非對稱加密,首先使用非對稱加密,產生一個秘鑰,客戶端拿到秘鑰之后,對數據進行對稱加密,服務端根據生成的秘鑰進行數據解密。充分保證了數據處理的性能和傳輸數據的安全。

常見的安全漏洞:

HTTP安全漏洞:

1,  SQL注入,解決方法使用Preparestatement替代statement處理傳輸過來的參數;

2,xss攻擊,上傳攻擊腳本到服務器,別的用戶獲取數據的時候會解析這個攻擊腳本,達成攻擊目的,解決方式是字符串轉義;

可以通過在網關中增加web防火牆或者在代碼中增加過濾器來處理。

此外還有硬件和操作系統的安全漏洞,使用軟件和組件的安全漏洞等。

實際工作中,應該應該及時升級依賴的軟件和組件的版本,

升級版本一般修復了對應的安全漏洞,此外我們應該在程序中做好參數過濾,

最后,應該對最終存儲的數據和傳輸的數據進行加密,提高黑客攻擊的難度。

image.png

高可用

大廠牛逼架構師:問題5:簡單說一下如何保證軟件系統的高可用?

小李:高可用即要求軟件系統在各種故障發生的時候做到可用或者大部分可用,軟件系統的可用率一般采用N個9的方式來衡量。

各種故障都可能影響軟件系統的可用性,比如:

1,自然災害

2,人為原因

3,高並發訪問

4,硬件故障

5,軟件故障

保證系統的高可用有5種方法:

1,冗余備份,即多准備幾個服務器,比如多個web服務器(故障轉移),數據庫服務器(多主模式集群);

2,異地多活,即通過域名的方式,把請求分發到多個地域的不同機房;

3,限流降級,限流即限制HPS,降級即關閉非核心功能讓出有限資源;

4,失敗隔離:消息隊列削峰填谷,轉移寫壓力,隔離失敗;

5,運維方法:自動測試,自動監控,灰度,預發布等;

image.png

小結

大廠牛逼架構師:

小李架構功夫很扎實。簡單的點評一下。

1,不愧是多年的一線開發人員,軟件研發流程非常熟悉,而且敏捷研發模式有一定經驗;

2,高性能是非常重要的非功能需求,調優方式7中都答的很到位;

3,安全性也是非常重要的,數據加密分類清晰,http的攻擊防護手段有所了解;

4,高可用的手段總結的很到位;

小李:感謝您的評價,希望有機會合作,為企業打造數字化產品帝國。

故事講完。

原創不易,轉載請注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM