加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
  • 正文
    • 一、Higress 介绍
    • 二、环境部署
    • 三、网关配置
    • 四、服务验证
    • 五、网关学习
  • 推荐器件
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

体验下,大厂的API网关!

04/22 13:50
553
阅读需 16 分钟
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

作者:小傅哥,博客:https://bugstack.cn

大家好,我是技术UP主小傅哥。

还是在22年的时候,小傅哥做了一套基于 Netty 协议转换和通信API网关,分享给伙伴们学习使用,增加一些业务开发以外的知识积累。不过很多伙伴都问过小傅哥,为啥要自研网关呢?SpringCloud Gateway 不就可以用吗?那你知道为什么自研吗?

不少伙伴问为啥自研, 但其实从我进入互联网大厂,核心的分布式技术框架,几乎就全部都是公司自研。从 rpc、mq、缓存组件(配合redis集群)、配置中心、分库分表、任务调度、全链路监控,再到我们提到的 API 网关,全部的都是自研。

后来才知道,因为之前用过一些开源组件,在流程承载方面发生过重大事故。因为是开源的组件,没法对每一个细节进行把控。而全部的自研,就会有非常强的把控力度,各个细节实现都可以做具体的优化方案,同时所有的组件自研,还可以更好的串联起来使用。另外还有一个点,就是这些开源的组件,更容易被攻击,如果有漏洞要升级,那公司全升级一遍的成本,不亚于一次大规模裁员的赔偿!当然,一些中小厂还是用市面开源的就好,因为自研的成本并不低!

那么为了让大家更好的了解下大厂的API,今天我们就来体验一款大厂开发的元原生API网关。有了这样一个学习,在看API网关项目,也会更清楚自己在做什么。

    • 官网:https://higress.io/zh-cn/源码:https://github.com/alibaba/higress部署:https://github.com/higress-group/higress-standalone -

独立运行版,用于测试

    • 案例:https://gitcode.net/KnowledgePlanet/road-map/xfg-dev-tech-higress -

部署测试

Higress 是一套比较庞大的工程,为了让大家可以方便的体验到,小傅哥会教给大家怎么做一个独立的部署和配置网关负载。此外文末还提供了基于 Netty 的 API网关学习教程。

一、Higress 介绍

Higress 是基于阿里内部两年多的 Envoy Gateway 实践沉淀,以开源 Istio 与 Envoy 为核心构建的云原生 API 网关。Higress 实现了安全防护网关、流量网关、微服务网关三层网关合一,可以显著降低网关的部署和运维成本。

    生产等级;支持每秒请求量达数十万级的大规模场景。彻底摆脱 reload 引起的流量抖动,配置变更毫秒级生效且业务无感。平滑演进;支持 Nacos/Zookeeper/Eureka 等多种注册中心,可以不依赖 K8s Service 进行服务发现,支持非容器架构平滑演进到云原生架构。同时支持 Nginx、ServiceMesh。这些方面是非常重要的,也就是你之前部署的到各个方面的服务,都可以被 Higress 统一管理,这也是我们设计网关的目的。便于扩展;提供 Wasm、Lua、进程外三种插件扩展机制,支持多语言编写插件,生效粒度支持全局级、域名级,路由级。插件支持热更新,变更插件逻辑和配置都对流量无损。

接下来,小傅哥就带着大家安装部署体验下。什么东西都是上手了才有感觉。

二、环境部署

    服务器:2c4g 最低,我是用的 2c8g 体验的。https://yun.xfg.plus - 价格实惠。基础环境:Docker、Portainer、Git 【在小傅哥的 bugstack.cn 路书中都有讲解安装和使用】

    整体安装完会如图所示。

1. 软件准备

1.1 方式一

在你的 Linux 服务器,通过 Git 命令检出安装项目;

git clone https://github.com/higress-group/higress-standalone.git
1.2 方式二

手动下载;https://github.com/higress-group/higress-standalone/archive/refs/heads/main.zip 在通过 ssh 的 sftp 工具上传到云服务器。之后解压 unzip

