热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ApacheMesos和数据中心操作系统的崛起

本文讲的是ApacheMesos和数据中心操作系统的崛起,
本文讲的是Apache Mesos和数据中心操作系统的崛起 【编者的话】本文是Mesosphere公司的工程师对他们公司产品DCOS的介绍,也顺带介绍了Mesos的架构和功能以及Mesos的init框架Marathon和Cron框架Chronos。

罗杰伊尼亚齐奥是Mesosphere的基础设施自动化工程师和“Mesos实践”的作者。 感谢曼宁出版的团队的慷慨,SysAdvent读者在在 https://manning.com/books/mesos-in-action 使用代码“mesysad”时享受40%的折扣。

容器和应用程序编排是热门话题,因为组织和工程团队试图尽可能快地部署应用程序和基础设施的更改,同时提高数据中心的整体效率。当你读到容器的文章时,提到 Apache Mesos ( 论文 )通常都不会太遥远。你可能想知道Mesos是什么,以及如何将它用于管理大规模应用程序。

在这篇文章中,我将提供Mesos的介绍,总结一些Linux内核和Mesos之间的比较,以帮助你了解它是如何工作的。我将覆盖两个开源项目,这两个项目让工程团队能快速,轻松地部署在集群上的应用程序和计划任务。最后,我将讨论 Mesosphere 是如何结合所有这些来创建数据中心范围内的操作系统,并以Mesos为核心。

MESOS - 分布式内核

无论你正在你的笔记本电脑,智能手机还是平板电脑上阅读这篇文章,很可能你不知道你的Web浏览器在使用它的哪个处理器的核心。当然你可以找到,但是何必呢?操作系统的内核为你处理资源的抽象和调度。最终,操作系统很可能压根儿就不关心那么多;你只想要一个来运行你所爱的应用程序的方式,操作系统是提供那种体验的一种手段。

Mesos,和操作系统内核没有什么不同,提供了一种物理或虚拟机之上的抽象资源的方式。但是,它开始和操作系统内核(如Linux)不同的是抽象未绑定到一台单个的主机。相反,Mesos提供了一种为任何数量的机器抽象资源的方式,从10几到超过10,000——并将它们编程为一个单一的实体,从而导致简化的系统管理和提高资源利用率​​。许多公司,如Apple、Twitter、 Airbnb、彭博社以及其他的公司已经转向Mesos来增强他们的计算基础设施。

为了更好地可视化我刚才解释的,看看下面的图,比较在一台机器上运行的Linux内核,以及多台计算机参加的一个Mesos集群之间的资源抽象和调度。
image_0.png

两种情况共有的是,一些抽象层 —— 无论是Linux内核的单一机器硬件还是Mesos的多台机器 —— 负责提供计算资源(处理器核心,内存,存储和网络端口)给应用程序。 Linux在一台机器上在这件事情上做出了出色的工作,但是当你想要把应用程序部署到多台机器上时会发生什么?每台机器实际上变成了一个筒仓,只能够提供也在那个盒子运行的应用程序的资源。

资源调度

尽管是一个近期热门的流行语,“资源调度”并不是一个新的概念。两个流行的例子是Linux内核中的 完全公平调度器 和VMware vSphere的 分布式资源调度器(DRS) 。在这两种情况下,这些调度器在可用资源的基础上寻求优化任务的调度。 Mesos从这两个调度器借用想法,并建立成一个抽象层,或者它自己的“分布式内核”。但是,不像Linux内核,它主要提供了访问一台机器上的底层物理(或虚拟)计算资源,Mesos代理为一个Mesos主节点提供资源,然后被各种应用程序使用。

Mesos主节点实现了一个两层调度模型,这使得Mesos主节点能发送资源供给给一个应用程序(或框架,用Mesos的说法)。然后,应用程序可以接受或拒绝这个供给,基于供给的属性,或者如果供给有任何任务要执行。Mesos主节点能够调度多个不同的资源类型——CPU,内存,磁盘,端口——在各种不同的应用中,通过内置到它的资源分配模块的 优势资源公平 算法。因此,取代供应多台计算机来运行特定服务的是你现在可以定义应用程序需求的资源量,并允许它在群集上的任何地方被调度。

静态分区的终结

让我们暂时退一步,并考虑以下情形。你有两个服务在你的数据中心:一个Ruby on Rails应用程序,和一个Jenkins CI集群。当其中一个服务需要比一台机器可以提供的更多的资源时,你提供更多的机器。如果你的Rails应用程序需要处理更多的用户,你需要提供一个新的服务器并 重新 配置您的负载均衡器。如果构建正在排队等候你的Jenkins CI主节点,你提供额外的詹金斯代理并手动将其连接到主节点。

这种情况表明,人类被留下进行徒手资源分配和容量规划,坦率地说,我们很不擅长。很有可能这些应用程序不会100%的时间都是100%的利用率运行,从而导致了令人失望的 行业平均6-12%的系统利用率  。当你开始测算运营成本的整体利用率时, 这是一个很大的资本浪费!无论你是运行你自己的数据中心还是使用一个基础设施即服务提供者例如AWS或者Azure,他们都是在这一天结束时有未使用周期的服务器。

