当前位置 : 首页 > 徐州软件开发技术论坛 > 京东10亿级调用量背后的高可用网关系统架构实践!

京东10亿级调用量背后的高可用网关系统架构实践!

作者:徐州软件公司  文章来源:徐州软件公司   阅读次数:240 次
2017-12-19

此文章是徐州软件公司整理的技术资料,由徐州软件公司总务部发布,邮箱:zongwu@xuzhousoft.com

江苏徐软信息科技有限公司江苏徐软信息科技有限公司

京东开放服务平台是京东对外开发的窗口,每年的 618 大促,京东的网关都要承载十亿级的调用量来保障几十万商家稳定使用的使命。

在保证近千个不同类型服务接口的海量调用的同时,我们还要确保服务接口之间的互不干扰,并且能够快速响应任何复杂情况,因此稳定、快速是我们一直追求的目标。

01

今年的 618 大促,京东的网关承载了几十亿的流量和调用,在这种情况下,网关系统必须保证整个系统的稳定性和高可用,保证高性能和可靠性,以支撑业务。

我们面临的是一个非常复杂的问题,基于这种复杂问题,怎样做到很好地提高它的性能和稳定性,复杂技术之间怎么整合保证整体网关的高可用,是本文的重点。

网关涵盖技术

网关系统

网关系统主要有两种:

这两种不同网关所使用的技术非常类似。

流量比较大的网关面临的难点包括:

比如我们使用了一个 Redis 集群,然后构建了两个机房,每一个机房都搭建了一个 Redis 集群,这样的话就能够很好地保证高可用。

在面对一个瞬间流量的时候,我们采用了一些缓存技术,或者更前置的 Nginx+lua+Redis 技术,让这种大流量应用能够脱离开 JVM 的依赖。

还有我们需要梳理各个接口,通过降级的策略把一些弱依赖的接口进行降级,从而保证核心应用的可用。

我们的网关承接了一千以上的后端服务接口,面对这种情况,怎样做到服务与服务之间相互不影响?架构层面怎样能够杜绝蝴蝶效应、防止雪崩?

就是说当一个接口出现问题的时候,不至于影响到其他接口的健康运行。这个说起来简单,但实际却不然。

一千个以上的接口,每个接口性能都不一致,而且每个接口所依赖的外部资源、数据库缓存等都不一样,几乎每天都会出现各种各样的问题,我们怎样通过一些隔离技术、治理技术等,保证当这些接口出现问题的时候,不会影响到全局?

面对这么复杂的情况,我们不可能每次后端服务器有任何修改,都需要有网关的修改或上线,这样网关会变得非常脆弱,稳定性极低。

我们采用了一个动态接入的技术,让后端的网关能够通过一种接入的协议进行无缝接入,之后通过一些动态代理的方式,直接让后端的接口,不管做任何修改或上线,都可以通过后端管理平台从网关上对外进行透传发布。

这样就很好地解决了网关所面临的依赖于后端接口服务的上线问题。

网关涵盖技术

02

网关的四个技术方向:

自研网关架构

03

自研网关架构

我们的自研网关架构主要分为三层:

接入层

主要负责一些长短链接的接入、限流、黑白名单、路由、负载均衡、容灾切换等。这一层所采用的技术是 Nginx+lua 的方式。

分发层

这一层是分发层或者叫网关的业务层,它更多的是 NIO+Serviet3 异步的技术。

在这一层中又分为几个部分:

这一块我们更多使用的是一些缓存的技术,线程隔离、熔断等技术也都是在这一层实现的。

因为有大量数据和协议的转换,所以这一层用了多使用缓存的技术,我们网关层所有的数据都不会直接穿透到 DB,而是采用一个叫异构数据的方式直接用缓存去做的。

泛化层中间有两块:

如上图,最右侧部分是服务降级、日志记录、监控告警,这三个都是我们整个网关的支撑系统。

服务降级是说当有些服务出现问题,第一时间把它降调;日志是给我们排查问题用的。

监控告警在下文会重点介绍,因为一个网关的可用性很大方面是通过监控系统来完善的,没有监控系统、没有告警,就像没有眼睛一样,没办法知道任何事。

后端各种各样的业务 API

这些业务 API(业务接口)通过网关对外进行暴露。整个网关大体上分为如上图的三层,最上面是接入层、中间是网关的分发层,以及业务校验、业务逻辑层,然后通过网关透传请求到后端服务。

除了这三层之外,我们再看两边的系统,都是我们整个网关比较核心和重要的支撑:

技术栈

我们的网关系统所涉及到的一些技术栈:

下文会针对这些技术所适用的场景进行深入探讨和分析,包括我们用这些技术解决什么问题。

基本思路及过程改进点

Nginx 层统一接入

05

第二个实践是在 Tomcat 层引入了 NIO,用了一个 JDK7+TOMCAT7+Servlet3 的配置,让同步请求变得异步化,然后利用 NIO 的多路复用处理技术,让我们能够同时处理更高的并发数。

