雲端部門技術開發列表紀錄

Spyua
spyua
Published in
13 min readSep 8, 2024

近期協助規劃部門關於開發Tech Share的清單列表。稍微Base On前台北主管部門的技能表擬定一版新的技能項目表,這邊做個簡易紀錄,以利後續在往後職涯參考。如果你也有在思考如何列部門後端讀書會技術事項,也可以做個考慮。

關於公司讀書會研討

個人經驗上要在公司帶技術分享讀書會實屬難事,因為某種程度關係於公司文化、組織文化、大主管給予團隊的認同度進階影響到同仁對組織認同度,最後就是同仁Mind Set。不過技術複製能力最好方式還是研討沒錯,以學習金字塔(如下圖)而言,討論與實作演練都歸於主動學習項目…所以如何要讓團隊動起來,是很吃經驗的。

我與好友們組了近五年的讀書會至今,歸納出幾個點技術研討可以持續的

  1. 需要有3位以上動力很強的,且有一定Sense的人作為核心
  2. 主題不能太單一,偶爾穿差一些非主題式的分享
  3. 分享時間具彈性,例如不一定每周都要,可以2周,突然懶一點可以改成3周,但重點就是要持續
  4. 有具體產出,例如共筆文件期間有紀錄更好

不過如果是公司上的讀書會要帶到融入文化,其實靠主Host絕對是不夠的,某種層面也會是希望有幾個核心且會帶氣氛的人選。另外則是讓讀書會技術分享的項目不要太鎖定在公司的Domain上。某種層面會讓成員有這是可以帶著走的能力感覺。

雲端開發四大類別分類

針對部門開發工程師職能做一個研討項目,從雲端技術的應用、程式開發的核心技能、系統架構的設計,到基礎設施的配置與運維,規劃大致分成以下四個類別項目

  • 雲端開發技能:關注雲端環境下的技術應用,強調系統擴展性、容錯性與彈性,包含分散式架構、緩存策略、消息隊列等技術。
  • 軟體技能:核心開發技能,從程式撰寫到測試、效能優化,確保代碼質量和可維護性,涵蓋SOLID原則、TDD等。
  • 軟體系統架構:重點在系統設計,確保擴展性與業務需求的一致性,使用微服務、事件驅動等設計模式。
  • Infra:雲端基礎設施配置與管理,包含負載均衡、容器化、DNS、反向代理等,確保應用的穩定性和可擴展性。

雲端開發技能

方向上基本上會以系統設計概念為主,基礎的雲操作能力建置有另一套Side Project,也是前主管SI Yang帶我們過一遍,後續會在找時間整理出來。以下是我列的清單項目,希望部門能夠在雲端技術上達到以下幾個不同層次的掌握

  1. 奠定基礎與核心理解: 透過像「雲端原生 12 要素」、「無狀態」、「快取策略」這些基礎課題,團隊成員可以深入了解雲端原生應用的設計原則與最佳實踐。這將有助於他們從根本上理解如何設計具備擴充性、穩定性與可維護性的應用,讓工程師們不只是「知道」,而是真正能夠「運用」。
  2. 解決分散式架構的實戰挑戰: 雲端技術的價值在於能夠解決現實中的複雜架構問題。像「佇列(Queue)訊息隊列系統」與「API Gateway 設計與實作」這些主題,讓團隊理解如何在分散式架構中進行服務間的通訊,處理高併發情境中的挑戰,並學習如何管理非同步操作,確保系統的高效與穩定運作。
  3. 提升系統的彈性與擴充性: 在雲端環境中,應用能否應對業務需求變化,系統的彈性與擴充性非常關鍵。透過「GCP Spanner」與「資料庫讀寫分離」這些課題的學習,開發人員能夠學習如何進行系統最佳化,尤其是應對大規模資料與多地區部署的挑戰,確保在業務高峰期間,系統仍能穩定運作。
  4. 掌握實戰操作與最佳實踐: 理論與實務並重的學習相當重要,因此安排了「快速上手GCP雲端元件-服務實作經驗萃取精華分享」這類實務課題,讓團隊能夠在雲端服務做出最佳選擇,並理解不同技術的優劣勢。另外,「彈性伸縮與自動擴展」的專題則讓團隊成員能夠掌握如何有效管理系統資源,提升效能並降低成本。

