谈谈Apache Mesos和Mesosphere DCOS:历史、架构、发展和应用

简介: 本文讲的是谈谈Apache Mesos和Mesosphere DCOS:历史、架构、发展和应用,【编者的话】Mesos 是一个很年轻的开源项目,它的理念是怎样的? 它的整体架构以及服务对象又是什么? 基于此的 Mesosphere DCOS 又是如何定位的? 本文作者就这些话题展开了探讨。
本文讲的是谈谈Apache Mesos和Mesosphere DCOS:历史、架构、发展和应用 【编者的话】Mesos 是一个很年轻的开源项目,它的理念是怎样的? 它的整体架构以及服务对象又是什么? 基于此的 Mesosphere DCOS 又是如何定位的? 本文作者就这些话题展开了探讨。

Mesos 发展史

Mesos 是一个早在2009年由 Benjamin Hindman、Andy Konwinski、Matei Zaharia、Ali Ghodsi、Anthony D. Joseph、Randy Katz、Scott Shenker和Ion Stoica几人联合发起的伯克利大学研究项目。Benjamin 随后将其引入 Twitter,而如今它已经完美的运行在他们的数据中心上, Benjamin 本人也在不久之后成为了 Mesosphere 的首席架构师,正是它构建了 Mesosphere 数据中心操作系统(DCOS)。

Mesos 的设计宗旨在于尝试和提高集群的利用效率和性能,他们认为对于数据中心资源的单纯静态划分和使用的这样一个方式是值得重新考量的,举个例子来说:

我们假设你的数据中心里拥有9个主机:
1.png

如果把它静态的划分开来,并且指定每三个主机承载一个应用,这样一来总共是3个应用(这里是Hadoop、Spark 和 Ruby on Rails)。
2.png

显而易见的一个问题是这些主机的资源利用率并不会很高;
3.png

因此如果你想使用全部的资源,即这里例子中的全部9台主机,那么就需要将其抽象成一个共享资源池,而你可以按需计划配置,这样的话,利用率自然可以得到相应的提升;
4.png


Mesos团队的第二个观点在于他们觉得需要为分布式系统量身定制一套新的系统,换句话说,他们觉得MapReduce并不是适用于所有的场景(这也导致了Spark的诞生,而它又是另外一个故事了),而我们需要一个新的更简单和更具有通用性的专为分布式系统提供服务的这样一个框架。

Mesos 框架(分布式系统)到底是什么?

一般来说,一个分布式系统你需要有一个Coordinator(调度器)和 多个Worker(执行任务)。调度器以同步(分布式)的方式运行进程/任务,处理程序错误(容错),并且负责优化性能(即弹性伸缩)。换句话说,它负责协调在数据中心去实际执行你想要运行的代码(不需要是一个完整的程序,它也可以是某些种类的运算)。正如之前所提到的那样,Mesos将其称之为联合调度。
5.png

或者也可以这么说,Mesos是一个带有调度器的分布式系统。
6.png

那么Mesos的真正定位是什么呢? 当你尝试去执行它的任务时你可以理解为它实际上就是机器和调度器之间的一层抽象。

因此在Mesos里,调度器是和Mesos层(通过API等)通信,而不是直接跟物理机器打交道。Mesos这里通过这样的方式尝试解决的即是资源的静态划分问题,这意味着你不再需要针对每个特定的运行时分配一个对应的调度器去决定实际去执行它的workers,而取而代之的是,你有一个调度器去和Mesos通信,而它会反过来依据整个资源池的剩余资源做调度。
7.png

这样做带来的最显而易见的好处就是你可以在一批机器上运行多个不同的分布式系统并且更有效的(不再是静态划分)动态划分和共享这些资源。
8.png

其次,之所以这样抽象设计的另外一个重要原因在于它能够提供一个通用功能集(故障检测、分布式任务、任务启动、任务监控、结束任务、清理任务等),这样一来就无需每个分布式系统都各自重复的去实现这样一套逻辑。

