在常常校長兼撞鐘的微型軟體服務企業,要營運一個大型網路服務是不是就不可能呢? 答案雖然是否定的,但要能夠做到,也要懂得如何策略運用。這些策略在過去的文章中都有提到, 但是這裡特別針對讓小團隊可以管理大系統的前提下,再重新來複習一下。
小團隊的主要限制就是成員數量跟技能,成員數量少就表示單位時間內可以完成的事情相對就少; 技能則會限制能夠完成的事情種類。所以,要能夠減輕或者避免這些限制造成營運規模過小的問題, 如何能夠在不增加團隊規模的前提下,提升團隊的產出正是這些策略的目的。 本文提出的策略有:「槓桿化」、「規格化」以及「自動化」。
槓桿化(Leverage)
「槓桿化」,簡單地說,就是運用別人的時間跟技能,也就是外包(outsourcing)。 外包除了常見的將軟體開發之外,其實外包的範圍很廣,舉凡您想得到的, 基本上都有公司公司或個人提供。本文關注如何管理大系統,因此只針對 DevOps 範圍內的外包說明。 不管是主機代管,或者利用雲端服務而不是自行建置,都算是某種外包的形式,因為它們都使用了別人的時間跟技能。 外包可說是越來越成為必要,由於全球化的結果,範圍也不再有地域上的限制。 這個策略也是山姆鍋花不少時間說明微型企業為什麼要善用雲端服務的原因。
規格化(Standardize)
所謂熟能生巧,做過很多次的事情,效率自然比只做過一次的好。雖然如此,但學過演算法的人應該知道, 演算法本身對執行效率的影響大於程式碼優化(最佳化)。同樣的道理,需要重複做的事情, 有標準作業程序(SOP)雖然比較有效率,但也要確保訂定的 SOP 本身已經採用最有效率的方式進行, 不然只會造成不必要的浪費。不管如何,標準作業程序是重複性作業提高效率有效做法, 而標準作業程序就是一種「規格化」。通常「規格化」需要將流程或者步驟以文件的形式存在, 讓團隊可以共享。在 DevOps 的團隊裡則是更進一步,把如何安裝作業系統、設定軟體等等作業寫成可以自動化的腳本, 一方面作為文件用途外,一方面也可以被自動執行。
自動化(Automate)
雖然可以運用外包來增加產出,但這通常是要付出資金的。在不外包的前提下, 「自動化」可說是最有效來增加產出的戰略。以例子說明:假設平均手動裝一台主機需要 1 小時, 那麼 100 台主機就是 100 小時,但如果能夠將這些操作自動化,可能只需要 2 小時。在軟體開發流程上, 採用自動建構工具:像是 Gradle;持續整合軟體:像是 Jenkins; 系統管理工具:像是 Puppet, 都是實務上基於自動化這個戰略衍生出來的。
結語
「規格化」與「自動化」息息相關,不能規格化的流程自然不能寄望能夠自動化,但不能自動化的程序, 仍舊要思考有沒有規格化的必要。只要是需要重複執行的作業,就要考慮是否可以「規格化」、「自動化」 或者「槓桿化」。