途牛谭俊青:多数据中心状态同步两地三中心的理论

2024-02-02 01:40

本文主要是介绍途牛谭俊青:多数据中心状态同步两地三中心的理论,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文分享了跨数据中心状态同步两地三中心的理论技术,涉及数据库相关,其中会交代“如何去做”,以及会让大家理解“为什么要这么去做”。

分布式协议/概念

0?wx_fmt=jpeg

关于分布式协议的概念。以今年的“双十一”阿里的创造的惊人交易额为例,它的技术团队出来做技术分享时提到一点,就是支付宝交易每秒钟到了 8.5 万笔,这其中有很多东西可可供分析。

这其中就包含分布式协议。全球范围内真正能够实现分布式一致性算法的只有两个:一个是 Paxos,另一个是 Raft。Paxos 拥有很长的历史,它最早是谷歌实现的。2012年,有两位教授发表了一篇论文叫做Raft,非常值得去学习。论文中有一个组建使用的也是Paxos 的算法。要真正实现分布式数据状态协议的话,一般会选择Paxos 和Raft。从容易实现的角度考虑的话,就采用Raft。

远距离跨机房同步问题

0?wx_fmt=jpeg

途牛最初的系统都在南京,但为了照顾用户体验,公司就将网站迁到了北京。原因是技术团队进行了调用,发现其中存在很多问题,包括远距离跨机房同步问题,以及专线稳定性对服务质量的影响。一般的系统网络都是 4 个9 或以上,还有宽带挤占、各个系统调用等,还有下面要具体讲的数据库同步延时。

途牛的后台系统允许客户注册,在网站上注册可以选择南京或北京。技术团队选择南京,是因为更多的用户集中在南京这边。如果注册时到北京去,我们读的就是北京数据库。而一旦出现延时就无法登录,这样用户体验是非常糟糕的。除此之外,就是不能做强一致性高可用。如果在两地做,万一出问题需要切换,数据可能会丢失,这需要极力避免。

CAP 中,我们的选择

关于“CAP”,很多人都了解它的含义,就是一致性、可用性、分区容错性。但这三者不可兼得,因此分区是必然的。对电商来说,它对数据的要求比较高,所以选择Consistency(一致性)。

0?wx_fmt=jpeg

上图中的重合区域只有一个“小三角”,它说明这个数据很难落地,三者的优点很难兼顾。因此看上去 CAP 能够满足需求的,而实际情况并不是这样。

0?wx_fmt=jpeg

上文提到,途牛的选择是针对当前的这种开源,或者是技术实现。技术团队现在用开源数据库,来实现:

  1. 主从复制、做高可用;

  2. 防止丢失数据;

  3. 只牺牲一定的性能,等待数据被同步。

但远距离机房延时太大,从而影响了系统吞吐量,所以决定做了机房搬迁。今年公司把整个北京机房搬迁到了南京,与主要系统合为一处。

数据的传输

0?wx_fmt=jpeg

上面的图片,相信很多人都见过。途牛的应用是先向数据库发起事务,这个事务完成后,它会写到日志里面,然后返回应用。

这种专线最终落地是什么?就是光纤传输。可以算一下它的传输性能:真空中光速30万千米/S,光纤材质折射率 1.45 左右,全反射传输,路径大于光纤长度,折算下来小于20KM/0.1MS,如果算同城的话,是1000ms / 0.2ms=5000(TPS)。可以通过技术提升这个速度,这与业务具体架构相关。

0?wx_fmt=jpeg

南京到北京,距离近千公里,光纤不会是直线布置,中间会包含很多的弯和网络设备。在这种情况下,南北传输,可以达到 1000MS / 50MS=20(TPS)水平。

基于 HA 的数据中心系统构建

之前途牛会员系统的后台并不完善。有时会被用户刷会员,甚至被刷坏掉。当时系统支持的事务量很小,这个情况跟创业公司有点类似:在高速发展阶段,团队整体的效率没那么高,但为了降低成本,可能会让一个功能快速上线,但中间如何优化、如何实现都没有考虑过。这样的系统,经过多年累积,其中就会出现了很多问题。后来,技术团队使用了异步的方式解决了这个问题。

双十一阿里如何做到8万5千笔/秒的交易频率的?最早从腾讯开始,通过 QQ 号取模的方式,其中道理是一样的。一个整体,如果是串行,它的分布量是比较有限的。前文提到的 0.2 毫秒,而理论上只能达到 5 千每秒,如何去提升呢?在编程上面要作调整,当性能发展到一定规模后,需要提升整个系统吞吐量,就必须考虑低层的架构,哪怕谷歌也是一样:曾经谷歌发现这里面数据库识别越来越多,各种不可用,谷歌就把系统迁移到自己开发。这么大的数据量怎么去做?如下图中所述。

0?wx_fmt=jpeg

