1. 程式人生 > >【架構】07-複雜度來源:低成本、安全、規模

【架構】07-複雜度來源:低成本、安全、規模

一、低成本

簡介

通常情況下,我們會通過增加機器來實現高效能和高可用,而低成本是需要我們減少機器來達到低成本的要求。這與高效能和高可用產生了天然的矛盾。所以一般情況下,低成本是架構設計中的附加約束條件,而不是主要目標。比如說老闆說這個專案最多隻能提供十臺伺服器,那麼設計架構時就要按照這個約束去做設計,如果最後無論如何也設計不出滿足這個約束的方案,那麼只能找老闆調整這個成本約束了。

如何實現低成本

低成本帶來的複雜度主要體現在:一般只有通過創新才能實現低成本,創新包括引進新技術,或者創造新技術。
實現低成本的幾個經典例子:

  • NoSQL(如MS、redis)是為了解決關係型資料庫無法應用高併發下的訪問壓力。
  • 全文搜尋引擎(ES)是為了解決關係型資料庫like搜尋低效的問題。
  • Hadoop是為了解決傳統檔案系統無法應對海量資料的計算和儲存問題。

無論是引進新技術還是創造新技術,都需是一件複雜的事情。引進新技術,需要花費時間去學習新技術,並與現有的技術相結合。創造新技術則需要去建立新的理念和技術,並且與現有的技術有很大的飛躍。

建立新技術比引進新技術有更高的複雜度,所以中小型公司一般都是通過引進新技術來實現低成本,而大公司更有可能通過創造新技術來達到實現低成本的目的。

二、安全

簡介

安全是一個龐大而複雜的領域,一旦出現安全問題,對於企業影響非常重大。我們時常可以聽到一些關係安全方面的事故,比如使用者資訊洩露等。正因為安全對於企業影響重大,所以在做架構時要多考慮安全方面的問題。

分類

從技術角度來看,可以分成二類,一是功能上的安全,二是架構上的安全。

功能上的安全

如常見的XSS攻擊、SQL注入、密碼破解等。本質上因為系統存在漏洞,才讓黑客有了可乘之機。黑客會利用系統的各種漏洞而侵入系統,從而進行破壞和盜取。

功能安全一般與架構無關,而與具體實現有關。很多構架已經內嵌了常見的安全功能,可以解決常見的安全問題。但是框架只能解決已知的安全問題,不能解決未知的安全問題,而且框架本身以可能存在漏洞。因此功能安全問題是一個不斷完善的過程。

架構上的安全

如果說功能上的安全是防小偷,那麼架構上的安全是防大盜。架構上出現安全問題比功能上出現安全問題會嚴重很多。在網際網路時代,對於部署在網際網路上的系統,理論上來說,在全球任何地方都可以發起攻擊。

傳統的架構主要是通過防火牆來實現架構的安全,防火牆的主要功能就是隔離網路,通過把網路分隔成不同區域,制定出不同的區域訪問策略來控制不同信任程度區域間傳送的資料流。常見的銀行網路架構圖:
在這裡插入圖片描述

防火牆雖然功能強大,但是效能一般,並且價格昂貴,一般只有銀行和企業應用使用,網際網路企業很少使用。因為網際網路應用一般具有高併發和海量訪問的特點,防火牆無法支撐。

網際網路應用的架構安全沒有什麼好的方案,更多地是依靠運營商或者雲服務商強大的頻寬和流量清洗的能力,較少自己去實現。

三、規模

很多企業級應用,沒有高效能的要求、也沒有高可用的要求,也不需要可擴充套件性,但我們卻經常說這些應用很複雜。關鍵在於這樣的系統功能特別多,邏輯非常複雜。特別是對於一些歷史時間長的系統,不斷往裡面加功能,後來的人由於不熟悉系統,不敢輕易的動系統,不理解業務,對於他們來說,完全就是一個黑盒系統,面對這樣一個看不懂、改不動、不敢改的系統,當然複雜度就高了。

規模帶來的複雜度主要體現在"量變產生質變"。當系統超過一定的閾值,複雜度會帶來質的改變。

常見的規模帶來的複雜度:

  • 功能越來越多,導致系統複雜度呈指數級上升。
    例如一個系統從3個功能增加到8個功能,它的複雜度會增加多少?就假定功能間是二二相關連的,通過下圖可以直觀的感受到:
    3個功能
    8個功能
    從中可知,增加功能,其複雜度並不是一個線性增加,而是一個指數級的增加。
  • 資料越來越多,其複雜度越來越高。
    系統資料越來越多,也會產生一個質變的過程。大資料就是在資料量不斷增加的背景下產生的。
    再比如關係型資料庫,以MySQL為例,MySQL單表的資料量推薦在5000萬左右,如果表的資料量在遠遠低與這個數值的話,很多問題都不用去考慮。但是如果表的資料來到了10億條的話,那麼就會產生一系列的問題。例如:增加索引慢,修改表結構慢、索引效能差、資料庫備份時間長…
    因此,如果資料量大的時候,我們會考慮分表,這個拆分又會帶來一些複雜度問題,例如:如何進行拆分、拆分後資料如何進行查詢…

四、小結

主要介紹了架構複雜度來源的三個方面:低成本、安全和規模。低成本給架構帶來的複雜度體現在引進新技術和創造新技術。介紹了功能性安全和架構上安全帶來的複雜度。以及在規模不斷變大,由"量變"產生"質變"帶來的複雜度。