07

利用 Servlet3 异步化之后可以提升吞吐量,但单个请求的响应时间会略微变长,不过这种损耗是可以忍受的,因为这会带来整个应用吞吐量的增加和灵活性的增强,还是非常值得我们使用的。

具体采用策略:

这样可以提高 Tomcat 业务逻辑的可能性,让我们在这一层非常少的线程数就能处理更多的请求,而不至于当流量非常大的时候被压垮。

分离之术

在所有分离技术中,我挑两个比较重要的点进行分享。

请求解析和业务处理分离

第一个是通过 NIO 的方式,把请求解析的线程和后面处理的业务线程进行分离。

请求由 Tomcat 单线程处理,在 NIO 模式下可以用非常少量的线程处理大量的链接情况。

业务逻辑处理和生成响应都是由另外的 Tomcat 线程池处理,从而跟请求线程隔离。这里的业务线程池还可以进一步隔离,不同业务设置不同的线程池。

业务线程池分离

09

第二个是业务线程池分离,就是通过一个线程的隔离技术,把不同的接口或不同类型的接口进行隔离。

比如订单相关的接口,拿 20 个单独线程去处理;商品相关的接口,拿 10 个单独的线程去处理,这样的话就可以让不同的接口之间互不影响,如果订单这块有一个出了问题,最多消耗它自己,不会影响到其他接口的线程的调用。

具体的线程隔离可以根据业务来指定一组线程的数量,这几个线程是为固定接口准备的。

当这个接口出现问题,它就把自己的线程数用掉了,不会去占用其他接口的线程,这样起到了线程隔离的作用,让单个 API 出问题的时候不会影响到其他。

降级

降级主要是说当有某个接口出现问题,我们能够把这个接口直接降调,让它调用直接返回,不会用到其他应用。

还有就是如果某一块弱一点的业务逻辑出现问题,我们直接把这块逻辑降调,不至于影响到其他的黄金逻辑。

降级怎么做?

10

首先,降级开关要集中化管理,比如通过 Zookeeper 推送到各个应用服务。这样才能在出现问题的第一时间找到对应开关做降级处理。

一个基于开发降级的统一配置本身这个系统要是高可用的、支持多维度的缓存,比如我们如果用 Zookeeper 实现,首先 Zookeeper 会有数据库存储,再上面会有一个本地缓存。

再就是我们会有一个快照,如果 Zookeeper 读不到缓存,会通过快照去加载进来一些托底的数据,以保证开发一旦触发之后能够在第一时间响应。而我们的开关也不至于会成为其他系统的问题,它是非常弱化、非常薄的一层。

精细化流量控制

11

说完开关、流量控制和降级之后,我们来看通过多维度的流量控制和降级的策略,比如按照单个 API 或 API+ 地域、运营商等维度进行控制。

一旦出问题了,我们会把多种组合方式进行降级,还可以根据秒/分钟级等不同维度进行流量控制,从而达到精细化流量管理。

优雅降级

12

说到降级,前面说的更多的是技术层面的,在业务层面的话,我们也要讲究优雅降级。我们不能说这个逻辑一旦建立之后就直接返回前端 502,这肯定是不友好的。

我们肯定会跟前端进行沟通,比如降级之后反馈给前端一个对应的错误码,或者给用户反馈一个提示等操作指令,这样能够让用户体验更好一些。

限流

15

恶意请求、恶意攻击,恶意的请求流量可设置为只访问 Cache,恶意的IP可以使用 Nginx 层的 Deny 进行屛蔽,防止流程超出系统的承载能力,虽然会预估但总有意外,如果没有限流,当超过系统承载峰值的时候,整个系统就会被打垮。

熔断

16

当我们的后端机构出现问题了,达到某个阀值了,系统就能够自动进行关闭降级,这是熔断的大体思路。

我们会有更灵活的配置:比如当某个接口接连三次访问超时或返回错误的话就自动熔断。

也可以是配置一些超时间,比如连续三次这种方法调用的性能都超过了 50 毫秒,就会自动对这个方法进行熔断,熔断之后就相当于降级了,再次调用的话会返回失败,就是直接拒绝返回了。

熔断之后还可以有一个设置:比如 5 秒或一分钟之后出来一个半打开状态,再次醒来之后,它会去试探一下当天这个服务是否已经 OK 了,如果没有问题了,它就会去把你之前熔断的 API 业务再次打开,能够正常对外提供服务。

现在有一些开源的实践,通过这些实践可以很好的做熔断,当然根据这里边的思路,自己也可以实现,这不是特别复杂的事情。

快速失败-链路中的超时

17

快速失败是非常重要的一个实践,不光是做网关系统,做其他系统也要记住,特别是调用量大的系统,比如注意到整个链条中的超时设置。

这是我们每年在做双 11 和 618 备战的时候,都需要重点去 review 的一块功能,包括我们平时在做开发的时候、每一次新模块上线之前,我们都要重点去监控这一块。