Mesos 适合作为数据中心的哪一层的抽象?

Mesos 这一层抽象实现的目的即是想要尝试通过使用并更好的调度资源使得运行在其之上的这些框架变得更加易于构建和运行。
9.png

IaaS的抽象的是机器,例如你给它指定一个数字,它便会生成一堆的机器而这也可以看作是Mesos概念模型更底层化的一个抽象。PaaS则考虑的更多是部署和管理应用/服务,它并不关心底层的那些基础架构,而你可以把它看作是Mesos概念模型的一个更高层面的抽象。在交互方面,PaaS可能是和开发者直接交互,而Mesos则是以API的形式和软件程序交互。

换句话说,你可以基于Mesos之上构建一个Paas系统(例如像Marathon - 它好像任何地方都比一个真正的Paas系统更像PaaS),同时你可以在一个IaaS上运行Mesos(例如OpenStack)。

如果你将你的Mesos运行在一个组合系统(例如就像Openstack + 物理硬件 + 虚拟机)之上,那么你可以很直观的再次体会到动态划分资源的好处,那便是你能够跨越这些底层组件而直接的去管理和计划你的工作负载,某种意义上来说,你可以认为Mesos类似于是一个数据中心的内核,即它负责将物理机器抽象成资源,从而使得你能够忽略底层组件的存在,通过消费Mesos的抽象资源来构建分布式系统。

因此我们可以说,Apache Mesos是为构建和运行其它分布式系统(例如像Spark)提供服务的分布式系统。

Mesos架构内幕

在 Mesos 里,一个框架程序(或者说分布式系统)发起的一次请求会在被接收到的那个时刻由调度器承接和分配。这跟传统分布式系统一般人为发起请求的方式不太一样(再强调一下,Mesos将会让框架程序发起请求,而不是人工操作),传统的方式即需要在人为发起请求时设定好需要分配的特定资源,然后再去真正请求和获取这些资源,这类情况中最典型的莫过于需求场景的变换(设想在Map/Reduce的场景下,比如在Map和Reduce阶段切换之际产生的一个需求资源的变化)
10.png

与传统分布式系统不一样的是,Mesos 将会立马为其分配所能分配的最大资源,而不是傻傻的在那等到满足该请求的资源完成/完全到位(在这里它想要实现的便是在绝大多数情况下十分奏效的无阻塞式资源分配策略,即你无须立马消费预期请求的全量资源的这样的情景)。

当然,现在框架类应用(分布式系统)也可以使用Mesos提供的资源完成他们自己的调度,这便是所谓的 “二次资源调度”。
11.png

最终达到的效果即是你下发的一个任务可以在整个数据中心的任意一个地方提交并且运行。

构建这样的“二次资源调度”系统的原因在于它可以在同一时间内支持多个分布式系统。同样以上面的例子来解释,Mesos为Spark提供和分配所需的资源。而这里,Spark则负责决策和分配这些可用资源去运行实际任务(即因为可用的资源得以满足需求,所以我才能够实际去运行这些map任务)。
12.png

所以一旦一个任务被框架应用提交到Mesos,那么这些任务就必须被实际执行。Mesos master 负责指派任务给每个slave,而每个slave通过上面跑着的agent来管理和运行这些任务。(这即是说如果这个任务是对应的一个命令,那么它会去执行它,如果它需要一些特定的资源来完成这个任务,比如像jar包,那么它会先获取所需的资源,然后在一个沙盒里执行它,最后才发起这个任务)

或者说你也可以这样,框架应用可以通过一个执行器(框架应用需要一个中间层,这个中间层可以用来多线程执行任务)来灵活的决定它想要执行的任务。
13.png

