李源:途牛从MySQL到SequoiaDB的变迁

个人简介 李源,在华为技术有限公司工作8年,从事研发、系统架构设计、项目管理等工作,华为优秀讲师,美国质量协会注册质量工程师(CQE),2012年加入途牛,先后负责途牛CRM系统、供应商管理系统、零售平台、分销平台等公司级项目,现任供应链研发中心副总经理,全面主持途牛供应链相关系统的设计、开发工作,覆盖采购、资源、库存、组装、确认、N-BOOKING等多个核心系统。

全球架构师峰会(International Architect Summit,下简称ArchSummit)是由InfoQ中文站主办的一次全球性架构师峰会。ArchSummit专门针对架构师人群,讲述与架构和架构师相关的各方面趋势、技术和案例。这也是继QCon之后,InfoQ中文站主办的又一次高端技术盛会。

   

1. 各位InfoQ的网友大家好,现在我们是在ArchSummit的北京现场,做客我们专访间的是途牛网副总经理李源。李总您好!先请您简单给我们介绍一下自己的背景。

李源:大家好,我是李源,我来自途牛旅游网,现在负责途牛的供应链研发中心的研发工作,之前在华为有8年工作经验,在途牛也有4年时间。我一共就经历这两个公司。

   

2. 旅游互联网公司现在比较多,像携程、穷游、蚂蜂窝,乐途这样,您能介绍一下目前旅游业的竞争态势吗?

李源:不管携程、穷游还是蚂蜂窝,包括同城,不同的企业大家专注的领域是有差异的,携程主要专注在机票、酒店,商旅这些。途牛更多的专注于旅游,比如跟团游,蚂蜂窝更专注于攻略,点评,游记的分享,社区化更强一些。所以大家的方向并不完全相同。旅游本身现在是一个非常细分的行业,每一个领域都可以做得很深。在各个领域,实际上现在各家有合作,当然也有竞争。

   

3. 以前我们了解到途牛这边的系统架构是MySQL和hadoop,那么现在你们从mysql迁移到SequoiaDB这边,迁移的过程中有没有遇到一些问题?关键点是什么?代码重构方面是不是做了一些工作?

李源:一个系统的选型,包括它的试点,它的应用,对我们做工程的人是个非常严谨的过程,所以我们在对一个系统的具体选型的时候,是做了一些事先的研究,或者说是做了比较多的了解。这次为什么会在巨杉的DB上面做一些尝试,实际上也是结合我们业务发展特性的考虑。在这个过程中,迁移还好,因为我们这次是选择一个新的资源品类去应用这个系统。为什么这样考虑呢?因为我们作为一家商业公司,不希望因为尝试一个新的数据库或者一个新的技术,结果导致我们的业务正常开展受到影响。所以我们在建设新的资源品类的时候,就借这个机会,正好做了一下这样的尝试,把SDB引进来,这一块对于我们来说恰恰也是一个全新的东西,不会对现有的系统造成太大的冲击和影响。我们在这个过程中会有一些少量的资源从原来的数据源迁到SDB里面去,但是这个量级比较小,所以代码层面也没有出现大量的重构状态。这一块我们已经上线在运用,目前来说还好,当然后续可能会出现,比如说大量的线路数据的迁移,这块我们现在已经做好了相应的准备,代码级的迁移。

   

4. 巨杉数据库不支持SQL,你们还在用SQL吗?如果用的话,你们用的SQL引擎是什么?

李源:SDB不是不支持sql,它有一个内置的SQL,它本身支持3种数据引擎,bg,spark sql还有hive,因为我们这个新的资源品类建设过程中的应用场景相对来说比较简单,目前我们主要还是用的巨杉内置的SQL,这个能够满足我们目前的需要,当然我们也正在做spark sql引擎这方面的储备,因为这个可能要结合更复杂的后续的业务场景,更复杂的技术要求,实际上我们也在看,这一块要求还是很高的。

   

5. 整个系统架构里面是否有缓存?你们采用的哪种缓存方式?

李源:有,缓存是一定会有的。我们早期主要是用memcache,当时偏向于用的单点方式,现在的缓存是用codis做的分布式的redis解决方案,第一单点的问题解决了,第二原来memcache更多的是支持简单数据类型,像kv这种类型的数据,相对来说, codis可以支持更复杂的数据类型,比如list,set包括hash这种数据结构,而且redis也支持数据持久化,所以这块是我们目前用的比较多的缓存方案。

   

