过完程序员节吃完蛋糕,让我们动力十足地开始新一轮的学习吧!
今天小数为大家带来的是一篇Uber海外工程师的演讲视频解读,让我们一边听着纯正的英语(大雾)一边看着PPT一边来了解Uber的容器技术世界吧:)

如果你是Uber公司,你需要存储司机和乘客APP每30秒发出的位置信息,有大量的实时数据需要实时使用,你该如何做呢?

Uber的解决方案是综合性的。他们建立了一套系统,将Cassandra跑在 Mesos上面。在一个演讲中Uber的软件工程师非常好的解释了这个系统(https://www.youtube.com/watch... ,小数表示是非常纯正的印度英语)。

如今的开发们总是有太多艰难的决定要做。我们应该全部都投入到云吗?哪一个云?贵不贵?会不会厂商锁定?我们是否应该两条路一起来尝试然后做个混合架构?因为担心平台毛利达不到50%,我们是否应该全部自研?

Uber决定打造他们自己的系统,或者说他们打算把当下两个十分能干的开源组件结合在一起。让Cassandra和Mesos一起工作,就是Uber选择的方式。

Uber做出这个决定并不困难。他们资金充足,有着顶级的人才和资源去开发、维持以及升级这个复杂的系统。

自从Uber的目标确定为让每个人、每个地方的运输实现99.99%的可用,在扩大规模的同时想要控制开销就变得非常有意义。

用金钱来换时间通常是一笔好交易。用金钱来买技能也常常是很有必要的。考虑到Uber可靠性的目标,10000个请求只有一个允许失败,他们需要运作多个数据中心。Cassandra被证明可以处理数据中心大量的负载和工作,于是数据中心就帮Uber做了这个决定。

如果你想让运输系统可靠到达每个人每个地方,那么就需要高效地利用你的资源。这是使用数据中心操作系统例如Mesos背后的想法。通过统计相同机器上的复用服务,就可以减掉30%的机器,节省了一笔不小的费用。Mesos之所以被选中,是因为在那时它是唯一生产环境里被证实可以管理数万集群的工具,这正是Uber需要的,Uber要做的系统规模确实很大。

还有哪些更有趣的发现呢?

  • 你可以在容器里运行有状态的服务。Uber发现几乎没有任何差别,对比在裸机上跑Cassandra和在一个由Mesos管理的容器里跑Cassandra,大概仅有5-10%的差别。

  • 性能很优秀:读延迟均值:13ms;写延迟:25ms;P99s看起来也不错。

  • 他们能支持的最大集群每秒有超过一百万次的写和十万左右的读。

  • 敏捷比性能更重要。在这种架构下Uber得到的是敏捷:很轻松地就可以在集群上创建和运行工作负载。

最初

  • 静态分区机器横跨不同的服务

  • 50台机器用于API,50台用于存储,并且它们毫不重叠。

现在

  • 一切都运行在Mesos上面,包括有状态的服务如Cassandra和Kafka。

  • Mesos是数据中心操作系统,能够让你的数据中心变成一个单个的资源池。

  • 在当时Mesos是唯一可以管理数万台机器的工具,现在或许也有了其他的选择。

  • Uber 在MySQL上建立了他们自己的Sharded数据库,命名为Schenmaless。Cassandra和Schenmaless将会成为Uber的两个数据存储选择。而现有的Riak设备将会移到Cassandra上。

  • 一个单独的机器可以跑不同类型的服务。

  • 在同一机器的静态复用服务可以带来减少30%机器使用。这是一个来自Google Borg系统的实验发现。

  • 举例,一个使用了很多CPU的服务和一个使用了很多存储或者内存的服务可以很好地匹配,这两个服务可以很效率地跑在同一服务器上,机器利用率得到了提升。

  • Uber现在有20个Cassandra机器,计划将来增加到100个。

  • 敏捷性比性能更重要。你需要有能力管理这些集群并且在它们上面以一种平滑的方式进行不同的操作。

  • 为什么在一个容器里运行Cassandra而不是在整个机器上?

  • 你想要存储数据数千个千兆字节,但是你希望它能在多个机器上复制甚至跨数据中心。

  • 你同样希望在不同的集群实现资源隔离、性能隔离。

  • 很难在一个共享集群做到上述这些。举例,如果你创建了一个1000节点的Cassandra集群,它要么不能大规模,要么就会在不同集群之间有性能干扰。

生产环境

  • 在两个数据中心间(东海岸和西海岸)有大约20个的集群复制。

  • 最初有四个集群,包括中国。但是和滴滴合并后,这些集群就关闭了。

  • 在两个数据中心有大约300台机器。

  • 最大的两个集群:每秒超过一百万次读和十万次写。

  • 其中的一个集群用来存储每30秒来自司机和乘客app的位置信息。

  • 平均读延迟:13ms;平均写延迟:25ms

  • 大多数使用LOCAL_QUORUM的一致性级别(即强一致性)。

Mesos

  • Mesos从机器中抽象了CPU、内存和存储。

  • 你看到的不再是单独的机器,编程的对象是一整个资源池。

  • 线性扩展。可以跑成千上万台机器。

  • 高可用。Zookeeper被用来在可配置数量的复制中进行leader选举。

  • 容器上可以使用Docker containers或Mesos containers。

  • 可插拔的资源隔离。比如Linux可用Cgroups memory和CPU isolator。有一个Posix isolator。对于不同系统有着不同的隔离机制。

  • 二级调度。来自Mesos agent的资源被提供给不同的framework。Framework在这之上调度他们的任务。

Apache Cassandra

  • Cassandra非常适合Uber的用例。

  • 水平扩展。读和写规模随着节点增加线性扩展

  • 高度可用。容错率有着可调的一致性水平。

  • 低延迟。在同一数据中心维持毫秒级的延迟。

  • 操作简单。它是一种同构集群。没有master。集群中没有特殊节点。

  • 丰富多样的数据模型。它有column、compositekey、 counter、 secondary index等多种模型。

  • 和其他开源软件有很好的集成。Cassandra和Hadoop、Spark、Hive都有连接。

Dcos-Cassandra-Service

  • Uber和Mesosphere合作搭建了mesosphere/dcos-cassandra-service——一个自动化的服务可以轻松部署和管理。

  • 在最上面的是WebInterface或者ControlPlane API。你只要说明需要多少节点,需要多少CPU,指定Cassandra配置,然后提交到Control Plane API。

  • 在Uber使用部署系统,始于用来跑无状态服务的Aurora的上面,可以自启dcos-cassandra-service framework。

  • 在示例中dcos-cassandra-serviceframework有两个集群和Mesos master对话。Uber在他们的系统中使用了5个Mesos master。Zookeeper用来leader选举。

  • Zookeeper也用来存储框架元数据:哪一个任务在跑,Cassandra配置,集群健康等。

  • 在集群中Mesos agent跑在每一台机器上。Agent为Mesos master提供资源,master将它们离散地分发出去。分发可以被framework接受也可以被拒绝。多Cassandra节点也可以跑在同一机器上。

  • 使用的Mesos Container,而不是Docker。

  • 在配置中override 5个端口(storage_port,ssl_storage_port, native_transport_port, rpcs_port, jmx_port),所以多个容器可以跑在同一机器上。

  • 使用了persistent volume,所以数据被存放在沙箱目录之外。如果Cassandra挂掉,数据仍然在persistent volume,挂掉重启之后还可以提供给同一任务。

  • 动态预留被用来确保挂掉的任务重启后资源可用。

  • Cassandra服务操作

  • Cassandra有一个seed node的理念,当新节点加入集群时自启gossip process。创建一个定制的seed provider用来启动Cassandra节点,让Cassandra节点在Mesos集群可以自动地roll out。

  • Cassandra集群的节点数量可以使用一个REST请求来增加。它会启动附加节点,给它seed nodes,以及自启附加的Cassandra daemons。

  • 所有Cassandra的配置参数都可以改变。

  • 使用API,一个挂掉的节点可以被替换掉。

  • 在复制之间同步数据是需要修复的。修复的大致范围是在一个一个节点的基础上进行。它并不会影响性能。

  • 并不需要清理移走数据。如果节点被加进来,数据会移到新的节点,这时清理被用来删除被移过来的数据。

  • 多数据中心复制通过framework来配置。

  • 多数据中心支持

  • 在每个数据中心设置Mesos独立安装。

  • 在每个数据中心设置Framework的单个实例。

  • Framework互相对话,并且定期交换seed。

  • 这些都是Cassandra需要的。通过自启其他数据中心的seed,节点可以gossip拓扑结构,指出这些节点是什么。

  • 数据中心之间ping延迟是77.8ms。

  • P50的异步复制延迟:44.69ms;P95: 46.38ms; P99: 47.44 ms。

  • 调度执行

  • 调度执行被抽象成计划(plan)、阶段(phase)和区块(block)。一个调度计划有不同的阶段,一个阶段又有多个区块。

  • 第一阶段,一个调度在进行中出现reconciliation时,它会前往Mesos然后指出哪些在运行。

  • 有一个部署阶段会检查如果配置中节点的数量已经存在于集群中,有必要的话就会部署它们。

  • 一个block就相当于一个Cassandra节点规格。

  • 还有其他的阶段:备份,恢复,清除和修复,根据REST端点触及的是哪一个。

  • 集群可以每分钟一个新节点的速度来启动。

  • 每个节点启动时间希望能降到30秒。

  • 在Cassandra不能够多节点同时启动。

  • 通常给每个Mesos节点2TB的硬盘空间和128GB的内存。给每个容器分配100GB,32GB给每个Cassandra进程(数据并不完全准确)。

  • G1garbage collector被用来替代CMS,没有任何调优的情况下它有更好的延迟和性能表现。

文章来源:High Scalability 版权归原作者所有
http://highscalability.com/bl...

Uber如何使用Mesos的?答曰:和Cassandra一起用相关推荐

  1. RSS你会用了吗?答曰:不会

    在查关于RBAC权限管理设计的时候看到了RSS的相关内容,自己也经常用RSS,可是猛的一问,RSS你会用了吗?答曰:不会. 如果想了解这方面的资料的话,大家可以参考一下如下文章((作者:李天平    ...

  2. 答与微博前端教主在吃饭时讨论到的一道微软面试题

    加引号是因为我不知道是否真是微软面试题.题目是这样的: 有一车在某无限长公路上行驶,其起始位置和单位时间内速度均为有限大整数(正负不确定), 现有一仪器,在每一时间单位内可以探测1次车是否在指定位置, ...

  3. Uber是如何管理大规模数据工作流的?

    让这些数据可操作,需要进行数据提取.转换.解析和编排,从而在传统商业智能.机器学习.模型训练.可视化和报表等场景中广泛应用.尽管在Uber迅速发展的初期,上线了广覆盖面的数据工作流系统,用户须针对每种 ...

  4. 笑人齿缺,曰狗窦大开

    这是<从百草园到三味书屋>里面出现的一句. 那几句古文是鲁迅随便举的例子,都出自那个时代学生的基础教材如<论语>.<易经>等,而题主说这一句出自<幼学琼林·身 ...

  5. 【开篇有益】敢问路在何方,佛曰路就在脚下

    前言 说来也是惭愧,入园接近两年,也曾多次许下自我承诺来激励自己开始写文,一来记录自己的所想所思所见所闻,二来分享学习的知识以及坑,曾经师徒四人为了取得真经,亦可历经磨难,不忘初心,那么浮躁的我们,是 ...

  6. Spark与Hadoop MapReduce相比,有哪些优点你知道吗?

    一提到大数据处理,相信很多人第一时间想到的是 Hadoop MapReduce.没错,Hadoop MapReduce 为大数据处理技术奠定了基础.近年来,随着 Spark 的发展,越来越多的声音提到 ...

  7. 【洛谷P1508】吃吃吃

    题目背景 问世间,青春期为何物? 答曰:"甲亢,甲亢,再甲亢:挨饿,挨饿,再挨饿!" 题目描述 正处在某一特定时期之中的李大水牛由于消化系统比较发达,最近一直处在饥饿的状态中.某日 ...

  8. 搜索引擎技术之概要预览

    搜索引擎技术之概要预览 前言 近些天在学校静心复习功课与梳理思路(找工作的事情暂缓),趁闲暇之际,常看有关搜索引擎相关技术类的文章,接触到不少此前未曾触碰到的诸多概念与技术,如爬虫,网页抓取,分词,索 ...

  9. 第七篇:数据预处理(四) - 数据归约(PCA/EFA为例)

    前言 这部分也许是数据预处理最为关键的一个阶段. 如何对数据降维是一个很有挑战,很有深度的话题,很多理论书本均有详细深入的讲解分析. 本文仅介绍主成分分析法(PCA)和探索性因子分析法(EFA),并给 ...

最新文章

  1. python 填充多边形 学习笔记
  2. 理论物理极础1. 经典物理的本性
  3. 实锤!沙特新规,出货箱单必须显示条形码,发票必须盖章!
  4. python列表输入10个数、并排序-我该如何对一百万个数字进行排序,并且仅在Python中打印前十个数字?...
  5. linux时间戳_10款优秀的 Linux 网络工具
  6. vue监听字符串长度_Vue 的 computed 和 watch 的区别
  7. 【博弈论】bzoj1115 [POI2009]石子游戏Kam
  8. c++小程序代码_# 微信小程序的原生框架和taro对比 ##
  9. PHP 扩展 Mongo 与 MongoDB
  10. flume与log4j的整合
  11. java对外接口开发实例
  12. mapboxgl 互联网地图纠偏插件(二)
  13. 庄子(公元前369年-公元前286年)
  14. iphone屏幕上的圆圈怎么设置_苹果手机上的小圆圈在哪设置【方法介绍】
  15. OA之会议排座与送审
  16. 2021-1-26-java生成二维码
  17. matlab实习,matlab实习报告
  18. 一线城市的游戏建模师大概是什么收入水平?
  19. 七大管理工具:SWOT、PDCA、6W2H、SMART、WBS、时间管理、二八原则!
  20. Fedformer-MOE模块

热门文章

  1. java语言实现任何一种排序_请用java语言编写排序程序。
  2. IDEA 不提示报错 和有波浪线
  3. 以下实例在用户点击按钮后对字符串进行反转操作
  4. js能订阅mq吗_ActiveMQ+MQTT实现客户端订阅推送模式(一)订阅者
  5. 特征级融合_多知识图谱的融合算法探索
  6. java捕捉sql执行异常_如何捕获java.sql.SQLIntegrityConstraintViolationException?
  7. 无名接口.php,李无名
  8. python经典题库和答案_Python99道经典练习题答案.docx
  9. python语言是非开源语言_python是非开源语言吗
  10. 苹果自带的清理软件_苹果电脑清理软件哪个好|电脑|苹果电脑|mac|旧文件