为了保证资源的相对隔离性,Mesos 对 Kernel的cgroups和namespaces 提供了内置的原生支持,当然你也可以将一个Docker容器当做一个任务去运行。这样一来,它便给你提供了一个多租户的(框架)资源池的访问机制(跨主机和主机内部的进程间通信)。

你可以预请求你所需的资源,当然这样你也就回到了资源固定划分的时代。如果你有一些有状态的应用,那么你需要预定一些资源(这类任务通常需要在同一台主机上运行)并且需要一些持久化的存储卷(数据需要能够支持故障迁移和恢复),而这类需求Mesos同样能够支持。

Mesosphere DCOS

DCOS(数据中心操作系统)即是Mesos的“核心”与其周边的服务及功能组件所组成的一个生态系统。例如像mesos-dns这样的插件模块,类似一个CLI,一个GUI又或者是提供你想运行的所有的包的仓库等工具,以及像Marathon(又名分布式的init)、Chronos(又名分布式的cron)这样的框架等等。

顾名思义,它即是意味着一个跨越在数据中心或者云环境所有主机之上的操作系统。DCOS 可以运行在任意的现代Linux环境,公有或私有云,虚拟机甚至是裸机环境。(当前所支持的平台有:亚马逊AWS、谷歌GCE、微软Azure、OpenStack、Vmware、RedHat、CentOS、CoreOS以及Ubuntu)。迄今为止,DCOS 在其 公有仓库 上已经提供了多达40余种服务组件(Hadoop、Spark、Cassandra、Jenkins、Kafka、MemSQL等等)。

另附 Mesosphere 集群操作系统(DCOS)入门视频

原文链接:Introduction to Apache Mesos and Mesosphere DCOS (翻译:吴佳兴)

