网关平台架构分享

简介: #概述 由于物种起源、历史变革等不可控因素,我们的后端服务有A、B平台之分。A平台开发之初,对外出口就设定在网关上,一直被叫做A网关。B平台的架构大致是,后端各个业务系统,服务治理、RPC,使用dubbox,对外有两个web 服务层应用(controller层),分别对应车机和手机端入口,通过注册中心获取各个业务服务提供者信息,rpc调用之。

概述

由于物种起源、历史变革等不可控因素,我们的后端服务有A、B平台之分。A平台开发之初,对外出口就设定在网关上,一直被叫做A网关。B平台的架构大致是,后端各个业务系统,服务治理、RPC,使用dubbox,对外有两个web 服务层应用(controller层),分别对应车机和手机端入口,通过注册中心获取各个业务服务提供者信息,rpc调用之。后端服务层应用,其实是没分车机和手机的。再上面就是nignx了,做反向代理和web服务层的负载均衡。B的服务架构优缺点比较明显,就说说主要的缺点了(为后面说网关做铺垫),web层的两个应用,需要依赖后端对外提供服务的所有应用,耦合度太大,不容易扩展;各个业务开发小组都会去开发和维护这两个应用,导致混乱和相互干扰;并且在这层的处理逻辑不统一,有简单的参数校验、也有写了业务处理逻辑;每次系统更新上线,基本是每个小组负责人都要通宵。目前的情况是,B平台在做服务改造(牛X的说法,微服务改造);首先,接入网关系统,丢弃掉web层的两个应用,这样就省去了都去开发维护这两个应用的工作,业务开发人员能更集中关注自己的独立业务服务;网关通过泛化调用,与各个业务服务没有耦合、强依赖。上线流程也能做到各服务独立、不限时段上线。这样统一了网关这个出入口,也是为了后面平台上云,服务其他车厂提供能力。
以后就没有A网关啦,只有大斑马网关。吼吼哈哈。。。

特点

  • 高扩展性,可以任意增加部署节点;
  • 高稳定性,线上环境持续运行,无任何异常出现;
  • 高性能,这是网关最基本也是最重要的特性;
  • API动态开放、测试、发布;
  • 实时的API、车架号调用情况统计报表展示
  • 支持接口灰度发布,根据灰度策略,动态路由调用;
  • 熔断、超时保护,异常调用量达到设置的比率时,会开启熔断机制;

架构图

网关的主要功能在于统一对外调用的出入口,达到对外部请求的统一安全校验、认证、参数校验、对内部服务的发现、路由、负载均衡调用,统一封装格式化输出等。同时网关会记录每个调用请求的信息,包括API名称、版本号、入参、输出、总的消耗时间、RPC消耗时间等。每条记录信息会发送到MQ,由流计算统计功能处理,得到准实时的API调用情况报表。

架构图1.jpg

对照上图,图中连线上的序号表示在逻辑上的先后;没序号的为通过MQ消息来异常处理的逻辑
(1) 部署开发完成的微服务应用,成功部署后,开放的服务接口信息会注册到服务注册中心;
(2) 开发人员在网关管理台,录入需要开放的API信息,网关管理台服务端会保存开放的API元数据信息到数据库;
(3) 网关系统会定时到数据库加载API元数据信息到网关服务的内存中,会涉及内存中API信息的增、删、改。目前API数目在600左右,所以这样定时全量加载不会有性能问题。后面API数目增长很大的话,可使用外部缓存或者网关控制台有API的增删改时通过mq消息通知来单条操作;
(4) 网关系统根据加载的API元数据信息,初始化并缓存该API对应的RPC服务引用;同时通过服务注册中心,监听和刷新服务提供者注册在注册中心的信息;
(5) 终端通过http/https请求到网关,网关根据参数协议解析请求参数,再做权限校验、安全认证、参数校验等处理;
(6) 根据调用的API信息,路由到具体的后端服务,进行rpc;对捕获的各种异常,做对应的解析,得到异常码和异常信息;对调用结果做格式化输出(json/xml),返回终端;
(7) 网关对每个外部调用都会记录该次调用的信息,包括API名称、版本、入参、请求时间、返回时间、rpc消耗毫秒数、总消耗毫秒数、请求IP、服务端IP、异常码等;记录信息会通过异步方式发送到MQ;

Storm流计算服务通过拉取MQ中的每条调用信息记录,做实时的统计,维度包括每日总调用量、总异常调用量、业务异常调用量、服务异常调用量,API、appKey、车架号维度的统计基本相同,增加异常调用的异常码和对应的异常数量。

网关管理台服务端也会去拉取MQ中的每条调用信息记录,批量存储到odps,可做离线分析。
网关管理台的主要功能有,API录入、API开放管理、API测试、API批量测试、API文档、API调用监控报表等。

内部结构图

网关集群部署,相互独立。通过前端负载均衡服务,对外提供服务。网关服务内部主要逻辑模块有网关上下文、请求上下文、调用器、熔断器、调用链数据采集等组成。

