开放网关架构演进

news2024/11/24 5:32:50

384340caf3a9d52a13b6462704a1659e.gif

淘宝开放平台是阿里与外部生态互联互通的重要开放途径,通过开放的产品技术把阿里经济体一系列基础服务,像水、电、煤一样输送给我们的商家、开发者、社区媒体以及其他合作伙伴,推动行业的定制、创新、进化, 并最终促成新商业文明生态圈。

开放网关诞生于07年,到现在已经有15年的历史,流量从日两千万到到现在几百亿,支撑的业务也从淘系扩展到集团内多BU。随着流量上涨,网关的技术架构也在持续升级迭代,以支撑更大的流量和更广的业务。本文把网关近些年来的技术架构变迁做梳理和总结,回顾下网关的发展过程。

e7f6d213dacfb2c5390bb3e672f72d06.png

系统架构

先简单浏览下网关整体的技术架构。网关的主要职责在于访问控制,有权限控制、流量控制、映射打点等基础能力,外通讯协议主要为http协议,而服务协议支持HSF、http等。

9d7e6c64459dbe057abf3d9cc185313d.png

e45f6872087aa3c35aa575666b6733ad.png

从线程池隔离到全异步化与多集群

作为一个业务网关,不可避免会遇到API质量参差不齐的情况,高RT的API会占用较多的线程资源。为减少API调用占用线程导的互相影响,最早网关使用了线程池分组的方式来维护,但线程池分组也带来了问题:

  1. 线程池分组维护成本较高。

  2. 分组内的api之间依旧会互相影响,而api抖动是个高概率的事件,当分组较大时候互相影响现象更明显。

为此,网关做了全异步化的升级改造。全异步化包括两部分:

  1. 容器层异步化:避免了容器在业务处理过程处理线程一直被占用的情况,提升容器的线程利用率。

  2. 请求后端异步化:通过HSF请求后端异步化调用方式,提升HSF线程池利用率,避免出现HSF线程池打满的情况。

通过升级改造,释放网络等待引起的线程占用,线程数不再成为网关的瓶颈。彻底隔离API请求之间的影响,慢API不会引起网关的不稳定。

42829d95ddb98106d9fc891f8748290d.png

另外网关也在业务上整体对流量做了划分,把流量区分为不稳定的流量(可能带来安全风险)、重保业务流量以及公共流量,根据不同的流量类型划分了不同的业务集群。

81221bcd0f2869cf082df82ce9dfab7a.png

元数据多级缓存演变

网关请求流量一个特点是元数据较少变更,流量却非常大。为此,网关的缓存设计成多级缓存模式,布隆过滤器过滤非法请求,接着经过本地缓存与Tair缓存,最后访问到DB的流量已非常少了。

20a688fb31fdb50af0b97253ff4b26fe.png

  Appkey元数据存储去布隆过滤器

随着业务发展,Appkey数据量快速上涨,目前的哈希算法构建appkey bloomfilter占用60M内存,在序列化时瞬间内存byte copy会有100M左右,经常引起fgc导致业务抖动,这个对服务端和客户端都是埋雷。另外富客户端在拉到bloomfilter完成一系列构建过程中如果有异常,会直接忽略bloomfilter;这也导致前端时间用增依赖TOP去中心化包构建bloomfilter失败,从而部分流量直接击穿到元数据服务。

可以看到,布隆过滤器模式只适用于元数据没那么大的情况,否则过重模式会带来不可预期的其他问题。

由于Appkey规则固定,我们把非法请求逻辑从bloomfilter切换成规则校验模式,优化完后网关fgc抖动的现象消失。由于API元数据较少,所以API的布隆过滤器逻辑继续保留。

c22daf1d520b2b8f7f9223cf18f9abb0.png

7e829b66466272579834807521ec6de1.png

端侧异地多活

为配合菜鸟南通异地多活,网关提供了异地多活能力,支持SDK端侧灾备切换。服务商只需要使用多活client即可,SDK保证了使用的透明性。为保证南通链路链路可用性,日常保持配置小流量切换状态。当某个机房不可访问时,SDK支持从另一个机房拉取配置,同时支持把流量完全切到另一个存活机房上。

ea774aa42fcc10d91f82664c634f5646.png

43b70e42444ce4881076cdbcae825f42.png

去中心化

