?技藝精進(jìn)之路,永無(wú)止境。
?
很多時(shí)候,程序員做的都是代碼堆砌的事情。就是一點(diǎn)一點(diǎn)壘代碼堆功能,缺乏一種清晰的系統整體觀(guān)和設計觀(guān)。
如何建立系統整體觀(guān)呢?
建立系統的架構主頁(yè),包括系統的背景、產(chǎn)品和研發(fā)目標、系統全景圖(技術(shù)設施、業(yè)務(wù)底座、核心業(yè)務(wù)能力、系統模塊及交互、產(chǎn)品上層)、核心主體流程、重要設計決策集、技術(shù)棧及技術(shù)選型、系統部署圖;
建立系統詞匯表;
建立系統的領(lǐng)域模型;
建立并加固系統的存儲設計;
從模塊級別思考系統,思考構成系統的模塊、關(guān)聯(lián)關(guān)系及交互;
思考模塊與系統的技術(shù)重難點(diǎn)(復雜或易錯的業(yè)務(wù)邏輯、海量數據處理、性能、穩定性、可擴展性、可伸縮、可用性);
清晰表達系統重要模塊與功能的設計實(shí)現方案;
梳理系統構建的開(kāi)發(fā)套路和構建方式。
構建系統的詞匯表和名詞解釋?zhuān)陂_(kāi)發(fā)、產(chǎn)品、測試、業(yè)務(wù)人員、客戶(hù)之間進(jìn)行順暢的交流。
詞匯表和名詞解釋要求:
整理系統詞匯表有兩個(gè)好處:
例如:入侵檢測詞匯表(節選)
| 詞匯 | 字段名 | 語(yǔ)義 | 鏈接 |
|---|---|---|---|
| 「入侵檢測」 | IDS-名詞解釋 | ||
| 告警 | Detection | 一個(gè)通過(guò)規則判定為入侵的可疑或惡意行為。這個(gè)告警可以被手動(dòng)或自動(dòng)處置與響應。每個(gè)detection 都有 score,來(lái)表達告警的危險程度。每個(gè) detection 都與一個(gè)或多個(gè)元素關(guān)聯(lián)。 | |
| 元素 | Element | 1. 產(chǎn)生惡意行為的可疑或惡意對象,包括進(jìn)程、文件(腳本、webfile、配置文件、可執行二進(jìn)制文件、模塊、動(dòng)態(tài)庫等)、進(jìn)程樹(shù)、IP、域名、socket、賬戶(hù)、內存類(lèi)、進(jìn)程段、動(dòng)態(tài)加載模塊等。 2. 被施加惡意行為的載體對象,包括主機、容器、集群。 | Agent 虛表定義 |
| 規則 | Rule | 算法、正則、序列等廣義的入侵行為檢測方式。 | |
| 規則庫 | Rule Repository | 以一定分類(lèi)方式規定和組織起來(lái)的規則集合。 | IDS-檢測方式與檢測規則庫對應關(guān)系 |
| 評分 | Score | 告警的危險程度的量化。告警的 score 主要由規則決定。同時(shí)也受多種因素影響,比如「攻擊特征」(有強有弱),該「行為的異常情況」(和上下文及統計與算法模型相關(guān)),「影響結果」(大量網(wǎng)絡(luò )傳輸,文件被破壞,策略/文件被修改,賬號新增,異常登陸等等),「告警特異性」(獨特的還是大量雷同的)等。 | 告警置信度自動(dòng)化評估 |
| 檢測引擎 | DetectEngine | 檢測入侵行為的技術(shù)手段和工具。檢測引擎通常會(huì )引用規則。 主要區分區分行為引擎和特征引擎。涉及碼和規則的往往是特征引擎。 | 關(guān)于告警詳情中檢測方式的文案【持續增加】 |
軟件系統如何與業(yè)務(wù)對接呢?領(lǐng)域模型作為橋梁。初步閱讀《領(lǐng)域驅動(dòng)設計》,有一個(gè)感觸是:在設計軟件時(shí),在技術(shù)手段之上要有一個(gè)不斷演進(jìn)的領(lǐng)域模型用于高層設計引導,才能使軟件能持久貼切地反映領(lǐng)域需求實(shí)現。不是所有系統都適合領(lǐng)域驅動(dòng)設計,但是運用領(lǐng)域驅動(dòng)思想去思考業(yè)務(wù),總是有益的。
繪制系統的領(lǐng)域模型,凸顯系統中各種基本實(shí)體及關(guān)聯(lián)關(guān)系。
畫(huà)圖,畫(huà)圖,畫(huà)圖!一圖勝千言,畫(huà)圖見(jiàn)真功夫。