2. 安装 higress

2.1 执行 configure.sh
[root@lavm-aqhgp9nber github]# cd higress-standalone-main/bin/
[root@lavm-aqhgp9nber bin]# ls
base.sh  configure.sh  logs.sh  reset.sh  shutdown.sh  startup.sh  status.sh  update.sh
[root@lavm-aqhgp9nber bin]# ./configure.sh
    执行 ./configure.sh 后,注意选择 nacos 其他的默认值就可以,直接回车。执行过程会自动检测,nacos 的安装和删掉。这些不用操作。如果执行中遇到了失败或者自己选择错了,可以重新执行 ./configure.sh -r
2.2 执行 startup.sh
[root@lavm-aqhgp9nber bin]# ./startup.sh
    这一步就傻瓜式的了,直接就可以安装完成。

3. 安装 nginx

通过安装 Nginx 模拟出2个请求服务地址,如果你部署 SpringBoot 提供出 HTTP 接口也是可以。

    • 上传到服务器端执行脚本

docker-compose -f nginx-docker-compose.yml up -d

三、网关配置

1. 服务来源

这里要配置的是,通过 https://xxx/api 访问到网关服务后,要访问到哪些服务来源上。

    服务来源支持非常多的类型,包括;Nacos、Zookeeper、Consul、Eureka、固定地址、DNS 域名。这里小傅哥选择固定地址配置。分别配置了 nginx-01、nginx-02 这样我们配置路由的时候可以负载到这2个地址。

2. 路由配置

路由配置的作用就是指定你通过网关地址负载到对应的目标服务上,这里我们会让 http://117.72.37.243/api/ 请求负载到2个 nginx 上。

    通过路由api地址,访问到目标服务。这里可以配置的玩法还有很多,可以自己在尝试下。

3. 策略配置

    你可以为访问自己的路由接口配置对应的插件,比如重写URl、跨域、限流等各项功能。

四、服务验证

    地址:http://117.72.37.243/api/ - 你需要换成自己的IP地址

    首先,我在 Nginx 的 HTML 中,配置了2个不同的请求结果,一个 01、一个 02之后,访问网关地址加上 /api 接下来访问就会看到结果的变化了。

有了这个大厂网关的体验,大家就了解了一套网关是如何使用的,作用是什么啦。接下来,如果感兴趣技术的积累,想扩展下自己,也可以学习一套网关代码的实现。

五、网关学习

除了业务开发,小傅哥自己也是非常感兴趣于这样的网关技术组件的实现,所以在日常的工作中也积累了很多网关的设计。后来在22年做了一套轻量的网关系统,把核心的内核逻辑实现出来让大家学习。帮助了很多伙伴学习项目后找到了不错的工作。

1. 项目架构

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

第一块:是关于通信的协议处理,也是网关最本质的处理内容。这里需要借助 NIO 框架 Netty 处理 HTTP 请求,并进行协议转换泛化调用到 RPC 服务返回数据信息。

第二块:是关于注册中心,这里需要把网关通信系统当做一个算力,每部署一个网关服务,都需要向注册中心注册一个算力。而注册中心还需要接收 RPC 接口的注册,这部分可以是基于 SDK 自动扫描注册也可以是人工介入管理。当 RPC 注册完成后,会被注册中心经过AHP权重计算分配到一组网关算力上进行使用。

第三块:是关于路由服务,每一个注册上来的Netty通信服务,都会与他对应提供的分组网关相关联,例如:wg/(a/b/c)/user/... a/b/c 需要匹配到 Nginx 路由配置上,以确保不同的接口调用请求到对应的 Netty 服务上。PS:如果对应错误或者为启动,可能会发生类似B站事故。

第四块:责任链下插件模块的调用,鉴权、授信、熔断、降级、限流、切量等,这些服务虽然不算是网关的定义下的内容,但作为共性通用的服务,它们通常也是被放到网关层统一设计实现和使用的。

第五块:管理后台,作为一个网关项目少不了一个与之对应的管理后台,用户接口的注册维护、mock测试、日志查询、流量整形、网关管理等服务。

