携程2015 Open House获奖项目:Gateway

Gateway

Ctrip Tech

起因:

携程的无线发展和其他公司类似,经历了一个从弱势到强势的过程,这是市场决定的。最初的解决方案是集中式的,即有一个独立的无线部门,来负责提供所有业务线的无线服务。在最初时没有问题,但随着发展,几年后,业务几经更替,早一不是原先的样子,无线也成为了主站场,拼响应速度,拼更新速度,拼业务多样性。

但提供服务的还是单一应用,并包含了所有部门的无线服务。这个应用已经变得臃肿不堪,逻辑复杂,业务之间相互影响,排错困难,一个业务线需要发布,所有业务线服务等于发了一遍。更困难的在于,逻辑复杂到已经无人能够完全掌控,增加新业务逻辑或修改老的业务逻辑,无人敢于操作,此方案已经无法满足当前需要,解耦迫在眉睫。

解耦不是一蹴而就的,而发出去的客户端就是泼出去的水。所以需要一个在不变用户请求的情况下,支持逐步解耦的新老架构更替方案,Gateway应运而生,它做到如下几方面:

1. 作为中间层,透明存在

2. 原样接收移动端请求,将其转发到中央服务

3. 将某服务从中央服务解耦出来独立存在

4. Gateway识别出此服务的请求,将其转发到新服务

5. 重复3、4直到解耦完毕

过程:

Gateway支持的解耦过程,首先解决的是基于http协议的html5服务。从14年4月份上线到7月份已经基本完成,中间基本没出现什么问题。接下来开始攻克流量更大的Native App, 它走的是自定义Tcp协议,并且有5个协议版本,且每个协议间又分压缩非压缩请求,加密非加密请求。但有前面h5的经验,从14年8月初开始开发,到9月初完成上线,到15年初已经完成全部解耦。这是一份不错的答卷。

架构:

gateway项目并非是从0开始,而是站在了巨人的肩膀。这个巨人就是Netflix。我们研究了大量Netflix的开源项目:Zuul、Archaius、Hystrix、Eureka, 将这些项目整合,接合携程业务场景再开发,推出了H5Gateway和TcpGateway.

功能:

Gateway提供了如下功能:路由、隔离、限流、熔断、返回、监控熔断。

路由:

路由是核心功能,需要根据各种条件将请求路由到正确的目的地。在实现上采用了路由服务,Gateway定期从路由服务获取路由表,达到了解耦、实时更新的效果。

隔离:

由于Gateway接收了所有业务请求,请求多种多样,当某类请求出问题时,不能影响其他请求的处理。对此,Gateway实现了资源隔离,防止某类请求将资源耗光,继而影响到其他服务。

限流:

对于任何一类请求,都应该设置容量上限,并不能无限制处理。Gateway可以为每类请求设置并发上限,当到达上限时,Gateway将不在转发请求,而是直接返回,保护后端服务。如果在后端服务过载的情况下,仍然转发请求,只会恶化问题。

熔断:

当一个服务在不能提供服务时,Gateway如果断续向它转发请求,不但不能解决问题,往往还会恶化问题。Gateway引入了一个熔断机制,当某一服务在过去一段时间内的错误比率到达一个阈值,Gateway则停止向该服务转发请求,称之为熔断,特定时间过去后,Gateway会探测此服务是否恢复正常,正常则开始正常转发,若不正常继续熔断。

反爬:

Gateway积极对接安全接口,会根据ip、clientId、及算法校验阻断非法请求,保护后端服务。

监控报警:

Gateway接入了Cat、Clog、并对接了运维报警工具。当出现问题时,会及时报警,尽早发现问题,减少损失。

原文发布于微信公众号 - 携程技术中心(ctriptech)

原文发表时间:2015-06-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏安智客

Google年度安全报告--8大潜在的恶意程序

最新Google年度安全报告中提到:2017年,从Google Play下载到有害应用程序的可能性比小行星撞击地球的可能性还要低。 安智客在空余时间将报告进行了...

41480
来自专栏顶级程序员

微软一脸懵逼:32TB的Win10源码泄露!

综合自:36氪、 Solidot、快科技、程序猿等媒体 黑客泄露微软 Win 10 大量源代码,数据超过 32 TB 据 theregister 报道,已经有多...

47770
来自专栏FreeBuf

数据安全分析思想探索

日志分析在入侵检测中的应用越来越广泛,合适的使用日志,使日志产生巨大的价值,本文旨在探讨如何让日志的价值在安全领域发挥作用。

24740
来自专栏*坤的Blog

DNS线路

4.6K50
来自专栏Android群英传

Android中的睡与不睡

11220
来自专栏北京马哥教育

有福了!六步使用Python写一个小小的自动化项目监控

本文由马哥教育Python自动化实战班5期学员推荐,转载自互联网,作者为 Defshine,内容略经小编改编和加工,观点跟作者无关,最后感谢作者的辛苦贡献与付出...

1.9K100
来自专栏Pythonista

《超哥带你学Linux》

  “别提了,我用过Linux,就是黑乎乎一个屏幕,鼠标也不能用,不停地的敲键盘,手指头都给我磨破了!”

26530
来自专栏程序员的SOD蜜

闲话权限系统的设计

一、权限的本质 权限管理,首先要理清权限的本质:权限就是对受保护资源的有限许可访问。 理解了权限的本质,就好谈权限的管理了。 权限就是对受保护资源的有限许可访问...

40780
来自专栏ChaMd5安全团队

Shodan在渗透测试及漏洞挖掘中的一些用法

渗透测试中,第一阶段就是信息搜集,这一阶段完成的如何决定了你之后的进行是否顺利,是否更容易。而关于信息收集的文章网上也是有太多,但是你真的会用吗?...

633110
来自专栏做全栈攻城狮

用Android最火的快速开发框架XUtils,进行文件下载

更多原创教程,关注微信公众平台:做全栈攻城狮。及做全栈攻城狮官网:www.8z5.net

35830

扫码关注云+社区

领取腾讯云代金券