点将台:2016年最佳开源数据中心和云计算软件
知名IT杂志《InfoWorld》评选出了年度最佳开源平台基础设施、管理和编排软件。
容器、微服务、分布式集群……由于大家竭力颠覆传统应用程序架构,把各部分拆分开来,然后通过API再连接起来,一切似乎变小了,同时又似乎变大了。欢迎来到崭新、更简单、更复杂的基础设施即代码(infrastructure as code)世界。而我们这里所说的“代码”,当然是指开源代码。
Docker
Docker及紧随其后的新一代容器化工具的重要性无论怎么夸大都不过分。Docker正迅速成为一种成熟的技术,在所有主要的操作系统中都得到支持,它甚至内置到微软的下一款服务器操作系统和VMware的工具中。Docker还得到公共云的支持,已成为即将推出的超融合基础设施平台中的一项关键技术。
Docker由一群相互关联的开源项目组成。核心的Docker引擎(Docker Engine)让你可以构建并测试镜像,然后将镜像部署到本地数据中心或公共云上。Kitematic提供了用于运行容器的用户界面(UI)。Docker架构中的其他工具可帮助你将容器部署到虚拟或裸机基础设施上:Machine负责处理配置,而Compose负责定义用多个容器构建的应用程序。最后,Swarm负责处理应用程序的集群、调度及自动化运行。
对现代化数据中心来说,Docker是一种基本的技术,提供了创建、托管和管理微服务所需的工具、运行时环境和API。如果使用Docker作为构建流程的端点,并作为持续开发和持续集成战略的一部分,你在进行变更时,只要向外发布一个新的容器。说到简化部署和测试,没有什么技术比得上Docker。
Kubernetes
容器让用户可以将应用程序和服务迅速部署到主机服务器上隔离的用户空间。如果你想迅速构建服务,并且在大规模高密度环境下运行服务,容器是不二的选择。然而,你还需要Kubernetes之类的工具,负责协调所有活动部分,帮助管理服务的交互,并且处理扩展。
将Kubernetes理解成一种数据中心操作系统也许最合适不过。就像Windows或Linux管理单台机器中的资源配置,Kubernetes管理机器集群上的容器化服务和应用程序的生命周期。它让你可以把服务分类成逻辑应用程序,并且部署到数据中心,确保按需提供资源,并确保工作负载的利用率尽可能高。
如果你大规模运行容器,就会需要Kubernetes之类的工具。通过管理IP地址和DNS,Kubernetes还让你有机会处理服务发现,而且在应用程序扩展时,有助于跨服务均衡负载。Kubernetes还有助于修复应用程序、必要时重新启动服务,将工作负载迁离不堪重负的服务器和主机。你会发现:除了谷歌云外,Kubernetes还在像AWS和Azure这些常用的云平台上得到支持。Kubernetes因而成为一种实用的工具,可以让你从一家云服务提供商迁移到另一家,并且为容器和服务提供了一种易于移植的框架。
Mesos
Mesos被誉为是一种“分布式系统内核”或数据中心操作系统,旨在管理大规模部署云应用程序所需的资源,支持成千上万个节点。Mesos可与任何云服务提供商、任何操作系统协同运行,所以可以用它来管理Linux和Windows计算实例。
有了Mesos,可以制定策略,以便处理如何向应用程序和服务提供资源,应用程序得到Mesos代理的支持和监控,Mesos代理则充当本地调度程序。代理向Mesos主节点报告主机上的可用资源,主节点向应用程序提供那些资源。应用程序可以接受提供的部分资源,或者等到需要的所有资源全部到位。Mesos的一项关键功能是,它直接支持大规模运行的应用程序,比如Hadoop和Spark。Mesos还让用户可以扩建不断扩展、应对查询复杂性的大规模分析集群,那样你可以针对极其庞大的数据集使用MapReduce及其他算法。由于Mesos让应用程序可以控制调度,它有助于确保处理任务被发送到所需数据驻留在其中的主机。
Mesos使用计算、网络和存储资源时以应用程序为中心,因而这种方法让庞大的数据集群得以更高效地运行。用较少资源就可以启动任务,更多资源到位后,可以处理更繁重的任务;或者任务可以推迟,等到所需的确切资源全部到位,充分利用数据本地性,而不是获取主机之间的数据、加大公共云或私有云中的网络流量。
CoreOS
轻量级操作系统是任何云(无论公共云还是私有云)中一个不可或缺的部分。它们让你可以把容器装到裸机主机上,还可以把虚拟机装到虚拟机管理程序上。这意味着重新考虑什么造就服务器操作系统,尽量简化从中央管理平台支持部署的容器所需要的资源。
CoreOS是比较流行的选择之一,这种自我更新的Linux操作系统同时支持Docker容器和Rkt容器。作为所谓的面向其他所有人的谷歌基础设施(GIFEE)架构的一个核心部分,oreOS是灵感源自谷歌的自有基础设施管理的众多工具之一。可以将它与Kubernetes和Etcd之类的工具结合使用,管理服务器集群,还可与Flannel之类的软件定义网络工具结合使用。
作为一种操作系统,CoreOS已被大大简化。你找不到被装入到其他Linux发行版中的所有工具和服务。相反,只有一个基本的用户区(userland),附带便于远程管理容器服务的工具。之外一切都只有在必要时部署到容器中,包括语言运行时环境。由于应用程序的所有功能与操作系统分离开来,可以实现更新自动化,主机直接从CoreOS自己的更新服务器来更新时,可将负载转交给其他集群成员。
有了CoreOS,你可以不用操心管理容器主机,而是专注于运行的应用程序和服务。使用诸如此类的工具意味着,你可以把工作重心放在公司的重要任务上,而不是放在硬件或服务器操作系统上。
Etcd
现代化云应用程序正在迁离传统的整体式架构,转向扩展性极强的架构,利用微服务集群构建应用程序。这种方法带来了一系列的新问题:我们如何管理所有那些服务,如何维护服务的配置,如何能够发现刚部署的新服务实例?
这时候,Etcd可以发挥用场。作为一种旨在伴随应用程序扩展的分布式键/值存储工具,Etcd成为了为机器集群确保一致性和服务可靠性的基础。你可以使用Etcd为服务保管配置值,或者提供可用于迅速配置新服务实例的信息,或者让服务可以登记详细信息、从而简化发现过程。应用程序可以使用用目录排列的键来存储数据,然后观察单个键或整个目录,看看有无变化。
Etcd速度快,能够支持每个实例每秒数千次写入,使用Raft一致性算法,共享主实例和从属实例之间的日志。它有一个简单的HTTP API,可通过Curl等常用工具来访问,所以很容易整合你自己的应用程序和服务。你还会发现Etcd用于人气很旺的项目,比如Kubernetes和Cloud Foundry。
Atomic Host
传统的服务器操作系统往往不适合容器化应用程序。因功能和服务而臃肿不堪的大型操作系统是微服务无法容忍的,微服务需要一种简单、安全、可迅速部署的主机。新一代操作系统旨在解决这种问题,推出的轻量级主机系统旨在为容器充当稳定一致的基础。
一种选择就是Atomic Host,它基于Red Hat Enterprise Linux、CentOS或Fedora,已定义的产品生命周期为你提供了相对不变的主机操作系统,可以跨你的所有云服务器来部署。Atomic Host得到了最大程度的简化,只剩下运行容器化应用程序所需的组件。如果你需要任何的额外功能,必须添加到容器中,并使用构建和部署工具来加以管理。
Atomic Host更新版的下载和部署只要一个步骤,如果更新版影响了你当前构建的容器,还可以回滚/恢复。操作系统可以使用“拥有超级权限”的容器,让应用程序可以访问主机,从而可以将系统管理工具部署在应用程序容器的旁边。内核命名空间及其他安全工具还改善了容器的隔离机制,确保一个容器中的代码不会影响另一个容器中的代码。
除了Atomic Host操作系统外,Red Hat还为容器镜像提供了安全的注册中心,拥有基于角色的控制机制和基于Web的控制台,还有帮助包装和分发多容器应用程序的工具。
Consul
在当前微服务跨多变的基础设施动态运行的环境下,搞清楚任何特定的服务目前驻留在哪个主机上比搞清楚硬编码的IP还要棘手。服务跨机器集群来调度和重新调度,但是你的应用程序仍需要知道其依赖项在何处。
Consul是一种分布式系统,可跟踪你的所有服务,并通过简单的REST API来开放(expose)服务。每个服务在启动时向Consul注册,之后Consul处理余下的工作。你甚至可以配置针对服务的健康检查,Consul会按你指定的时间表来执行这项检查。那样一来,可以确信:当你提出要求时,Consul会向应用程序告知健康服务的位置。
如果你依赖无法自行注册的外部服务,只要使用REST API,就可以登记这些服务的已知位置。这有助于提供一致的应用程序体验,无论是谁控制相关服务。除了服务发现外,Consul还为灵活的键/值存储提供可选的锁定和主实例选举(leader election)机制。
Vault
与HashiCorp开发的Consul一样,Vault也是一种秘密信息管理工具。无论是API令牌、数据库登录信息(credential),还是其他敏感信息,Vault都为加密这些秘密信息提供了一种简单的机制。虽然针对秘密信息的加密服务当然很重要,但如果你看一下动态秘密信息,Vault就更备受关注。动态秘密信息在使用之前并不存在,而且自动到期失效,所以它们比使用期长、易于共享的密码安全得多。
Vault经配置后,一经请求即可为应用程序生成动态秘密信息,无论允许访问PostgreSQL实例还是S3存储桶。应用程序请求访问Postgres的登录信息时,Vault会在数据库中创建一个全新用户,然后将那些登录信息返回给你。除非租期续约,否则Vault创建的每个动态秘密信息会自动租赁、到期失效。
动态秘密信息在安全访问方面要比向所有应用程序分发静态密码安全得多。如果你非用密码不可,Vault经配置后,可以将加密后的静态秘密信息永久地存储到Consul或磁盘上。你也可以完全不用这种持久性,开放Vault的加密API,为你的开发人员提供久经考验的密码即服务,那样他们没必要自行为此编写代码了。
Habitat
是不是被试图将Docker部署到生产环境时打开的潘多拉盒子搞得晕头转向?是不是厌烦了对待遗留软件部署的方式完全不同于对待内部软件项目?这时候应该打量一下Habitat,这是Chef推出的一种新型应用程序管理工具。Habitat着眼于最后一英里的部署问题,比如配置和应用程序拓扑,可以帮助开发人员早在进入到生产环境之前管理应用程序层面的复杂性。
Habitat把你的应用程序连同其所有依赖项与管理进程(supervisor process)一同包装起来。这个管理进程随后负责应用程序的启动、配置和服务发现。管理进程跨集群发布应用程序状态,那样你就很容易发布配置变更,甚至可以在现有的应用程序上覆盖主实例-从属实例(leader-follower)拓扑结构。Habitat会以同样的方式包装遗留软件,为你提供了一种标准接口,可通过该接口与你的所有应用程序进行联系。Habitat可以将应用程序导出成打包文件、Docker容器,或者在rkt上运行的应用程序容器镜像,所以无论你选择什么来运行应用程序,都得到支持。
Fluentd
分布式系统的重大挑战之一是,管理大量的日志文件。你可以花时间关联来自云基础设施中的每个微服务实例、每个容器和每个虚拟机的日志文件,也可以实施一个统一的日志层,以便收集、关联并存储这些数据,供以后分析。
Fluentd就是一种常用的数据日志层,拥有开发人员组成的不断壮大的庞大社区,另外得到了主要云服务提供商的支持,包括亚马逊和微软。对微软来说,Fluentd是跨平台运营管理套件(Operations Management Suite)的关键组件,它得到刚开源的PowerShell的支持。
一旦部署到你的环境中,Fluentd使用插件及支持常用日志平台的功能,提取数据、过滤数据,并将结果传送给合适的存储或分析工具。数据用JSON格式来重构,所以它可以由端点API来处理。
结果是,这种速度快、功能强的工具有助于日常运营,并且提供可以被更专门的监控或安全分析系统使用的格式化数据。一个大用户是Line,它把日志数据直接扔到Hadoop集群中,实时分析目前由大约6亿用户访问的消息服务。
Prometheus
大规模管理云系统也意味着大规模监控、跨多个系统和服务收集时间序列数据。这时候Prometheus应运而生,这种系统监管和提醒服务是云原生计算基金会的一部分。
Prometheus的核心是时间序列数据模型,它使用键/值对来存储被监控的应用程序和服务的数据,一种自定义查询语言用于探询收集的数据。你可以实施多个Prometheus节点以监控云集群的不同方面,因为每个节点独立运行,将结果传送到图形化仪表板。还有一个试验性工具用于管理和发送提醒信息。
Prometheus可能最适合监控微服务环境,在这种环境下,它通过服务发现机制寻找监控目标的功能已成为一个基本要求。Prometheus可以从测量代码获取度量指标,或通过推送网关接收度量指标,推送网关可收集来自短时间任务的数据,比如在AWS Lambda或Azure Functions等无服务器计算平台上运行的任务。虽然Prometheus提供了可以添加到代码中的检测工具库,还有一些工具可用于从包括AWS和Mesos在内的常见云平台导出数据。
Prometheus的其他工具与JVM直接协同运行,让你能够监测Cassandra之类的服务,不需要另外编写代码。其他服务直接开放Prometheus度量指标。比如说,Kubernetes和Etcd可与Prometheus直接协同运行。
Flynn
对大规模运行应用程序和服务的任何人来说,很难管理部署的系统,将应用程序从一家提供商迁移到另一家更是困难重重。通过把部署和运营工具整合到单一的代码驱动型框架中,Flynn旨在降低与构建云原生应用程序有关的成本和风险。
Flynn实际上是一种开源PaaS,旨在托管运行微服务及其数据,无论这些数据是关系型数据还是NoSQL数据。由于采用一种模块化、API驱动的方法,很容易部署和管理应用程序,然后把它们整合成一条构建管道(build pipeline)。应用程序做入到容器中,然后部署到主机和虚拟机上。直接链接至GitHub意味着,你能够直接利用Git资源库中的代码,迅速构建新容器。
应用程序组件得到Flynn的服务发现功能的支持,该功能为容器提供IP地址,并使用DNS,力求简单。Flynn的其他组件处理构建和部署高可用性服务,并且跨服务集群对网络连接实现负载均衡。数据库可迅速配置,并自动备份起来。无论为开发和测试环境搭建集群,还是在虚拟基础设施上运行A/B测试,既快速又容易。
Flynn背后的团队提供了众多支持计划,不过你总是可以通过GitHub和IRC,充分利用社区支持。Flynn不仅提供了企业需要的可扩展性和可靠性,还提供了开发人员渴望的易用性。难怪其社区在不断壮大。
Nginx
Web服务器可谓是现代互联网的核心。久负盛名的Apache仍稳坐头把交椅,但是它受到了一种速度更快、用途更广的替代技术:Nginx的有力挑战。
Nginx快速、安全、易于配置及管理,旨在既可以用作Web服务器,又可以用作反向代理系统,为Web服务提供起到负载均衡作用的前端。除了内置的网页压缩功能外,它还直接支持HTTP/2和IPv6等标准。可以通过模块添加额外的功能,这些模块有的来自Nginx自己的开发人员,有的来自第三方。
改善网站性能一开始就是目标,Nginx确实是为飞快速度打造的。底层的事件驱动型架构意味着,服务器只用数MB内存,就可以处理数量众多的连接(10000多路)。这种性能是支持高密度云服务的重要保障,多台容器化Web服务器可能在单单一个虚拟机上运行。
其他性能方面的改进包括支持常见格式的内置媒体流。商业版Nginx Plus增添了支持及更多的安全功能,包括Web应用防火墙。
Neo4j
今年早些时候发布的Neo4j 3.0集速度、灵活性和高效率于一身。值得指出的第一个细节是,企业客户有机会选择使用一种新的存储驱动程序,因而摆脱了最多340亿个节点的地址空间限制。这可能不适用于你的情况,但如果你打算大规模扩展,又在质疑Neo4j是不是切实可行的选择,这应该会打消你的部分顾虑。
你还可以使用新的Bolt二进制协议而不是HTTP API,最大限度地提高网络的效率。从运营的角度来看,再也没必要处理一堆属性文件,这会让你放宽心。从这个版本开始,所有属性文件被合并到一个位置,因而更容易管理部署的对象,无论它们部署在你的数据中心、云端,还是在本地运行用于开发。这个版本拥有更多的功能特性,所以仔细看一下软件发布说明,弄一份试一下。
Ubuntu Server
Ubuntu是一款大名鼎鼎的桌面Linux发行版,当然它也有服务器版本,格外注重构建和运行私有云。为了促进企业采用,Ubuntu Server提供了长期支持(LTS)版本,还有面向各大服务器架构(包括ARM64)的版本。它还是一种通过认证的访客操作系统(guest OS),可在各大公共云上运行。
如果你正在考虑搭建OpenStack私有云,Ubuntu Server是值得重点考虑的几款操作系统之一,因为它还支持LXD容器虚拟机管理程序和OpenStack的Julu版本。LXD就好比是开放版的微软Hyper-V容器,把容器支持和类似虚拟机管理程序的隔离结合起来。你不是只能在LXD上使用LXC容器,因为它还支持Docker。
Ubuntu Server中支持云部署的其他关键功能包括:刚增添的支持可靠的ZFS文件系统的功能,以及数据平面开发工具包(DPDK),这种内核网络技术让应用程序可以直接与网络数据平面协同运行,从而直接访问和处理数据包。虽然DPDK不是一种全面的网络堆栈,但是它能够简化并加快关键的网络功能,这在构建高密度的云服务时很重要。
PowerShell
微软的PowerShell是最近入围我们今年榜单的成员,不过它的历史可不短。那是由于,它最近玉由专有技术变成开源技术,还有一系列工具可用于构建和管理PowerShell脚本。
PowerShell最初是一种面向系统管理的脚本语言,这种框架可针对系统层面的服务自动执行操作,用“cmdlet”包装服务API和文件,cmdlet从熟悉的命令行来运行。需要为一项Web服务部署一个新的Docker镜像?如果你构建了一个适当的PowerShell cmdlet,就只需要远程端点、几个变量和需要部署的镜像,它会立即跨一组前端服务器来运行。那一组cmdlet还可以用Chef和Jenkins之类的工具来加以管理,因而为你提供了自动化运营所需的主机。
别误以为PowerShell是Bash或其他Unix外壳的替代者。它本身就是一款功能强大的工具,只不过专注于运营任务。我们预计PowerShell会继续迎合Windows Server和微软的自有平台。但是通过将PowerShell扩展到Linux和Unix,另外将SSH添加到PowerShell的远程功能,微软为PowerShell成为一种有助于管理云规模异构应用程序的工具奠定了基础。
微软打算,在今后几年壮大其基于云的服务管理平台时,将PowerShell与Fluentd日志引擎配合使用。
GitLab
要是没有分布式版本控制系统,就无法开展现代化的开发运营工作。虽然Git和Mercurial之类的开源工具部分满足了这个要求,但这些工具本身使得你只能借助命令行。这时候,GitHub和Bitbucket之类的托管式工具应运而生,但是两者都是闭源工具,它们在过去的路线图有点模糊不清。GitLab是一种替代GitHub和Bitbucket的开源工具,拥有引人入胜的功能、积极大胆的开发周期以及令人激动的路线图。
GitLab并不只是仅仅满足于浏览代码、审查合并请求和提交问题这些标准功能的开源版本。它还支持机密问题,你可能想要向开源项目提交敏感的问题或安全方面的问题。它让你可以订阅问题标签,那样只要该标签被添加到某个问题,你就会接到通知。需要一个可配置的类似Kanban的问题跟踪器?GitLab满足你的要求。它甚至本身就有持续集成功能,可以直接部署到Kubernetes。
欢迎加入本站公开兴趣群
软件开发技术群
兴趣范围包括:Java,C/C++,Python,PHP,Ruby,shell等各种语言开发经验交流,各种框架使用,外包项目机会,学习、培训、跳槽等交流
QQ群:26931708
Hadoop源代码研究群
兴趣范围包括:Hadoop源代码解读,改进,优化,分布式系统场景定制,与Hadoop有关的各种开源项目,总之就是玩转Hadoop
QQ群:288410967