SAMI:来自三星的基于Docker和Mesos的容器解决方案(二)

本文讲的是SAMI:来自三星的基于Docker和Mesos的容器解决方案(二),【编者的话】在《SAMI:来自三星的基于Docker和Mesos的容器解决方案(一)》中我们提到,为像SAMI一样的现代IoT服务提供一个稳定安全灵活的IT环境是很有挑战性的。现在我们来探索一下,如何用Mesos和Docker过渡解决这些问题。

开始,我们决定建立一个自动化的流水线,这将使以下成为可能:

  • 构建有容错、自愈功能的基础设施。
  • 使用现代集群管理/分布式初始化系统,确保应用程序定义副本始终都在运行。
  • 使用Git作为唯一来源:所有工作配置都存放在Git中,这能降低建立一个修改管理/审计系统的难度。
  • 把应用软件打包成Docker镜像,便于快速部署。
  • 建立一个快速反应的协调系统。
  • 把现有的基础设施接入流水线。
  • 最后,组建一个持续交付平台。它能快速强大地完成工程(包括QA)进行生产部署。这是我们的使命所在,它能把我们从日常运营的开销和冗杂中解放出来,把时间精力集中在发展新的服务和改善流程上,这样,才能为组织贡献更多价值。

为了实现以上目标,我们提出了以下设计:

  • 高可用性(HA)Mesos集群将提供数据中心(DC)级别的抽象,正如典型操作系统提供工作站级别的抽象一样。DC是一个新型因素。
  • Mesos将作为一个DC-wide资源管理器。
  • 构建系统将会把应用程序打包成Docker镜像。之后这些镜像将会被push到Docker内部私有库。
  • Marathon将作为DC-wide 初始系统/进程管理器。所有的长时运行作业会通过Marathon进行部署和管理。
  • Chronos将作为DC-wide cron系统。所有的短时/批处理作业会通过Chronos进行调度管理。
  • 所有Marathon和Chronos的作业配置都将被check到Git。基础设施中的任何改动都会被追查到。
  • Git2Consul将用于同步Git仓库到Consul的KV存储,同时Consul的handler会监视KV的改动并通过REST API报告给Marathon和Chronos。
  • Consul将继续作为服务注册表。用Registrator监听Docker事件和私有库的改动并报告给Consul。这些最终将被Mesos-DNS所取代。

我们现在的工作流程大致如下几步:

1. 当开发者提交时,Git Post-Receive Hook 会开启Jenkins build。
2. Jenkins接着使用maven-dockr插件进行创建、标记和push Docker镜像到Docker私有库中。它也会在Consul的KV中更新镜像标记。
3. Consul Handler监视KV的更改并更新包含Marathon作业配置的Git repo。
4. Git2Consul获取这些更改并将repo同步到Consul的另一个KV。
5. 另一个Handler监视这个KV,将作业配置发送给Marathon。如果该服务尚未注册,创建新服务。否则更新该服务。
6. Marathon作为集群管理者和分布式初始化系统。它用API调用Docker daemon来启动容器。
7. Registrator(一个小型服务)监听Docker事件,更新Consul的服务目录。
8. 服务注册表的任何改动都能被Consul-Template捕捉到,这将刷新所有配置(主要是HAProxy)并重新加载相关服务。

如上所述,无需人工干预,应用程序会自动创建、打包和部署到各种环境中。如果你认真理一遍就会发现整个审计线是这样的:每一步都被记录在了Git上。这点非常重要,特别是你的团队规模很大、堆栈复杂且有许多活动部分的时候。另外,如果每天进行各种版本服务的工程中的每个人都能做到这一点,你就能懂得为何部署中每一步的记录是如此重要了。

通知(通过邮件、聊天室等)会及时的发送给团队,告诉他们,他们的作业是成功还是失败。在快速反馈回路中,这些结果能完全消除来自方程的Ops!