6. 有一个问题是读写分离这块,现在读写分离的比例数值是什么情况?您能介绍一下它大概的应用场景吗?

李源:读写分离也是我们这两年做得比较多的事情,我们现在有很多系统读和写的频度是完全不一样的,要求也是不一样的,比如说我们的资源系统,现在大概在1:10的状况,我们的库存系统大概是1:5的状态。因为我们的资源系统里包含很多的旅游资源的信息,所以写入的量相对来说不会非常非常大,但是对它的读取的要求会非常高。比如说我们的网站会对旅游资源进行自由的搭配,包括旅游资源静态的信息、动态的信息,包括库存量等等,这些我们会要跨多个系统进行聚合的、实时的查询,所以我们目前的存库的量还是很大的,包括我们的价格中心,我们对旅游产品的价格是要做实时计算的,而且变化非常大。因为它是到团期的粒度,每一天的价格都可能会不一样,所以我们的价格会介入到某一个具体资源的某一天上面,这样的话一旦这个资源发生变更的话,价格就要重新计算。我们一天像团期这个级别的计算量,大概在9.3亿次这样的量级,大量的依赖于我们到存库里读取数据。

   

7. 以前你们用MySQL时是用多个数据中心来实现高可用,同时还要保证数据的一致性,那么采用巨杉数据库后高可用和数据一致性方面是由巨杉数据库来支持的吗?

李源:高可用这块我们以前是南北京有两个机房,要实现南北京数据同步的过程。MySQL本身也是单机数据库,需要从应用层面去做一些分库分表,主从模式等等,而SDB本身作为分布式的数据库,天生就支持了比如数据的切分,包括水平扩张、主动选组等功能。数据一致性可以做到自主控制。目前我们也正在考虑去做一些异地容灾、多活方案,我们也在规划这块内容,这块的投资会比较大一点。我们和巨杉也有一些交流,他们后续的版本也会有支持异地灾备的方案和功能,所以这块后续应该还是有机会去做更深入的合作。

   

8. 刚才您谈到做多活的成本的问题,巨杉已经开源了,您现在还需要给他付费吗?因为做数据库会有一些商业版本,商业版本付费的时候都有哪些技术支持?

李源:开源是现在很多公司做产品的一种策略,开源本身也是为了能够让更多的用户去使用他的产品,推广他的产品。巨杉这边我们有跟他们交流,他们的企业版本会提供一些企业级的更高的特性,比如说提供一些更高级别的可靠性。当然,他们对于付费用户也会提供更加强有力的技术支持,比如说产品培训,技术支持工程师的上门服务。他们也会给付费用户提供一些大数据的解决方案的设计和开发方面的服务。结合途牛自己的现状以及我们自身的实际应用和诉求来说,我们对于这一块现在诉求不是非常的大,或者说我们还没有合作深入到那样的企业级的级别。而从软件层面本身来说,他的企业版和他的开源版本其实差异倒并不是特别大。我觉得巨杉这一点是非常合理,也是非常好的,它的服务,包括收费或者是付费的,更多是体现在技术服务的层面。我觉得这一点是很棒的。如果说后续途牛在巨杉的SDB的使用上对它提出更高的要求,或者我们对企业级特性要求更高的话,不排除我们会去做这些付费服务。

   

9. 途牛整个系统中实现逻辑比较复杂的部分是哪一块?

