架构揭秘传统产业,比如旅游业该如何向互联网转型,这期间会遇到哪些技术问题?带着这些疑问,我们采访了中青旅遨游网架构师沙洲,让他来谈谈遨游网的技术架构。
在今年的两会上,国务院总理李克强不仅提出了“互联网+”概念,还亲自为网购代言,这一切都充分说明企业要想做好产品、做活产品,互联网是必不可少的一个平台。
那么,传统产业,比如旅游业该如何向互联网转型,在技术架构上会遇到哪些挑战呢?带着这些疑问,我们采访了中青旅遨游网架构师沙洲。
中青旅遨游网架构师 沙洲
1.请您自我介绍一下,可以分享一下您的技术成长之路吗?
沙洲:大家好,我叫沙洲,今年29岁,目前主要负责遨游网技术架构的工作,包括基础开发框架的设计,系统流程架构的设计以及API建设等。
在来遨游网之前,我曾在北京一家做gis开发的公司做开发工程师,在那里,我遇到了一位技术高超并非常严格负责的领导。他经常对我的代码进行CodeReview,不断向我灌输程序设计思想,久而久之,我发现自己的技术水准上升非常大。
在2011年,我有幸入职遨游网,当时遨游网正在开始进行传统企业向互联网企业转型的起步阶段,于是便开始不断开拓技术视野,学习互联网企业的技术架构,并将其应用到遨游网上来。目前遨游网仍处在技术架构转型中,我也仍在不断的学习和进步中。
2.介绍下中青旅遨游网网站架构?
沙洲:遨游网分为前台网站系统,后台管理系统和商户平台系统,每个系统又拆分为不同的子站,每个子站都细分为不同的模块。目前遨游网已经完成了第一阶段的SOA化, 将业务模块进行全面解耦和拆分,简化了系统复杂度,降低了故障扩散风险。
网站架构图
我们把细粒度的服务当作基础服务,根据业务需要将其组合,提供粗粒度的服务对应用层公开,这样不仅可以做到模块的全面解耦,也解决了对外暴露服务过多,业务系统应用服务时组装服务过于繁杂的问题。底层服务资源的消耗能够简化上层应用逻辑,对于系统架构层次的合理性更为有益,只要提高底层基础服务的性能,上层服务能力将更具弹性。
SOA架构图
3.传统旅游业在向互联网转型的过程中,在技术架构上遭遇哪些挑战?你们是如何应对的?
沙洲:由于遨游网之前的规划并不是电商网站,因此一直以来并没有自己的后台系统,一切业务的处理和流转均基于中青旅的ERP系统,而ERP系统的建设标准是基于财务结算和线下业务流转。其中涉及到了无数的事务性操作以及大量直接与数据库交互的操作,因此无论在系统性能方面还是硬件部署方式上均与电商网站相距甚远。更令人沮丧的是,相对保守的ERP系统无法满足OTA业务多样性的发展,因此针对遨游网的一点点改动都是伤筋动骨的,严重制约了网站的成长。于是我们下决心建立一套独立的,轻量的,适合电商的后台系统来支撑遨游网。
在这期间遇到了两个问题:
- 第一个问题是如何做到所谓的"高速路上换轮胎",在脱胎换骨的过程中如何尽量小的影响业务的发展。对此我们采取的方式是先做业务梳理和系统拆分,即进行系统的SOA化改造,拆分后的模块之间的耦合度大大降低, 我们便可以从容的进行新模块的构造以及的对旧模块的更替;
- 第二个问题是与ERP系统的对接策略,由于在遨游网上售卖的产品70%来自中青旅, 因此会涉及到大量的数据交互,而这些交互大部分是通过接口来实现。这时便会出现ERP系统的性能和稳定性对网站造成影响的问题。 对此我们的对策是进行大量的异步操作和采用分布式缓存技术。建立消息系统,缓存更新系统以及监控系统。做到网站和ERP系统的性能解耦, 从而保证网站运行的稳定性和良好的用户体验。
4.你在上文中提到,每个子站都细分为不同的模块,可否介绍一下这几个模块的技术细节?
沙洲:由于遨游网的各个子站都是一类业务流程的集合,针对这类业务的各个子流程就会分为不同模块,不同模块所使用的技术和部署的环境也不尽相同。例如预订站点主要针对下单流程,其中包括了各个品类普通产品的预订模块,促销抢购类产品的预订模块等。相较于普通产品的预订, 促销抢购类产品的预订由于涉及高并发访问,我们对整个模块包括数据库都进行了独立部署,而且针对价格库存等敏感信息进行单独配置,并提供了预警和侧峰机制,这样便保证了促销活动期间抢购模块不会对其他模块产生影响。
5.能否结合具体实例谈谈你们是如何运用分布式缓存技术的?
沙洲:对于分布式缓存技术,我们已经在使用的是memcached,对于Redis我们已经在小范围使用,今年将逐步推广至整个网站。
目前我们的缓存技术主要运用于两种情况:一种是针对一些频繁读取且变化相对较少的数据,例如地理信息、景区景点信息、业务字典信息等数据。 我们将这些数据存入缓存中并提供定期数据同步机制,从而减少数据库的访问量,提高读取速度。另一种是针对与其他系统的对接,例如网站在下订单的过程中要从产品系统中获取产品信息,出发班期,价格,库存等信息。为了保证网站的稳定性和良好的用户体验,需要把这些信息预先加载至缓存中,之后所有的操作如价格校验和扣减库存等都在缓存中进行,配合消息系统和产品缓存更新机制,做到信息快速同步更新。这样不仅提升了下单速度, 也防止了接口故障对预订流程的影响。
6.从你2011年加入遨游网至今,架构和不同模块都发生过哪些变化,为什么有这些变化?
沙洲:一开始遨游网的技术架构是典型的传统应用的架构类型,所有的业务逻辑都混在一起。随着业务的增多,系统愈发臃肿庞大,轻微的改动都可能造成整个网站的瘫痪。
为了改变这种状况,我们首先进行了站点的拆分,把不同的业务流程归置到不同的站点下,每个站点都进行独立部署。随后为了解决数据库性能问题, 根据业务类型以及访问情况进行了数据库的拆分和优化。之后便开始了SOA化改造,改造过程中为了保证代码质量和便于统一维护和管理, 我们打造了AoyouFramework的基础开发框架,在此框架上做到了代码优化和逻辑重构。
7.国内开源氛围非常活跃,你们在技术上有用到哪些开源产品吗?
沙洲:对于开源技术,我们始终坚信这是在我们技术发展历程中至关重要的一个环节。当开拓或重构一个业务线时,我们越来越多的将焦点放在了开源技术上。 我们目前用到了Node.js,Bootstrap,Angularjs,Mongodb,Python,Redis,RabbitMQ等成熟的开源技术,并在逐步扩大LNMP/LAMP此类经典开源网站服务器架构在生产环境的使用率。今年已按计划实施了与北京GDG开发者社区合作,旨在更好的使用, 参与并且支持开源技术。