高德:Redis深度实践,助力实现“现实与互联网世界的底图梦”

  • 时间:
  • 浏览:1
  • 来源:万人红黑大战棋牌APP_万人红黑大战棋牌APP官网





第二种也很简单:在业务层面做随后 取舍 。这类 有有另一一一两个 机房,并希望读取的次数高时,能不都都可以 做有有另一一一两个 双写。这是否 有有另一一一两个 正统和学术的法子,它会因为一致性的间题:随后双写时本机房的写好了但超时了,这时就告诉我写没写进去。





作为互联网世界底图,目前10部手机中是否 9部在使用高德的位置服务,简单介绍下有有另一一一两个 行业的案例:高德开放平台为国内85%的车行App提供地图、导航和路径规划服务;为市场中超过80%的外卖App提供地图和定位服务;为80%的主流社交应用提供精准位置和搜索功能,如发微博时的地点定位。目前,大慨有80万款应用正在使用高德开放平台业务。

最后简单分享一下真正的挑战,随后讲的什么都场景是否 取舍 。读完马上就要写的业务,你这类 场景最难。

Cache场景

未来,高德会同阿里云一道设计就近接入的方案,该业务和地理位置层厚相关,把用户数据放进去去离他比较近的地方。真是 随后把用户的数据按照对应纬度或所属地区的纬度切分到对应的机房去,用干预的法子尽量选到所属的主节点,在主节点没办法 了间题的清况 下,希望用户的数据从哪里写就从哪里读。随后 机房会作为他异步传输的同步。

Cache场景主要偏向机房和机房之间整个应用的部署。当业务做到一定规模的随后,可靠性就很难做到,前要依赖什么都环境。这类 阿里云的随后 技术在下层会有什么都链路、机房、甚至说随后 技术提供商的劫持间题,在做服务时,也相应地诞生非常多的随后性。

持久化场景

高德的经典数据库应用场景底下如可一起去为C端和B端用户提供全量服务的呢?实际上两者模式完全不一样,C端有高峰,对于高德,随后十一的第一天随后C端的高峰;对于微博来讲,女排夺冠那天随后随后高峰;但B端很坑,它的高峰每天是否 ,80万个应用每天是否 买车人的业务高峰,它们每个人的高峰随后B端的高峰。



谈到同步,上图真是 是Albiter的图,但在Redis里也相同。当在同城之间前要判断主和从是否要前要提升时,真是 不都都可以 依赖有有另一一一两个 节点的判断来做。这是随后:一是两者之间不都都可以 法子判断谁是活的、谁是死的,随后 人都真是 买车人是活的;还有有有另一一一两个 因为是网络抖动很有随后在很短的时间地处并在很短的时间内恢复,比如说抖动了5秒或6秒,这时对持久化数据库的简单主从的提升操作会加剧数据的不一致,什么都会引入第有有另一一一两个 机房来帮助判断。

计费集群也是Redis的上层应用。在跨机房之间有ZK的全职,底下的Redis互相不同步,不都都可以 本机房的信息,计费集群跨机房择主,不都都可以 你这类 多多系统进程 就会向被选为主的集群写入信息来归总这份数据,底下随后涉及到无法取舍 或无法连接的清况 ,(随后是Snapshot场景)它会听候可用。随后说你规定了15秒的快照时间,有随后随后推迟会变成80秒或40秒,不都都可以 在计费集群的HBase下面会有有有另一一一两个 Open TSDB做真正的存储。上层的Redis会保留一段时间,随后跳出随后 计算错误或用户投诉,就反查回来看一下是否 有间题,但本质上是以最终落地的那份数据为主。但你这类 例子是否 实时,计费报表并是否 马上出,随后第十天或过十天才出。什么都这里在业务上做了随后 取舍 ,会把实时牺牲掉来保证正确性或性能。

在2016杭州云栖大会的“开源数据库之Redis专场”上,高德开放平台总经理童遥带来了题为《高德经典数据库实践案例分享》精彩演讲。演讲中,他主要介绍了高德业务下的经典数据库实践案例。

先从最简单的同城双机房随后随后开始。当业务达到一定程度时,前要部署双机房,通常会选在同有有另一一一两个 城市,将应用成本降到最低。将其中有有另一一一两个 机房当做Cache用,通常是把它直接落到有有另一一一两个 地方,这就大慨有有有另一一一两个 机房,随后Redis只在有有另一一一两个 机房里。这是最简单的,也是业务方面极为常见的有有另一一一两个 场景。在做有有另一一一两个 新业务的时,能不都都可以 先用你这类 法子过渡,当业务量不大时,这是最快的一种法子。你这类 点也说明了服务化还有很长的路要走;随后服务化做得好,会直接达到非常完美的清况 。

顺便提一下分片混合部署,现在高德不需要有较大的抖动,数据自动地分布到不同的机房和节点,能不都都可以 保证有有另一一一两个 小分片同是是否有有另一一一两个 副本,且没办法 了同有有另一一一两个 机器上。这也使得数据向下切割成有有另一一一两个 分片时保证存储可靠,随后它始终会有有有另一一一两个 Primary的主写入节点。

随后Cache场景能不都都可以 简单粗暴的处理随后 间题,尽随后拿到98%、99%的收益。采用你这类 法子的好处是:读和写非常稳定。这里前要注意的是同城之间,随后同城之间的风险随后在双写的那一刻,是否 写失败的间题,随后告诉我有不都都可以 写成功。同城双机房缓存双写的清况 是只读买车人的,放弃写入到A或B,它会像当前逻辑上的Master去做写入,什么都你这类 随后是跨机房的。





