Skip to main content

開發者的環境

朋友提出一個問題:

他是開發者 (Developer) ,跟 SRE / MIS 申請一台 VM 開發用,但公司的政策是:不被允許可以更改作業系統的設定,像是 /etc 底下的東西,這樣是否合理?


我的經驗與觀點是:開發人員必須要有一定的資源與彈性,做探索性的實驗。例如開發過程,需要自己裝一些工具、軟體、語言層級的套件。甚至開發的功能本身就有效能要求,那麼調整系統參數,像是 /etc、/proc 底下的東西、調整 database / cache 的設定,讓開發過程可以有彈性的探索與實驗,這個權限是 理所當然 的。

然後開發人員把這種實驗 (lab) 環境弄壞是正常的,沒弄壞代表你對系統沒有做過嘗試,只知道應用層自己的狀況,出了應用層以外的東西都不知道。這寫出來的東西,基本上是無法面對真實世界的,或者是巨大的浪費。

以前我在開發時,常會把 linux 搞壞、把 application server (tomcat, was, jboss) 搞壞、把 MySQL、mencached 搞壞、把 eclipse 、Apache 搞壞 ..... 所以我很常用 VMWare 模擬各種奇怪的環境,甚至是網路。過程會把上述的東西的 config 倒來倒去,import / export (這是我看軟體設計的關鍵檢核點),同一個版本裝很多個,試看不同的 config ,或者同時裝很多版本,然後餵同樣的 config ,或者資料。

這些都是探索。為了這些探索,我會想辦法找資源,公司如果有資源,會盡可能利用。如果資源不夠,那就要靠關係(跟 IT / MIS,當時不叫 SRE / DevOps)搞好關係,再不然,就是投資自己,買好一點的電腦,跑 VM ... 現在還留一些當時特定環境的 VM ...

我比較幸運,工作過程曾經有時間,或者說我自己就有這種探索的慾望,所以會做很多類似的實驗。


回到問題本身,開發人員申請的開發用的機器,能否自己改作業系統的設定?

我的回答:

當然可以,不然等上線後請 SRE / Ops 幫你找問題?

開發人員,要自己找出應用程式與系統的關係,甚至是效能的調教。以 Web App 來講,有些需要調教系統的 tcp 參數、openfile 常見的 fd ... 理想的狀況下,這些其實都是 developer 在上線前,必須 benchmark 出來,告訴 SRE / Ops 有哪一些系統參數要注意、 要調整、如何調、怎樣的情境要調整。同樣的,除了系統,應用層自己的參數,也就是一般 AP 層的 config,有哪一些可以調、怎麼調、為什麼調?有哪一些 #開關 可以開、可以關?( Feature Toggle 完全是個舊瓶新裝的東西)。

developer 下一棒不是 SRE / Ops,前述的東西 QA 也應該找出來。至少要確認 AP 層的 config 個別是做啥的。

Config 描述的是系統架構的介面,通常我看一個系統架構的第一步就是 config 掃過一輪,就大概知道有哪一些內外依賴,他們怎麼通訊的,搞清楚後才往下看資料結構、資料庫、應用框架。


不過回到現實,那些作業系統層級的參數幾乎都是 SRE / Ops 找出來的。

理想的應該是:

Developer 利用 container 的資源限制方式,在本機就可以量測相關的資訊,例如寫一個比對照片的批次程序,量測這個程式的效能。


原始資料