Uber的Ringpop和Riak

Uber是最流行的按需用车服务商,他们的创新远不止这些,在生活方式和物流等方面有着快速的进步,最近他们的架构师分享了一些最具有魅力的分布式架构。

其中一个不断在进化的分布式系统项目是Ringpop: Ringpop是一个开源的Node.js库,能够在应用级别实现他们的调度平台服务的水平分区sharding。

这个额外的抽象层框架,通过众多Riak粉丝们熟悉的一致性哈希环维持,这样就提供了一种可以在不会中断服务的前提下额外增加新调度服务的手段。

为了平衡可扩展性和稳定性,Ringpop牢记没有分布式网络总是可靠的,服务实例的行为总是不规则不稳定的,缓慢的或其他情况,频繁的更新和持久改变如果形成一个封闭的死循环带来的破坏是巨大的,导致不一致性的哈希搜寻,通过Ringpop能够减轻这种破坏,到达服务高级别的可靠性。

Ringpop是一个可嵌入的服务器,能够可靠地对你的数据进行分区,探测节点失败(类似zooKeeper 服务动态定位器),能够发现集群中可用的服务。

ringpop通过实现SWIM gossip 协议来跨节点维护一致性视图,集群中任何改变能够被发现并通过这个协议发布到其他节点上。ringpop也可以提供一个代理,将客户端请求route路由分发到后端微服务上。TChannel是Ringpop的gossip和代理能力的基础传输组件。

在Ringpop使用场景中,我们看到Uber是如何依赖Riak数据库实现高可用性,Riak作为一个持久层数据存储提供调度服务,这些服务是基于Ringpop之上,举例,如产生的对象需要持久化,比如一个新司机刚上线,他们有关的叫车信箱会显示叫车信息,这些ID是作为key存储在Riak中。

下面这些层被用于进一步的服务,它们也依赖于存储在Riak的数据:
1. 有态的HTTP长轮询long-poll服务
2.客户端/服务器同步服务
3.速率Rate限制器
4.空间信息服务

更详细的信息可见视频演讲:
Uber’s Ringpop and Riak | Basho Technologies

Uber的有关RPC远程服务调用TChannel开源项目

Uber实时调度平台系统的架构概要

[该贴被admin于2015-05-11 20:59修改过]