2022年6月9日 星期四

點亮DevOps的技能樹



點亮DevOps的技能樹

文:何孟翰 恆逸教育訓練中心資深講師

到底什麼是”DevOps”`?



這個字並不是一兩句話可以解釋得清楚,然而依照維基百科,我們大概可以理解DevOps的大意, 就是讓「開發人員」和「軟體維運人員」之間進行深度的溝通整合,進而達到更快捷的交付, 更頻繁的發行與提供更可靠的服務,也就是說藉著原本工作上種種的改變與強化,能夠讓DevOps的效力,大於原本單獨的Development加上Operations。

要作如此的深度整合,可以想見軟體開發人員和IT維運人員都必須在目前的技能之外再增加一些技能來達成DevOps所想要達到的目標, 例如:

一、Linux作業系統的理解與腳本語言的熟練

在維運時對作業系統還有自動化的腳本必須要有相當的理解, 大部份的雲端平台和企業內部的叢集大多都是以Linux為基礎, 而雲端許多的組態管理工具例如Puppet、Ansible中工作的節點也都以Linux最為原生與直覺。 

而在語言的選擇上,依照其工作堆疊而有所不同, Ansible以Python開發最為直覺, Puppet是由Ruby所撰寫的,Chef早由Ruby和Erlang所開發的,只有Jenkins是由Java與相關工具所完成,因此從DevOps維運的角度,要能夠落地實作,在組態工具的搭配上至少有一個語言能夠精通是必須的。

二、DevOps的工具

好的工具也能夠加速企業內部導入DevOps, 而由於DevOps的範疇牽涉到開發、測試、部署與監控這些階段,因此工具的使用上也牽涉許多不同用途的軟體,例如:

✅原始碼管理的工具如:git,p4,subversion(SVN)等等

組態管理工具如:chef,Ansible,puppet等等

持續整合工具如:Circle CI,Jenkins,Rational RTC等等

單元測試工具如: junit,xunit,testNG,Selenium,mocha,chai等等

壓力測試工具如: jmeter,gatling等等

持續性的監控如:Elastic系列的Elastic Search Logstash,Kibana等等

三、持續性整合與持續性交付

在一個良好的系統框架下,當開發者提交了程式碼,一系列相關的動作就會自動進行。實務上專案在組態與建構時可以搭配像是gradle/maven或者ivy之類的專案管理相依性工具,以進行自動化的相依性管理,編譯與打包,單元測試與整合測試,同時搭配如Sonarqube之類的程式碼品質偵測,與其它的弱點掃描工具,進行程式碼品質的管理, 更進而部署到測試環境中,再藉由使用者接受度測試的結果,進行持續性的交付,最後再經由持續性的部署部署到整合性的環境之中。

四、基礎設施即代碼(Infrastructure As A Code)

是一種維運的人員能夠透過程式,自動化的建構IT環境的架構,,它能夠減少人為的瑣碎行為,也同樣的減少手動造成的錯誤,所以經由套用不同的環境,軟體系統能夠準確無誤的在開發,測試與執行環境上進行部署。

許多著名的框架都能實現這種基礎設施即代碼的實作,像Puppet,Chef,Ansible, Salt Stack和OpenShift都有著相同或類似的效果。

因此在一個導入DevOps的組織中,SRE(Site Reliability Engineer)網站可靠度工程師就變得很必要,網站可靠度工程師在意的是網站在擴展(scale)時的效能與可靠度,通常效能指標, 不限但包含以下:

1. 併發性Concurrency

2. 回應性Response

3. 吞吐量Throughput

4. 延遲性Latency

因此除了網站邏輯的正確性, 對於像回應, 延遲與吞吐量, 都可以用像是JMeter或者是Gatling這種壓力測試的工具進行測試,JMeter是Apache的開源測試軟體, 它允許開發者用圖形化的介面來進行測試腳本的編寫,而Gatling也富盛名,它是用Scala語言作為基底,測試的內容腳本直接就是Scala程式,所以更容易實現一些複雜繁鎖的測試步驟,在壓力測試的同時,也會同時作作效能分析或最佳化,進而進行一系列的效能監控與測試再加上應用程式的重構,因此像是spring boot的actuator可以作為網站狀態的一個指標,再搭配JMX的監控即可以對虛擬環境作完整的掌握,此時再加上效能監控的開源軟體prometheus與儀表呈現的grafana, 就可以對多台的伺服器的運作情形有更通盤的理解。

五、復原性工程

在DevOps的實踐中會需要考慮到網站系統的復原性,也就是應用程式或者系統在功能的改變或者被打亂之前,之中,之後的調適性, 也就是說這個系統在預期和非預期的條件下,能夠維持需要的運作, 也可以簡稱為復原性工程(Resilience Engineer), 例如像是Java的框架中會有Resilience4J,或者是對應到,NET的框架下的Polly函式庫, 它們能夠妥善的處理重試,逾時,限制速度等等的行為。

六、DevOps的概念與軟實力

雖然說DevOps字面上是開發跟維運, 但真正在實踐DevOps的組織其實需要的角色遠比開發者與IT來得多更多, 例如DevOps的實踐中也會需要看板(Kanban)的專案管理, 這是一個由豐田汽車製造所提出的, 藉由視覺化的工作流程, 讓工作跟進度能夠一目了然, 更重要的是它能夠定義WIP(Work In Progress), 也就是時間能夠工作的最大數量, 避免在專注的許多議題上太過分散,同時DevOps也會依循著敏捷式(agile)的專案管理與Lean的精實法則, 在每一次的sprint中完成一個一個重要的工作, 再搭配原始程式碼管理系統如git作軟體發行的規畫。


結語:

自從雲端,物聯網之後Devops似乎是目前最熱門的流行語, 然而有人說DevOps只是一個標題, 或者是公司內部某個獨立的團隊,又或者僅僅只是某個工具,這些都不是正確的。

同時DevOps也不止是一種文化,也不只是單純自動化而已, 如果以這些角度看待DevOps都只是瞎子摸象般的不能全面看待。

DevOps應該更像是一種融爐,它結合了專案管理,軟體開發,系統維運,測試監控,進而設定一個串流式,沒有浪費的價值傳遞工廠,這個工廠可以用快速且可預期的周期, 來傳遞商業價值。因此在這波DevOps的浪潮中,不管你是偏Dev還是Ops的角色, 除了在自己的技能更加專精之外, 或許可以往其它相關的技能作涉取,更能夠在這個DevOps的新手村中踏出自己的軌跡。

「DevOps Fundamental」的培訓,將在眾多的DevOps概念中闡釋DevOps的精神, 在8個模組中藉由各個面相說明DevOps的各種觀念。除了IT工程師,開發工程師之外如果是主管和經理想要加速企業內部流程進化都可以考慮參加。

當然對於單獨的議題有興趣的IT人員,我們也會在近期陸續加入Agile Service敏捷服務、DevSecOps、 DevOps在資安上的議題、CI/CD相關的主題Continuous Delivery Ecosystem、 Continuous Testing、甚至到Site Reliable Enginer,以及價值串流管理Value Stream Management開設單獨主題相關的課程。

(註:本文所提到的各軟體版權,分屬於各開發公司。)

👉👉學習推薦

【DOFD】DevOps Foundation 

【SREF】網站可靠度工程(SRE)基礎實務

【PMACP】PMI-ACP®敏捷專案管理師認證暨實務課程

 

0 意見:

張貼留言