云场景实践研究第45期:梦想旅行-阿里云开发者社区

开发者社区> 大数据> 正文

云场景实践研究第45期:梦想旅行

简介: 作为一家服务于出境自由行用户的公司,梦想旅行在上云之后,实现了海外访问的提速,以及高可用与容灾的架构优化。本文将带领大家一同了解梦想旅行如何借助阿里云达到高速海外访问与高可用、容灾架构的最佳实践。
更多云场景实践研究案例,点击这里:【云场景实践研究合集】联合不是简单的加法,而是无限的生态,谁会是下一个独角兽
作为一家服务于出境自由行用户的公司,梦想旅行在上云之后,实现了海外访问的提速,以及高可用与容灾的架构优化。本文将带领大家一同了解梦想旅行如何借助阿里云达到高速海外访问与高可用、容灾架构的最佳实践。
我们采用的就近部署、单/双边加速、异步拉取/回传。阿里云有很好的支持,即云解析、OSS和图片服务。

采用的阿里云产品
  • 阿里云云服务器 ECS
  • 阿里云云数据库 Redis
  • 阿里云对象储存 OSS
  • 阿里云云数据库 MongoDB 版
  • 阿里云云数据库 MySQL 版
  • 阿里云 E-MapReduce
  • 阿里云云数据库 RDS
  • 阿里云负载均衡 SLB
  • 阿里云 MaxCompute
  • 阿里云云监控
  • 阿里云日志服务
  • 阿里云云解析 DNS

为什么使用阿里云
使用阿里云的产品来构建分布式爬虫架构。
阿里云帮助客户更加关心业务的实现,快速的进行业务迭代。
使用阿里云的云解析、OSS和图片服务提升海外访问速度。
借助阿里云的各种产品实现了高可用与容灾的架构优化。

关于梦想旅行
梦想旅行主要是服务于出境自由行的用户,为用户实时体统餐饮、酒店预订、景点查询等基于LBS的服务,用几个词简单概括就是:出国、哪吃、哪玩、哪优惠。一般出境游的朋友会查攻略、求达人、看路书。在国内可以搜索附近获得旅游信息,而在国外却面临信息不对称的窘境,导致出境游需要非常繁杂的准备工作。
梦想旅行正是为了解决这些问题而生,主要做了这三个方面的事情:
全球旅游数据整合与结构化;
知识图谱构建和知识实体的挖掘;
智能旅行。
其中全球旅游数据的整合与结构化是梦想旅行的基础,通过获取海量的异构旅游数据,进行清洗、整合,形成丰富、完善的旅游知识体系,帮助出境游用户更简单的游玩

梦想旅行的痛点
在数据爬取完成之后,需要处理爬取来的基础数据,这其中又有困难需要克服。
50%的访问来自于海外各地,要求海外图片能够快速上传和被访问。
基于LBS即时个性化检索,要求系统高可用以及异地容灾。

为什么选择阿里云?
使用阿里云产品构建分布式爬虫架构
0d328b30c4268d51384059f9d7c006ae08cc5581
在整体架构上采用了阿里云ECS组成Crawler集群,重点网站每个网站都有自己的代理池,原因是针对于A网站封掉的IP,针对B网站是可用的。引入JS渲染引擎,是因为很多的网站核心数据是由Ajax异步填入的,所以通过渲染引擎就可以拿到这些核心数据。
在爬取页面后,会写入相应的位于杭州和北美的消息集群,ETS通过抽取、转换并对两个消息集群的数据进行处理和存储,放入网页库和链接库。这里需要说的是,WDB采用OSS实现,这个设计非常实用,因为OSS对于存储小文件十分方便,第一,没有文件数目的上限限制,第二,存储总大小也没有限制,第三,单个文件大小没有限制。由于以上三点,使用OSS为每个网页存储了200+的历史状态,以便于对网页数据历史状态进行快速跟踪。
LinkDB的设计采用MongoDB实现,在url小于3亿之前,可以一直采用MySQL来存储,也比较方便,数据量超过3亿以后,可采用MongoDB作为LinkDB,非常方便链接库的扩展,能够支持更高量级的网页爬取。
通过智能调度,系统对网页按照网站、网页权重,更新频率,更新时间等对网页进行权重动态调整,让热门网页爬取的更快,并平衡热门和冷门url的爬取速度。爬取队列采用常用的Redis,能够动态的调权。