軟體技能開發

雲技能部分整理完後,接著是軟體技能開發,這邊會偏向Coding面的設計。這些項目涵蓋了從基礎的程式設計原則到進階的效能優化與系統架構設計,目的是讓團隊在軟體開發的各個層面上,都能夠具備應對現實挑戰的能力。項目如下

以下是我設計這些項目的幾個層次:

1. 建立扎實的程式設計基礎

在軟體開發中,基礎是每一位工程師必須具備的技能。「OO概念與SOLID原則」、「單元測試(Unit Test)」和「程式開發 Security」這些主題,是為了幫助團隊成員掌握面向物件程式設計的基本原則、設計模式以及如何撰寫安全且可維護的程式碼。這些基礎技能不僅提升程式的可讀性和可測試性,還確保了程式的安全性與可靠性。

2. 掌握系統效能與壓力測試

為了確保系統在面對大量使用者時仍然能夠保持穩定運作,效能測試與壓力測試是非常重要的部分。透過「效能測試與壓力測試」的學習,開發人員可以掌握如何使用工具(如JMeter、Gatling)進行效能測試,並了解系統在不同負載下的行為表現。這不僅能讓團隊提前發現系統潛在的效能瓶頸,還能確保在壓力下系統依然穩定。

3. 解決併發與多執行緒的挑戰

現代應用程式往往需要同時處理大量請求,因此「併發與多執行緒程式設計」是每位開發人員需要掌握的核心技能。通過學習「Java並發與多執行緒框架」和「錯誤處理與異常管理」,團隊成員可以理解如何編寫高效的併發程式,以及如何處理多執行緒中常見的問題,確保系統在高負載下仍能正確執行。

4. 深入理解系統架構與設計模式

隨著專案規模的增大,系統架構設計變得愈加重要。「設計模式(Design Patterns)」和「依賴注入與控制反轉(IoC)」這些主題,能幫助團隊成員在設計系統時,採用最佳的設計模式來提高程式的可擴充性與可維護性。同時,「物件導向程式設計(OOP)」的深入學習,讓工程師們能夠更加靈活地應用這些設計模式,創建更具彈性與模組化的系統。

5. 強化日誌管理與程式效能優化

在大型系統中,日誌是除錯與問題追蹤的重要工具。「日誌管理」這個主題幫助開發人員理解如何有效記錄與分析系統的運行狀況,並能在問題出現時迅速定位原因。此外,「程式效能優化」專題則讓團隊學習如何分析程式的瓶頸(如內存使用、CPU負載),並運用優化技術提升系統效能,讓應用程式在大規模運行時更加高效。

6. 提升程式的持續集成與自動化測試

現代軟體開發強調自動化與持續集成。「持續集成與持續交付(CI/CD)」的實作可以幫助團隊縮短開發週期,並透過自動化測試確保每個功能更新後的穩定性。這不僅能提高開發效率,也能減少在系統交付過程中因手動操作產生的風險。

7. 理解低層通訊與效能管理

在網路應用中,Socket通訊是基礎技術之一。「Socket原理探討」和「TCP/UDP協定」這些主題能幫助團隊成員理解應用程式如何與網路互動,並如何優化這些通訊以提升整體系統的效能。這部分的學習對於有高併發或實時通訊需求的系統來說尤其重要。

軟體架構開發

軟體架構開發列出較常見的關鍵設計架構,讓開發團隊不僅掌握架構設計的基本理論,還能夠在實際應用中靈活運用這些技術,解決複雜的業務需求與技術挑戰。學習這些技能將為團隊提供系統設計與開發上的全方位能力,從微服務的彈性設計到分散式系統中的一致性管理,這些技能都將成為未來系統架構設計的重要基礎。項目如下