李源:途牛的系统分很多的层,我们是做很多分层。每一层相对来说都有它的复杂性。比如说到供应链这一层,更多体现在确认管理系统,对上承接了我们的订单系统,对下又承接了供应商的内容,这个确认管理系统服务于整个订单的生命周期。在这个过程中会存在反复向供应商咨询,因为实际上旅游卖的不是一个具体的商品,卖的不是一个笔记本不是一个杯子,它卖的是一项服务。而同样一项服务每个人都会有很多自身特定的诉求,比如他会问你这条产品能不能看油菜花,这个在产品里面本身是不会体现的。但是作为客人的诉求他希望看油菜花,有油菜花我就去,没有的话我再换另一个线路。所以在这个过程中,我们的客人和供应商之间会存在多次的交互。在这个交互中,可能我还要给你预留位置,还要占位取消占位,占好之后你是不是确定要去等等,整个过程非常复杂,往返非常多,交互流程非常长。所以在这个过程上来看,我们的这个系统是在整个现有系统里面,算是非常核心的一块内容,我们也是通过工作流引擎去配置和管理这块内容。而且我们的一些供应商也会有自己的系统,我们会和他们做一些对接,对接完以后交互性也会非常多。所以对这个系统的健壮性,可扩展性也会要求非常高。比如说我跟你做一些确认,如果中间丢失了一个消息,就会造成我们的客人到酒店以后发现没有订房间,就是因为丢了一个消息。所以我们在这个过程中,通过一些像令牌这样的机制,确保所有的服务都是可达的。

   

10. 听起来是因为业务逻辑比较复杂,而且因为客户要查询的数据不在你们这边,而在供应商那边。

李源:都有,我们自身本地也有,供应商也会有,他的形态非常多。

   

11. 因为它一直是动态的?

李源:对,一直都在变化,因为客人的诉求有些你能满足,有些你不能满足,你也不知道供应商能不能满足,所以必须要在这个过程中反复的沟通确认。

   

12. 你们的系统和供应商的系统进行对接的时候的复杂度,比如说要解决这个问题,假设我要订一个酒店的房间,我要去确定这个房间,如果这个房间也是动态变化的,他可能一个接到你们这边,另外它也有一些电话预订之类的系统。这个时候谁来保证客户的订单是可以被确认的?是你们做还是系统这边的确认最终要供应商做?

李源:这是双方来做,我们也会承担一部分这块的内容,比如客人下订单的时候,我们会有一些保障,供应商也会提供一些保障。这背后还有一些商务上的政策,包括我们和这个酒店谈合作的时候,会有一些商务的条件,不同的可能不完全一样。如果客人通过途牛下单,到酒店以后发现没有房间了,途牛有可能会承担这方面的损失,当然也有可能由酒店的供应商来承担损失。或者给这个客人分房或者是换更好的酒店,这是商务层面的合作。另外从系统层面来说,一旦客人提出诉求之后,我们会去查询系统,这个酒店,这个房型资源下有没有客人想要的这种房型?如果有就会先占位,占下来之后酒店就不能再进行售卖,但是占位并不等于说就一定会给你保留,你必须要在规定时间内完成付款,进行签约,我们才会说这个房间真的是你的了,如果到了时间你没有签约,没有付款,那就要取消占位,把它留出来再去给别人,就是这样一个过程。为什么它会非常复杂?因为不光有库存维度还有时间维度。

   

13. 比如说现在依然有一些问题是没有达到目的的,有一些客人肯定会打客服,你们这边客服系统的占比大吗?在整个系统中客服占多大比例?

李源:我们目前客服比例还是很大的,在早些年,我们的订单量大概有70%是通过电话订单进来的,我们有非常庞大的客服团队,我们的客服分为售前售中售后,包括预定。在不同的流程环节有不同的专员去处理客户的问题,这种问题一般的客户都可以通过我们400专线分配到对应的客服,他们会协助客人解决这些问题。

   

14. 现在旅游系统用户是更倾向于借助客服系统进行业务的查询以及下单预定还是更倾向于网络上自助的方式?

