架構設計方法初探

點擊上方「

芋道源碼

」,選擇「置頂公眾號」

技術文章第一時間送達!

源碼精品專欄

 

  • 精盡 Dubbo 原理與源碼 69 篇

  • 精盡 Netty 原理與源碼

     61 篇

  • 中文詳細注釋的開源項目

  • Java 並發源碼合集

  • RocketMQ 源碼合集

  • Sharding-JDBC 源碼解析合集

  • Spring MVC 和 Security 源碼合集

  • MyCAT 源碼解析合集

來源: https://www.jianshu.com/p/e30327c9baf3

最近學習了阿里資深技術專家李運華的架構設計教程,頗有收穫,總結一下。

1 基本概念和目的

架構設計的基本概念和目的

架構設計的目的是為了解決系統複雜度帶來的問題,並不是要面面俱到,不需要每個架構都具備高性能、高可用、高擴展等特點,而是要識別出實際業務實際情況的複雜點,然後有有

針對性地解決問題

,即:

有的放矢,而不是貪大求全

。 在實際情況中,不一定每個系統都要做架構設計,需要結合實際情況。有時候最簡單的設計開發效率反而是最高的,架構設計畢竟要投入時間和人力,這部分投入如果用來儘早編碼,項目也許會更快。

2 架構設計複雜度來源

高性能

高性能

高可用

高可用

可擴展性

可擴展性

低成本、安全、規模

低成本、安全、規模

3 架構設計三原則

架構設計三原則

合適原則

GFS為何在Google誕生,而不是在Microsoft誕生,其中Google有那麼龐大的數據是一個主要因素,而不是因為Google的工程師比Microsoft的工程師更加聰明。

真正優秀的架構都是企業

在當前人力、條件、業務等各方面約束條件下設計出來的

,能夠合理地將資源整合一起並發揮出最大功效,並且能迅速落地。這也是很多BAT出來的架構師到了小公司或者創業團隊反而做不出成績的原因,因為沒有大公司的平台、資源、積累,只是生搬硬套大公司的做法,失敗的效率非常高。

簡單原則

軟體領域的複雜性

無論是結構的複雜性還是邏輯的複雜性,都會存在各種問題,所以架構設計時如果簡單方案和複雜的方案都可以滿足需求,最好選擇簡單的方案。《UNIX編程藝術》總結的KISS(Keep It Simple,Stupid!)原則一樣適用於架構設計。

演化原則

對於軟體系統來說,變化才是主題。軟體架構需要根據業務的發展而不斷變化。 如果沒有把握「

軟體架構需要根據業務發展不斷變化

」這個本質,在做架構設計的時候就很容易陷入一個誤區:試圖一步到位設計一個軟體架構,期望不管業務如何變化,架構都穩如磐石。

為了實現這樣的目標,要麼照搬業界大公司公開發表的方案;要麼投入龐大的資源和時間來做各種各樣的預測、分析、設計。無論哪種做法,後果都很明顯:投入巨大,落地遙遙無期。更讓人沮喪的是,就算跌跌撞撞拼死拼活終於落地,卻發現很多預測和分析都是不靠譜的。

實踐中,架構師要提醒自己不要貪大求全,遵循演化優於一步到位的原則,因為業務的發展和變化總是很快的,

無論多牛的團隊,都不可能完美預測所有的業務發展和變化路徑。

實踐中可以參考如下建議:

  • 首先,設計出來的架構要

    滿足當時的業務需要

  • 其次,架構要不斷地在實際應用過程中迭代,保留優秀的設計,修復有缺陷的設計,改正錯誤的設計,去掉無用的設計,使得架構逐漸完善。

  • 第三,當業務發生變化時,架構要擴展、重構,甚至重寫;代碼也許會重寫,但有價值的經驗、教訓、邏輯、設計等卻可以在新架構中延續。

4 架構設計的流程

架構設計的流程

參考資料:

從0開始學架構——李運華

架構藍圖--軟體架構 "4+1" 視圖模型



如果你對 Dubbo / Netty 等等源碼與原理感興趣,歡迎加入我的知識星球一起交流。

長按下方二維碼噢

目前在知識星球更新了《

Dubbo 源碼解析

》目錄

如下:01. 調試環境搭建02. 項目結構一覽03. 配置 Configuration04. 核心流程一覽

05. 拓展機制 SPI

06. 線程池

07. 服務暴露 Export

08. 服務引用 Refer

09. 註冊中心 Registry

10. 動態編譯 Compile

11. 動態代理 Proxy

12. 服務調用 Invoke

13. 調用特性 

14. 過濾器 Filter

15. NIO 伺服器

16. P2P 伺服器

17. HTTP 伺服器

18. 序列化 Serialization

19. 集群容錯 Cluster

20. 優雅停機

21. 日誌適配

22. 狀態檢查

23. 監控中心 Monitor

24. 管理中心 Admin

25. 運維命令 QOS

26. 鏈路追蹤 Tracing

... 一共 

69+

 篇

目前在知識星球更新了《

Netty 源碼解析

》目錄

如下:01. 調試環境搭建02. NIO 基礎03. Netty 簡介04. 啟動 Bootstrap

05. 事件輪詢 EventLoop

06. 通道管道 ChannelPipeline

07. 通道 Channel

08. 位元組緩衝區 ByteBuf

09. 通道處理器 ChannelHandler

10. 編解碼 Codec

11. 工具類 Util

... 

一共 

61+

 篇

目前在知識星球更新了《

資料庫實體設計

》目錄

如下:

01. 商品模塊02. 交易模塊03. 營銷模塊04. 

公用模塊

... 一共 

17+

 篇

源碼不易

↓↓↓

點贊

支持老艿艿

↓↓


推薦閱讀:

3個穴位按摩方法,幫你緩解頸椎疼痛
簡單瘦身操輕鬆應對多吃方法
正確處理負面情緒的五大方法

TAG:設計 | 架構 | 方法 | 架構設計 |