以下是我設計這些項目的幾個層次:

1. 掌握微服務架構的核心原則

微服務架構是一種將大型系統拆解為小型獨立服務的設計模式,特別適合應對複雜且具規模的應用程式。學習微服務的設計原則能讓團隊掌握如何正確地劃分服務、有效管理服務間的通訊與資料一致性,並提升系統的擴充性與彈性。

2. 提升系統效能的CQRS架構

CQRS(命令查詢責任分離)架構能幫助團隊將命令與查詢操作分離,並針對不同的讀寫需求進行單獨優化。這種設計方式特別適合提升系統效能與可擴充性,尤其在高讀取需求的場景中表現尤為優秀。

3. 事件驅動架構應對高併發與非同步處理需求

事件驅動架構透過事件來驅動系統的操作,特別適合應用於需要高併發、非同步處理的系統。團隊學習後將能掌握如何設計一個高效能的異步系統,並處理事件傳遞過程中的容錯與失敗重試。

4. 強化系統穩定性與可維護性的整潔架構

整潔架構強調層次分離與職責單一,能夠顯著提升系統的可維護性與穩定性。透過學習整潔架構,團隊將能夠設計出低耦合且高擴充性的系統,並確保其在面對技術變遷時具備足夠的靈活性。

5. 領域驅動設計(DDD)處理複雜業務邏輯

領域驅動設計(DDD)是專注於業務需求與軟體模型相結合的設計方法,特別適合處理複雜的業務需求。團隊將學習如何將業務邏輯模組化,並應用聚合、值物件等技術,確保系統的彈性與可擴充性。

6. 分散式系統中的CAP定理應用

CAP定理描述了分散式系統中的一致性、可用性與分區容忍性之間的取捨。學習CAP定理能幫助團隊在設計分散式系統時,針對具體需求作出最佳選擇,並有效處理資料一致性與可用性之間的平衡。

系統基礎建設相關

這部分我就算外行…但還是列出一些項目,用意在提升團隊對網路安全、資料保護、系統效能優化等多方面的掌握能力。透過學習這些技術,團隊將能夠應對複雜的網路環境,並確保系統在高負載情況下依然穩定、可靠且具備高安全性。同時,備份與復原、認證與授權等技術能夠有效保護企業核心資料,防範潛在的安全威脅。以下是所列項目

以下是我設計這些項目的幾個層次:

1. 理解反向代理與負載平衡

反向代理與負載平衡是現代網路架構中的基礎技術,能夠有效地分配流量並提高系統的可用性。學習這兩項技術能幫助團隊管理流量、優化系統性能,並確保在高流量情況下保持系統的穩定性。

2. 掌握網路安全的核心技術

防火牆是確保系統安全的關鍵技術,透過學習防火牆設計與應用,團隊將能夠理解如何保護系統免受外部攻擊,並能夠正確配置入侵偵測與防禦系統,保障資料的安全性。

3. 理解DNS與CDN的運作與優化

DNS負責網域名稱解析,是網路應用中不可或缺的一環;而CDN則能加速靜態內容的傳輸,提升用戶體驗。掌握這兩項技術能夠幫助團隊在全球分散式系統中提升應用效能,並確保高可用性。

4. 監控與警報的實作

監控系統的運行狀況並及時發出警報,是維持系統穩定運行的關鍵。學習如何設置監控與警報系統,能夠幫助團隊提早發現問題,並快速反應以降低停機時間。

5. 資料備份與復原

資料備份與復原計畫是保護企業核心資料的最後一道防線。團隊將學習如何規劃與實施備份策略,並在發生災難時能夠快速復原,確保系統資料的完整性與持續運作。

6. 認證與授權機制

安全的身份認證與授權是保護系統與資料免於未經授權存取的重要技術。學習各種認證機制(如OAuth、JWT、SSO),以及角色與權限控制(RBAC, ABAC)的設計與實作,能夠幫助團隊建立一個安全且可靠的系統。