流程图.jpg

网关支持不同的后端微服务平台,在录入API时,可以选择不同的服务协议。初始化网关上下文时,根据配置开关,确定是否加载对应的微服务平台环境配置(Env)。不同的Env对应不同的调用器(IInvoker),不同的调用器,有自己的前后处理器链(PreHandler、AfterHandler)。这样就能做到针对不同的后端平台服务,做不同的调用前后逻辑处理。

网关的熔断器通过Hystrix实现,主要关注的配置项有如下几个:
1) 对依赖调用隔离策略,使用信号量隔离。信号量使用300;
2) 熔断后,允许再次尝试请求的间隔毫秒数;使用3000毫秒;
3) 10秒内失败请求量占总请求量(大于20)的百分比大于50%时,开启熔断;失败请求包括服务异常、超时、超信号量拒绝;
4) 调用后端服务,超时时间毫秒数默认为5000毫秒;该配置项在API的管理页面可修改,实时生效;

Hystrix内部对每个Command的配置做了缓存,防止每次调用时,都要去初始化和加载各个配置项。针对第4项,网关做了对应的改造,为了使某个API的超时时间修改能实时生效,网关增加了类来继承Hystrix的HystrixPropertiesStrategy类,重写了类中的getCommandPropertiesCacheKey方法,该方法返回的字符串即为缓存Command配置的key。重写后返回的key由API的key加上超时时间组成。这样超时时间改变后,能重新加载。

性能

网关初始化时,通过上下文,缓存了所有依赖的对象或资源。对API元数据和rpc服务引用,采用初始化时缓存,后台线程定时刷新;对服务引用对象ReferenceService,其实缓存的是他的包装类ReferenceServiceWarp,该包装类内部持有ReferenceService和一个AtomicInteger类型的计数值。某个ReferenceService对象被几个API引用,该计数值就为几;当计数数值为0时,该ReferenceServiceWarp对象就可以被注销回收了。ReferenceService与API是一对多的关系,就如一个服务接口类包含多个方法一样的道理。
外部请求进来,在网关的处理逻辑中不涉及数据库操作、外部缓存交互等;主要的性能瓶颈有两个地方,一个是用户认证和权限校验接口,另一个是后端服务业务接口;
针对后端业务接口,需要优化处理逻辑,对依赖调用需要设置超时时间;对热点接口,还可以增大dubbo线程池的线程数。
测试同事对网关做过很多次性能以及稳定性测试,下面列出一组单机性能测试数据,
200并发,TPS:6537,平均响应时间:31.65ms,网关部署硬件:4核 8G
以上的测试结果,是在后端业务接口,无复杂逻辑和耗时操作的情况下的。所以最后的瓶颈在施压机上。

安全

安全性方面,目前网关做的有以下几个方面:
1)https调用;
2)对于指定需要授权的API,调用时需要传入公共参数token,网关做token有效性验证;
3)签名校验,每个外部调用都需要带上公共参数sign,网关做签名串sign校验。要通过网关接入后端服务能力接口,需要在第三方开发者系统里申请和创建应用,每个应用会分配对应的appKey和appSecret。签名串就是通过入参、appKey、appSecret,并根据一定的规则生成得到;
4)时间戳,每个调用url有效性为生成该url时间的前后10分钟以内;

B平台服务为后接入,并且车机和手机端调用方式和参数已不可能更改;所以对B服务接口调用时有效性和权限等的校验,网关委托给一个专门的服务接口,该接口会做token验证、用户和车架号关系验证、是否车主调用验证等。

最后

