天天看點

系統品質治理

一、前言

架構分為三種:

  • 企業架構
  • 業務架構
  • 應用架構

每一層架構都在flow上一層架構,為上一層架構提供支援,并為下一層的架構提供指導。

舉個例子,應用架構的服務拆分,一定flow業務架構。由業務架構的職責領域,劃分子域(常說的二級域等),進而進行服務拆分。

另外,越接近底層,則越具有通用性,也越常見,掌握的難度也越低。畢竟通用,就意味着很容易進行知識傳播。

我們日常見到的技術公衆号,推送的内容大部分都是應用架構的東東。因為這些東東才是多數人需要掌握的,并且也是具有普适意義的。

而在應用架構中,品質治理還是非常重要的一塊兒。無論是日常工作,還是面試,亦或者是同行溝通,應用架構的品質治理都是常客。舉個例子,日常開發中,我們經常需要評估程式的性能,并為性能優化做出努力。面試中,性能優化是常客,系統可用性也是常常被提及。同行溝通,往往都是在一起diss接手項目的性能多麼糟糕,擴充性是多麼差。囧

原本想好好打磨打磨,但是由于最近組織關系調整,暫時無心整理這個。是以,先放出來啦。對部分細節感興趣的小夥伴,可以私聊或者艾特我。

二、屬性

系統品質屬性,代表着架構的核心次元,各個次元的取舍展現了架構師的tradeoff能力。

系統品質屬性有很多,劃分&組織方式也有很多(如運作時&編譯時),這裡隻是談一談日常較為常見的内容。

1.性能

a.刻畫方式

  • 交易業務:QPS、TPS、RT、出錯率
  • 流業務:吞吐量、處理視窗、滞後時間
  • 系統:CPU、記憶體、存儲、網絡

b.解決方案

  • 思想:
    • 簡化:
      • 業務:精簡流程
      • 架構:減少不必要的服務調用與依賴、減少不必要的架構層次抽象
      • 編碼:減少代碼塊内容,如循環體、try塊等
      • 資料:減少不必要的資料處理、傳輸、存儲。如資料清洗
    • 時空轉換:緩存、索引、副本、bitMap等
    • Map_Reduce:dts的合理拆分(這涉及dts的整體設計優化,後詳)、本地fork-join架構
    • 并行:分布式、多線程
    • 調優:Mysql調優、HashMap調優(初始容器大小)、Nginx調優等
  • 架構級:
    • 緩存為王(《緩存架構》。Mysql的cache&buffer等。可以借鑒緩存中間件-緩存架構的實作(上)與緩存中間件-緩存架構的實作(下))
    • 異步為帥(如異步程式設計&MQ。削峰填谷,局部異步并發有效降低RT(校驗場景下,帶來少許額外請求量))
    • 分布式為将(X軸擴充:提升吞吐量&QPS等;Y軸擴充:出錯率降低;Z軸擴充:RT降低,TPS/QPS提升)
    • 妥協方案(出于成本考量,可以通過限流(排隊)、降級、熔斷,在性能不可提升下,保證系統可用)
  • 編碼級:
    • 資料結構:如跳表、COW
    • 算法:如折半查找
    • 池化:如線程池、連接配接池
    • 局部化:如多線程的一種優化(ThreadLocal)
    • 批量:如批量請求合并

c.流程

  • 容量規劃(負載測試&壓力測試)-> 确定水位
  • APM監控
  • 彈性擴縮容
優化注意:首先得确定性能瓶頸在哪裡

但仍然需要思考,這些方法的定位。需要涵蓋服務端問題排查與系統優化涉及的性能優化手段

高性能編碼,可以借鑒:高性能程式設計論述

