The Architect, The Source (電影: The Matrix 3)
好久沒寫 [設計案例] 這系列的文章了。其實我一直注意到台灣的部落格 & 社群分享,講 “How To” 的遠多過講 “Why” ,過於注重 coding 的技巧,卻忽略了問題的思考。能挑選正確的技術與架構來解決 business 上碰到的問題,這才是 software / system architect 的核心能力啊… 這次我碰到適合的案例,就來補給篇文章吧,我想從我如何思考這問題的 solution, 到如何實作出解決方案的過程,從頭到尾交待一次,讓有興趣在軟體業走進 system architect 這角色的讀者們,有個可以參考的案例!
說到個人用的 server, 我是相當有經驗的 XD,從當年念大學開始,就開始把 PC 開著放宿舍連回去或是給同學用,這習慣一直到現在都有,只是設備從自己用的 PC,換到準備專用的 PC SERVER,再到 NAS .. 不過自從開始認真研究 docker, 加上想用 docker 認真的執行一些服務後 (例如這個 BLOG 用的 wordpress), NAS 貧弱的效能問題就被凸顯出來,所以前幾個月才弄了台要被報廢的 NoteBook 當作 Linux Server.. NB 當 server 有很多好處,但是畢竟不是長久之計,而這台 NB 的 CPU 也不怎麼樣,將來也是個瓶頸,於是就一直有在物色其他適合的替代方案,反正沒有立即的需求,就騎驢找馬有空就看看,直到....
前面幾篇,研究完記憶體管理的部分之後,接著就是來看看運算的效能了。這部分的測試方式,我想了很久,最後決定拿出老本行: 平行處理的部分來當作 .NET core 跨平台第二回合的主題!
如果單純只是要將各種平台的 .NET Core 比出個高下,那感覺有點像是拿 benchmark 在賽豬公而已,這樣的話找現成的 C# benchmark 應該比較快。因此,我把測試的目的定義清楚,我想藉由這些測試的進行,一方面了解不同平台的差異,我也想透過測試更熟悉這些環境,還有試圖從測試的結果挖出背後運作原理的不同。所以,上一個記憶體管理的主題,已經達到目的了,不這樣測試我還真的不曉得 Linux 預設會壓縮(?) 為初始化的記憶體… 算是值回票價。
測試完 windows 家族的 .NET Core CLR 之後,接下來就是 Linux 家族了。我挑了兩個環境,一個是標準安裝的 Ubuntu 15.10 server。另一個則是採用大家常用的 Boot2Docker, 它是附在 Docker Toolbox 內的一個元件,有人預先準備好的精簡型 Linux, 預先安裝了 Docker 在裡面。
為什麼要把 Linux 的部分獨立成一篇來說明? 因為 Linux 的環境是這整個測試中,意外狀況最多的一個環境了.. 有興趣的朋友請繼續看下去..
這次 .NET Core 的實驗做完,我看相關的 How To 可以寫一堆了 @@,整個過程中都在挑戰過去很少做的事情,包括 Linux, .NET Core, Docker, 現在連 Windows Container 都出動了.. 不過試完之後一整個充實啊,最後能把預期的結果弄出來,幾個晚上睡不飽是值得的…
接續上篇文章,這篇就把 windows 的兩個平台測試給搞定吧! 先快速交代一下打算當作對照組的 Windows 2012 R2~