目前整个网关系统已作为后端基础服务,为各个业务应用对外提供稳定的能力输出,在业务服务的开发流程中,网关管理台也提供有力支撑,包括接口测试、调用监控、异常信息查看等;
下一篇会列出网关的主要一些类图,方便理解。

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
1月前
|
SQL 存储 分布式计算
ODPS技术架构深度剖析与实战指南——从零开始掌握阿里巴巴大数据处理平台的核心要义与应用技巧
【10月更文挑战第9天】ODPS是阿里巴巴推出的大数据处理平台,支持海量数据的存储与计算,适用于数据仓库、数据挖掘等场景。其核心组件涵盖数据存储、计算引擎、任务调度、资源管理和用户界面,确保数据处理的稳定、安全与高效。通过创建项目、上传数据、编写SQL或MapReduce程序,用户可轻松完成复杂的数据处理任务。示例展示了如何使用ODPS SQL查询每个用户的最早登录时间。
95 1
|
12天前
|
SQL 数据采集 分布式计算
【赵渝强老师】基于大数据组件的平台架构
本文介绍了大数据平台的总体架构及各层的功能。大数据平台架构分为五层:数据源层、数据采集层、大数据平台层、数据仓库层和应用层。其中,大数据平台层为核心,负责数据的存储和计算,支持离线和实时数据处理。数据仓库层则基于大数据平台构建数据模型,应用层则利用这些模型实现具体的应用场景。文中还提供了Lambda和Kappa架构的视频讲解。
【赵渝强老师】基于大数据组件的平台架构
|
18天前
|
机器学习/深度学习 人工智能 自然语言处理
医疗行业的语音识别技术解析:AI多模态能力平台的应用与架构
AI多模态能力平台通过语音识别技术,实现实时转录医患对话,自动生成结构化数据,提高医疗效率。平台具备强大的环境降噪、语音分离及自然语言处理能力,支持与医院系统无缝集成,广泛应用于门诊记录、多学科会诊和急诊场景,显著提升工作效率和数据准确性。
|
25天前
|
人工智能 运维 Cloud Native
上新丨统一多层网关架构系列视频课程
《统一多层网关架构系列视频教程》将于 11 月初上线。通过该课程,您将体系化了解应用网关的发展趋势和最佳实践。课程配套资料或服务包括 PPT(PDF 版)、演示 Demo、视频回放和群内答疑等。
|
24天前
|
监控 API 调度
开放源代码平台Flynn的架构与实现原理
【10月更文挑战第21天】应用程序的生命周期涉及从开发到运行的复杂过程,包括源代码、构建、部署和运行阶段。
|
1月前
|
机器学习/深度学习 自然语言处理 搜索推荐
大厂 10Wqps智能客服平台,如何实现架构演进?
40岁老架构师尼恩,凭借深厚的架构功力,指导众多小伙伴成功转型大模型架构师,实现职业逆袭。尼恩的《LLM大模型学习圣经》系列PDF,从基础理论到实战应用,全面覆盖大模型技术,助力读者成为大模型领域的专家。该系列包括《从0到1吃透Transformer技术底座》《从0到1吃透大模型的基础实操》《从0到1吃透大模型的顶级架构》等,内容详实,适合不同水平的读者学习。此外,尼恩还分享了多个智能客服平台的实际案例,展示了大模型在不同场景中的应用,为读者提供了宝贵的实践经验。更多技术资料和指导,请关注尼恩的《技术自由圈》公众号。
大厂 10Wqps智能客服平台,如何实现架构演进?
|
1月前
|
消息中间件 缓存 Java
亿级流量电商平台微服务架构详解
【10月更文挑战第2天】构建一个能够处理亿级流量的电商平台微服务架构是一个庞大且复杂的任务,这通常涉及到多个微服务、数据库分库分表、缓存策略、消息队列、负载均衡、熔断降级、分布式事务等一系列高级技术和架构模式。
91 3
|
2月前
|
Cloud Native Java 编译器
将基于x86架构平台的应用迁移到阿里云倚天实例云服务器参考
随着云计算技术的不断发展,云服务商们不断推出高性能、高可用的云服务器实例,以满足企业日益增长的计算需求。阿里云推出的倚天实例,凭借其基于ARM架构的倚天710处理器,提供了卓越的计算能力和能效比,特别适用于云原生、高性能计算等场景。然而,有的用户需要将传统基于x86平台的应用迁移到倚天实例上,本文将介绍如何将基于x86架构平台的应用迁移到阿里云倚天实例的服务器上,帮助开发者和企业用户顺利完成迁移工作,享受更高效、更经济的云服务。
将基于x86架构平台的应用迁移到阿里云倚天实例云服务器参考
|
2月前
|
缓存 物联网 数据库
如何帮助我们改造升级原有架构——基于TDengine 平台
一、简介 TDengine 核心是一款高性能、集群开源、云原生的时序数据库(Time Series Database,TSDB),专为物联网IoT平台、工业互联网、电力、IT 运维等场景设计并优化,具有极强的弹性伸缩能力。同时它还带有内建的缓存、流式计算、数据订阅等系统功能,能大幅减少系统设计的复杂度,降低研发和运营成本,是一个高性能、分布式的物联网IoT、工业大数据平台。 二、TDengine 功能与组件 TDengine 社区版是一开源版本,采用的是 AGPL 许可证,它具备高效处理时序数据所需要的所有功能,包括: SQL 写入、无模式写入和通过第三方工具写入 S标准 SQL 查
79 13
|
2月前
|
监控 Android开发 iOS开发
深入探索安卓与iOS的系统架构差异:理解两大移动平台的技术根基在移动技术日新月异的今天,安卓和iOS作为市场上最为流行的两个操作系统,各自拥有独特的技术特性和庞大的用户基础。本文将深入探讨这两个平台的系统架构差异,揭示它们如何支撑起各自的生态系统,并影响着全球数亿用户的使用体验。
本文通过对比分析安卓和iOS的系统架构,揭示了这两个平台在设计理念、安全性、用户体验和技术生态上的根本区别。不同于常规的技术综述,本文以深入浅出的方式,带领读者理解这些差异是如何影响应用开发、用户选择和市场趋势的。通过梳理历史脉络和未来展望,本文旨在为开发者、用户以及行业分析师提供有价值的见解,帮助大家更好地把握移动技术发展的脉络。
93 6
下一篇
无影云桌面