开源与云:一段麻烦的历史
当云计算首次出现时,它在自由开源软件的倡导者中引发了不少担忧。例如,GNU创始人Richard Stallman警告说,云平台“让其他人掌握了你的计算能力”。
他提出的观点是,当你使用云服务或软件即服务(SaaS)应用程序时,你使用的是一个由外部供应商控制的计算环境。云供应商很少发布其服务和应用程序的源代码。即使他们这样做了,用户也无法修改代码来改变服务的工作方式、控制它如何管理他们的数据,或者享受与在自己的计算机或服务器上运行开源软件相关的其他基本自由。
开源和私有云
解决这个难题的一种方法是使用开源平台(如OpenStack或CloudStack)构建私有云。
如果你有自己建立和管理云计算环境所需的资源,这是一个好主意。但这是相当多的工作。它还要求有自己的托管基础设施。这样你错过了公共云的便利性、无限的可扩展性和无资本支出的好处。
在公共云上运行开源软件
在云中运行开源软件还有另一种方法,它提供了开源的大部分好处和公共云的大部分好处:使用公共云基础设施托管自己管理的开源软件。
换句话说,你可以在AWS EC2实例或Azure虚拟机上运行任何你想要的开源应用程序,比如Apache HTTP服务器、WordPress或Elasticsearch。
当然,你不会完全控制底层基础设施。你也不能阻止公共云提供商收集关于你在其服务器上所做工作的数据。在这些方面,如果在自己的私有服务器上运行开源,你将无法充分利用隐私和可扩展性。
折衷的是,你可以无限制地扩展主机基础设施,只需要为实际使用的托管资源付费,而且你不必预先购买任何服务器来运行应用程序。
开源即托管服务
第三种方法是使用云供应商提供的托管服务在云中运行开源软件。例如,你可以通过AWS EKS或Azure AKS运行Kubernetes。或者,你可以使用AWS OpenSearch,而不是自己设置Elasticsearch(及相关软件)。
开源作为公共云中的托管服务的好处在于它简单方便。你不必自己配置基础设施或安装开源软件。
另一方面,你失去了开源带来的所有灵活性。你只能以云供应商支持的方式使用软件,修改软件配置的能力通常是有限的。当然,你不能修改软件的源代码。换句话说,你最终会遇到“软件作为服务替代品”的情况。
从好的方面来看,有人可能会说,在公共云中使用开源作为托管服务可能是以授予用户更多自由的方式使用相同开源平台的垫脚石。例如,如果你运行EKS,可能最终会决定自己部署Kubernetes,而不是依赖托管服务。或者有一天你可能会从OpenSearch转向一个自我管理的ELK栈。
结论
无论你如何划分,在云中运行开源,而不是在你自己的私有基础设施上,都有一些缺点。它可能需要比其他基于云的部署选项付出更多的努力,而且你对软件和数据的控制可能会减少。
但是,考虑到不同的部署方法,通常可以在云中以一种让你实现大部分目标的方式运行开源,同时最小化缺点。你只需要选择正确的策略。