2.可用性

  • IBM:MTBF、MTTR、HA
  • SAP:ATP
  • 串聯架構&并聯架構的可用性評估

  • 本地高可用:伺服器、磁盤、擴充卡卡、網絡等
  • 業務邏輯保護:作業系統、資料庫、應用、服務、
  • 容災多活:HA方案失效、主站點(基礎架構)失效、自然災害
  • 本地高可用:
    • 叢集架構(CA):應用叢集、中間件叢集、資料叢集(包括RAID)
    • 分布式架構(AP):分布式應用、分布式中間件、分布式資料庫。引申出一緻性(Base理論)、腦裂(Lease機制->合理的time設定)等問題
  • 業務邏輯保護:
    • 預防:資料備份(熱冷備份、全增量備份)、嚴謹的應用與架構設計、N與N-1版本共存、變更稽核
    • 發現:監控工具、自動化腳本、應用與系統的正常行為描述、應用與系統的異常行為偵測(告警)
    • 修複:應用與系統復原、一鍵恢複(回複初始狀态)、自動恢複、快速資料恢複
  • 異地容災:
    • 容災級别:應用、資料、SAN網絡、存儲
    • DRP規劃:流程、演練、BCP
    • 容災方案:成本随資料中心的數量增加而降低。企業Set單元化

邏輯保護技術:備份、快照、CDP連續資料保護、事件溯源(架構)

架構設計方案:限流、降級、熔斷、逾時&重試、限制(限流、逾時等)&隔離(線程池隔離、信号量隔離)

  • SRE文化(谷歌):SLI、SLO、SLA、錯誤預算
  • 混沌工程:Chaos Monkey、故障注入測試、故障演練等

PS:

美團CAT應用監控:

系統品質治理

3.可伸縮性

可伸縮性的刻畫在與伸縮速率(多久達到目标伸縮數)、伸縮成本(ROI曲線)、伸縮限制(伸縮上限)三個方面。

  • 無狀态應用伸縮:無腦複制(注意路由,避免熱點(一緻性哈希空間)等問題)
  • 有狀态應用伸縮:
    • 共享磁盤模式:向無狀态應用轉移(将應用的狀态,剝離到對應資料存儲)
      • 結構化資料->共享資料庫
      • 非結構資料->共享緩存(Redis)、對象存儲(OSS)、搜尋引擎(ES)等
      • 減少檔案系統依賴(如CDN直接對接對象存儲)
    • Share Nothing模式:
      • CAP-優化可用性和分區性,弱化一緻性:如Kafka的消費級别調整
      • 叢集管理-優化選舉、仲裁、階段送出、副本、分片管理:腦裂問題(Lease機制)
      • 資源預配置(預熱):緩存預熱

由于存儲本身自帶狀态,是以伸縮性較弱。如分布式資料庫,往往都需要有計劃的,進行擴縮容(擴縮容、切換計劃、精衛同步等)。

但由于Redis有一緻性哈希空間的分片方案,是以Redis是具備伸縮性的。不過,需要進行合理的槽點配置設定(避免請求不均->熱點。注意,槽點變動帶來的事件風暴,控制風暴大小(保留安全量,确定IO門檻值等))

  • 伸縮前:容量計算&規劃、動态感覺->擴縮容(參照K8s)
  • 伸縮中:路由規則。合理&有效的路由規則
  • 伸縮後:各個節點負載的檢測。尤其是熱點資料問題

擴充!=伸縮。伸縮是運作時品質屬性

c.流程(思路)

場景:秒殺&搶購->熱點業務、熱點資料

思路:微服務伸縮->網絡引流、系統資源、基礎設施

4.安全性

