知名 IT 杂志《InfoWorld》评选出了年度最佳开源平台、基础设施、管理和编排软件。 最佳开源数据中心和云计算软件 你可能已经听说过 Docker 容器这项新技术。开发人员很喜欢它,因为可以用脚本来构建容器,添加一层层服务,并直接从 MacBook Pro 将它们推送到服务器进行测试。容器之所以切实可行,是因为它们超轻量级,不像那些现在已经过时的虚拟机。容器以及交付服务的其他轻量级方法正在改变操作系统、应用程序及管理工具的格局。这份榜单上的最佳数据中心和云计算软件更是其中的佼佼者。 Docker Machine、Compose 和 SwarmDocker 的开源容器技术已经得到了各大公有云的采用,正内置到 Windows Server 的下一个版本中。Docker 是一款功能强大的数据中心自动化工具,让广大开发人员和运营团队得以将应用程序与基础设施分开来。 然而,容器只是 Docker 生态系统的一部分。Docker 还提供了一系列工具,让你可以使用 Docker API,让容器的整个生命周期实现自动化,另外可自动处理应用程序的设计和编排。 Machine 让你可以实现 Docker 容器配置自动化。从命令行开始入手,你可以使用一行代码,锁定一个或多个主机,部署Docker 引擎,甚至将它加入到 Swarm 集群。支持大多数虚拟机管理程序和云平台,你只需要自己的访问凭据。 Swarm 处理集群和调度,还可以与 Mesos 整合起来,提供更高级的调度功能。你可以使用 Swarm 建立容器主机池,那样需求增加时,应用程序可以相应扩展。应用程序及所有依赖项都可以用 Compose 来定义,它让你可以把诸容器连接起来,连入到一个分布式应用程序,作为一个组来启动。Compose 描述可适用于诸平台,那样拿来开发人员的配置后,可迅速部署到生产环境中。 CoreOS 和 RKTCoreOS 是一种瘦薄的轻量级服务器操作系统,基于谷歌的 Chromium OS。它旨在与 Linux 容器结合使用,而不是使用程序包管理器来安装功能。通过使用容器来扩展瘦薄的核心,CoreOS让你可以快速部署应用程序,在云基础设施上顺畅运行。 CoreOS 的容器管理工具fleet旨在把CoreOS服务器集群当作单个部件来对待,相应工具可用来管理高可用性,并根据资源可用性,将容器部署到集群。跨集群键/值存储系统 etcd 负责处理设备管理,并支持服务发现。如果某个节点出现故障,etcd就能在新的副本上迅速恢复状态,提供一个连接到 CoreOS 自动化更新服务的分布式配置管理平台。 虽然 CoreOS 也许因支持 Docker 而家喻户晓,但 CoreOS 的团队正在开发自己的容器运行时环境 rkt,有自己的容器格式:应用容器映像(App Container Image)。rkt 还与 Docker 容器兼容,采用了模块化架构,允许不同的容器化系统(甚至硬件虚拟化系统)可以插入。然而,rkt 仍处于发展的早期阶段,所以还没有完全准备好用于生产环境。 RancherOS由于我们使用容器从底层操作系统抽取越来越多的服务,开始随之考虑未来的操作系统会是什么样子。类似我们的应用程序,未来的操作系统将会是在瘦薄内核上运行的一组模块化服务,可以自我配置,只提供应用程序所需的服务。 我们可以从 RancherOS 领略未来操作系统的模样。RancherOS 结合了 Linux 内核和 Docker,是一种极简操作系统,适合将基于容器的应用程序托管在云基础设施中。RancherOS 利用 Docker,将 Linux 用户空间服务和应用程序托管在不同的容器层中,而不是使用标准的Linux 包装技术。低级别的 Docker 实例先启动,将系统服务托管在各自的容器中。用户的应用程序在较高级别的 Docker 实例中运行,独立于系统容器。即使其中一个容器崩溃了,主机照样正常运行。 RancherOS 只有 20MB 大小,所以很容易在整个数据中心中进行复制。它还旨在使用自动化工具加以管理,而不是人工管理,API 级访问既适用于 Docker 的管理工具,又适用于 Rancher Labs 自己的云基础设施和管理工具。 Kubernetes谷歌的 Kubernetes 容器编排系统旨在管理和运行用 Docker 和 Rocket 容器构建的应用程序。Kubernetes 专注于管理微服务应用程序,让你可以跨主机群集分发容器,同时处理扩展问题,确保托管的服务可靠地运行。 由于容器提供了应用程序抽象层,Kubernetes 是一种以应用程序为中心的管理服务,支持许多现代开发模式,侧重于用户意图。这意味着你启动应用程序后,Kubernetes 会管理容器,以便容器在你设定的参数范围内运行,并使用 Kubernetes 调度器,确保它获得所需的资源。容器被分成了一个个 pod,由复制引擎加以管理。该引擎可以恢复出现故障的容器,或者应用程序增加时,添加更多的 pod。 Kubernetes 支持谷歌自己的容器引擎(Container Engine),它可以在一系列其他的云和数据中心服务上运行,包括 AWS 和Azure,以及 vSphere 和 Mesos。容器可以松散耦合或紧密耦合,那样不是为云平台即服务(PaaS)运营环境设计的应用程序可以作为一组紧密耦合的容器,迁移到云端。Kubernetes 还支持将应用程序快速部署到群集,为你提供了实现持续交付过程的端点。 Mesos将数据中心变成私有云或公有云不仅仅需要虚拟机管理程序,还需要一种新的操作层,可以管理数据中心资源,就好像它们是单一计算机,处理资源和调度。Apache Mesos 被称为是一种“分布式系统内核”,让你可以管理成千上万台服务器,使用容器来托管应用程序和 API,支持应用程序并行开发。 Mesos 的核心是一组守护进程,将资源暴露在中央调度程序面前。任务跨节点分发,充分利用可用的处理器和内存资源。一个关键方法是,要是提供的资源满足不了要求,应用程序可以拒绝这些资源。这种方法很适用于大数据应用,你可以使用 Mesos 运行 Hadoop 和 Cassandra 分布式数据库,还有Apache 自己的 Spark 数据处理引擎。还支持 Jenkins 持续集成服务器,让你可以在服务器集群上并行运行构建 worker 和测试worker,并根据工作负载的大小,动态调整任务。 Mesos 设计成可在 Linux 和 Mac OS X 上运行,最近还被移植到 Windows 上,以支持在 Azure 平台上开发可扩展的并行应用程序。 SmartOS和 SmartDataCenterJoyent 的 SmartDataCenter 是一款运行其公有云的软件,在 SmartOS 瘦服务器操作系统上面添加了一个管理平台软件。SmartOS 是 OpenSolaris 的后续版本,结合了 Zones 容器和 KVM 虚拟机管理程序,这是一种内存中的操作系统,可从U盘快速启动,可以在裸机服务器上运行。 使用 SmartOS,你可以快速部署一组轻量级服务器,这些服务器可通过一组 JSON API,以编程的方式加以管理,而功能通过虚拟机来交付,由内置的映像管理工具来下载。通过使用虚拟机,所有用户空间(userland)操作与底层操作系统隔离开来,减小了主机和访客的安全隐患。 SmartDataCenter 在 SmartOS 服务器上运行,一台服务器作为专用管理节点来运行,集群的其余服务器作为计算节点来运行。可以从笔记本电脑上的云版本(这是一种 VMware 虚拟设备)开始入手,因而可以试用管理服务器。在实际数据中心,你将把 SmartOS 部署到服务器上,使用ZFS 来处理存储这包括本地映像库。服务作为映像来部署,而各组件存储在对象库中。 SmartDataCenter 和 SmartOS 这个组合改善了 Joyent 公有云的体验,提供了一套屡试不爽的工具,可以帮助你启动自己的云数据中心。这个基础架构专注于如今的虚拟机,但也为明天的虚拟机奠定了基础。一个相关的 Joyent 项目 sdc-docker 将整个SmartDataCenter 集群暴露为单单一个 Docker 主机,受原生 Docker 命令的控制。 Sensu管理大规模数据中心的关键不是使用服务器的图形用户界面(GUI),而是根据来自监控工具和服务的信息,自动编制脚本,转发来自传感器和日志的信息,然后将操作/行动告知应用程序。Sensu 就是开始提供这种功能的一个工具,它常常被称为“监控路由器”。 在数据中心中运行的脚本将信息发送给 Sensu,然后 Sensu 再将信息发送给相应的处理程序,使用一种基于 RabbitMQ 的发布/订阅架构。服务器可以呈分布式,将发布的检查结果发送给负责处理的代码。你可以在电子邮件、Slack 房间或 Sensu 自己的仪表板中查看结果。消息格式由 JSON 文件来定义,变异器(mutator)被用来实现数据实时格式化,消息经过滤后交给一个或多个事件处理程序。 Sensu 仍是一种比较新兴的工具,但是大有希望。如果你想实现数据中心自动化,就需要这样一款工具,不仅用来表明数据中心出现的情况,还可用来在最需要的时候提供这方面信息。一款商业版本增加了支持与第三方应用程序集成的功能,但是开源版本含有管理数据中心所需的大部分功能。 Prometheus管理现代数据中心是项复杂的任务。一排排服务器需要小心对待,你还需要旨在处理成千上万个节点的监控系统。监控应用软件带来了特殊的挑战,这时候Prometheus可以发挥用场。作为一种旨在向操作人员提供警报的服务监控系统,Prometheus可以在各系统上运行,无论是一台笔记本电脑,还是多台监控服务器组成的高可用性集群。 时间序列数据捕获后存储起来,然后与模式进行比对,识别故障和问题。你需要暴露HTTP端点上的数据,使用YAML文件来配置服务器。基于浏览器的报告工具可处理数据显示,还有一个表达式控制台,你可以试用查询。仪表板可以用GUI构建器来构建,或使用一系列模板来编写,那样你可以提供应用程序控制台,这些控制台可使用Git等版本控制系统来加以管理。 比如说,捕获的数据可使用表达式加以管理,因而很容易聚合来自几个数据源的数据,比如说可以将来自一系列 Web 端点的数据集中到一个存储区。一个试验性的警报管理模块将警报发送给常见的协作和开发运营工具,包括 Slack 和 PagerDuty。提供了面向 Go 和 Java 等常见语言的官方客户软件库,这意味着很容易为应用程序和服务添加支持Prometheus的功能,而第三方选件可以将 Prometheus 扩展到 Node.js 和 .Net。 Elasticsearch、Logstash 和 Kibana运行现代数据中心会生成大量数据,还需要从这些数据中获取信息的工具。这时候,Elasticsearch、Logstash和Kibana这对组合(常常被称为ELK架构)可以发挥作用。 Elasticsearch旨在处理可扩展的搜索任务,对多种类型的内容执行搜索,包括结构化和非结构化文档。它基于Apache的Lucene信息检索工具,还有一组充分利用REST的JSON API。它用来为维基百科和GitHub等网站提供搜索服务,使用分布式索引,具有自动化负载平衡和路由功能。 现代云架构的基础是物理服务器阵列,作为虚拟机主机来运行。监控成千上万台服务器需要集中式日志。Logstash负责采集和过滤那些服务器(以及在服务器上运行的应用程序)生成的日志,并使用每一台物理机和虚拟机上的转发器。然后,Logstash格式的数据发送给Elasticsearch,为你提供了搜索索引:添加更多的服务器后,搜索引擎可以迅速扩展。 在更高层面上,Kibana为Elasticsearch添加了可视化层,提供Web仪表板,用于探究和分析数据。仪表板可以围绕定制搜索来构建,并与团队共享,提供了一种快速、易于理解的开发运营信息源。 Ansible管理服务器配置是管理现代数据中心或云基础设施的任何开发运营方法的一个关键部分。配置管理工具采用了期望状态的方法,简化云级别系统管理,使用服务器和应用程序的描述来处理服务器和应用程序的部署。 Ansible提供了极简的管理服务,使用SSH来管理Unix节点,使用PowerShell与Windows服务器协同运行,无需部署代理。Ansible Playbook用YAML描述服务器或服务的状态,将Ansible模块部署到处理配置的服务器,一旦服务运行起来,就删除模块。你可以使用Playbook来编排任务,比如说使用一个脚本来部署多个Web端点。 可以让模块创建和Playbook交付成为持续交付过程的一部分,并使用构建工具来提供配置、实现部署自动化。 Ansible可以汇集来自云服务提供商的信息,简化虚拟机和网络的管理。Ansible中的监控工具能够自动触发额外的部署,帮助管理和控制云服务,还竭力管理Hadoop等大规模数据平台所使用的资源。 Jenkins做好持续交付不仅仅需要一种井然有序的方法来处理开发,还需要管理测试和构建的工具。这时候,Jenkins持续集成服务器应运而生。Jenkins与你选择的源代码控制、测试工具以及构建服务器协同运行。它是个灵活的工具,最初用来与Java协同运行,现在已扩大到可支持Web开发和移动开发,甚至可以构建Windows应用程序。 把Jenkins比作交换网络可能最恰当,让文件通过测试和构建过程,并回应来自所使用的各个工具的信号――这归功于1000多个插件组成的庞大库。这些包括将Jenkins与本地Git实例和GitHub整合起来的工具,那样可以将持续开发模式扩展到你的构建和交付过程。 使用Jenkins之类的自动化工具不仅要奉行一种理念,还要实施构建过程。一旦你致力于持续集成作为持续交付模式的一部分,只要代码分发给源代码控制版本分支,你就要运行测试和构建周期,一旦代码进入到主分支,就要分发给用户。 Node.js 和 io.js现代云应用程序使用不同于我们熟悉的n层企业和Web应用程序的设计模式构建而成。它们是分布式、事件驱动的服务组合,这些服务可迅速扩展,并支持成千上万个并发用户。Node.js就是采用这种新模式的一项关键技术,它被许多主要的云平台所使用,易于安装,成为云基础设施上瘦服务器或容器的一部分。 Node.js 大获成功,关键是 Npm 程序包格式,它让你可以迅速安装核心 Node.js 服务的扩展件。这包括 Express 和 Seneca 等框架,这些框架有助于构建可扩展的应用程序。中央注册中心处理程序包分发,依赖项自动安装。 虽然 io.js 分支暴露了项目管理方面的问题,但是它也让一组开发人员得以积极地将ECMAScript 6支持功能添加到与Npm兼容的引擎中。两支团队协调后,Node.js 的和 io.js 代码库已合并,现在新版本来自 io.js 代码库。 明年,其他分支可能会重新并入到主分支,比如微软的 io.js 分支增加了对 64 位 Chakra JavaScript 引擎以及谷歌 V8 的支持,从而让 Node.js 的平台不断发展,巩固其作为云级别微服务首选主机的地位。 SenecaSeneca 微服务框架的开发人员有句座右铭:“现在构建,以后扩展”。对任何想开发微服务的人来说,这句格言再恰当不过了,因为它让你可以从小处做起,然后随着服务增多,逐步添加功能。 从本质上讲,Seneca 实施了对象/消息(actor/message)设计模式,专注于使用 Node.js 作为交换引擎:获取消息后,处理其内容,然后发送适当的响应,无论是发给消息始发者还是另一个服务。由于专注于与业务用例相对应的消息模式,拿来 Seneca 后,比较容易为你的应用程序迅速构建极简的可行产品。插件架构让你很容易将 Seneca 与其他工具集成起来,迅速为服务添加功能。 应用程序的要求提高或有变时,可以迅速为代码库添加新的模式,或者把现有模式分解成不同的服务。一个模式还可以调用另一模式,以便迅速重复使用代码。还很容易将 Seneca 添加到消息总线,那样可以把它用作一个框架,处理来自物联网设备的数据,因为你只需要定义监听端口,监视 JSON 数据在哪里提供。 服务可能不具有持续性,Seneca 为你提供了这个选择:使用内置的对象关系映射层来处理数据抽象,并提供了常用数据库的插件。 .Net Core 和 ASP.Net vNext微软开放了 .Net 的源代码,此举无异于公开了该公司的这个 Web 平台的大部分代码。新的 .Net Core 版本可以在Windows、OS X 和 Linux 上运行。.Net Core 目前从微软的 Codeplex 代码库迁移到了 GitHub,为 .Net 提供了一种更模块化的方法,让你可以在需要时,安装所需的功能。 ASP.Net 5 目前处于开发之中,这个 Web 平台的开源版本可在 .Net Core 上运行。你可以使用微软的 MVC 6 框架,将它作为 Web 应用程序的基础。还支持新的 SignalR 库,这些库增添了对 WebSockets 及其他实时通信协议的支持。 如果你计划使用微软的新款 Nano 服务器,就要使用 .Net Core 编写代码,因为它是为瘦环境设计的。新的 DNX 是 .Net 执行环境,简化了将 ASP.Net 应用程序部署到众多平台上的任务,还有用于包装代码、在主机上启动运行时环境的工具。特性可使用 NuGet 程序包管理器来添加,让你可以只要使用所需的库。 微软的开源 .Net 还很年轻,但是微软已承诺确保它取得成功。微软自己的下一代服务器操作系统支持开源 .Net,这意味着它在数据中心和云都有一席之地。 GlusterFSGlusterFS 是一个分布式文件系统。Gluster 把各种存储服务器聚合到一个庞大的并行网络文件系统。你甚至可以用它来代替Hadoop 集群中的 HDFS,或者代替成本高昂的存储区域网(SAN)系统,或者同时代替两者。虽然 HDFS 很适合 Hadoop,但有一个不需要将数据传输到另一处来分析的通用分布式文件系统是一大优势。 在当下商品化硬件、商品化计算以及对性能和延迟要求更高的时代,购买又大又贵的 EMC SAN,希望它能满足所有要求(自然满足不了)不再是你唯一切实可行的选择。GlusterFS 在 2011 年被红帽收购。 英文链接:http://www.infoworld.com/article/2982923/open-source-tools/bossie-awards-2015-the-best-open-source-data-center-and-cloud-software.html |