HA 组建及双中心 HA 缺陷。这里面有 heartbeat、keepalived等,也是一样的,但是缺少第三方仲裁,会导致“脑裂”,特别在偶数的下面。如果两部分都正常,可能会引起数据不一致,进而造成数据丢失等。一般来说,会选择F=1,或者是2,就是5个节点,我们选用比较成熟的解决方案。还有很多 15 节点的方案,进一步提高了可能性,它允许两个节点失效。

0?wx_fmt=jpeg

双中心HA缺少仲裁,因此途牛选择三中心HA。三中心有仲裁,三个节点,至少不会发生“脑裂”的现象。这三中心的分布是“同城加异地”,这比较容易理解:同城可以保证一定的吞吐量——同城数据中心降低的同步延时,低延时极大提升了吞吐量,第三数据中心参与选择仲裁及灾备恢复。出于安全考虑,第三中心一般距离会比较远。比如在南京的机房会远一点,就是为了避免出现地震等自然灾害同时影响三个中心的情况发生。

0?wx_fmt=jpeg

吞吐量提升,是可以采用各种各样的方法来实现的。阿里双十一的峰值可以达到8万5千笔/秒的交易。他们引以为傲的,是去年只有 10% 的交易在Oceanbase,而今年在 100% 都迁到Cceanbase。这是如何实现的?Sharding 分区是避免不了的。采用发号器避免冲突,实现高并发,分区间用 2PC 实现分布式事务。这其中还涉及到全局,还有部分采用队列异步处理。做全局索引对业务影响并不大,因此一般统计的时候,往往通过异步去实现。

最后总结一下。根据只是把逻辑思维展现出来;两地三中心一定是同城,因为要保证它的吞吐量、保证业务可用性,如果选择 CP (一致性&分区容错性)可能达不到理想的效果。三中心对应状态同步的三节点,两地是照顾到安全和性能。另外,需要把第三个机房放到异地或者比较远的地方去。(责编/钱曙光)

出处:http://geek.csdn.net/news/detail/51179

这篇关于途牛谭俊青:多数据中心状态同步两地三中心的理论的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/669114

相关文章

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

服务器集群同步时间手记

1.时间服务器配置(必须root用户) (1)检查ntp是否安装 [root@node1 桌面]# rpm -qa|grep ntpntp-4.2.6p5-10.el6.centos.x86_64fontpackages-filesystem-1.41-1.1.el6.noarchntpdate-4.2.6p5-10.el6.centos.x86_64 (2)修改ntp配置文件 [r

跨国公司撤出在华研发中心的启示:中国IT产业的挑战与机遇

近日,IBM中国宣布撤出在华的两大研发中心,这一决定在IT行业引发了广泛的讨论和关注。跨国公司在华研发中心的撤出,不仅对众多IT从业者的职业发展带来了直接的冲击,也引发了人们对全球化背景下中国IT产业竞争力和未来发展方向的深思。面对这一突如其来的变化,我们应如何看待跨国公司的决策?中国IT人才又该如何应对?中国IT产业将何去何从?本文将围绕这些问题展开探讨。 跨国公司撤出的背景与

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

hdu1565(状态压缩)

本人第一道ac的状态压缩dp,这题的数据非常水,很容易过 题意:在n*n的矩阵中选数字使得不存在任意两个数字相邻,求最大值 解题思路: 一、因为在1<<20中有很多状态是无效的,所以第一步是选择有效状态,存到cnt[]数组中 二、dp[i][j]表示到第i行的状态cnt[j]所能得到的最大值,状态转移方程dp[i][j] = max(dp[i][j],dp[i-1][k]) ,其中k满足c

2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题是由安全生产模拟考试一点通提供,流动式起重机司机证模拟考试题库是根据流动式起重机司机最新版教材,流动式起重机司机大纲整理而成(含2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题参考答案和部分工种参考解析),掌握本资料和学校方法,考试容易。流动式起重机司机考试技

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

状态dp总结

zoj 3631  N 个数中选若干数和(只能选一次)<=M 的最大值 const int Max_N = 38 ;int a[1<<16] , b[1<<16] , x[Max_N] , e[Max_N] ;void GetNum(int g[] , int n , int s[] , int &m){ int i , j , t ;m = 0 ;for(i = 0 ;

hdu3006状态dp

给你n个集合。集合中均为数字且数字的范围在[1,m]内。m<=14。现在问用这些集合能组成多少个集合自己本身也算。 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.Inp

从状态管理到性能优化:全面解析 Android Compose

文章目录 引言一、Android Compose基本概念1.1 什么是Android Compose?1.2 Compose的优势1.3 如何在项目中使用Compose 二、Compose中的状态管理2.1 状态管理的重要性2.2 Compose中的状态和数据流2.3 使用State和MutableState处理状态2.4 通过ViewModel进行状态管理 三、Compose中的列表和滚动