专访80后架构师沙洲:遨游网架构揭秘

cmb2 9年前

原文  http://www.csdn.net/article/2015-03-18/2824243


在今年的两会上,国务院总理李克强不仅提出了“互联网+”概念,还亲自为网购代言,这一切都充分说明企业要想做好产品、做活产品,互联网是必不可少的一个平台。

那么,传统产业,比如旅游业该如何向互联网转型,在技术架构上会遇到哪些挑战呢?带着这些疑问,我们采访了中青旅遨游网架构师沙洲。

专访80后架构师沙洲:遨游网架构揭秘

中青旅遨游网架构师 沙洲

1.请您自我介绍一下,可以分享一下您的技术成长之路吗?

沙洲: 大家好,我叫沙洲,今年29岁,目前主要负责遨游网技术架构的工作,包括基础开发框架的设计,系统流程架构的设计以及API建设等。

在来遨游网之前,我曾在北京一家做gis开发的公司做开发工程师,在那里,我遇到了一位技术高超并非常严格负责的领导。他经常对我的代码进行CodeReview,不断向我灌输程序设计思想,久而久之,我发现自己的技术水准上升非常大。

在2011年,我有幸入职遨游网,当时遨游网正在开始进行传统企业向互联网企业转型的起步阶段,于是便开始不断开拓技术视野,学习互联网企业的技术架构,并将其应用到遨游网上来。目前遨游网仍处在技术架构转型中,我也仍在不断的学习和进步中。

2.介绍下中青旅遨游网网站架构?

沙洲: 遨游网分为前台网站系统,后台管理系统和商户平台系统,每个系统又拆分为不同的子站,每个子站都细分为不同的模块。目前遨游网已经完成了第一阶段的SOA化, 将业务模块进行全面解耦和拆分,简化了系统复杂度,降低了故障扩散风险。

专访80后架构师沙洲:遨游网架构揭秘

网站架构图

我们把细粒度的服务当作基础服务,根据业务需要将其组合,提供粗粒度的服务对应用层公开,这样不仅可以做到模块的全面解耦,也解决了对外暴露服务 过多,业务系统应用服务时组装服务过于繁杂的问题。底层服务资源的消耗能够简化上层应用逻辑,对于系统架构层次的合理性更为有益,只要提高底层基础服务的 性能,上层服务能力将更具弹性。

专访80后架构师沙洲:遨游网架构揭秘

SOA架构图

3.传统旅游业在向互联网转型的过程中,在技术架构上遭遇哪些挑战?你们是如何应对的?

沙洲: 由于遨游网之前的规划并不是电商网站,因此一直以来并没有自己的后台系统,一切业务的处理和流转均基于中青旅的ERP系统,而ERP系统的建设标准是基于 财务结算和线下业务流转。其中涉及到了无数的事务性操作以及大量直接与数据库交互的操作,因此无论在系统性能方面还是硬件部署方式上均与电商网站相距甚 远。更令人沮丧的是,相对保守的ERP系统无法满足OTA业务多样性的发展,因此针对遨游网的一点点改动都是伤筋动骨的,严重制约了网站的成长。于是我们 下决心建立一套独立的,轻量的,适合电商的后台系统来支撑遨游网。

在这期间遇到了两个问题:

  1. 第一个问题是 如何做到所谓的"高速路上换轮胎" ,在脱胎换骨的过程中如何尽量小的影响业务的发展。对此我们采取的方式是先做业务梳理和系统拆分,即进行系统的SOA化改造,拆分后的模块之间的耦合度大大降低, 我们便可以从容的进行新模块的构造以及的对旧模块的更替;
  2. 第二个问题是 与ERP系统的对接策略 ,由于在遨游网上售卖的产品70%来自中青旅, 因此会涉及到大量的数据交互,而这些交互大部分是通过接口来实现。这时便会出现ERP系统的性能和稳定性对网站造成影响的问题。 对此我们的对策是进行 大量的异步操作和采用分布式缓存技术 。建立消息系统,缓存更新系统以及监控系统。做到网站和ERP系统的性能解耦, 从而保证网站运行的稳定性和良好的用户体验。

4.你在上文中提到,每个子站都细分为不同的模块,可否介绍一下这几个模块的技术细节?

沙洲: 由于遨游网的各个子站都是一类业务流程的集合,针对这类业务的各个子流程就会分为不同模块,不同模块所使用的技术和部署的环境也不尽相同。例如预订站点主 要针对下单流程,其中包括了各个品类普通产品的预订模块,促销抢购类产品的预订模块等。相较于普通产品的预订, 促销抢购类产品的预订由于涉及高并发访问,我们对整个模块包括数据库都进行了独立部署,而且针对价格库存等敏感信息进行单独配置,并提供了预警和侧峰机 制,这样便保证了促销活动期间抢购模块不会对其他模块产生影响。

5.能否结合具体实例谈谈你们是如何运用分布式缓存技术的?

沙洲: 对于分布式缓存技术,我们已经在使用的是memcached,对于Redis我们已经在小范围使用,今年将逐步推广至整个网站。

目前我们的缓存技术主要运用于两种情况:一种是针对一些 频繁读取且变化相对较少的数据 ,例如地理信息、景区景点信息、业务字典信息等数据。 我们将这些数据存入缓存中并提供定期数据同步机制,从而减少数据库的访问量,提高读取速度。另一种是 针对与其他系统的对接 ,例如网站在下订单的过程中要从产品系统中获取产品信息,出发班期,价格,库存等信息。为了保证网站的稳定性和良好的用户体验,需要把这些信息预先加载至 缓存中,之后所有的操作如价格校验和扣减库存等都在缓存中进行,配合消息系统和产品缓存更新机制,做到信息快速同步更新。这样不仅提升了下单速度, 也防止了接口故障对预订流程的影响。

6.从你2011年加入遨游网至今,架构和不同模块都发生过哪些变化,为什么有这些变化?

沙洲: 一开始遨游网的技术架构是典型的传统应用的架构类型,所有的业务逻辑都混在一起。随着业务的增多,系统愈发臃肿庞大,轻微的改动都可能造成整个网站的瘫痪。

为了改变这种状况,我们首先进行了站点的拆分,把不同的业务流程归置到不同的站点下,每个站点都进行独立部署。随后为了解决数据库性能问题, 根据业务类型以及访问情况进行了数据库的拆分和优化。之后便开始了SOA化改造,改造过程中为了保证代码质量和便于统一维护和管理, 我们打造了AoyouFramework的基础开发框架,在此框架上做到了代码优化和逻辑重构。

7.国内开源氛围非常活跃,你们在技术上有用到哪些开源产品吗?

沙洲: 对于开源技术,我们始终坚信这是在我们技术发展历程中至关重要的一个环节。当开拓或重构一个业务线时,我们越来越多的将焦点放在了开源技术上。 我们目前用到了Node.js,Bootstrap,Angularjs,Mongodb,Python,Redis,RabbitMQ等成熟的开源技 术,并在逐步扩大LNMP/LAMP此类经典开源网站服务器架构在生产环境的使用率。今年已按计划实施了与北京GDG开发者社区合作,旨在更好的使用, 参与并且支持开源技术。

</div>