原文发布时间为:2015-09-20 
本文作者:colstuwjx
本文来自云栖社区合作伙伴DockerOne,了解相关信息可以关注DockerOne。
原文标题:谈谈Apache Mesos和Mesosphere DCOS:历史、架构、发展和应用
目录
相关文章
|
9天前
|
设计模式 Java API
Java 可扩展 API 设计:打造灵活的应用架构
【4月更文挑战第27天】设计可扩展的 API 是构建灵活、易于维护的应用程序架构的关键。Java 提供了丰富的工具和技术来实现这一目标,使开发者能够构建具有高度可扩展性的应用程序。
26 4
|
5天前
|
Cloud Native 安全 持续交付
构建未来:云原生架构在现代企业中的应用与挑战
【5月更文挑战第1天】 随着数字化转型的深入,云原生技术以其灵活性、可扩展性和敏捷性成为现代企业IT架构的核心。本文将探讨云原生架构的关键组件,包括容器化、微服务、持续集成/持续部署(CI/CD)以及DevOps实践,并分析它们如何共同塑造企业的运营模式。同时,文章还将讨论在采纳云原生过程中企业可能遇到的挑战,如安全性问题、技术复杂性以及组织文化的转变,并提出应对策略。
20 8
|
6天前
|
前端开发 JavaScript 安全
【TypeScript技术专栏】TypeScript在微前端架构中的应用
【4月更文挑战第30天】微前端架构通过拆分应用提升开发效率和降低维护成本,TypeScript作为静态类型语言,以其类型安全、代码智能提示和重构支持强化这一架构。在实践中,TypeScript定义公共接口确保跨微前端通信一致性,用于编写微前端以保证代码质量,且能无缝集成到构建流程中。在微前端架构中,TypeScript是保障正确性和可维护性的有力工具。
|
6天前
|
SQL Java 数据库连接
apache DbUtils 组件核心原理与应用
DbUtils 的设计思想是简化 JDBC 编程,通过封装 JDBC 操作,减少样板代码,提高开发效率。它通过 QueryRunner、ResultSetHandler 和 RowProcessor 的协同工作,实现了对 JDBC 资源的精细化管理,同时避免了资源泄漏的风险。DbUtils 的使用不涉及复杂的配置和ORM映射,适合需要快速、轻量级数据库操作的场景。
|
7天前
|
Cloud Native Devops 持续交付
构建未来应用:云原生架构在现代企业中的实践与挑战
【4月更文挑战第29天】 随着数字化转型的加速,企业正迅速转向云计算以支撑其业务敏捷性和创新。云原生技术,作为推动这一转型的关键因素,正在重新定义软件开发和运维模式。本文将深入探讨云原生架构的核心组件,包括容器化、微服务、持续集成/持续部署(CI/CD)以及DevOps文化,并分析这些技术如何帮助企业实现弹性、可扩展和高效的应用部署。同时,我们将讨论在采纳云原生实践中所面临的挑战,包括安全性、治理和人才缺口等问题。
|
7天前
|
消息中间件 PHP 数据库
【PHP开发专栏】PHP在微服务架构中的应用
【4月更文挑战第29天】微服务架构将大型应用拆分成独立小服务,PHP在其中可作为API网关、微服务提供者,参与服务发现、消息队列处理和事件驱动。最佳实践包括选择合适PHP框架、使用容器化技术、定义服务契约、采用分布式缓存、实现服务发现、监控和日志收集、优化数据库设计以及注重安全性。遵循这些实践,PHP开发者能构建高效、可扩展的微服务应用。
|
7天前
|
Cloud Native Devops 持续交付
构建未来:云原生架构在现代企业中的应用与挑战
【4月更文挑战第29天】 随着数字化转型的不断深入,企业的IT架构正经历着根本性的变革。云原生技术以其独特的弹性、可扩展性和敏捷性成为这一转型的关键驱动力。本文将探讨云原生架构的核心组件,包括容器化、微服务、持续集成/持续部署(CI/CD)以及DevOps实践,并分析这些技术如何帮助企业实现快速迭代和高效运营。同时,我们也将识别在采纳云原生技术过程中可能遇到的挑战,并提出相应的解决策略。通过实际案例分析,本文旨在为决策者提供实施云原生架构的洞见,以加速其业务创新和市场响应速度。
|
7天前
|
Cloud Native 安全 Devops
构建未来:云原生架构在现代企业中的应用与挑战
【4月更文挑战第29天】 随着数字化转型的不断深入,云原生架构已成为支撑企业敏捷性、可扩展性和创新能力的关键。本文将深入探讨云原生技术的核心组件,包括容器化、微服务、持续集成/持续部署(CI/CD)和DevOps文化,并分析其在不断变化的商业环境中实现快速迭代和资源优化的能力。同时,文章还将讨论企业在采纳云原生架构时面临的挑战,如技术选型、团队技能培养、安全性考虑及成本管理,并提出相应的解决策略。
|
7天前
|
运维 Cloud Native Devops
构建未来应用:云原生架构的演进与实践
【4月更文挑战第29天】在数字化转型的浪潮中,企业亟需灵活、高效的技术支撑来应对市场的快速变化。云原生架构以其独特的设计理念和技术栈,成为推动这一变革的关键力量。本文深入探讨了云原生的核心概念、关键技术和实施策略,旨在为企业提供一个清晰的云原生转型蓝图,助力其构建更加动态、可扩展的应用系统。
|
7天前
|
Cloud Native Devops 持续交付
构建未来:云原生架构在现代企业中的应用与挑战
【4月更文挑战第29天】 随着数字化转型的加速,云原生技术正成为推动企业IT架构现代化的关键力量。本文深入探讨了云原生架构的核心组件、实施策略以及面临的主要挑战。通过分析容器化、微服务、DevOps和持续集成/持续部署(CI/CD)等关键技术,揭示了云原生架构如何助力企业提高敏捷性、优化资源利用和加强安全性。文中还将提供针对企业在采用云原生实践中遇到的难题,如服务治理、复杂性和技能缺口等,提出切实可行的解决方案。

推荐镜像

更多