如果让我设计一套,TPS百万级API网关!

2023-02-23 0 929

是滴,小傅哥又要预备搞事情了!这次预备脱身API交换机工程项目,因为这是所有网络小厂都有的是两个核心理念服务工程项目,承接着来自用户的Lyft坐车、携程送餐、天猫网购、QQ支付,更是大促期间数千万用户数量的核心理念系统。

所以它是两个怎样的工程项目呢?为什么会有它的存在?它是怎么结构设计同时实现的呢?都加进了怎样控制技术栈呢?

一、序言:交换机是啥东西

在计算机系统中,交换机(Gateway)是转贴其他服务工程项目器通讯数据的服务工程项目器,转交从应用程序推送来的允诺时,它就像自己拥有天然资源的源服务工程项目器那样对允诺展开处理。

而API交换机也是随着对现代巨大的乙烯应用领域(All in one)拆分为众多的微服务工程项目(Microservice)以后,所导入的标准化通讯信息系统。用于运行在内部http允诺与内部rpc服务工程项目之间的两个网络流量出口处,同时实现奥波切茨允诺的协议转换、参数奇偶校验、身份验证、津格尔、TNUMBERAP、开闭、监视、风险控制等各类共通点的通用型服务工程项目。

二、小厂:咋都做交换机

各小厂做交换机,其实做的是两套标准化方案。将分布没落服务工程项目下的RPC到HTTP通讯的同行业共通点的市场需求,精练成通用型的模块服务,减少在销售业务市场需求情景合作开发下,非销售业务市场需求的同行业控制技术政治理念的合作投资成本。

所以以往没有交换机的时候怎么做,基本的做法是再 RPC 服务工程项目之上再合作开发两个对应的 WEB 服务工程项目,这些 WEB 服务工程项目可以是 Spring MVC 工程建设,在 Spring MVC 工程建设中初始化 RPC 服务工程项目,最终提供 HTTP USB给到 H5、Web、小程序、APP 等应用领域中展开采用。如图1-1所示

如果让我设计一套,TPS百万级API网关!

现代合作开发 WEB 服务工程项目的几个难题:

难题1:每两个 WEB 应用领域,都需要与之相匹配申请两套工程建设、搜索引擎、机器等天然资源,一直到部署,研制工作效率减少,保护成本上升。难题2:每两个 WEB 应用领域,单厢有所牵涉共通点市场需求,开闭、TNUMBERAP、降班、津格尔等政治理念,保护标识符成本上升。难题3:每两个 WEB 应用领域,在整个采用开发周期内,单厢牵涉到文件格式的保护、工程建设的增容、初步结构设计的政治理念,类似农耕那样的合作开发势必会减少研制工作效率。

所以:综上在微服务工程项目下的现代合作开发所遇到的这些难题,让各个小厂都有了自己自研交换机的政治理念,包括;阿里、腾讯、百度、携程、天猫、网易、亚马逊等,都有自己成熟的 API 交换机解决方案。毕竟这可以减少沟通成本、提升研制工作效率、提升天然资源利用率。

三、交换机:系统架构结构设计

如果希望同时实现两个能支撑百亿级吞吐量的交换机,所以它就应该是按照分布式架构思维做去中心化结构设计,支持横向扩展。让每一台交换机服务工程项目都成为两个算力,把不同的微服务工程项目RPCUSB,按照权重策略计算动态分配到各个算力组中,做到分布式运算的能力。

此外从结构设计同时实现上,要把交换机的通讯模块、管理服务工程项目、SDK、注册中心、运营平台等依次分开单独合作开发同时实现,这样才能展开独立的组合包装采用。

这就像为什么 ORM 框架在合作开发的时候不是与 Spring 强绑定在一起,而是合作开发两个独立的模块,当需要有 Spring 融合采用的时候,再单独合作开发两个 Mybatis-Spring 来整合服务工程项目。

所以在这里结构设计交换机的时候也是同样的思路,就像官网的通信不应该一开始就把 Netty 相关的服务工程项目全部绑定到 Spring 容器,这样即增加了保护成本,也减少了系统的扩展性。

诸如此类的软件架构结构设计,单厢在这套交换机微服务工程项目架构中体现,整体架构如图1-2所示

如果让我设计一套,TPS百万级API网关!

整个API交换机结构设计核心理念内容分为这么五块;

第一块:是关于通讯的协议处理,也是交换机最本质的处理内容。这里需要借助 NIO 框架 Netty 处理 HTTP 允诺,并展开协议转换泛化调加进 RPC 服务工程项目返回数据信息。第二块:是关于注册中心,这里需要把交换机通讯系统当做两个算力,每部署两个交换机服务工程项目,都需要向注册中心注册两个算力。而注册中心还需要转交 RPC USB的注册,这部分可以是基于 SDK 自动扫描注册也可以是人工介入管理。当 RPC 注册完成后,会被注册中心经过AHP权重计算分配到一组交换机算力上展开采用。第三块:是关于路由服务工程项目,每两个注册上来的Netty通讯服务工程项目,单厢与他对应提供的分组交换机相关联,例如:wg/(a/b/c)/user/… a/b/c 需要相匹配到 Nginx 路由配置上,以确保不同的USB初始化允诺到对应的 Netty 服务工程项目上。PS:如果对应错误或者为启动,可能会发生类似B站事故。第四块:责任链下插件模块的初始化,身份验证、授信、TNUMBERAP、降班、开闭、津格尔等,这些服务工程项目虽然不算是交换机的定义下的内容,但作为共通点通用型的服务工程项目,它们通常也是被放到交换机层标准化结构设计同时实现和采用的。第五块:管理后台,作为两个交换机工程项目少不了两个与之对应的管理后台,用户USB的注册保护、mock测试、日志查询、网络流量整形、交换机管理等服务工程项目。

综上系统微服务工程项目模块结构如下:

如果让我设计一套,TPS百万级API网关!

四、演示:交换机运行效果

趁着周末假期小傅哥已经做了一部分的功能同时实现,就像小傅哥以前《手写Spring》、《手写Mybatis》那样,此工程项目也是渐进式的逐步完成各个模块功能的合作开发。并参照优秀源码级的工程项目架构结构设计,运用抽象和分治的结构设计技巧,解决功能间的耦合初始化和服务工程项目结构设计。同时也结合结构设计原则和相应情景下的结构设计模式,合作开发出高质量易于迭代和保护的标识符。部分标识符同时实现和运行如图1-3所示

如果让我设计一套,TPS百万级API网关!

左侧是API交换机核心理念通讯模块,右侧是RPC(Dubbo)服务工程项目。通过对网页端发起的 http 允诺,经过API交换机的协议转换和对RPC的泛化初始化包装结果数据并返回到页面,是中间这张图的运行效果了。左侧工程建设的同时实现,以渐进式分拆模块逐步完成,例如: core-01(Netty通讯)、core-02(泛化初始化)、core-03(执行器)等,让每两个对API交换机感兴趣的读者都能从中学习到;架构的分层、功能的结构设计、标识符的同时实现。

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务