# 造轮子:大厂为何都要自研API网关
作者:冰河
星球:http://m6z.cn/6aeFbs (opens new window)
博客:https://binghe.gitcode.host (opens new window)
文章汇总:https://binghe.gitcode.host/md/all/all.html (opens new window)
源码获取地址:https://t.zsxq.com/0dhvFs5oR (opens new window)
大家好,我是冰河~~
又到了给大家分享新项目的时刻了。当业务发展到一定程度时,会对系统进行分布式或微服务的改造,如果不对改造后的系统进行精心的设计,就会导致对外暴露大量的API,难以统一管理和维护,一种简单的方式就是引入API网关来对这些日益剧增的API进行统一管理和维护。
# 一、前言
随着互联网的发展,互联网企业的业务也在飞速发展,进而促使系统的架构也在不断的变化。总体来说,系统的架构大致经历了:单体应用架构—垂直应用架构—分布式架构—SOA架构—微服务架构的演变。当然,很多互联网企业的系统架构已经向Service Mesh(服务化网格)演变。
随着微服务化的不断普及,线上应用越来越多,并且各个应用都需要对外暴露自身的API接口,这就会导致对外暴露大量的API接口,难以统一管理和维护,并且客户端需要明确知晓各个微服务的具体访问地址,这无疑又增加了客户端开发的复杂度。
此时,如果设计和研发一套高性能的API网关服务,由API网关服务统一作为后端微服务的流量入口,客户端只需要访问API网关,不需要关心后端微服务的具体访问地址,只需要将请求发送给API网关,由API网关统一转发即可。
# 二、什么是API网关
API网关是一种用于管理、控制和保护API(应用程序编程接口)的中间层服务。它位于客户端和后端服务之间,充当了一个统一的入口点,处理所有进出系统的请求,总体来说,API网关提供了如下功能。
可以看到,API网关总体上会支持如下功能。
(1)路由和转发
接收来自客户端的请求,并根据预定义的路由规则将请求转发到相应的后端服务或微服务。这种路由功能可以基于请求的路径、方法、头部信息等进行配置。
(2)协议转换
将来自客户端的请求从一种协议转换为另一种协议,例如将HTTP请求转换为HTTPS请求,或者将REST请求转换为SOAP请求,将HTTP请求转换成RPC或者WebSocket请求等。
(3)请求和响应转换
对请求和响应的内容进行转换,例如修改请求和响应的头部信息、参数重命名、请求体的转换、响应体的格式化等。
(4)安全认证和授权
对客户端进行身份验证,并根据预先定义的访问控制策略对请求进行授权。这可以包括基于令牌、API密钥、OAuth等机制的认证和授权。
(5)灰度发布和版本管理
支持灰度发布和版本管理,使开发人员可以逐步发布新版本的API,并控制不同版本之间的流量分配。
(6)服务注册与发现
与服务发现和注册中心集成,动态地发现和注册后端服务的地址和可用性信息,以实现自动化的负载均衡和故障恢复。
(7)多协议支持
支持多种协议,如HTTP、HTTPS、WebSocket、RPC等,可以处理不同类型的请求和响应,并与各种类型的客户端和后端服务进行通信。
(8)流控与配额管理
实施流量限制和配额管理策略,限制每个用户或每个应用程序的访问频率和使用配额,防止恶意用户或异常情况导致的过度访问和资源浪费。
(9)多环境支持
支持多个环境(如开发环境、测试环境、生产环境等)的部署和管理,可以在不同的环境中灵活配置和管理API网关实例,满足不同环境的需求和要求。
(10)流量控制
实施流量控制策略,包括限制请求的速率、配额管理、访问频率限制等,以防止过度使用或滥用API资源。
(11)监控和日志记录
记录请求和响应的详细信息,包括请求来源、目标服务、处理时间、错误状态等,并生成日志以供监控、故障排除和审计请求使用。
(12)缓存请求与响应
缓存经常请求的数据或响应,以减少对后端服务的请求,提高性能并减少延迟。
(13)负载均衡
分配请求到多个相同功能的后端服务实例中,以实现负载均衡,提高系统的可伸缩性和可用性。
(14)容错处理
捕获和处理请求中的错误,并向客户端返回适当的错误信息,提高用户体验并帮助开发人员诊断和解决问题。
(15)内容转换和协议适配
根据客户端的需求,对请求和响应的内容进行转换,例如将JSON格式的请求转换为XML格式,或者将响应的内容进行压缩或解压缩,以适应不同的客户端或后端服务的需求。
(16)统一性能优化
随着服务的增加和用户量的增长,需要确保系统能够处理高并发的请求,并且能够平滑处理突发流量。API网关可以帮助优化性能,并实现流量控制和限流。
(17)身份验证与授权管理
可以对客户端进行身份验证,并根据预先定义的访问控制策略对请求进行授权。这可以包括基于令牌、API密钥、OAuth等机制的认证和授权。
(18)其他功能支持
API网关还能实现很多除了上述功能外的其他功能,例如,多租户等。
# 三、大厂为何都要自研API网关
高性能API网关的出现是互联网发展与系统架构不断迭代更新的必然趋势,已经成为各大互联网公司中必不可少的基础组件。总体来说,高性能API网关的出现是为了解决互联网飞速发展过程中,企业系统微服务化后统一管理和维护API接口的问题,并且高性能API网关的功能远远不只是管理和维护API接口那么简单。
总体来说,高性能API网关出现的原因包括如下一些原因。
(1)微服务架构的普及
微服务架构将应用程序拆分为小型、自治的服务。这种架构增加了系统中服务的数量和复杂性,需要一个中心化的方式来管理这些服务的通信和访问,需要对这些小型、自治的服务进行统一的API管理和维护。
(2)服务治理的需求
随着服务数量的增加,服务之间的通信变得更加复杂,需要管理服务的发现、负载均衡、故障处理等方面的问题。API网关可以作为一个中心化的控制点,提供服务治理的功能。
(3)安全和授权的需求
随着服务的开放和共享,安全性成为一个重要的关注点。API网关可以提供安全功能,如身份验证、授权和访问控制,确保只有授权的用户可以访问服务。
(4)性能优化和流量控制
随着服务的增加和用户量的增长,需要确保系统能够处理高并发的请求,并且能够平滑处理突发流量。API网关可以帮助优化性能,并实现流量控制和限流。
(5)简化客户端访问
在面向不同客户端的应用中,可能需要提供不同的接口版本、数据格式或协议。API网关可以隐藏底层服务的细节,向客户端提供统一的接口,从而简化客户端的访问和集成过程。
(6)协议转换和数据格式转换
不同的服务可能使用不同的通信协议和数据格式,需要一个中心化的方式来处理这些转换。API网关可以充当转换器,将不同格式的请求转换为后端服务理解的格式,并将响应转换回客户端期望的格式。
(7)集成第三方服务
在服务开发的过程中,经常需要集成各种第三方服务,如支付网关、身份验证服务等。API网关可以作为一个中心化的集成点,简化与第三方服务的集成和管理。
(8)日志记录和监控
收集关于请求和响应的日志信息,以及有关系统性能和健康状况的监控指标。这些信息对于故障排除、性能优化和安全审计非常有帮助。
(9)降低开发成本和复杂性
通过集中管理和控制API,API网关可以降低开发人员的工作量和系统的复杂性。开发人员无需为每个服务实现安全、授权、监控等功能,而是将这些任务交给API网关来处理。
(10)支持多种部署模式
API网关可以部署在云端、本地或混合云环境中,以满足不同组织和应用的需求。它可以作为一个独立的服务或与其他组件集成,灵活适应各种部署场景。
(11)易扩展和定制化
提供丰富的插件和扩展机制,使开发人员可以根据自己的需求定制和扩展功能。这种灵活性使得API网关能够适应不同的业务场景和需求变化。
(12)服务级别协议和合规性要求
许多应用程序需要满足特定的服务级别协议或合规性要求,如GDPR、HIPAA等。API网关可以帮助确保服务的可靠性、可用性和合规性,通过监控、限流等方式保障SLA,并通过加密、审计等方式保障合规性。
(13)支持异构系统和技术栈
由于企业应用程序往往由多个系统和技术栈组成,API网关可以作为一个统一的接入点,将不同系统和技术栈的服务统一暴露给客户端。
(14)其他需求
企业在建设分布式、微服务系统过程中的其他需求,例如,服务治理、灰度发布,API版本管理等等需求。
# 四、为何要学习API网关
对于技术人为何要学习API网关这个问题,其实最简单,最本质的答案就是:实际工作需要,跳槽升职加薪需要。还有一个次要的原因就是所有的互联网大厂,几乎所有的互联网企业都会用API网关,所以,无论是想进更好的大厂,还是让自己有个更好的发展前景,就需要对API网关有所了解。
API网关是整个微服务集群的访问入口,具备超高并发和超高性能的特性。高性能API网关背后涉及到的高并发、高性能、高可用、高可扩展的技术设计思路和架构模式与架构思想等多方面的技术知识,非常考验设计者在技术上的思维严谨程度以及技术的深度和广度,并且在高性能API网关中涉及到的技术和知识,是一个程序员通往高级架构师必须要掌握的知识,这些知识也是进互联网大厂必备的核心知识。
接下来,我们就从技术发展层面和具体项目层面来聊聊技术人为何要学习高性能Polaris网关。
# 4.1 技术发展层面
从大的方向来讲,技术人能够从高性能Polaris网关中学习到如图1-3所示的技能。
(1)学习编程技术
通过学习高性能Polaris网关,我们可以学习到超高并发场景下的基础中间件的通信协议和网络编程知识、提高自己的编程能力。
(2)学习中间件架构设计
API网关是所有互联网大厂必备的应对超高并发场景的基础中间件,学习高性能Polaris网关,可以了解中间件的架构设计和研发过程,学习在架构设计层面,Polaris网关是如何做到应对超高并发场景的。并且,Polaris网关的架构设计模式和架构设计思想可以应用到任何高并发中间件的架构设计中。
(3)学习超高并发技术
高性能Polaris网关的核心技术栈并不依赖Spring、SpringBoot等框架,采用应对高并发场景的Netty、Disruptor框架、异步交互使用asynchttpclient等(具体技术选型参见:《又又又一个高性能网关项目,正式启动! (opens new window)》一文),目的就是为了使Polaris网关的性能不要受到Spring、SpringBoot等框架的影响。
(4)学习系统监控技术
Polaris网关的各项指标,我们会对接监控。所以,在高性能Polaris网关中,我们会使用到各种系统监控技术,包括:日志监控、性能监控、报警与通知、问题追踪与诊断、系统资源管理、容器的监控、可视化分析,通过系统监控技术,可以及时获得系统的状态和性能信息,以便进行故障排查、性能优化和资源管理。
(5)提升硬核技术功底
通过高性能Polaris网关的学习,不仅仅可以学到很多应对超高并发场景的基础中间件的架构设计和研发,更能系统性的提升自己的硬核技术功底,从根本上掌握应对超高并发场景的核心技术和高性能技术。并且Polaris网关会比一些成熟的开源网关性能更高,真正掌握超高并发、超高性能的编程技术。
(6)开阔技术视野
互联网大厂都在自研自己的API网关,并且冰河在互联网大厂基础软件架构部门沉淀多年,从零开始深度主导和参与了众多基础中间件的架构设计和研发流程,通过带大家从零开始架构设计和研发Polaris网关,让大家充分了解互联网大厂架构和研发基础中间件的流程,掌握超高并发编程的核心技术,为我们的职业发展提供更多的机会。
通过这些方面的综合提升,能够让大家从根本上提升自己的技术能力、架构水平、编程内功、技术视野和应对超高并发的实际场景能力,编写高性能、稳定可靠的代码,这种综合能力,才是程序员最需要提升的能力,最需要沉淀下来的宝贵经验。
# 4.2 具体项目层面
说到具体项目层面,在高性能Polaris网关中,不管是后端还是运维方面,我们都能够学习到具体的技术。
后端:熟练掌握应对超高并发场景的高性能组件:Netty和Disruptor,并能够将其灵活应用到自身项目中。
后端:熟练掌握异步交互式框架asynchttpclient,从根本上掌握asynchttpclient框架的高性能设计。
后端:熟练掌握caffeine和guava缓存技术,提升Polaris网关的整体性能。
后端:熟练掌握protobuf和json等序列化技术,掌握高性能序列化技巧。
后端:熟练掌握主流的注册中心技术,包括但不限于Etcd、Nacos、Zookeeper。
后端:熟练掌握Git、GitCode,对代码工程的管理、新建代码分支、灵活切换代码分支、拉取与推送代码、合并代码等。
后端:掌握将真实场景需求转化成架构设计的方法论,架构设计原则、系统边界划分与维护。
后端:熟练掌握单元测试、JMeter压力测试工具,持续交付高质量代码。
运维:熟练掌握Docker的部署与各种Docker命令,掌握Docker前后端镜像的构建。
运维:熟练掌握Git、GitCode,对代码工程的管理、新建代码分支、灵活切换代码分支、拉取与推送代码、合并代码等。
运维:熟练掌握OpenResty的配置与运维,并能够基于OpenResty配置长链接转发、配置SSL与WSS协议等。、
运维:熟练掌握使用Grafana、Prometheus对系统进行监控,包含:JVM、服务器内存、磁盘、IO、数据库、中间件、应用服务(QPS、TPS、TTL、访问量等)的完整链路监控。
通过学习高性能Polaris网关,能够让大家清晰的认识到自己在技术方面的不足,及时查漏补缺,更重要的是能够学习到项目从需求立项、架构设计到编码实现,从单元测试、集成测试、系统测试,到全链路压测,再到部署上线,最后到运维监控的全流程项目周期。
所以,认真学习高性能Polaris网关,有助于我们更好的提升自己的架构水平、编程内功和解决实际场景问题的能力,也能够不断提升我们的技术视野,掌握前沿的技术,不管是实际工作需要,还是跳槽升职加薪需要,最终都能够游刃有余了。
# 五、推荐学习方式
与以往的高并发项目一样,高性能Polaris网关会大量使用到冰河出版的《深入理解高并发编程:核心原理与案例实战 (opens new window)》与《深入理解高并发编程:JDK核心技术 (opens new window)》图书中的知识,建议学习高性能Polaris网关的过程中,结合阅读《深入理解高并发编程:核心原理与案例实战 (opens new window)》与《深入理解高并发编程:JDK核心技术 (opens new window)》图书,会起到事半功倍的作用。
# 六、如何更好的提升技能
在冰河的知识星球除了目前正在热更的高性能网关外,还有其他6个项目,像分布式IM即时通讯系统、Sekill分布式秒杀系统、手写RPC、简易商城系统等等,这些项目的需求、方案、架构、落地等均来自互联网真实业务场景,让你真正学到互联网大厂的业务与技术落地方案,并将其有效转化为自己的知识储备。
值得一提的是:冰河自研的Polaris高性能网关比某些开源网关项目性能更高,你还在等啥?不少小伙伴经过星球硬核技术和项目的历练,早已成功跳槽加薪,实现薪资翻倍,而你,还在原地踏步,抱怨大环境不好。2024年抛弃焦虑和抱怨,我们一起塌下心来沉淀硬核技术和项目,让自己的薪资更上一层楼。
目前,领券加入就可以跟冰河一起学习《简易商城脚手架项目》、《手撸RPC专栏》和《Spring6核心技术与源码解析》、《实战高并发设计模式》、《分布式Seckill秒杀系统》、《分布式IM即时通讯系统》和《高性能Polaris网关》,从零开始介绍原理、设计架构、手撸代码。
花很少的钱就能学这么多硬核技术、中间件项目和大厂秒杀系统与分布式IM即时通讯系统,比其他培训机构不知便宜多少倍,硬核多少倍,如果是我,我会买他个十年!
加入要趁早,后续还会随着项目和加入的人数涨价,而且只会涨,不会降,先加入的小伙伴就是赚到。
另外,还有一个限时福利,邀请一个小伙伴加入,冰河就会给一笔 分享有奖 ,有些小伙伴都邀请了50+人,早就回本了!
其他方式加入星球:
- 链接 :打开链接 http://m6z.cn/6aeFbs 加入星球。
- 回复 :在公众号 冰河技术 回复 星球 领取优惠券加入星球。
特别提醒: 苹果用户进圈或续费,请加微信 hacker_binghe 扫二维码,或者去公众号 冰河技术 回复 星球 扫二维码加入星球。
好了,今天就到这儿吧,我是冰河,我们下期见~~