[軟體工程] 設計一個大系統應該遵循什麼步驟?有哪些要注意的地方?
「系統設計備忘錄(System Design Cheatsheet)」
https://goo.gl/FcuIqo
#SoftwareEngeineering #SystemDesign #Cheatsheet
常有「突然」當上小主管、或者被要求「帶 Team」的朋友問:「設計一個大系統,有沒有步驟可以遵循?」或者「設計大系統時,有沒有哪些一定要考量的地方?」您需要的是「軟體工程」相關的知識。可是軟體工程的書厚達上千頁,我們家的「慣老闆」(笑)要求我下週提個計畫給他耶!怎麼辦?有沒有速成的方法?今天介紹的網頁,可以稍稍解決您這部份的痛苦。
我簡單不負責任翻譯一下騙讚...不是,方便英文苦手的朋友參考好了 XD:
一、系統設計基本五步驟
1. 明訂系統目標(System Scope),並取得客戶同意。設計內容包含:
(1) 收集客戶使用案例(User Cases)/ 使用情境
(2) 明訂系統承載上限(網路流量、同時登入人數、記憶體限制...)
2. 系統概念設計(High Level Design)
(1) 一般會設計到包含哪些系統元件。
(2) 至於系統元件在此步驟就當成黑盒子,直到下一步才做細部設計。
3. 系統元件細部設計(Component Design)
(1) 特定軟體元件內部設計
(2) 供外部呼叫用的 API 設計
(3) 設計該包含哪些物件,並指定每個物件的功能。
(4) 資料庫架構設計
4. 了解瓶頸所在
(1) 根據「需求」與「架構」,預先猜測壓力最大的元件(如:CPU 速度、資料庫速度...)
(2) 如何修改架構、紓緩瓶頸,以求達到客戶需求,則交由下一步驟來做。
5. 增刪系統架構與設計(Scaling)
(1) 是否應該增加硬體速度與規格(Vertical Scaling)?或者該多買幾台,平行運作(Horizontal Scaling)?
(2) 快取(Cache)是否足夠?
(3) 是否要「平衡負載(Load Balancing)」機制?
(4) 資料庫切分、抄寫、備份考量
(5) 是否應該用「多重軟體層(Multi-layers)」來分散負重、加快效能?
二、系統設計考量關鍵
1. 並行處理(Concurrency)
2. 網路(Networking)
3. 各軟體層職責分明(Clarify each Abstraction Layer)
4. 實際效能優劣(Real-world Performance)
5. 估算(Estimation)
6. 在線率(Availability,如:保證 99.99% 的在線時間)與可靠度
三、網頁系統設計考量關鍵
1. 資訊安全考量(Security)
2. 如何受益於全球各地的快取伺服器(CDN),將客戶等待時間降至最低
3. 全文檢索機制
4. 有沒有離線支援
5. 是否需要背景執行的程式(Web Worker)
6. 後台語言的選用(Server Side Rendering,如:PHP?ASP.NET?)
7. 非同步載入(在你不用網頁資源時,偷偷預先載入待會可能用得上的東西)
8. 如何最小化網路負載
9. 開發工具選用
10. 是否針對聽障、視障人士,提供友善存取網頁內容的方法(Accessibility)
11. 是否提供多國語系(Internationalization)?
12. 是否在不同寬度的螢幕(電腦、平板、手機),提供不同的版型,以便舒適閱讀(響應式設計,Responsive design)?
13. 是否能相容於不同的瀏覽器(IE、Firefox、Chrome、Safari、Opera...)
四、網頁前台架構開發相關元素
1. 原始碼(Code)本身
2. 文件(Documentation)
3. 測試機制的設計(Testing)
4. 開發流程(Process)注意事項
(1) 版本控制(如:使用 Git 工具)
(2) 元件相依管理(如:npm, Bundler, Bower)
(3) 自動化建構工具(如:Grunt/Gulp)
(4) 系統建置與導入流程(如:Docker)
(5) 持續整合工具(如:Travis CI, Jenkins)
(喘...)哈哈!有不少名詞礙於篇幅限制,我沒在這裡解釋得很清楚。如果您有什麼問題,不用客氣留言在下面給我喔!今天的分享希望各位喜歡,也祝福大家有個美好的週末!還請大家多多按讚鼓勵,或者分享給您臉書上的好友喔!
travis ci 在 軟體開發學習資訊分享 Facebook 八卦
--課程已於 2020 年 1 月更新--
如果你厭倦了學習如何部署 Web 應用程式,這是你的課程。
Docker 從頭開始學習!
在這門課程中,你將從絕對的基本知識中學習 Docker,從學習諸如”什麼是容器?”這樣的基本問題的答案開始 和”集裝箱是如何運作的?” . 從最開始的幾次演講開始,我們將深入研究集裝箱的內部運作,這樣你就可以核心理解它們是如何被實現的。 一旦你瞭解了什麼是容器,你就會學習如何使用基本的 Docker CLI 命令來處理它們。 在這之後,你將應用你對 Docker CLI 的新發現的掌握,來建構自己的自定義映像檔,有效地’Dockerizing’ 你自己的個人應用程式。
Ci + CD 管線
當然,如果沒有對持續整合和持續部署模式的全面理解,Docker 上的課程就不會完整。 你將學習如何使用 Github,Travis CI 和 Amazon Web Services 來實現一個完整的 CI + CD 工作流程,建立一個每次向 Github 推送最新更改時自動部署程式碼的管線(pipeline)!
多容器在 AWS 上的部署!
在建構一個部署管道之後,你將在 Amazon 網路服務上應用它來管理單個容器和多容器部署。 你將使用 Node、 React、 Redis 和 Postgres 建構一個多容器應用程式,看看容器在執行中的神奇力量(注意: 本課程中的所有 Javascript 程式碼都是可選的,如果不想編寫 JS,則提供完整的原始碼)。
Kubernetes!
最後,你將處理 Kubernetes,這是一個用於管理多個不同執行容器的複雜應用程式的生產級系統。 你將學習建構 Kubernetes 叢集的正確方法——這門課程沒有那些令人討厭的”不要在生產環境中這樣做”的評論! 你將首先在本地機器上建構一個 Kubernetes 叢集,然後最終將其移植到雲端提供程式。 你甚至可以學習如何在 Kubernetes 上設定 HTTPS,這可比聽起來難多了!
https://softnshare.com/docker-and-kubernetes-the-complete-guide/
travis ci 在 軟體開發學習資訊分享 Facebook 八卦
--課程已於 2020 年 6 月更新--
由 Udemy 熱門講師 Stephen Grider ( http://bit.ly/2wKp73k ) 主講
這是你夢想中學習如何部署任何網頁應用程式的終極課程。
Kubernetes 是 Dev Ops 世界中最新的技術,並且戲劇性地改變了 Web 應用程式的建立和部署流程。
Docker是一種允許應用程式執行在稱為容器結構中的技術,而 Kubernetes 允許許多不同的容器進行協調執行。
從這 21 小時的課程,你會學到
✅從零開始學習 Docker,不需要以前的經驗
✅掌握 Docker CLI 來檢查和除錯執行中的容器
✅使用 Github,Travis CI 和 AWS 一起從頭開始建構 CI + CD 管道(pipeline)
✅透過開發一個複雜的應用程式來理解 Kubernetes 的用途和理論
✅當程式碼被推送到 Github 時自動部署它
https://softnshare.com/docker-and-kubernetes-the-complete-…/
travis ci 在 Travis CI - Open source CI/CD Tool | GitHub Integration 的八卦
... <看更多>