通过抽象系统资源,你能停止猜测特定应用程序需要的机器数量,而是集中在他们实际上的资源消费量——也就是运行你的Rails应用程序或你的CI服务的CPU和内存。只要数据中心的机器的数量提供了足够的资源来运行所有的工作负载,你就是在良好的状态。而如果不在,则可以将工作负载加入队列,直到资源可用为止。但关键是,你现在添加额外的计算资源是到更大的Mesos集群中,而不是一些小的、静态分区的服务或手动创建和配置虚拟机中。

容器化

和在20世纪兴起的货运行业的联运运输集装箱运动有许多相似之处,我们看到在IT行业的同样的运动,不过是以惊人的速度。事实上,在计算中使用容器不是那么新;  控制组  (或简称cgroup)第一次加入到Linux内核早在2008年1月,作为分离单个进程的方式。在过去的几年中, Docker最终用户开始使用这种技术变的令人难以置信的简单。

由于容器提供了虚拟机的轻量级替代,并允许用户在孤立环境中运行他们的应用,Mesos的内核是建立在容器之上,同时支持Linux cgroup和Docker容器。这些容器技术允许任务在与同一台机器上的其他任务不同的隔离水平上运行。

image_1.png


但作为一个分布式的内核,Mesos仅提供使用这些容器技术启动进程,处理像资源分配,端口和卷映射的方式。要启动使用Mesos的任务,我们需要一个init系统来管理任务,并且有一个cron系统和它一起会更好。

Marathon and Chronos —— init和cron框架

我已经提到,Mesos提供了一种多个应用程序( 或框架,使用Mesos术语)在给定的集群上共享多种不同类型的资源的方式。一个框架在Mesos 主节点上注册并接受资源供给。有 许多不同的框架 目前可用,包括大数据处理(Spark,Kafka),分布式存储和数据库(HDFS,Cassandra),批调度(Chronos,Aurora),以及长时间运行的服务(Marathon,Aurora)。我会集中讨论两个流行框架:Marathon和Chronos。这些框架分别用于部署长时间运行的服务(如Web应用程序)和分布式cron作业。

Marathon

Marathon  是由Mesosphere开发的Mesos的开源init系统。它大致相当于supervisord——管理长时间运行任务,并自动重新启动应用程序实例,如果它发生故障。因此,如果一台机器在群集中在半夜出现故障,马拉松自动在一个可用的机器重新调度出现故障的应用程序。

马拉松支持在Mesos集群上启动cgroup和Docker容器,并能快速简单地扩展应用到N个实例 。

马拉松还包括一个可扩展的的 REST API ,它允许您创建、修改和删除应用,以及查询有关运行实例的信息。这允许你在发生变化的时候 使用你的CI系统自动执行应用的滚动升级  ,或者 动态创建HAProxy的配置并重新启动服务 。当涉及到应用管理时,Marathon允许你把你的调度中最糟糕的部分,人,从你的基础架构中去除。

Chronos

Chronos  是一个 最初由Airbnb开发 的Mesos的开源cron系统 。它建立在传统的cron功能至上,如 ISO 8601 格式时间戳,失败作业自动重试,指定任务应运行的最长时间,允许一个作业依赖其他作业的能力。像Marathon一样,它也支持在cgroup和Docker容器中运行任务,并提供了可扩展的 REST API ,可用于创建,修改,删除,和手动触发工作。

Mesosphere DCOS —— 基于Mesos的操作系统

如果你花一分钟思考,组成一个操作系统的组件,如Red Hat Enterprise Linux或Ubuntu,你可能会找出以下组件:
  • Init 系统: 一个守护进程(PID1), 例如 Systemd(RHEL 7)或Upstart(Ubuntu 14.04), 管理长时间运行服务,当它们失败时自动重启(或respawn)
  • 包管理: 一个包格式(rpm, deb), 包管理器(yum, apt), 一个基础仓库集合(base, main)
  • 命令行界面: 一个shell, 当用户登陆时启动(bash, zsh).
  • 图形用户界面: 一个可选的图形用户界面来观测和管理系统.

有了开源的Mesos项目作为它的分布式内核,Marathon作为它的init 系统,Mesosphere已经着手建立一个现代的分布式的企业级的操作系统。这个系统,称作 数据中心操作系统(DCOS) , 为系统管理员提供了一种不用关心例如对服务静态分区或在半夜机器故障的大规模部署应用和服务的方式。DCOS目前提供 两种版本 : 企业版和社区版

包管理

在写这篇文章的时候,Mesosphere提供了DCOS的两种包仓库:  Universe Multiverse 。这些仓库分别托管生产可用的和测试的包。Universe的文档很好的覆盖了规范,这里我就不讲了。但是它本质上可以归结为一个JSON对象定义的包,可以被DCOS的CLI处理并被Marathon的API理解

命令行界面

DCOS CLI 可以安装在你的笔记本或工作站上,并可以和DCOS的多个服务交互。它提供了在DCOS集群管理包、服务、节点的功能。
SERVICES=( chronos jenkins spark hdfs cassandra kubernetes ) for service in ${SERVICES[@]}; do dcos package install --yes $service done 


