news banner

 Microsoft SQL Server on Linux

Microsoft SQL Server on Linux

Microsoft SQL Server是由美國微軟公司所推出的關聯式資料庫解決方案。去年10月,微軟順利推出最新的SQL Server 2017。是有史以來首個支援Linux的SQL Server,但這意味著什麼呢?站在技術人員的角度看,是微軟終於想開了,讓重要的自家產品能夠跟上圍繞著Linux為核心的開放原始碼浪潮。而站在企業老闆的角度看,沒錯,這是一個「節省公司成本」的大好機會!

Microsoft SQL Server一直是微軟最賺錢的產品之一。在此之前,SQL Server一直只能在Windows系統上使用,也就是說,企業必須擁有Windows系統才能使用SQL Server。

 

這次發佈的SQL Server 2017,成功的整合到Linux上,讓使用者可以用容器的方式輕鬆部署。可見微軟的策略不再是固守Windows作業系統。把SQL Server登陸到Linux版圖,可能影響Windows系統的銷售行情,但是微軟也能從中獲益。登陸到持續壯大的Linux生態圈後。可望為SQL Server帶來更多用戶,利益可能遠大於Windows系統銷售的損失。

對於企業老闆來說,不用再支付Windows的天價授權費就是一個節省成本的大好機會。 因為Linux是免費的,而且,連微軟都願意擁抱Linux的今天,從Windows轉到Linux可說是個零成本的轉換,還有什麼理由不去做呢?

 

順帶一提,現在因為Linux與火紅的容器化技術Docker搭配,可以輕易的做更多事情,而SQL Server 2017目前也支援Docker,擺明是微軟為了讓新的SQL Server廣受歡迎,所以要大幅降低從Windows進入Linux世界的難度嘛!

以下我就來示範,如何在五分鐘內,在Linux上跑SQL Server的做法。這個範例,會使用一台Linux伺服器當作宿主機,其上再安裝Docker,然後就可以用容器的方式下載映像檔,並成功執行SQL Server。現在,我手邊已經有一台Linux伺服器,發行版是CentOS 7.4,並已經安裝好Docker。一切就緒,讓我們開始吧!

 

一,用docker pull指令下載需要的映像檔mssql-server docker image。

命令:docker pull docker.io/microsoft/mssql-server-linux

mssql server docker image

 

二,使用docker run這個指令,來執行剛剛下載好的映像檔,也就是開一個容器讓SQL server跑在裡面。

命令:docker run -e 'ACCEPT_EULA=Y' microsoft/mssql-server-linux

microsoftmssql server linux

(圖中啟動的訊息有點長,我只截取比較需要的部分)

 

登登!沒有第三步了。你可以看到Microsoft SQL server已經成功執行。這就是在Linux上配合Docker啟動SQL Server的方法。只需要兩個命令的步驟,真的就這麼簡單!不要再覺得Linux很難了。其實Linux也提供了許多跟Windows類似的圖形介面工具,降低從Windows入門的門檻。

 

上面只是單一主機的示範,實務上,在Linux上結合現在火紅的容器調度工具Kubernetes,甚至可以使SQL Server達到多機擴容的架構,解決單點失效的問題。微軟讓SQL server擁抱Linux並不是單一的例子,事實上,微軟在這幾年也逐漸把自己的許多工具開源化。以下讓我們也看看.NET Framework以及PowerShell的近期發展。

註:想知道更多關於Linux與Kubernetes的介紹,可以參考我之前的文章:「從Windows進入Linux世界」、「帶動IT轉型與軟體開發革命的Kubernetes

 

NET Framework開源化

簡單介紹一下.NET Framework,這是由微軟開發,一種採用系統虛擬機運行的編程平臺,以通用語言運行庫(Common Language Runtime)為基礎,支援多種語言(C#、F#、VB.NET、C++、Python等)的開發,.NET Framework運行的架構與Java非常類似,你可以把.NET Framework的運作方式想成類似Java的JVM。在過去,.NET Framework開發出來的程式雖然輕巧,但是每次總是要使用者安裝.NET Framework才能執行程式,缺點是很大、需安裝很久、版本很多、不能跨平台等等。

 

幸好,後來有一個名為Mono的開放原始碼專案解決了這個問題。它不屬於微軟官方,是透過社群的力量所主導,自行組成的一個生態圈。在Mono首頁,標題寫了:「Mono is a cross platform, open source .NET development framework」,這意味著所有.NET開發出來的程式,只要是Mono能夠運行的系統平台,就能執行。Mono從2004年發展至今已經相當完善了,支援非常多種作業系統,有Linux、Mac OSX、Sun Solaris、BSD、Windows、Nintendo Wii等等。

Mono出現的很長一段時間後,微軟也終於認同開源才是未來,宣布將.NET Framework開源化,也就成為大家耳熟能詳的,.NET Framework的新一代版本「.NET Core」。目前.NET Core跨平台支援Windows、Mac OSX、Linux等作業系統。

 

PowerShell開源化

Windows PowerShell 是微軟為 Windows 環境所開發的 shell 及腳本語言技術,這項技術提供了豐富的控制與自動化的系統管理能力。

在將.NET Framework開源化以後,微軟也開始把PowerShell開放原始碼,讓更多的社群可以參與開發,關於PowerShell最終會開源化並且可移植到Linux上的起因,有個有趣的小故事。

 

其實微軟會願意把 PowerShell 移植到 Linux 上而且開源化,起因於某次客戶的不開心……

當時,微軟雲端和企業部門的技術研究員 Jeffrey Snover,正要展示Monad(PowerShell 在 2002-2006 年時的開發階段代號)給一個大客戶看。對方一開始表示很喜歡,聽到後來態度卻整個變了。對方問:「這是用什麼語言做的?」而且非常不滿意 Snover 的答案:「C#」。Snover 感到很困惑,這有什麼不對嗎?為什麼這會是一個難題呢?對方回答,「因為 Monad 雖然是完全正確的方法,但我們整個公司就得針對它來標準化,但我們沒有辦法,因為 .NET(C# 的執行平台)是 Linux 上不可用的!(這表示該公司有許多 Linux 機器)。」

 

這個答案帶來了很大的後續影響,它指出了微軟工具與為數眾多的Linux機器之間的衝突,以及微軟工具在開源世界的格格不入,必然會嚴重影響其後的發展。後來大約在2016年8月左右,微軟就發佈了Linux版的PowerShell,使用.NET Core而且完全開源。

 

註:C# 所開發的程式,就是只能跑在上一節所提到的.NET Framework,因為當時的.NET Framework,沒有開源化也不能跑在Linux上,也因此微軟的客戶不能在自家的Linux使用PowerShell,所以才不爽。

 

結語

從這次微軟新的SQL Server 2017,結合過去.NET Framework和PowerShell的發展,我們可以很清楚看到一個趨勢,那就是在未來,微軟必定會陸續把更多產品重新推出,變得更親近Linux生態圈、使更多產品開源化。企業如果可以看清這個趨勢,就可以儘早轉換跑道,為這個趨勢預作準備。事實上微軟只是一個例子,企業級資料庫市佔比SQL Server更高的Oracle(在2014年時約佔46%)也早已登陸到Linux系統了。

 

主流的企業級軟體都朝著擁抱開源的方向前進。在微軟做出改變的同時,企業只要跟隨其步調,只要可以比競爭者更早採用更好的技術、省下更多的成本。這次的SQL Server 2017就是個很好的例子。

 

作者:德鴻科技 研發部 Andrew