2. 项目流程

API网关除了基础的功能模块以外,还需要重点考虑负载均衡的设计,只有这样才能被横向扩展支撑高并发的吞吐量。所在负载设计这块,小傅哥也是花了不少的时间来构建,让负载可以被动态的管理。

这是一整套API网关的核心通信模型结构图,以API网关算力的多套服务注册到网关中心开始,拉取RPC应用接口并完成映射HTTP调用操作。最终允许用户通过 Nginx 访问和路径重写的负载均衡管理,调用到具体的网关算力中执行协议解析和RPC接口的泛化调用并最终返回结果数据。—— 就这套架构设计学习完,就够你晋升到P7岗了!

3. 项目目录

第 1 部分 - 通信组件

    第1章:HTTP请求会话协议处理第2章:代理RPC泛化调用第3章:分治处理会话流程第4章:将连接(RPCHTTP其他)抽象为数据源第5章:HTTP请求参数解析第6章:引入执行器封装服务调用第7章:权限认证组件(Shiro+Jwt)第8章:网关会话鉴权处理第16章:网络通信配置提取

第 2 部分 - 注册中心

    第9章:网关注册中心服务初始创建第10章:网关注册中心库表结构设计第11章:网关注册算力节点领域服务实现第12章:网关注册服务接口领域服务实现第14章:网关映射聚合信息查询实现

第 3 部分 - 服务发现

    第13章:服务发现组件搭建和注册网关连接第15章:服务配置拉取和组件使用验证第17章:核心通信组件管理和处理服务映射第18章:容器关闭监听和异常管理第22章:订阅服务注册消息驱动网关映射第25章:网关Nginx负载模型配置第26章:动态刷新网关Nginx负载均衡配置第27章:实现网关算力节点动态负载功能

第 4 部分 - 镜像文件

    第19章:网关引擎打包镜像部署

第 5 部分 - 服务注册

    第20章:服务注册组件搭建采集接口信息第21章:应用服务接口注册到注册中心

第 6 部分 - 运营后台

    第23章:网关运营管理后台框架搭建第24章:前后端分离应用的跨域接口调用

第 7 部分 - 扩展功能

    第28章:网关组件工程模块合并第29章:功能完善(算力关联、接口上报、调用反馈)

走编程开发这条路,就不能只是做业务,也要学习一些核心组件的实现方案。公司是公司,个人是个人。多学一些,让自己的全体系技术栈积累更加完善,也更有竞争力。

六、加入学习

注意,本项目也只是【星球:码农会锁】众多项目中的1个,其他的项目还包括:大营销、OpenAI 应用、API网关、Lottery抽奖、IM通信、SpringBoot Starter 组件开发、IDEA Plugin 插件开发等,并还有开源项目学习。加入后,从星球课程入口进入,组件项目 - 支付SDK设计和开发

如果大家希望通过做有价值的编程项目,提高自己的编程思维和编码能力,可以加入小傅哥的【星球:码农会锁】。加入后解锁所有往期项目,还可以学习后续新开发的项目。

这样成体系的全量项目学习,放在一些平台售卖,至少都要上千块。但小傅哥的星球,只需要100多,就可以获得大厂架构师对你手把手教学!

推荐器件

更多器件
器件型号 数量 器件厂商 器件描述 数据手册 ECAD模型 风险等级 参考价格 更多信息
C30617BFCH 1 PerkinElmer Inc Fiber Optic Device
暂无数据 查看
NC7SZ125P5X 1 onsemi TinyLogic UHS Buffer with 3-STATE Output, 3000-REEL

ECAD模型

下载ECAD模型
$0.18 查看
XLL726300.000000I 1 Integrated Device Technology Inc LVDS Output Clock Oscillator
$31.23 查看

相关推荐

电子产业图谱

作者小傅哥多年从事一线互联网Java开发,从19年开始编写工作和学习历程的技术汇总,旨在为大家提供一个较清晰详细的核心技能学习文档。如果本文能为您提供帮助,请给予支持(关注、点赞、分享)!