7. 服務發現與系統自動化擴展

在分散式系統中,服務發現機制能夠自動管理服務節點的增減與狀態變化。學習這項技術,團隊能夠更好地應對動態系統中的擴展與故障恢復挑戰,確保系統運行的自動化與彈性。

SideProject 實戰進入分享

上述項目列完後,與幾位同仁討論。感謝我同事Yeh Clarke提出一個還不錯的建議,就是由Side Project展開研討事項。Clarke整理如下,基本上就是由聊天室實作分四階段展開分享事項

1. 觀念與思維:微服務架構與雲端技術

這個階段著重於建立微服務的設計觀念,並使用CQRS、API Gateway等技術來確保系統在高併發場景下的穩定性與可擴展性。這部分強調系統的整體架構設計,為後續的實作與測試奠定堅實基礎。

2. 程式實作:設計與開發(實作類型)

程式實作階段是將觀念轉化為實際程式碼。這裡強調使用OO概念、SOLID原則和IoC(控制反轉)等技術,確保程式碼結構的清晰與可維護性。同時,透過版本控制和設計模式,開發過程中的一致性和效率得以提升。

3. 測試與錯誤處理實作:測試與錯誤處理(實作類型)

在這個階段,進行單元測試與壓力測試,確保系統在不同負載條件下的穩定性。處理Socket相關問題並實施效能優化,讓系統能高效地處理大量請求並降低錯誤率。

4. 性能優化與日誌管理:性能優化與日誌管理(除錯與維護類型)

這個階段專注於系統的性能優化與日誌管理,透過日誌系統來監控與分析運行狀況,及時解決問題。這不僅幫助發現效能瓶頸,還能解決雲端運維中常見的技術難題,確保系統的長期穩定運作。

5. 進階技術:進階技術應用

最後,進階技術階段則是導入更複雜的技術,例如GCP Spanner與NoSQL資料庫,解決大型系統中的資料存儲與分片問題,並探索更高效的分散式架構。這些技術的引入,能讓系統具備更強大的擴充能力與彈性。

將Side Project作為技術分享的基礎,其用意主要有以下幾個層面:

1. 實戰應用學習

Side Project能夠將理論轉化為實際操作,讓參與者通過解決具體問題來鞏固學到的技術。這不僅有助於加深對技術細節的理解,還能讓開發者更容易發現潛在的問題,並學會如何處理現實中可能遇到的挑戰。透過這樣的實作經驗,開發團隊能更自信地將所學應用於大型專案中。

2. 低風險環境中進行探索

Side Project的特點是靈活、無壓力,允許開發者在低風險的環境中進行新技術的嘗試與探索。這樣的設計讓團隊成員可以測試各種技術方案,找到最適合自己系統的工具和架構,從而在真實專案中更有效地應用這些技術。

3. 促進創新與團隊成長

透過Side Project,團隊可以自由發揮創意,嘗試一些平時在正式專案中可能不容易實現的想法。這不僅激發了技術上的創新,也能促進成員之間的交流與合作。Side Project提供了學習與討論的契機,讓團隊成員在合作中共同成長。

4. 技術分享的系統化引導

以Side Project為基礎的技術分享能夠系統化地引導團隊學習,讓每個技術主題都可以對應到專案的具體功能需求。這樣的技術分享不僅僅是理論的輸出,更是一個動手實踐與應用的過程,這能讓技術學習更加具體化、場景化。

5. 增強問題解決能力

Side Project能讓開發者親自面對完整專案中的多元問題,從設計、開發到測試與部署,這個過程讓他們學會如何分析問題、找到解決方案,並反覆迭代來提升專案品質。這些實踐經驗有助於增強開發者的問題解決能力,並能在實際工作中更快地應對挑戰。

--

--

Spyua
spyua
Editor for

期許自己永遠當一個理論與實務結合的實踐者,了解理論更要身體力行,再透過實踐來修正自己對理論的理解。