途牛的架构特点与数据中心的挑战

个人简介 谭俊青,途牛 资深架构师,个人主页: http://www.mysqlab.net/blog/,长期从事数据库、网站及相关系统的架构、开发及服务,致力于高可用系统架构及解决方案(如切分、负载均衡、高可用、服务检测、备份恢复、中间层、缓存、分发、一致性等) 现就职于途牛。

QCon是由InfoQ主办的全球顶级技术盛会,每年在伦敦、北京、东京、纽约、圣保罗、杭州、旧金山召开。自2007年3月份首次举办以来,已经有包括传统制造、金融、电信、互联网、航空航天等领域的近万名架构师、项目经理、团队领导者和高级开发人员参加过QCon大会。

   

1. 欢迎来到QCon上海的采访现场。今天我们有幸请到了途牛的资深架构师谭俊青先生,俊青你先跟大家做个简单自我介绍吧。

谭俊青:我是去年加入到途牛的,大概将近两年的时间了。以前我也是做过研发,做过运维,在数据库这块,特别是MySQL这块应该是有一定沉淀了。我07年那时候创建MySQL实验室到现在也有比较长的时间了。到途牛这边来说,之前有一段时间也带研发团队,后来就可能花更多精力在做一些架构方面的事情。当然同时也在带一些团队,做研发工作。

   

2. 您提到现在您做的是架构方面的工作,可否请您简单介绍一下途牛现在的一些架构特点?

谭俊青:途牛因为这几年在线旅游行业发展也比较快,然后我们公司这几年是一个快速成长的过程。我们从技术上面一个特点呢,就是我们的,可能在我们从研发角度来讲,可能数据量或者业务量不是那么大,比如我们看那个访问量什么的,数据量大小什么的。但是我们的系统会很多,因为涉及行业的一些特点,比如原来一些没有结构化的东西结构化。当然了这个系统多,每个系统可能有些系统还涉及到一些南北间同步的问题,这个也是因为当前中国特殊环境下,比如说南北网络的问题,比如说电信、网通这种情况的原因导致的。

   

3. 那您现在觉得,因为您刚才提到了,其实是现在我们有南北间两个数据中心,那么在这种情况下最大的挑战是什么?

谭俊青:两个数据中心的话,就是数据的同步可能会出现问题,就是网络通信可能会出现故障,比如说光纤被挖断了都有可能,是不是?比如说拿途牛的一个特点来讲,就是我们的客单价很高,我们老板经常提到的,就是我们在行业的客单价很高,几万块钱,甚至更高,十几万都是有可能的。那么在这种情况下,如果说我们的数据不一致,或者是我们的网络中断,导致说服务不可用了,这时候代价是很高的。所以我们要解决这些问题,所以我们今天下午我讲的一个高可用的架构,主要是也是针对我们的背景和我们的特殊情况下。当然我们相信其他的一些同行,也存在这个问题,针对这个情况去解决这个问题。

   

4. 您能具体简单聊一下,针对这种一致性的问题,途牛是怎么来做这个相对应对的?

谭俊青:数据一致性的问题和同步的问题,刚才也包括网络中断的情况去解决,就是我们同步的话,可能我们主要还是MySQL数据库这种,然后搜索这种,然后还涉及到占用带宽。那么针对一致性的话,比如说我们可以用数据库,就是MySQL的一些半同步去解决问题,但是还有涉及到一些数据切换。当然半同步,刚才提到半同步就是并不能,只能保证说我在某种情况下,数据能够同步过去。但是并不能说,我读取的是最新的数据,这里面都涉及到一些一致性读的问题。所以说有时候会,比如说临时的解决方案,就是说我可能在从库上去读取一些数据,然后到主库上面,如果验证没法通过,再到主库上去读,这时候可能就是为了性能,兼顾性能。但是这些可能都也涉及到一些业务量,更新量比较小的情况下;另外就说刚才提到搜索,可能我们不用占用专线带宽,走一些外网的策略。另外其实还有涉及到,我们两个机房并不能完全解决一些高可用的问题。比如说我们一个专线断了,可能我们要涉及到第三个机房。所以今天下午讲这个专题的话,可能会涉及到三个数据中心去保证数据的同步和一致性。

   

5. 您刚才提到了,其实我们要除了南京、北京之外,要增加第三个数据中心。那么是在什么样的情况下才考虑要增加一个数据中心?

谭俊青:增加一个数据中心,一个是可能为了灾备。另外就是可能我们业务的拓展,就是有新的必要。如果说某个城市,或者访问量大,或者是某一块区域,我增加了数据中心,可能就是可以提供更多的一个服务能力。那我可能,而且中国这个特殊情况下,比如说北京网通,然后南京电信,那么他访问的速度可能不一样。比如说我们现在网站,可能都是放在,我们现在网站都是放在北京的。但是虽然说它是BTB机房,可以说一定程度上解决这个问题。但是偶尔我也通过监控可以发现,有时候说电信网络访问的时候很慢,其实我们现在也在最近在南京增加一个新的机房去做一些搬迁工作,可能还涉及到一些数据同步。

   

6. 在建立新的数据中心的时候,是如何能够保证快速的和现有的数据同步,以及在同步的同时,又不会影响现有数据库的一些性能?

谭俊青:这个应该相信大部分人都能够去解决。这个比如说就拿MySQL来讲,肯定就是拿备份,拿备份在新的机房里面去搭建一套备份系统,然后做一个同步就行了。这个同步,因为这个只要我们的带宽满足,然后只要更新的数据量不是那么庞大,同步都不会有问题,而且不会有什么性能影响的。

   

7. 还有一个问题,当数据中心如是一旦发生宕机的时候,我们会怎么来做相应的处理?

谭俊青:比如说我刚才提到,如果两个机房,一个机房宕机,肯定是那个机房没法提供服务了,是不是?那如果有三个机房的话,其实比较容易解决,就是说很容易就把服务进行切换了。比如刚才拿我们的高可用架构来讲的话,当然可能涉及到不同的业务,比如说我就拿刚才数据库这块来讲的话,那我在应用端的话,我可能就是在我们的App,我们的应用程序,里面肯定是配置了多个数据源嘛,这时候我们可以通过心跳机制检测某个数据源出问题了,我们可以实现自动切换,切换到另外一个机房。

   

8. 当数据中心重新上线的时候,我们是不是还要去做一些相应的处理,来保证它重新上线?

谭俊青:数据重新上线的时候有个自动加入的机制,比如说刚才说的三个机房,或者甚至是五个机房,还要附加一定的策略。那么它一直是一个检测机制,我里面提到用Raft,就是类似Paxos的一种算法。可能就是我起来之后,我会重新加入这个集群当中,集群当中的话,就是可能有些人没有可能还不太了解Raft,就是Zookeeper可能了解一些,就是Hadoop里面用到的。那么很多人,相信很多系统已经用Zookeeper做一些全球的一些配置管理了,那其实我们也是类似的。就是我们用Raft去管理的话,一个新的机房启动了之后,它把数据自动加入进去。然后我们一些应用就可以重新进行一个负载。

你可能感兴趣的:(途牛的架构特点与数据中心的挑战)