有了Mesos,我们就能更高效地运行基础设施,控制云计算支出在预算范围内。我们能够实现更高效的资源利用率,而且由于资源隔离,我们能够将多种服务(在Docker容器中运行)装在同一台主机上,建立真正意义上的多租户部署,借助Cassandra and Kafka之类后端,其中的应用程序可以实现共存。

回望我们已经实现的

尘埃落定,从成立到实现生产,我们总共才花了三个月的时间。没错,我们动作就是快!但不论从管理还是技术角度上来说,前进的道路上必将迎来新的挑战和阻碍。

新用户需要了解很多Mesos/Docker世界的很多新概念和细微差别。而摆脱对应用、主机和数据中心的传统思维方式不是件容易的事情。这需要一些内驱力来使不同的群体接受新概念。

从技术角度来说,尽管已有巨大的工作量,容器的生态环境仍不成熟。因此,我们在设计系统时要考虑这个因素,保证流水线的组织部分可以更改。更重要的是,你要将基础设施设计成模块化的,这样你才能更加方便地根据需求进行工具和技术的更换。

结论

有了上文中我提到的新流水线,我们可以更快的提交代码,更易于扩展,实现多租户,确保最佳的资源利用率。我们能在一些预生产堆栈里的繁重工作负载中实现将近80%的资源利用率。真难以置信,因为行业标准中的数据中心资源利用率只有8%左右!

举个例子,这里是高工作负载下我们预生产堆栈中的一个Mesos集群资源利用率情况:

curl http://10.20.0.201:5050/metrics/snapshot
{
..
"master\/cpus_total":247,"master\/cpus_used":192,
"master\/mem_total":583573,"master\/mem_used":415378,
..
} 

总之,SAMI团队对新模式的转变感到非常振奋。但它涉及到大量的研究、学习和努力的工作,才把我们带到这个层次。如果你们之中有人想要深入研究,一定要记住,新系统需要的改变与你之前做过的东西相差很大。到目前为止,我们对结果已经感到非常开心了,而且我们相信这些变化能把我们指引到对的方向!

原文链接:Containers for IoT-Scale Workloads: Part 2(翻译:马远征 审校:魏小红)

原文发布时间为:2015-07-17 

本文作者:夕口夕

本文来自合作伙伴DockerOne,了解相关信息可以关注DockerOne。

原文标题:SAMI:来自三星的基于Docker和Mesos的容器解决方案(二)

时间: 2024-08-01 23:56:46

SAMI:来自三星的基于Docker和Mesos的容器解决方案(二)的相关文章

基于Docker的持续交付系列( 二):阿里云code帮你实现持续交付第一步

前言         在上一篇博文:基于docker的持续交付系列(一):如何将app与docker整合并部署中,我们对app与Docker的整合.部署进行了简单介绍, 但在实践中你会发现,每当你修改代码之后,都要手动push代码,build image,push image以及重新部署,整个流程走下来繁琐且耗时较长,给我们提倡的持续交付徒增了许多烦恼.在容器hub和阿里云code两个平台的合力之下,改进的第一步已经实现,让我们细细来看. 用到的工具         同样,我们还是使用到了下述几

基于Docker的持续交付系列( 三):阿里云持续交付平台帮你实现

前言         在上一篇博文:基于Docker的持续交付系列( 二):阿里云code帮你实现持续交付第一步中,我们通过用阿里云code实现了从代码提交到镜像编译最终到部署容器服务的自动化,虽然简化了流程,但从持续集成的角度看,我们似乎漏掉了很重要的一步--集成,因为我们的代码在没有经过测试的情况下就发布上线了,这是何其危险的事情.现在,随着阿里云持续交付平台的介入,我们终于可以实现我们标题所讲的--基于Doecker的持续交付. 用到的工具         同样,我们还是使用到了下述几个平

基于Docker搭建多节点Mesos/Marathon

