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