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实时调度平台系统的架构概要
Uber’s Ringpop and Riak | Basho Technologies
Uber的有关RPC远程服务调用TChannel开源项目
Uber实时调度平台系统的架构概要

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

Twitter的分布式自增ID算法snowflake (Java版)

概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移

Android蓝牙连接汽车OBD设备

//设备连接public class BluetoothConnect implements Runnable {    private static final UUID CONNECT_UUID  UUID.fromString("0000110100001000800000805F9B34FB");