关于在优步

时间:2015-11-17 04:17:23

标签: database distributed distributed-computing distributed-caching

https://ringpop.readthedocs.org/en/latest/

据我了解,分片可以在一些库例程中实现,应用程序只与库链接。如果库是RPC客户端,则可以从服务器端实时查询分片。因此,即使存在新分区,它对应用程序也是透明的。

Ringpop是基于SWIM会员协议的应用层分片策略。我想知道应用层的主要优势是什么?

另一方面,系统层中的分片是什么?

谢谢!

1 个答案:

答案 0 :(得分:5)

这个回复可能有点迟了,但也许有人仍然需要这些信息。

Ringpop在应用程序内部引入了“分片”的概念,而不是数据。它或多或少类似于应用程序级中间件,但其优点是它提供了一种构建scalabale和容错应用程序的简便方法。

Ringpop分片是来自客户端到特定服务的请求。这是它的主要优点之一(还有更多,继续阅读)。

在传统的SOA架构中,对特定服务的所有请求都会转到一个独特的系统,该系统会将这些请求分配给工作人员以进行负载平衡。这些工人彼此不认识,他们是独立的实体,不能在他们之间进行沟通。他们完成了自己的工作并发回了答复。

Ringpop恰恰相反:工人互相认识,可以发现新的,经常与他们交谈以检查他们的健康状况,并将这些信息传播给其他工人。

Ringpop如何分割请求? 它使用了密钥空间的概念。密钥空间只是一个数字范围,例如您可以自由选择您喜欢的范围,但显而易见的选择是对应用程序中对象的ID进行哈希处理,并使用哈希函数的codomain作为范围。

键空间可以想象为散列“环”,但实际上只是一个4或8字节的整数。

一名工人,例如可以提供特定服务请求的节点“虚拟地”放置在该环上,例如,它拥有戒指的连续部分。实际上,它已经分配了一个子范围。工作人员负责处理属于其子范围的所有请求。处理请求意味着两件事: - 处理请求并提供响应,或 - 将请求转发给另一个实际知道如何提供服务的服务

每个应用程序都是嵌入此行为而构建的。有一个逻辑来处理请求或只是转发给另一个可以处理它的服务。转发机制只不过是一个远程调用程序,它实际上是使用TChannel,Uber的高性能转发一般RPC。

如果你仔细想想,你可以发现Ringpop实际上提供了传统SOA架构所没有的非常好的东西。客户端不需要知道或关心可以满足其请求的正确实例。他们可以在Ringpop的任何地方发送请求,接收方工作人员将为其提供服务或转发给拥有者。

Ringpop还有另一个有趣的功能。新工人可以动态地进入戒指,老工人可以离开戒指(例如,因为崩溃或只是关闭)而没有任何服务相互作用。 Ringpop实现了基于SWIM的成员协议。 它使工作人员能够发现彼此,并使用基于tcp的八卦协议从环中排除一个破碎的工作人员。当另一个工作人员发现新工作人员时,它们之间会建立新连接。每个工作者以固定的时间间隔映射发送ping请求的其他工作人员的状态,并且如果ping没有得到答复,则将状态信息传播给其他工作人员(例如,基于ping /八卦的搭载会员更新)

这三个元素一致的散列,请求转发和成员协议,使Ringpop成为一个有趣的解决方案,可以提高应用层的可扩展性和容错能力,同时将复杂性和运营开销降至最低。