这些服务中的一些——Cassandra,HDFS,Kubernetes——需要一些不平凡的努力来有效部署。Mesosphere的团队使用这些包仓库提供和维护了在你自己的数据中心部署这些服务的一键的全自动的容错的解决方案。

图形界面

尽管DCOS CLI允许你完全从命令行管理操作系统,web界面提供了集群的包括安装的服务,运行的任务以及属于这个集群的节点的信息

image_2.png


要部署你自己的应用和Docker容器,你可以使用CLI或者导航到Marathon的web界面(在Services tab选项卡中)。在那你可以创建一个新的应用,指定需要的资源,实例的数量,Docker容器镜像的信息,等等。虽然DCOS包含Marathon作为它的init系统,你也可以在Marathon之上部署多个Marathon实例,这样你可以为不同的团队提供他们自己的PaaS而不用担心他们的应用互相影响。

总结

Mesos提供了数据中心多台机器资源的抽象层,允许它们像一个实体一样来编程。使得多个应用能共享一个集群的机器而不用担心数据中心内的静态分区。Marathon允许你在集群上部署应用和长时间运行的服务,通过它的API获得的信息可以用来动态的创建负载均衡器的配置和在配置改变时重新加载配置。Mesosphere DCOS组合一系列开源的和商业的组件成为一个易于管理和部署的Mesos集群,允许你快速部署应用和容器。

所以,如果你想要提高你自己基础机构的资源利用和去除人类调度的瓶颈,或者你只是在寻找一些新的东西来玩,或许是时候来试一试Mesos和Mesosphere DCOS了。
  • https://github.com/mesosphere/playa-mesos/
  • https://docs.mesosphere.com/getting-started/

原文链接:Day 6 - Apache Mesos and the Rise of the Datacenter OS(翻译:陈光)

原文发布时间为:2015-12-18
本文作者:Casgy 
本文来自云栖社区合作伙伴DockerOne,了解相关信息可以关注DockerOne。
原文标题:Apache Mesos和数据中心操作系统的崛起

推荐阅读
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 本文探讨了容器技术在安全方面面临的挑战,并提出了相应的解决方案。多租户保护、用户访问控制、中毒的镜像、验证和加密、容器守护以及容器监控都是容器技术中需要关注的安全问题。通过在虚拟机中运行容器、限制特权升级、使用受信任的镜像库、进行验证和加密、限制容器守护进程的访问以及监控容器栈,可以提高容器技术的安全性。未来,随着容器技术的发展,还需解决诸如硬件支持、软件定义基础设施集成等挑战。 ... [详细]
  • {moduleinfo:{card_count:[{count_phone:1,count:1}],search_count:[{count_phone:4 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 本文介绍了将mysql从5.6.15升级到5.7.15的详细步骤,包括关闭访问、备份旧库、备份权限、配置文件备份、关闭旧数据库、安装二进制、替换配置文件以及启动新数据库等操作。 ... [详细]
  • 本文介绍了在RHEL 7中的系统日志管理和网络管理。系统日志管理包括rsyslog和systemd-journal两种日志服务,分别介绍了它们的特点、配置文件和日志查询方式。网络管理主要介绍了使用nmcli命令查看和配置网络接口的方法,包括查看网卡信息、添加、修改和删除配置文件等操作。 ... [详细]
  • 本文总结了初学者在使用dubbo设计架构过程中遇到的问题,并提供了相应的解决方法。问题包括传输字节流限制、分布式事务、序列化、多点部署、zk端口冲突、服务失败请求3次机制以及启动时检查。通过解决这些问题,初学者能够更好地理解和应用dubbo设计架构。 ... [详细]
  • 使用Docker安装和运行Nexus
    本文介绍了使用Docker安装和运行Nexus的方法,包括docker-compose.yml配置和启动时可能出现的权限问题解决方法。同时提供了登录控制台验证安装的地址和登录信息。 ... [详细]
  • 如何使用PLEX播放组播、抓取信号源以及设置路由器
    本文介绍了如何使用PLEX播放组播、抓取信号源以及设置路由器。通过使用xTeve软件和M3U源,用户可以在PLEX上实现直播功能,并且可以自动匹配EPG信息和定时录制节目。同时,本文还提供了从华为itv盒子提取组播地址的方法以及如何在ASUS固件路由器上设置IPTV。在使用PLEX之前,建议先使用VLC测试是否可以正常播放UDPXY转发的iptv流。最后,本文还介绍了docker版xTeve的设置方法。 ... [详细]
  • 容器管理与容器监控influxDB
    容器管理与容器监控-influxDB什么是influxDBinfluxDB安装(1)下载镜像(2)创建容器(3 ... [详细]
  • 随着我司的应用都开始容器化,相应的ETL流程也需要迁移到容器中。常规的SQL和shell脚本迁移之后执行基本没有问题,主要的问题在于数据接入使用kettle的场景下,kettle启 ... [详细]
author-avatar
常奕尧
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有