制定通用的數據交換格式,使得數據可以在系統之間流暢地流動(dòng)。
這個(gè)模塊有哪些基本術(shù)語(yǔ)和名詞解釋?zhuān)績(jì)群屯庋?,概念之間的關(guān)聯(lián)關(guān)系,能不能給自己(和別人)解釋清楚?
這個(gè)模塊的設計和實(shí)現有哪些技術(shù)難點(diǎn)?解決方案是什么?
這個(gè)模塊有木有通用機制?能不能提煉出來(lái),做成可復用可擴展的?
有沒(méi)有清晰的文檔,能夠闡明這個(gè)模塊的設計思想?能不能讓別人容易地理解?
能不能讓別人相對容易地在這個(gè)基礎上添加新功能?如何添加新功能?
各個(gè)模塊之間的關(guān)聯(lián)和交互?對于所構建的模塊和系統是否有一個(gè)比較清晰的整體圖景?能不能畫(huà)出來(lái)?
各個(gè)模塊的代碼是否良好地組織,并放置在合適的包下?
做出技術(shù)決策的原則、準則和依據是什么?是怎么思考這個(gè)問(wèn)題的?
「檢測配置模塊」
提供用戶(hù)自定義的檢測、阻斷行為定制和自定義檢測、阻斷、響應規則。
技術(shù)重難點(diǎn):多個(gè)自定義配置的疊加覆蓋邏輯;檢測配置的變更下發(fā)。
「規則管理模塊」
提供規則的新建、導入、下發(fā)能力。
技術(shù)重難點(diǎn):規則的分類(lèi)、組織和管理;全量規則與增量規則下發(fā);短時(shí)間大量 agent 獲取全量規則的性能和穩定性問(wèn)題。
「檢測模塊」
構建具體的安全事件的檢測流程、生成檢測結果和告警。
技術(shù)重難點(diǎn):通用、可擴展的檢測流程;復雜的檢測流程構建;檢測流程的性能與穩定性。
「告警列表詳情模塊」
展示生成的告警及詳情,供客戶(hù)及時(shí)處理告警。
技術(shù)重難點(diǎn):告警存儲設計;告警列表、聚合與統計;接口性能問(wèn)題。
「告警降噪模塊」
對告警進(jìn)行降噪、評分。
技術(shù)重難點(diǎn):降噪、評分算法。
「威脅情報模塊」
對上報的海量新事件及各種來(lái)源的安全事件進(jìn)行威脅情報檢測。
技術(shù)重難點(diǎn):海量事件;大量情報的存儲與匹配;性能與穩定性。
「掃描驗證模塊」
批量進(jìn)行掃描和驗證。
技術(shù)重難點(diǎn):掃描驗證任務(wù)下發(fā);批量上報處理。
「白名單模塊」
標識正常業(yè)務(wù)行為,避免無(wú)用告警。
技術(shù)重難點(diǎn):白名單規則的表達式與匹配及通用可擴展性;對歷史告警加白的性能問(wèn)題。
「響應模塊」
對告警元素進(jìn)行響應操作。
技術(shù)重難點(diǎn):與驅動(dòng)、客戶(hù)端、前端的交互。
技術(shù)設施主要包括技術(shù)棧和技術(shù)選型。
還是有很多程序員不習慣于寫(xiě)文檔,覺(jué)得寫(xiě)代碼才是正事。在我看來(lái),代碼和文檔都是一回事,都是表達見(jiàn)解的載體形式。程序員的工作究竟是什么呢?寫(xiě)代碼?不完全是,—— 實(shí)質(zhì)是思考和表達見(jiàn)解,解決問(wèn)題。
文檔有一些額外的好處:
可閱:“一個(gè)靠譜的技術(shù)方案文檔是怎樣的”。
系統開(kāi)發(fā)套路是開(kāi)發(fā)經(jīng)驗的總結。適當提煉和總結系統開(kāi)發(fā)套路,能夠加速后續的開(kāi)發(fā)進(jìn)度,也能讓新加入的成員更快地上手開(kāi)發(fā),更好地完成工作。
開(kāi)發(fā)套路包括完成某類(lèi)功能或擴展能力,需要如何添加代碼?;陂_(kāi)閉原則和接口編程的思想,系統的擴展性可以通過(guò)定義和實(shí)現各種接口來(lái)實(shí)現。其次是添加 if-else 分支。
類(lèi)似這樣:

程序員往往容易沉溺于功能開(kāi)發(fā)中。一個(gè)接一個(gè)的功能開(kāi)發(fā),無(wú)休止重復 CRUD 的工作。這其實(shí)是一種麻醉。簡(jiǎn)單重復的工作,并不利于能力的提升。建立系統整體觀(guān),運用架構的思維,從系統整體和模塊角度去思考系統構建,能夠讓程序員看得更遠,進(jìn)階速度更快。
聯(lián)系客服