本文讲的是基于Docker搭建多节点Mesos/Marathon[编者的话]在之前的一篇博客中,我介绍了基于Docker搭建单机版Mesos/Marathon,但是仅仅使用了单个节点.而在这篇博客中,我将介绍基于Docker搭建多节点Mesos/Marathon,开发者可以使用3个节点快速地搭建一个真正的分布式容器集群系统.服务发现和负载均衡是容器集群必不可少的功能,我选择了Marathon LB来实现. GitHub地址: kiwenlau/mesos-marathon-platform 一.

Docker、Mesos和Marathon剖析以及入门实战

本文讲的是Docker.Mesos和Marathon剖析以及入门实战,[编者的话]国外广为流传的一个比喻是:在传统服务模式下,可以想象服务器就是IT的宠物(Pets),给它们取名字,并精心抚养长大,当它们生病了,你得为他它们治病.而在新形态的应用服务模型中,虚拟机被看做是农场中的公牛,名字通常都是编号,当他们生病了,你就杀掉他,用一头新牛代替. 未来的应用架构应该像对待农场中的公牛一样:对基础架构的"保养".保护基础架构的各种功能,比起云计算型应用模式可能会逐渐变得越来越不那么重要.最

容器存储架构比较:Kubernetes、Docker和Mesos Compare

本文讲的是容器存储架构比较:Kubernetes.Docker和Mesos Compare[编者的话] 容器存储是容器离不开的一个话题,对于无状态的Docker容器,容器重启时容器数据会自动清除,一些静态的数据我们可以通过配置文件或者在容器build时直接写死.但是对于数据库.日志文件等可以实时变化的数据,我们不能够通过这种方法存取.结合场景这次主要谈下Docker的存储方式,以及主要存储方式的对比. [3 天烧脑式基于Docker的CI/CD实战训练营 | 北京站]本次培训围绕基于Docker

云端基于Docker的微服务与持续交付实践

云端基于Docker的微服务与持续交付实践笔记,是基于易立老师在阿里巴巴首届在线技术峰会上<云端基于Docker的微服务与持续交付实践>总结而出的. 本次主要讲了什么? Docker Swarm Docker Swarm mode 微服务支持(Docker集群架构体系) Docker的发展趋势和前沿成果 在Docker技术方面还是很佩服大牛的,所以赶紧写下笔记,追随大神的脚步. 阿里云资深专家易立,技术就不说了,他比其他直播间硬生生多讲了半个多点,于情于理还是万分感谢本次分享的(可惜devOp

持续交付系列(二):使用Docker、Mesos实现持续交付

本文讲的是持续交付系列(二):使用Docker.Mesos实现持续交付,[编者的话]本文主要介绍Mesos和Marathon的搭建以及如何完成整个持续交付过程,以及后续还可以做哪些改进和加强.整个系统搭建完成后,应用代码的改变会自动触发Jenkins构建流程,几秒钟后,改变就会通过Jenkins.Docker Hub和Marathon传递到Mesos中部署上线,是不是很酷? 第一部分(中文翻译)我们介绍了如何Docker化一个Node.js应用,如何使用Fig部署Jenkins和Docker R

麻袋理财基于Docker的容器实践:互联网金融征信项目的微服务化之旅

FinTech第一期 征信是互联网金融的核心系统之一,在单体应用到服务化改造中,定义了API Gateway,Scheduler Service,Data Processing Service,Cache Service和Worker Service等服务,并实现了对基于Docker的微服务化. 本次分享的主题是<麻袋理财基于Docker的容器实践>--              征信要做的事情就是从内部外部获取数据,以此对用户的还款意愿进行甄别. 现在市场上也有很多第三方的征信公司,每家征信

夏日清风 - 基于Docker Swarm的极简Serverless实践

在今年4月份的DockerCon压轴的 Moby's Cool Hack Session上,Alex Ellis给大家展现了一个名为Function as a Service (FaaS)项目.FaaS基于Docker Swarm集群上实现了一个极简的Serverless框架,支持将任意Unix进程作为函数实现来对外提供服务. FaaS 架构 在 FaaS 原型系统中 任何进程都可以转化成为一个函数,并利用Docker镜像进行打包和交付 利用 Docker Swarm 集群的资源调度和routi