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

作者:小傅哥
博客:bugstack 虫洞栈

沉淀、分享、成长,让自己和他人都能有所收获!

是滴,小傅哥又要准备搞事情了!这次准备下手API网关项目,因为这是所有互联网大厂都有的一个核心服务,承接着来自用户的滴滴打车、美团外卖、京东购物、微信支付,更是大促期间千万级访问量的核心系统。

那么它是一个什么样的项目呢?为什么会有它的存在?它是怎么设计实现的呢?都用到了哪些技术栈呢?

一、前言:网关是啥东西

在计算机网络中,网关(Gateway)是转发其他服务器通信数据的服务器,接收从客户端发送来的请求时,它就像自己拥有资源的源服务器一样对请求进行处理。

API网关也是随着对传统庞大的单体应用(All in one)拆分为众多的微服务(Microservice)以后,所引入的统一通信管理系统。用于运行在外部http请求与内部rpc服务之间的一个流量入口,实现对外部请求的协议转换参数校验鉴权切量熔断限流监控风控等各类共性的通用服务。

二、大厂:为啥都做网关

各大厂做网关,其实做的就是一套统一方案。将分布式微服务下的RPC到HTTP通信的同类共性的需求,凝练成通用的组件服务,减少在业务需求场景开发下,非业务需求的同类技术诉求的开发成本。

那么以往没有网关的时候怎么做,基本的做法就是再 RPC 服务之上再开发一个对应的 WEB 服务,这些 WEB 服务可以是 Spring MVC 工程,在 Spring MVC 工程中调用 RPC 服务,最终提供 HTTP 接口给到 H5、Web、小程序、APP 等应用中进行使用。如图 1-1 所示

图 1-1 从传统方式到网关设计

传统开发 WEB 服务的几个问题:

所以:综上在微服务下的传统开发所遇到的这些问题,让各个大厂都有了自己自研网关的诉求,包括;阿里腾讯百度美团京东网易亚马逊等,都有自己成熟的 API 网关解决方案。毕竟这可以降低沟通成本、提升研发效率、提升资源利用率。

三、网关:系统架构设计

如果希望实现一个能支撑百亿级吞吐量的网关,那么它就应该是按照分布式架构思维做去中心化设计,支持横向扩展。让每一台网关服务都成为一个算力,把不同的微服务RPC接口,按照权重策略计算动态分配到各个算力组中,做到分布式运算的能力。

此外从设计实现上,要把网关的通信模块、管理服务、SDK、注册中心、运营平台等依次分开单独开发实现,这样才能进行独立的组合包装使用。

这就像为什么 ORM 框架在开发的时候不是与 Spring 强绑定在一起,而是开发一个独立的组件,当需要有 Spring 融合使用的时候,再单独开发一个 Mybatis-Spring 来整合服务。

所以在这里设计网关的时候也是同样的思路,就像官网的通信不应该一开始就把 Netty 相关的服务全部绑定到 Spring 容器,这样即增加了维护成本,也降低了系统的扩展性。

诸如此类的软件架构设计,都会在这套网关微服务架构中体现,整体架构如图 1-2 所示

图 1-2 网关架构设计

整个API网关设计核心内容分为这么五块;

综上系统微服务模块结构如下:

四、演示:网关运行效果

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

图 1-3 网关运行效果

五、邀请:咱们一起开发

以上关API网关的项目,也是小傅哥准备带着读者一起利用周末假期学习实践的内容。现在上车你将会通过小傅哥的视频+文档+代码,三方面来与你一起学习,帮助你提升技术实力,为你的职业生涯续期,也为你可以走的更远,可以多赚些钱。


展开阅读全文

页面更新:2024-05-18

标签:网关   都会   共性   架构   模块   接口   成本   协议   通信   项目

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top