我们会梳理所有系统对外的依赖,比如网关依赖于我们自己的一些业务的缓存、数据库,更多的是依赖于后端数千个不同的服务。

18

这种涉及到网络的,我们必须要设置超时间,因为像网关这种调用量比较大的系统,如果不设超时间,有可能它默认时间就是几分钟。

这么长时间,一旦有一个机构出问题了,有可能瞬间整个网关系统会全部雪崩掉,任何一个接口都不能对外使用,因为数据量很大,有可能你都来不及降级就已经被冲垮了。

监控统计-应用层

19

监控统计是网关系统里非常核心的一部分,只有有了监控,有了报警,才能让我们实时了解所有的运营情况、每一个 API 调用的情况。

监控目标

江苏徐软信息科技有限公司(简称徐州软件公司)是徐州软件公司中成立时间最长、技术能力最强、经济实力最雄厚的徐州软件开发公司之一,专业的徐州软件开发团队,从事徐州软件开发10年,一直保持着徐州软件开发行业排头兵的地位。徐州软件公司徐州软件开发行业内的众多徐州软件开发公司保持着良好的合作关系,是徐州软件开发行业的领航者之一。徐州软件公司立足徐州软件开发市场,主攻徐州软件开发徐州APP开发徐州软件公司徐州ERP软件开发徐州OA软件开发徐州CRM软件开发等领域拥有大量经典案例。更多信息请访问徐州软件公司官方网站:

徐软com:http://www.xuzhousoft.com  徐软cn:http://www.xuzhousoft.com.cn
徐软app:http://app.xuzhousoft.com  淮北徐软:http://huaibei.xuzhousoft.com.cn
济宁徐软:http://jining.xuzhousoft.com.cn  亳州徐软:http://bozhou.xuzhousoft.com.cn
菏泽徐软:http://heze.xuzhousoft.com.cn  宿州徐软:http://suzhou.xuzhousoft.com.cn
枣庄徐软:http://zaozhuang.xuzhousoft.com.cn  宿迁徐软:http://suqian.xuzhousoft.com.cn
商丘徐软:http://shangqiu.xuzhousoft.com.cn  连云港徐软:http://lianyungang.xuzhousoft.com.cn
莱芜徐软:http://laiwu.xuzhousoft.com.cn  泰安徐软:http://taian.xuzhousoft.com.cn
日照徐软:http://rizhao.xuzhousoft.com.cn  开封徐软:http://kaifeng.xuzhousoft.com.cn
周口徐软:http://zhoukou.xuzhousoft.com.cn  盐城徐软:http://yancheng.xuzhousoft.com.cn
淮安徐软:http://huaian.xuzhousoft.com.cn  阜阳徐软:http://fuyang.xuzhousoft.com.cn
蚌埠徐软:http://bengbu.xuzhousoft.com.cn  临沂徐软:http://linyi.xuzhousoft.com.cn
邳州徐软:http://pizhou.xuzhousoft.com.cn  新沂徐软:http://xinyi.xuzhousoft.com.cn
沛县徐软:http://peixian.xuzhousoft.com.cn  睢宁徐软:http://suining.xuzhousoft.com.cn
丰县徐软:http://fengxian.xuzhousoft.com.cn  萧县徐软:http://xiaoxian.xuzhousoft.com.cn
砀山徐软:http://dangshan.xuzhousoft.com.cn  微山徐软:http://weishan.xuzhousoft.com.cn
永城徐软:http://yongcheng.xuzhousoft.com.cn  网络营销:http://www.f168yingxiao.com
徐州系统集成公司:http://www.0516app.com

关键字标签:徐州软件公司 徐州软件开发公司 徐州APP软件开发公司 徐州ERP软件开发公司 徐州CRM软件开发公司 徐州OA软件开发公司

下载DOC版 下载PDF版

* 以上内容由 徐州软件公司 整理


关于我们

    江苏徐软信息科技有限公司(简称徐州软件)位于国家大学科技园内,成立于2005年,注册资金1000万元,是徐州地区最具实力的集软件开发、电子商务技术服务、门户网站建设、系统集成、网络工程为一体的高科技IT技术公司之一。

技术支持

  • 售后服务电话:0516-83003411
  • 售后服务QQ:412110939
  • 售后服务邮箱:
    service@xuzhousoft.com
  • 售后投诉电话:18795428064
徐州软件公司
    扫描微信二维码即可获得
    免费信息化咨询服务

Copyright© 2005 江苏徐软信息科技有限公司 All Rights Reserved.
苏公网安备 32030302000144号  苏ICP备11059116号-5

地址:江苏省徐州市云龙区和平路57号江苏师范大学科技园4F  徐州软件公司
电话:0516-83737996 邮箱:sales@xuzhousoft.com

江苏徐软信息科技有限公司地图
江苏徐软信息科技有限公司地图
点这里关闭本窗口
×