随着业务发展,部分API QPS达到一二十万,这部分流量需要大量网关机器来支撑,另外大流量可能对线上集群稳定性带来一定挑战。所以,网关支持了去中心化,并对部分高QPS的API做去中心化改造。部分高流量的API在同意接入直接分流到业务服务的HSF扩展端口上,网关对HSF接口做了扩展,经过网关的一定校验逻辑后再打到业务HSF接口上。

ba60024e32b08c28723990199cf3252c.png

224c77e3cb04954201b3b70719a2d661.png

报表架构升级

开放平台每天能产生几百亿的数据,而开放平台的报表是实时产生的,告警也是基于实时产生的报告人来执行。原报表架构如下:

aa32d8c223f455b146f155df10a323b7.png

该架构会带来如下问题:

  1. 流量浪费,从SLS拉取日志流量需要消耗大量带宽资源,有高额的成本费用消耗;

  2. SLS出口瓶颈。目前虽然是自动扩容,但之前出现过自动分裂后报表异常的情况;同时在大促期间会会出现带宽不够用的情况。

  3. 由于数据量大,每个任务需要计算的内容多,高峰期容易出现资源升高以及可能出现任务瓶颈。

blink理论上支持对所有的报表进行合并,多个任务变成单个任务,但这样会导致报表异常复杂,节点之间相互影响,调优或者问题定位更不可控。为了解决这个问题,对部分相关性高的报表做了合并,但是这样只能缓解问题。

所以,在此基础上我们对报表架构进一步优化,合并部分报表同时添加Blink临时聚合节点,以最细粒度的方式对blink资源做聚合,即使以api*appkey方式聚合,合并后的量级对比原始日志依旧是降低了好几个量级(每分钟千万级别压缩到3w左右)。所有blink节点不再依赖原始日志,而是依赖聚合节点,调整后的架构如下:

2ced421282652a90cd6ece7fe726d52c.png

调整后架构报表产出会延迟2~3分钟,但延迟的成本在可接受范围内,同时调整后带来的收益更大:

  1. 减轻了每个blink子任务的压力,并且对流量消耗也可以大大减轻

  2. 减轻运维成本,只需要维护好上游的汇聚任务即可,下游的任务因为数据量大幅减少导致运维起来特别轻松。

12ba4915c99cc76d5ae7902802c82ab5.png

端侧调用

为保护消费者的隐私信息,目前服务商从开放平台获取到的订单信息默认情况下无法获取获取到收货人的敏感信息。但商家在作业时查看订单收货人信息又是一个高频的场景,为了同时能解决敏感信息不被服务商获取以及同时满足商家作业的诉求,平台需要有一个方案能解决数据能直接从商家浏览器来获取消费者信息的能力。

为此,开放平台与安全部展开合作,共建了一套端侧查看消费者敏感数据的安全体系。

调用开放平台的所有接口都需要有服务商的业务身份,也就是ak/sk,但这种模式显然不适用于端直接调用模式,容易存在sk泄露的风险。为此,我们通过token模式来替代sk模式,通过isv的服务端来换取平台token。

同时,为了防止黑客通过该组件来刷数据,我们还引入霸下等风控组件来完成人机识别的操作。

整个过程通过封装成js sdk方式透出给服务商使用,降低服务商接入成本。

整体调用过程如下:

outside_default.png

e12be3c6301e4939fe5d25265dbc8aa6.png

探索:打通阿里云售卖区与弹内的网络链路

目前与开放网关互通的服务商服务有很大一部分部署在聚石塔上,为解决服务商的安全以及网络带宽问题,开放网关与聚石塔尝试打磨一整套方案,以奇门网关(开放网关访问服务商链路)为例,服务商仅在聚石塔AppEngine上部署,并开启对奇门组件即可,服务接口无需暴露到公网,整个访问链路走内网通道,节省服务商网络带宽同时提升网络访问链路的整体稳定性。

6517ed37a19e9864e3880ae292559a41.png

c483dd3ab8390818ccfe2dec65983cf0.png

总结与展望

过去网关在保持架构简单的基础上增加了安全、隐私保护等能力,而架构的演进也是朝着简单化发展,节点精简却带来了更大的收益。在云化的时代,我们也跟会向"云"靠拢,与聚石塔的基建、产品打通,赋能塔内服务商同时降低服务商成本,同时更好地服务业务。

93cc7bf3905eb79a598dff7b49f9c02b.png

团队介绍

大淘宝技术开放平台,是阿里与外部生态互联互通的重要开放途径,通过开放的产品技术把阿里经济体一系列基础服务,像水、电、煤一样输送给我们的商家、开发者、社区媒体以及其他合作伙伴,推动行业的定制、创新、进化, 并最终促成新商业文明生态圈。