基于阿里云E-MapReduce和MaxCompute的数据整合和知识发现
bb988430c01eb55d65d66b5c8898e19365636036
梦想旅行的基础数据大都存储在OSS和RDS上,主要是因为E-MapReduce和ODPS(现MaxCompute)对两者都能够支持,可以进行快速的数据计算。
计算层面,在E-MapReduce和ODPS(现MaxCompute)没有大规模采用之前,曾经自己做过一段MPI,后来因为复杂度较高,并且E-MapReduce和ODPS(现MaxCompute)功能更加完善,很快的迁移到两个计算平台。这时候阿里云帮助更加关心业务的实现,快速的进行业务迭代。
值得一提的是,因为数加平台的逐步完善,很多实用的功能的开放,也大大加快了业务上的进度,例如数加平台的一些实用功能,人脸识别、电商图片、机器翻译等,还有和E-MR和ODPS(现MaxCompute)上的机器学习算法,都大大简化了算法团队的开发难度,更加关心业务指标,而不是忙着搭建平台和算法模型。
通过主题模型、实体发现等基础模块,通过各种算法,对异构数据进行处理合并,形成旅游实体和知识图谱。

阿里云使得海外访问速度提升
App一般是针对一个地区的服务,大到一个国家,小到一个城市,如果是针对全球的服务,经常是数据相对分离的。而梦想旅行的场景是,旅游用户在全球各地,并没有明显的针对性。
这就要求海外图片能够快速上传和访问。很多的同类企业,为了保证访问速度,采用CDN的形式对API做缓存,这就导致大家在海外看到的数据基本是一致的。
旅行的用户多数喜欢自拍和分享,海外的图片上传远比国内的情况要多很多,但是一旦网络访问需要跨国内国外,这个时候就必须经过一座独木桥——海外出口。这条线路因为带宽有限,流量巨大,所以链路状态非常差。尤其是上午9点后和下午6点后的上网高峰期,这条网络经常出现20%以上的丢包,处于完全不稳定的状态。带来的将是极差的用户体验。
通过采用阿里云的云解析、OSS和图片服务,来提升了图片上传的速度和API访问的稳定性,即就近部署、单/双边加速、异步拉取/回传。具体步骤如下:
dd203835f82476446c25755fe0ebe2107ce31835

使用阿里云的产品实现了高可用与容灾的架构优化
梦想旅行希望提供个性化的推荐和检索,就需要快速实时的处理能力。另外,高可用和异地容灾是每个企业都会考虑的重要问题,公司在北京实现了一个准实时镜像备份,如果一旦主机房出现问题(或者自然灾害)都能够及时的进行数据切换,避免服务长时间无法使用。下图是梦想旅行的高可用与容灾方案架构图:
bfcb117cae863732abac19b8cad61d4902b828f8
1. 负载均衡
负载均衡(SLB)服务是非常常用的基础功能,以保证每个服务的高可用,同时主备机房准实时同步,也保证了数据安全可靠。
需要一提的是,如果对转发性能要求的非常严格,例如API内部会多次访问,最常见的场景是数据库的访问,此时SLB的转发性能还是损失比较大的,解决的方案是,对于要求不高或访问较少的场景下,采用SLB,同一请求内部,需要多次访问的,采用本机haproxy,实现本机转发,提升转发性能,可以显著的加快访问速度.
2. 消息队列
消息队列是服务模块化,各个业务之间解耦的重要工具,梦想旅行目前采用的是kafka集群。
3. 数据传输
备份方面,梦想旅行采用Otter作为数据库和文件的传输工具,Otter是由阿里集团开源,最初使用在B2B做中美之间的数据同步,采用主要做主备机房见的数据库同步。这里需要说明的是,线上的数据库采用的是PXC,原因就是希望访问快速,自主性更强,而一些其它的数据库,如审核系统、CMS等均采用RDS阿里云的OSS跨区备份前不久上线,也解决了文件数据同步依赖于otter的问题,现在数据同步更快更及时。
4. 云监控
系统监控方面,最初的采用是自建的zabbix服务,后来改用云监控,比较方便定制,通过自定义,基本能够解决大部分监控问题,也方便使用。
5. 日志系统
日志系统一方面梦想旅行接了消息队列做实时处理,另一方面接了阿里云的日志系统,通过odps(现MaxCompute)进行数据分析,简化了日志分析流程。

迁移上阿里云后的成效
通过使用阿里云的云解析、OSS和图片服务,提升了图片上传的速度和API访问的稳定性,即就近部署、单/双边加速、异步拉取/回传。
通过使用阿里云的负载均衡、消息队列日志系统等产品,提高了系统的处理能力、可用性和异地容灾能力。

原文发布日期:2017-2-26
云栖社区场景研究小组成员:董普庆,仲浩。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
大数据
使用钉钉扫一扫加入圈子
+ 订阅

大数据计算实践乐园,近距离学习前沿技术

其他文章