a.架構

  • 實體安全:
    • 通路控制
    • 入侵檢測
    • 人員安全
  • 資料安全
    • 通路權限:
      • 責任分層
      • 最小特權
    • 資料較密:
      • 對稱加密
      • 非對稱加密:無需反向解析(如密碼)(哈希->彩虹表->加鹽)
      • 數字簽名:通過哈希擷取
    • 資料保護:
      • 資料邏輯保護(Mysql部分有所涉及)
      • 資料高可用
  • 通信安全
    • 網絡攻擊:
      • DDoS拒絕服務攻擊:驗證所占用資源(SYN Flood -> SYN Cookie回發)、提前阻止(Nginx的OpenResty,進行解析,配合威脅庫,進行阻攔)、WAF
      • HTTP劫持:(營運商劫持。加料)(工信部投訴、轉HTTPS)
      • DNS劫持:
      • 重播攻擊:随機數、時間戳、通信流水号、一次性密碼機制(修改密碼)
      • ARP位址解析欺騙(類比DNS劫持):
    • 網絡防禦:
      • WAF應用防火牆
      • IDS/IPS入侵檢測和防禦
      • VPN/IPSEC安全通道加密(集團)
      • PGP郵件加密
      • TLS HTTP隧道加密
  • 身份安全
    • Authentication認證
      • 目錄管理
      • 使用者認證
    • Authorization授權
      • RBAC(基于角色的通路控制。還有其他通路控制方式,《系統架構設計師》有提及)
      • OAuth第三方認證
    • Audit審計
      • 審計管理控制
      • 審計技術控制
  • 軟體安全
    • 作業系統安全:
      • 病毒
      • 蠕蟲
      • 特洛伊木馬
      • 零日攻擊(即黑客的0day攻擊)
      • 更新檔(參考之前騰訊玄武工作室發現的fastJson漏、或者烏雲網的一些case)
    • 資料庫安全:
      • SQL注入
      • 推理攻擊(對線上教育網站使用者的手機号猜測,應該算是推理攻擊的一種)
    • Web應用安全:
      • XSS跨站點腳本攻擊:嚴格區分用書送出的資料&網頁代碼(編碼&過濾)
      • PS:有關安全這部分,可以參考《系統架構設計師》安全部分(有涉及多個安全協定)。還可以參考之前黑客相關的資料

b.解決方案:

  • SQL注入預防:
  • XSS跨站點攻擊防治:
  • 加密:
  • 簽名:
  • WAF應用防火牆:
  • RBAC通路控制
  • PKI基礎架構
  • .etc

c.流程:

安全基本原則CIA:

  • 機密性Confidentiality
  • 完整性Integrity
  • 可用性Availability

安全評估方法:

  • 安全測試:
    • SAST靜态測試:靜态源碼掃描
    • IAST互動式測試:在業務流量中把參數替換成攻擊向量,然後發送給被測伺服器,通過伺服器的回報對測試結果進行判斷
    • 安全掃描:對系統/應用進行安全漏洞(已有)掃描
  • 威脅模型:
    • 攻擊樹分析:用樹型結構來表示系統面臨的攻擊,其中根節點代表被攻擊的目标,葉節點表示達成攻擊目标的方法。
    • DREAD風險評估:漏洞等級評估,穩定性較差
  • 滲透模型:
    • 紅藍對抗:
    • 白帽黑帽:

安全架構:

  • ITIL:
  • 自适應安全
  • 網絡韌性:
網絡韌性,在數學的簡單定義是,要使一個網絡分崩離析、喪失原有功能,需要被除掉的節點數占節點總數的比例。

AiR-ViBeR: Exfiltrating Data from Air-Gapped Computers via Covert Surface ViBrAtIoNs

Mordechai Guri教授提出了許多諸如此類的實體安全漏洞問題。

ATT&CK向安全白銀時代進軍:統一語言,重裝上陣【open-ata】

自身對黑客行為的了解:滲透-提權-後門...

ATT&CK

5.可擴充性

方法論:

架構擴充立方體:X軸:水準複制(無腦複制;可用性);Y軸:功能拆分(分割責任、功能、資料;隔離;與領域劃分相關);Z軸:特征分割(對業務透明;提供諸如優先級、就近等服務)

  • 應用:
    • X軸:水準複制(無狀态應用、狀态剝離(如Session);涉及性能規劃、彈性擴縮容等);
    • Y軸:服務拆分(參考微服務拆分。個人了解DDD+業務主鍊路;資源疊代配置設定;服務隔離)
    • Z軸:客戶分割(地域等;加速查詢等)
  • 資料:
    • X軸:水準複制(SQL CDC:Change Data Capture,如canal、精衛等);
    • Y軸:庫表拆分(這裡的表拆分,不是同一功能的邏輯表拆分為多個實體表,具體拆分可以參考微服務拆分);
    • Z軸:分庫分表(同一個邏輯庫表,拆分出多個實體庫表。往往路由規則采用某字段進行哈希)

      架構擴充立方體的不同次元,往往是共存的,即套娃