李源:从目前来说,我们的在线预定率一直都是持续上升的,像这两年,特别是从去年到今年,移动端通过手机自助下单,自己去查询线路、查询产品,然后下单的占比在急剧提升,非常快。一定会有一些用户,因为我们知道旅游产品,特别是高端旅游产品,是有非常多细节需要和你进行确认的,每一个点每一个行程,特别是时间周期比较长的。一般来说,像酒店、机票、交通,门票,这种单一品类的,在线预定率是比较高的,因为它没有太多需要确认的过程,比如说19号到20号住在这个酒店,我的需求是非常明确的,只要住在酒店就可以了,我要哪一天坐某个航班,什么时候坐这也是很明确的。但是如果涉及到出国游,或者国内的一些长线的旅游,在这个过程中需要确认和明确的东西就会比较多。而且很多人也会有一个心理上的感觉,比较高端的旅游,人均下来一两万这样的,他可能更希望我花这么多钱,肯定是希望保证我的行程,我所能享受到的服务,要和一个人做交互然后才会觉得心里有底。所以我们的客服包括旅游顾问会跟他沟通,因为很多时候客户并不知道他要什么,他只知道我有这么多预算,我想要去欧洲,但是去欧洲哪里,怎么安排行程他并不知道。我们的旅游顾问会结合客户本身的需求去给他安排行程,或者选择适合他的产品。同样的欧洲,比如法瑞意,从法国进从意大利出,或者从意大利进从法国出,包括这几个国家的不同行程,不同景点,购物比例,每个人的诉求都是不一样的,针对不同的诉求我们会设计不同的产品,有的会偏重购物,有的偏重风光。这些过程如果没有人在参与,完全是一个很长的行程,让客人从头看到尾对他来说也是很难的。更多的时候我们会去了解客户的需求,会去给他推荐,帮他选择更适合他的一些产品。

   

15. 接下来途牛在架构上后续发展的重点将是哪些?

李源:系统架构上来说,我始终相信系统架构是服务于业务本身的具体发展的,如果业务不变化,我们的业务量不增长,可能我们的系统架构也就这样。但是因为我们目前的业务在快速发展,我们现在是从线上在往线下发展的过程,从去年到今年,现在线下已经有150多家服务中心,落地服务。我们现在也有很多的当地采购,我们采购的策略也在发生变化,所以我们会有更多的系统支持方面的要求,特别是对供应链侧,有更多的和供应商的采购,包括资源管理方面,提高更高的诉求。接下来我们的重点可能会放在几个方面,比如说我们的采购预测,不同的在淡旺季,不同的商品不同的资源它所需要的采购量会有所不同,我们会对目前采购进来的资源的库存健康度去做更多的监测。包括什么样的商品更适合消费者,我们会再做一些选品系统;资源组装成产品之后,应该卖多少钱,价格方面我们会做自动定价。接下来资源的灵活打包,比如说有些团期酒店会送门票,酒店加上机票,机票加上地接等等这种更灵活的资源组装,这对我们的系统是提出更高的要求。

我们会做更多的数据分析,会做一些更复杂的数学建模去对过程的数据做一些监控,包括做一些预测预判,给我们具体的业务部门,包括采购部门提供更多的建议。可能明年你按照目前这样一个数据趋势,应该在哪些方面去做更多的采购。哪些去年采购的过多,给公司造成一些损失,或者造成一些库存的损失,明年这块可能要少采购一些。就是我们会做更多的数学建模方面的工作。这个可能是我们将来发展的重点部分。

   

16. 整个旅游行业它的不可测因素大吗?比如说现在国内有一些固定的热线,这个可能变化不会很大,如果是出国游这种,可能变数比较大,比如说出境游,像巴黎突然出了一个乱子,这个线路一下子就没有了,这种预测你们会做哪方面的工作吗?

李源:我们会做一些预测,但是有些预测是不可测的,比如说像巴黎这个事情。

   

17. 整个的不可测因素多吗?

李源:其实蛮多的,最大的因素就是天气。

   

18. 价格呢?

李源:价格还好,如果一切正常价格不会发生太大的波动。我们之前有做过一个天气的预警系统,未来如果说有台风或者有其他的,特别是对于飞机航班会有影响的,会造成延误这样的情况发生的一些外部因素,一旦发生我们可能就会提前对这些因素所影响的那些团期的产品去做一些预警,包括后续的处理措施。因为旅游本身是有非常多的不可测的因素,很难去判断。比如你要看油菜花,突然下大雨了,大家就去不了了;比如你要看日出,如果那天有大雾你可能就看不到。它本身是一种服务,服务的过程中,我们只能说大部分是能满足,但是不排除当某些小的风险发生的时候,有些服务就难以得到体现。

   

19. 所以对价格挑战还是蛮大的。

李源:对,我们只能在一定程度上加入一些风险因子。但是现在很难做到这一块,因为预测本身一定是部分准确,部分不准确,它只会作为我们后续决策的参考依据,不是决定性的东西。

   

20. 好,我的问题就是这些,谢谢!

李源:谢谢。

你可能感兴趣的:(李源:途牛从MySQL到SequoiaDB的变迁)