Uber Engineering的Ringpop如何帮助你推广应用

0
Uber Engineering的Ringpop如何帮助你推广应用

还记得孩子们以前戴的糖果珠宝戒指吗?将这款适合所有人的戒指戴在任何手指上,你马上就能成为时尚偶像。Ringpop,一个优步开发的开源库让我们的应用程序具有合作性和可伸缩性,就像棒棒糖一样甜蜜。它可以轻松地适用于任何老式应用程序,并将其转换为一组协作节点。最重要的是,优步的Ringpop能够应对优步工程是交通和增长没有崩溃。

ringpop的介绍

Uber的高速增长向我们的工程师提出了挑战创造性地考虑可伸缩性。由于每天有数以百万计的旅行发生在六个不同的大洲,我们只有采用能够检测和解决自身故障的系统,适应我们不断增加的数据量,并分配负载以保持高可用性,才能处理流量。

如果你阅读文档或见过的代码,您知道铃声是一个节点.js图书馆这为分布式应用程序带来了协作和协调,否则这些应用程序将作为一组独立的工作实例运行。Ringpop有三个部分:

1.一个会员协议这使得独立的工人能够互相发现并检测失败(游泳)。Ringpop会员协议

Ringpop 1)实现了一个游泳八卦协议变化,八卦结束TCP, 3)计算成员和环校验和,以及4)保留成员下来在其成员名单中。

2.一致性哈希在员工之间分配工作。

Ringpop散列环

Ringpop 1)使用养殖作为其哈希函数,2)使用a红黑树对于它的环,和3)增加一个统一的数目副本点每个节点。

3.转发功能。

Ringpop转发

铃声流行音乐已使音乐成为法律处理或转发模式,使用TChannel作为其传输和转发通道,具有转发功能透明的对于开发人员,4)将转发的请求打包为HTTPTChannel。

Ringpop在添加到集群时检测新容量,在出现故障时从集群中删除容量,并在任何给定时间将负载均匀地分配到任意容量上。在典型的应用中,Ringpop充当路由中间件,在请求到达其处理程序之前将请求定向到其所有者。

来实现Ringpop,将库嵌入到应用程序中,它将把所有实例组织成一个散列环。每个实例宣布自己,成为环中的一个节点,并通过成员协议发现其他节点。最终,组成应用程序的每个节点都将知道其他每个节点。由于节点无需您就能协同工作,因此不需要跟踪所有节点及其各自的负载。

可用性和可伸缩性不是新的目标;亚马逊的发电机纸张(吸引项目的纸张)RiakApache Cassandra)源自于对大型组织同样从不下降、始终保持增长的需求。但是Ringpop带来的是在应用程序级别上获得相同的分区和协作的方法。

Ringpop对地理空间的好处

如果我们解释一下它的第一个用例:Uber的地理空间服务,Ringpop的好处就会变得更加清晰。地理空间是优步匹配系统的第一层,它会跟踪我们平台上每一个活跃的在线司机合作伙伴的实时位置,以收集潜在的搭车请求匹配。它会不断更新驾驶员位置信息,然后打开应用程序,在这些位置上搜索乘客。在这里,由于位置数据转瞬即逝,数据库存储将毫无用处。相反,地理空间工作者负责分配负荷,并承担这种短暂的状态。Ringpop创造了一个有序、合作、智能的空间,使这个系统成为可能。

在地理空间系统出现之前,我们使用的是一种将所有活动车辆存储在内存中的系统。这迟钝的人系统必须通过每辆车搜索,以便在所要求的接送地点附近找到那些,即使它们从Go-Go附近附近。这已经努力了一段时间,但随着我们的增长,变得不可持续。Ringpop支持Geospatial的负载分配、工作者协调以及最终的水平可伸缩性。方法如下:

传播流言蜚语的成员

首先,游泳八卦会员协议让我们自动分配工作。当我们添加服务器时,代码不会改变。新进程相互发现,以传染性的方式传播信息,并重复地相互ping,以便每个节点知道其他节点的存在和状态。在将Ringpop嵌入到应用程序的代码之后,实例将跟踪成员身份。

一致性哈希

接下来,Ringpop的一致散列函数在应用程序集群调整大小时消除了手动重新分配的需要。哈希环算法允许您将对象分配到间隔,而不是分配到特定的工作者。

Ringpop Cluster Form步骤1

Ringpop使用引导文件或主机列表进行自我引导。没有散播,。第一个节点没有要加入的对象。它以单节点集群的形式存在。

Ringpop Cluster Form第2步

第二个节点启动并查询相同的引导列表。这次它发现一个

Ringpop Cluster Form第3步

一个B交换信息。它们形成一个2节点集群,并沿环散列它们的地址。

假设你的经理辞职了。把你和你的队友分配给最亲近的经理要比放松办公室的所有管理任务,然后以平均分配的名义把所有员工重新分配给新的经理容易。同样,当哈希环中的节点1关闭时,工作照常进行。节点1和节点2之间的所有对象都被节点2取走。因此,当您在您的应用程序中添加或丢失一个worker时,您不会重新分配和重新平衡对象数据到新的位置,这大大减少了延迟(因为数学)。

转发

对数据的请求可以命中任何随机节点,并且Ringpop会把请求转发到环内合适的目的地。这种“处理或转发”模式意味着您的业务逻辑本身不关心任何有关路由、成员关系或转发的细节。

Ringpop的句柄或转发模式确保每个请求都到达正确的节点。

通常,所有与分片应用程序通信的应用程序都必须知道它是如何分区的,以便将特定的请求发送到正确的节点。Ringpop消除了客户机和服务器之间任何耦合的需要。您的应用程序将在自身内部路由请求,客户机将在不知道分片方案的情况下与您的应用程序通信。

Ringpop Forwarding Request步骤1

C决定加入,现在我们有一个3节点群集。他们每个人都会定期彼此平时。

Ringpop Forwarding Request步骤2

一个接收请求并散列分片键。它使用处理或转发模式来确定应该在何处处理请求。

Ringpop Forwarding Request步骤3

一个决定将请求转发到B

世界上的Ringpop

Ringpop允许开发人员根据特定应用程序的需要调整一致散列和成员协议的使用。Ringpop开发人员拥有服务的可伸缩性和可用性,而不是依赖于外部基础设施级解决方案或系统专家。

在优步,工程团队已经将Ringpop嵌入到新的项目中分片,领导人选举,排序或批处理写入到分布式数据库,请求合并,工作委托,数据聚合和缓存。现在,我们渴望看到世界各地的工程师们的创新方式采用我们的开源Ringpop构建更快、更智能、更具协作性、自修复性的应用程序。

注释