iT邦幫忙

2023 iThome 鐵人賽

DAY 2
0
Software Development

軟體架構備忘錄系列 第 2

Day 2 基本概念 - 軟體架構目標 (知識點001~007)

  • 分享至 

  • xImage
  •  

在設計架構時,首先要清楚好的架構希望達成哪些目標。這些目標,是我們設計時希望達到的心中如果沒有時時記得這些目標,可能導致一開始就偏了方向。

好架構希望達到的目標包含:高效率、成本最佳化、資訊安全、自動化、合規性、高可靠、可擴展

高效率

描述

高效率是架構設計的其中一項目標,高效率的架構可以提升使用者的滿意度而帶來更多營收也可以使企業更快速的應對外在環境變化。

可能作法

  • 適當的工具:通過事先了解系統運作特性,選擇適當的工具。每一種工具都是為了特定情境所設計,選擇正確的工具,可以大幅增加系統效率。例如,如果已知系統需要即時統計目前網站產品銷售情況,在銷售量很大的情況下使用列式資料庫通常會比傳統關聯性資料庫更有效率。
  • 在合適的位置、時機進行計算:例如避免在使用者端或網站伺服器端進行大規模運算,因為瀏覽器通常可使用的系統資源較少,而網站伺服器需要服務大量的用戶。轉而將大規模運算透過Stream Data Pipeline進行分析,或是Batch程式批次進行處理。
  • 水平自動伸縮:通過自動按照系統負載而擴增伺服器數量,可容納更多的系統資源需求。
  • 優化計算邏輯:通過了解計算需求而設計適合的演算法,可大幅減少冗餘計算,而提升系統運作效率
  • 緩存計算結果:通過緩存耗時或需要通過網路下載的計算結果。若在伺服器端或緩存伺服器即可取得結果,可避免重複地計算與冗餘的網路需求。

成本最佳化

描述

在進行架構設計時,成本是極重要的考慮因素。
通過事先列出各項屬性、SLA的預計水準,並與相關單位確認優先順序。以確保每分錢都花在刀口上。
通常越高等級的服務,就需要最高的成本。例如,雖然RTO越低越好,但是RTO越低往往需要越高的成本。因此需要仔細確認所需的服務等級並進行成本最佳化。

精確計算成本

由於成本性質差異,在計算成本時,分別資本支出與維護費用是較精確的做法。

  • Capital Expenditure (CapEx): 初次購賣設備、服務的費用、建置成本
  • Operating Expenditure (OpEx): 維護設備服務的費用、人力成本

其他優化成本方式

  • 使用雲端服務:通過使用雲端服務,並搭配以使用量計價的模式,是一種常見優化成本
    方式。
  • 水平自動伸縮:按照使用需求,動態配置系統資源,可減少冗餘配置
  • 監控資源使用情況,並優化資源配置

資訊安全

描述

由於現今有許多惡意的外部或內部成員可能會對試圖突破資訊安全防護,藉此牟利。這通常會對組織造成極大危害。例如 營運資料、客戶資料外洩,都會對組織的聲譽及金錢造成極大損害。

為避免此情況發生,在設計架構初期,就需要考慮資訊安全因素。並且時時監控各風險情況。需考慮的安全因素包含深度防禦、零信任等重要措施。

在各項架構設計時,都需要時時考慮資訊安全,無論是伺服器管理、應用程式設計、網路規劃、資料儲存時都需要考慮資訊安全的議題,這部分會在後面文章時,依續進行說明。


自動化

描述

盡可能的在架構設計中進行自動化有許多優點,包含可以減少人工錯誤發生可能性、將人力配置於更關鍵的事物、更快速應對外部與內部變化、大規模部屬與管理環境。

可能方式

  • 自動化打包、測試與部屬:通過自動化的CICD機制,讓每次程式送交後,由系統自動進行相關打包、測試與部屬。減少重複性的測試、並快速部屬至多台伺服器。
  • 自動化監控、報警:在各台伺服器中自動蒐集Log,並統一送到Log分析平台。通過事先定義異常態樣,在異常發生時自動通知相關人員。
  • 自動化資料備份:定期備份檔案伺服器及資料庫的檔案。資料庫的資料也通過設定自動抄寫到其他的備援資料庫。
  • 自動化排除錯誤:Docker或K8S等技術可以自動偵測容器停止運行,並重新啟動容器以復原服務。Load balance伺服器也可設定自動偵測錯誤頻率,當判斷後方伺服器故障時,停止連線該伺服器。

合規性

描述

根據組織所在的地區與產業,通常會有不同的合規性要求。違反合規性要求通常會導致罰款並對組織聲譽造成影響。在設計架構時,需要仔細確認須遵守的合規性要求範圍。避免在架構設計後,因不符合規性要求,需要額外時間與成本進行變更。

可能的合規性要求包含:歐盟的GDPR個資要求,金融與醫療產業通常也會有專門的合規性要求,另外多個地區有規定資料可存放的區域範圍。


高可靠

描述

一個高可靠的系統,可以讓客戶與內部成員信任。這有助於提升信譽並帶來更多收益。不過要達到高可靠的系統,通常也有更多成本需求,例如冗餘配置、備份資料。

可能作法

  • 自動錯誤偵測與排除:通過自動偵測錯誤,並進行相關處理,以提高服務可靠度
  • 設計易於水平擴展的架構:易於水平擴展的架構,可在錯誤出現時,快速建立新的服務實體。
  • 設計高錯誤容忍的架構:架構設計時,應考慮各元件錯誤時的替代處理方案。在錯誤時減少對服務的衝擊。
  • 冗餘架構:事先規劃冗餘的伺服器或服務實體,以在錯誤時,可直接連線到冗餘的服務實體。
  • 規劃災難還原策略:通過規劃災難處理的策略,可事先研擬各情況的做法。並通過定期演練,以提升人員的熟悉度,並確保該策略是可行的。

可擴展

描述

可擴展的軟體與系統架構,有助於保留未來擴增功能的彈性。避免未來因需求調整而進行變更時,系統架構需進行大幅度調整。

常見作法

  • 考慮未來變化可能:在設計階段預先思考未來可能的功能發展,包括功能的新增、變更或刪除,以保留系統的彈性。這可以通過良好的需求分析和設計規劃來實現。
  • 模組化設計和低耦合度:將系統拆分為獨立的模組,並確保模組之間的耦合度盡可能低。這樣可以使得新增或替換功能時只需調整相應的模組,而不需對整個系統進行大幅度調整。此外,提供標準化的介面或API,以便未來在相同的介面下實作新功能,進一步提升系統的可擴展性。

上一篇
Day 1 序章
下一篇
Day 3 基本概念 - 軟體架構屬性 (知識點008~013)
系列文
軟體架構備忘錄30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言