我们是一支技术能力雄厚,有着光荣历史传统的技术团队。在历年双十一战场上,团队都表现着优异的成绩。这里承载着每秒百万级的业务处理,90%的订单通过订单推送服务实时地推送到商家的ERP系统完成电商作业,通过奇门开放的ERP-WMS场景已经成为仓储行业标准。随着新零售业务的持续探索与快速发展,我们渴求各路高手加入,参与核心系统架构设计、性能调优,开放模式创新等富有技术挑战的工作。

¤ 拓展阅读 ¤

3DXR技术 | 终端技术 | 音视频技术

服务端技术 | 技术质量 | 数据算法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/622525.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

最新ChatGPT网站源码+支持GPT4.0+Prompt设定+ai绘画+GPT3.5 API绘画+语音识别输入!

前言 程序已支持ChatGPT4.0、Midjourney绘画、GPT3.5 绘画、语音识别输入、文章资讯发布功能、用户每日签到功能一键更新版本。支持手机电脑不同布局页面自适应。 1、提问:程序已经支持GPT3.5、GPT4.0接口 2、支持三种Ai绘画模型(Midjourney模型、GPT3.5…

苹果Vision Pro物料成本曝光,3499美金售价原来是这样来的

苹果首款头显Vision Pro售价3499美元,近期网上流出了Vision Pro的物料清单(BOM),清单显示,Vision Pro物料成本约1509美元。 其中,二片内屏占700美元,为成本最高的零组件,由索尼供应…

谁说不可兼得,用scrcpy实现手机免流播放bilibili投屏电脑

目前的手机大额流量卡都是支持设备免流的,但是如何将这个流量用在其他设备,就相当麻烦。于是我查找了些相关Android投屏技术资料,发现了一个简单的USB投屏工具——scrcpy。 安装说明 Office:https://github.com/Genymobile/scrcp…

【JVM】JVM收集器CMS与G1区别

文章目录 区别一: 使用范围不一样区别二: STW的时间区别三: 垃圾碎片区别四: 垃圾回收的过程不一样CMS回收垃圾的4个阶段CMS的总结和优缺点G1回收器的特点大对象的处理G1回收垃圾的4个阶段什么情况下应该考虑使用G1G1设置参数 CMS…

Spark运行原理

1.BlockManager BlockManager是Spark的分布式存储系统 主从结构:BlockManagerMaster/BlockManager(Slave) BlockManagerMaster 在Driver端启动 :负责接受Executor上的BlockManager的注册 管理BlockManager的元数据信息 BlockMana…

浅谈养老所消防安全存在的问题与解决方案 安科瑞 许敏

1养老场所消防安全存在的问题 1.1筑物耐火等级低 养老场所新建的建筑较少,尤其是对于民办养老场所来说,大部分都是以原有的民房、工厂厂房、废弃学校等修建起来,通过简单的改造,而后演变成养老基地。这些建筑整体耐火等级不够&am…

海康工业相机WPF打开方式

1.通过nuget安装Gige和imageLibrary GitHub - Touseefelahi/GigeVision: Simple GigeVision implementation, GVSP, GVCP protocol implemented 2.窗体布局xaml代码 <Window x:Class"WpfApp1.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/x…

面向对象学习笔记

常见代码块应用 局部代码块 在方法中出现&#xff0c;限定变量的生命周期构造代码块&#xff08;初始化块&#xff09; 在类中方法外出现&#xff0c;多个构造方法方法中相同的代码存放到一起&#xff0c;每次调用构造都执行&#xff0c;在调用构造方法前执行静态代码块 在类中…

达摩院+华为 | NLP博士的春招历程

作者 | luan2006 整理 | NewBeeNLP 面试锦囊之面经分享系列&#xff0c;持续更新中 赶紧后台回复"面试"加入讨论组交流吧 写在前面 本博均985&#xff08;不同校&#xff09;、现北京Top2计算机类博士生、方向为人工智能-自然语言处理。 个人优势&#xff1a;绩点年…

PeekingDuck

介绍 计算机视觉项目可能会非常令人望而生畏&#xff0c;涉及到各种工具和包&#xff0c;如OpenCV、TensorFlow和PyTorch等等。不仅需要熟悉所涉及的工具和API&#xff0c;还需要正确组合各个包&#xff0c;以使整个计算机视觉流水线正常工作。 例如&#xff0c;OpenCV以[H&…

玩转百问网东山Pi壹号-SSD202 Linux开发板(一)

点击上方“嵌入式应用研究院”&#xff0c;选择“置顶/星标公众号” 干货福利&#xff0c;第一时间送达&#xff01; 来源 | 嵌入式应用研究院 整理&排版 | 嵌入式应用研究院 很早之前就做过SSD20x相关的平台&#xff0c;刚好手里有一块东山Pi壹号-开发板&#xff0c;于是我…

儿童睡眠慢波的起源、同步和传播

摘要 目的&#xff1a;使用EEG delta功率(&#xff1c;4Hz)测量的睡眠慢波活动在整个发育过程中发生显著变化&#xff0c;反映了大脑功能和解剖结构的变化。然而&#xff0c;个体慢波特征随年龄的变化尚未被彻底研究。在这里&#xff0c;本研究旨在表征儿童期到成年期的个体慢…

Redis从入门到精通【高阶篇】之底层数据结构简单动态字符串(SDS)详解

文章目录 1.原理解析1.1.SDS的内部实现原理1.1.1 Redis 6.0版本和Redis5.0对比1.1.2 redis6和redis5对比1.1.3 优势1.1.3.1. 动态扩容1.1.3.2. 常数复杂度获取字符串长度1.1.3.3. 杜绝缓冲区溢出1.1.3.4. 减少修改字符串的内存重新分配次数1.1.3.5. 二进制安全1.1.3.6. 兼容部分…

SpringMVC06:Json交互处理

目录 一、什么是JSON? 二、代码测试 1、新建一个module&#xff0c;SpringMVC-05-json&#xff0c;添加web支持和lib包 2、在index.jsp中编写测试内容 3、配置tomcat&#xff0c;启动项目&#xff0c;在浏览器中打开&#xff0c;查看控制台输出 4、controller返回JSON数据…

AC变DC220V变5V小家电电源芯片-AH8652、AH8669

Q: 什么是AH8652和AH8669电源芯片? A: AH8652和AH8669都是AC变DC的电源芯片&#xff0c;适用于将输入的交流电压&#xff08;220V&#xff09;转换为5V直流电压输出&#xff0c;用于小家电的电源模块等应用。 AC变DC220V变5V小家电电源芯片-AH8669 Q: AH8652和AH8669的最大输…

2023智源大会议程公开丨自动驾驶论坛

6月9日&#xff0c;2023北京智源大会&#xff0c;将邀请这一领域的探索者、实践者、以及关心智能科学的每个人&#xff0c;共同拉开未来舞台的帷幕&#xff0c;你准备好了吗&#xff1f;与会知名嘉宾包括&#xff0c;图灵奖得主Yann LeCun、图灵奖得主Geoffrey Hinton、OpenAI创…

Observability:如何有效地将应用日志发送到 Elasticsearch

在今天的文章中&#xff0c;我们将探讨使用 3 种不同的架构发送应用的日子到 Elasticsearch。我们将详述它们的优缺点。更多关于日志架构的介绍&#xff0c;请参考 “Elastic&#xff1a;开发者上手指南” 中的 “Elastic Stack 架构” 部分。 介绍 采用 Elastic Stack&#x…

前端录制回放rrweb

rrweb 是 ‘record and replay the web’ 的简写&#xff0c;旨在利用现代浏览器所提供的强大 API 录制并回放任意 web 界面中的用户操作。 rrweb中文文档 https://github.com/rrweb-io/rrweb/blob/master/guide.zh_CN.md 本文项目地址 https://github.com/qdfudimo/vue-rrweb…

网安学习|Kail安全渗透测试系统之【前期信息收集】工具实践学习

欢迎关注「全栈工程师修炼指南」公众号 点击 &#x1f447; 下方卡片 即可关注我哟! 设为「星标⭐」每天带你 基础入门 到 进阶实践 再到 放弃学习&#xff01; “ 花开堪折直须折&#xff0c;莫待无花空折枝。 ” 作者主页&#xff1a;[ https://www.weiyigeek.top ] 博客&…

达梦数据库与MySQL的区别及语法差异

达梦数据库与MySQL的区别及其SQL语句对比 简介&#xff1a;正文&#xff1a;1. 达梦数据库和MySQL的概述2. 特点对比3. SQL语句对比1. 数据类型&#xff1a;2. 语法&#xff1a;1. DDL&#xff08;数据定义语言&#xff09;的差异&#xff1a;2. DML&#xff08;数据操作语言&a…