数智资源网
首页 首页 大数据 查看内容

每秒上百万次的跨数据中心写操作?Uber是如何处理的?

木马童年 2020-10-17 22:44 24 0

如果你也是Uber技术团队的一员,司机和乘客App每30秒就要发出一次定位数据,而你就要把这些数据全保存下来,你会怎么做?在Uber有很多类似的要实时处理的数据。Uber的解决方案是非常完善的。他们在Mesos上面运行了Cas ...

如果你也是Uber技术团队的一员,司机和乘客App每30秒就要发出一次定位数据,而你就要把这些数据全保存下来,你会怎么做?在Uber有很多类似的要实时处理的数据。

每秒上百万次的跨数据中心写操作?Uber是如何处理的?

Uber的解决方案是非常完善的。他们在Mesos上面运行了Cassandra,基于这样的底层构建了自己的系统。在现在这个时代开发者总是要做出许多艰难的选择。我们是不是该把程序全部署在云上?选哪个云?会不会太贵?怕不怕用上就脱离不开了?或者是不是该将云上和自建两种方式结合,精心打造出自己的混合型架构?或者还是为了避免由于没能达到50%毛利润的目标而被董事会纠结,索性不要上云,全部自建?

Uber的最终选择就是自建,甚至更进一步,他们是把两个非常强大的开源模块拼接在了一起,打造出了他们自己的系统。需要的就是一种让Cassandra和Mesos可以一起工作的方法,而这正是Uber做的。

对于Uber来说做这个决定并不是那么困难。他们现金流非常充裕,所以能够请得到顶尖的人才,可以获得所需要的最好资源,以此来创建、维护以及更新这样复杂的系统。

由于Uber对于系统的目标是要让系统对于任何地方的任何人都有99.99%的可用性,所以对于系统在未来向无限种可能扩张这个目标来说,也是非常合情合理的。

但是当你听到这个谈话的具体内容的时候你就会意识到要做成这样的系统所有付出的惊人代价。这是不是一家象你这样的普通公司所能承受得了的呢?可能完全不行。如果你也对云持否定态度,总是觉得所有人都应该自建机房自己从头做起从硬件到软件地构建自己的系统的话,请你牢牢记住上面所说的这一点。

用钱来买时间通常都是划算的,而用钱来买技术就更是绝对必要的了。

就Uber的可用性目标而言,每一万个请求中只能允许最多有一个失败,那么他们的系统就必须构建于多个数据中心的基础之上。因为Cassandra已经被业界实践证实可以跨数据中心处理海量请求,所以用它做数据库的候选是完全可以胜任的。

而且,如果你想让交通运输对于任何地方的任何人都非常可靠,你就要非常高效地利用自己的资源。所以才需要使用类似Mesos这样的数据中心操作系统。据统计数据显示,在相同的服务器集群上复用多种服务可以帮你节约30%的服务器,这也就是节约了成本。选择Mesos的原因也是因为Uber的需求已经是要运行上万台服务器的集群,而在当时Mesos是唯一被证实能满足这个需求的产品。Uber做的系统总是规模很大。

还有没有别的更有趣的发现?

可以在容器中运行有状态的服务。Uber发现把Cassandra直接运行在服务器上,与把它运行在用Mesos管理的容器中相比,两者几乎没有什么性能差别,只有5-10%的损耗。

性能看起来不错,平均读延迟13ms,写延迟25ms,99%的测试数据都很令人满意。

对他们最大的集群来说可以支持每秒超过一百万次写操作,以及数十万次读操作。

灵活性比性能更重要。在这样的架构下Uber获得了灵活性。在集群之间运行和分担负载都不在话下。

系统最早期

在服务之间静态分配服务器。

比如,50台服务器供API专用,50台供存储用,等等,而且它们之间并不重合。

现在的系统

准备在Mesos上面运行所有的东西,包括Cassandra和Kafka之类的有状态的服务。

Mesos是一种数据中心操作系统,允许你针对数据中心来编程,就象是一个资源池一样。

在当时Mesos已被证实可以运行在数以万计的服务器上,这也是Uber的需求之一,所以他们才选了Mesos。现在Kubernetes可能也能符合这个要求。

Uber自己构建了名为Schemaless的基于MySQL的分布式数据库,也就是说Cassandra和Schemaless将是Uber的两大存储选择。现有的基于Riak的系统都会迁移到Cassandra上。

单机服务器上可以运行不同种类的服务。

统计数据表示,在相同的服务器上复用服务可以让总的服务器需求减少30%。这个数字是Google用Borg做的实验中总结出来的。

比如,如果一种服务会消耗非常多的CPU,那它就可以和另一种使用非常多存储或内存的服务共处得很好,它们两个可以在相同的服务器上运行。就提高了服务器使用率。

Uber现在已经有了约20个Cassandra集群,计划在将来可能会有100个。

灵活性比性能更重要。你要能非常方便地管理这些集群,并在上面做各种操作。

为什么在容器中运行Cassandra,而不是直接在裸服务器上运行?

目标是存储几百个G的数据,还希望它们能跨数据中心在多台服务器之间复制。

也希望在不同的集群之间做到资源隔离和性能隔离。

在一个共享集群中达到上面所有目标是非常困难的。比如,如果你的Cassanra集群已经超过了1000个节点,那就难以扩展了,或者会在不同集群之间产生性能的干扰。

生产环境

在两个数据中心(西海岸和东海岸)之间有约20个集群在同步数据。

最初是有4个集群的,包括中国。但在与嘀嘀合并之后,那些集群就关闭了。

两个数据中心共有约300台服务器。

最大的两个集群,每秒有超过一百万次写操作和约十万次读操作。

有一个集群存储的是位置数据,是由司机和乘客App每秒30秒就发送一次的数据。

平均读延迟为13ms,写延迟为20ms。

大多数采用的都是LOCAL_QUORUM一致性级别,也就是强一致性。                

解决方案 数据中心 数据库 操作系统 集群存储
0
为您推荐
HIVE数据仓库完美实战课程,资源教程下载

HIVE数据仓库完美实战课程,资源教程下载

课程名称【快速掌握HIVE视频教程】HIVE数据仓库完美实战课程课程目录├第一周:hive基…...

尚硅谷大数据Flink技术与实战,资源教程下载

尚硅谷大数据Flink技术与实战,资源教程下载

课程名称尚硅谷大数据Flink技术与实战课程目录理论_Flink基础 001__Flink理论_Flink…...

廖雪峰-2019大数据分析精品资料价值1980元,资源教程下载

廖雪峰-2019大数据分析精品资料价值1980元,资源教程

课程介绍:廖雪峰大神历时3个月打磨出来的《数据分析必备技能》的视频学习资料,由浅…...

尚硅谷-大数据项目之电商数仓教程下载

尚硅谷-大数据项目之电商数仓教程下载

课程介绍:本课程以国内电商巨头实际业务应用场景为依托,对电商数仓的常见实战指标以…...