这是有有另一一一两个 核心间题,真是 是有有另一一一两个 跨机房汇总间题。也随后说,随后每个流量收一毛钱,那用户设置的随后,我只愿意80万流量,超过就停掉,那跨机房统计费用的及时性就直接因为了控制是否准确。但随后随后数据的不同步,在外地多跑了8万,那这8万就收不都都可以 钱。本质上这是有有另一一一两个 时效性间题,随后接入点在多个机房,随后机房距离比较远,那缘何保证时效的正确性?基本做法是在所有机房的接入层把所有流量原封不动地写入到缓存集群;随后缓存集群会分速度做出有有另一一一两个 Snapshot,速度随着业务压力大小而变化,并直接影响到计费统计的反应能力。另有有另一一一两个 超量就会发现,速度会保证流量及时地记录下来。记下来随后会通过阶段性的Snapshot,专门有有有另一一一两个 多多系统进程 往计费集群中写。





在跨城的场景下,以计费为例。计费是流量的统计,随后说有有另一一一两个 开放平台,发流量配额给随后 合作法子协议伙伴,让我一分钟80万的配额,那你的请求实际上是落到全国各地阿里云的机房,那如可快速有效地统计那些流量,在超量的随后及时告诉你呢?

目前用户使用的高德地图,真是 是C端地图,另外还有有有另一一一两个 出口:有有另一一一两个 是车机地图;另外有有另一一一两个 是开放平台。开放平台随后行业合作法子协议,比如说使用打车应用或社交应用会请求高德的API,简单地说,随后SDK和API的业务。

下面你这类 步什么都人是否遇到,当数据热了要重新分布就会有Proxy的改造方案,大慨把数据的分布策略和动态的重新平衡策略做进DB,不再拿给业务做。这是随后当不都都可以 有有另一一一两个 主流业务,能不都都可以 全身心关注;随后随后有20个业务,每天是否 不同的出间题,这是否 了Proxy的方案,希望把整个发现什么都放进去去Redis底下,业务何必 Care。典型的逻辑是把服务的发现和Hash什么都放进去去有有另一一一两个 Proxy层底下,随后通过有有另一一一两个 额外配置的底下管理去Client,使其知道应该读哪个Proxy。

下面来看一下机房之间的Redis应用。

这其中除了涉及到数据搬迁,还有最上层的流量分配(如可保证把用户埋点到正确的地方去)。高大上的答案是能不都都可以 通过地域化的DNS,随后是否百分之几比例的用户会发错,你这类 清况 下就通过7层把流量转发过去,此是是否80毫秒的IT开销甚至数以倍计的可靠性的下降,这随后有有另一一一两个 短暂的法子,将来会通过Channel的建设,DNS的解析等尽量去提高埋点的比例,这也是高德正在做的有有另一一一两个 事情。

高德经典数据库应用场景

接下来到高德真正利用到Redis原生机制做双机房同步的随后了:为了缓存同步的一致性,将数据化打开,采用持久化去做同步。但实际在你这类 清况 下,有有有另一一一两个 机制判断当前谁是主、谁是从、哪里是写入点,把它写入到对应的Master底下,随后随后 节点会依照Redis把它拷贝过去。



以下内容根据演讲PPT及现场分享埋点。



Codis集群部署

异地单元化&就近接入

现在描述数据更新业务的随后,实际上在更新随后会有有有另一一一两个 ZK的机制做切换,业务会自动地通过信息知道现在地处哪个集群。当新集群上线随后,旧集群会听候下一次数据更新。

上图左下角表达的是业务监控系统监控机房,当压力比较大是是否随后 抖动,这前要判断需不前要响应。目前,架构中地处两套业务监控系统:一套是性能层面;一套是语义层面。即有有有另一一一两个 监测内存、CPU等;有有有另一一一两个 负责业务。

高德在Codis方面起步较晚。目前,高德所有的主流业务是否 自家的平台上;还有随后 业务依赖Redis。利用Codis部署将上层流量分下来,再通过业务化Hash将其分到不同的分组去,也随后是同城有有另一一一两个 机房的某个地方;图中的ZK既用作Master接入点的发现,也用来做分组信息的维护。在此类场景中,有有另一一一两个 实例上或多个实例上会有不同的GROUP,通过分组信息,找到你这类 GROUP,再把数据写进去随后读出来,整体的读取或写入流量是由上层通过业务负载进行转发。

高德主营地图业务,会有随后 数据更新的场景,比如今天通过数据挖掘发现有一家加油站不营业,那缘何发现呢。随后说随后在9点钟的随后,用户的定位点这里会有80辆车,今天发现不都都可以 一千公里或都不都都可以 了,另有有另一一一两个 持续了一定时间后,就知道出间题了,再去查证,什么都就会有数据的更新。最土的法子随后不把一批量的数据更新,而以A/B集群的法子更新,另有有另一一一两个 能不都都可以 处理什么都写入随后的延迟对整个性能的影响间题。这时写入是有有另一一一两个 持续的操作,当写入完成的随后会有有有另一一一两个 校验的流程,当一切确认的随后,会切换进去(这里有有有另一一一两个 冷集群和有有另一一一两个 热集群)。这是地图行业比较讨巧的有有另一一一两个 做法,在纯线上业务随后不太会不都都可以 做,但在随后 集中性的数据发布时就比较常见。