組織擴充性:溝通鍊路計算、六個披薩理論、

個人了解,組織擴充性提高了溝通效率,進而提高了内聚主題(團隊目标等)下,團隊思考的有效連接配接,進而迸發出許多創意。可能這也是spotify為什麼會成功。

流程擴充性:CMMI軟體成熟度模型

個人了解,CMMI軟體成熟度模型,實質一種精細化的過程。這也是我們業務的發展過程。

  1. 初始-拍腦袋
  2. 管理-方法論
  3. 定性-流程化、制度化
  4. 定量-SMART原則
  5. 自動-資訊同步&自我優化

百度百科:

CMMI共有5個級别,代表軟體團隊能力成熟度的5個等級,數字越大,成熟度越高,高成熟度等級表示有比較強的軟體綜合開發能力。

CMMI一級,執行級。在執行級水準上,軟體組織對項目的目标與要做的努力很清晰,項目的目标可以實作。但是由于任務的完成帶有很大的偶然性,軟體組織無法保證在實施同類項目時仍然能夠完成任務。項目實施能否成功主要取決于實施人員。

CMMI二級,管理級。在管理級水準上,所有第一級的要求都已經達到,另外,軟體組織在項目實施上能夠遵守既定的計劃與流程,有資源準備,權責到人,對項目相關的實施人員進行了相應的教育訓練,對整個流程進行監測與控制,并聯合上級機關對項目與流程進行審查。二級水準的軟體組織對項目有一系列管理程式,避免了軟體組織完成任務的随機性,保證了軟體組織實施項目的成功率。

CMMl三級,明确級。在明确級水準上,所有第二級的要求都已經達到,另外,軟體組織能夠根據自身的特殊情況及自己的标準流程,将這套管理體系與流程予以制度化。這樣,軟體組織不僅能夠在同類項目上成功,也可以在其他項目上成功。科學管理成為軟體組織的一種文化,成為軟體組織的财富。

CMMI四級,量化級。在量化管理級水準上,所有第三級的要求都已經達到,另外,軟體組織的項目管理實作了數字化。通過數字化技術來實作流程的穩定性,實作管理的精度,降低項目實施在品質上的波動。

CMMI五級,優化級。在優化級水準上,所有第四級的要求都已經達到,另外,軟體組織能夠充分利用資訊資料,對軟體組織在項目實施的過程中可能出現的次品予以預防。能夠主動地改善流程,運用新技術,實作流程的優化。

解決方案:

架構擴充立方體:

  • X軸(水準複制):
    • 應用:無狀态、容器化、Serverless
    • 資料:多副本、讀寫分離、冷熱隔離。SQL CDC技術
  • Y軸(功能拆分):
      • 設計:服務拆分、界限上下文互動(DDD、主鍊路設計)
      • 運作:服務發現、服務治理、負載均衡、服務追蹤(參考Spring Cloud服務治理等)
  • Z軸(特征分割):
    • 應用:負載均衡
      • 用戶端Ribbon
      • 服務端Nginx
      • K8s Service
      • ESB:企業服務總線
      • API Gateway
      • 分布式多片架構(CA)
      • 分庫分表:用戶端(sharding-jdbc)、中間Proxy(Mycat、TDDL)、資料庫(Spanner)

思考

Q:除了狀态剝離外,有狀态應用如何進行擴充

A:功能拆分,以及特征分割(貌似Session的剝離也可以按照這個思路)

Q:除了狀态剝離外,有狀态應用如何進行水準複制?

三、流程

品質治理涉及的流程,可以參照集團的安全生産(如《安全生産指南》)。

品質流程

流程:

安全生産:

核心:可監控、可灰階、可復原

容量預估、【核心】、複盤、快速止血、

PS:不站在架構角度,而是站在編碼角度,可讀性是很重要的。

繼續閱讀