淺析基礎架構

爲什麼要做架構設計

  1. 大家都做,所以我也做。

  2. 所有的系統必須要有架構設計

  3. 公司要求,系統開發必須要有架構設計的流程

如果是以上的原因,就失去了做架構的意義,是爲了做架構而做架構,可能會浪費人力物力得不償失。那麼做架構的目的是什麼呢?

架構設計的主要目的是爲了解決軟件系統複雜度帶來的問題

系統複雜度的來源

  1. 高性能

    爲了提高性能又從兩個方面可以提升

    計算機內部複雜度的關鍵就是操作系統,操作系統和性能最相關的是進程和線程。人們發明出進程,一個進程對應一個任務,會佔用獨立的內存。多個進程之間爲了相互通信所以設計各種通信方式:管道、消息隊列、共享儲存等等。

    人們爲了解決單線程會阻塞用戶使用的問題所以發明了多線程,多進程多線程可以使性能更大的提升。

    在互聯網時代,有時用戶訪問量會急劇升高。例如 2017 年春節微信紅包收發紅包每秒達到 76 萬個。爲了解決這種問題,單機的性能提升是解決不了問題的,只能通過加大機器的數量來得到提升。

    通過集羣的方式提高性能,最常見的兩種方式是任務分配和任務分解。

    任務分配:任務分配是指每臺服務器都可以都處理完整的業務任務,由任務分配器分配任務。

    任務分解:任務分解是指把複雜的系統拆解成不同的小功能。即不同的業務服務器。

  1. 高可用

系統無中斷地執行其功能的能力,代表系統的可用性程度,是進行系統設計時的準則之一。-- 維基百科

硬件會出故障,軟件會出 bug 都會造成中斷現象。那麼如何提高無中斷就是提高高可用的方式。只能通過冗餘來提高高可用。一臺服務器不行就兩臺,兩臺不行就四臺。

由此看來,高性能和高可用都是通過多臺服務器來提高目的,那麼他們之間有什麼區別呢?高性能通過增加機器的目的是擴展提高性能,高可用是通過增加機器的目的冗餘處理單元。

其中高可用的複雜度的來源有兩種:計算高可用和存儲高可用

  1. 可擴展

軟件的開發在需求上線後也依然會有需求的變更,所以如果在需求變更的時候以很少的開發量或者不變的情況下去實現功能是最好的結果。那麼可擴展的複雜度在哪裏呢?

那麼如何提高系統的可擴展性呢?

  1. 低成本、安全、規模

基於上述原因,互聯網系統的架構安全目前並沒有太好的設計手段來實現,更多地是依靠運營商或者雲服務商強大的帶寬和流量清洗的能力,較少自己來設計和實現。

架構設計的原則

  1. 合適原則:一個優秀的架構都是結合企業的人力、成本、條件、業務的條件下做出的最佳的架構方案。資源整合併發揮最大的功效並且可以快速落地。

  2. 簡單原則:軟件領域的複雜在於結構複雜性和邏輯複雜性。所以在設計軟件架構的時候簡單的方案優於複雜的方案。

  3. 演化原則:軟件架構類似於大自然的產物,要一步一步演化,讓生物適應環境,逐步變得強大。

以上就是我對於基礎架構的初步理解。

本文章參考:《從 0 開始學架構》-- 李運華  鏈接:https://time.geekbang.org/column/article/6458

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/jxq29OAuTr-UaE5BTcsKWg