🌈🌈🌈🌈🌈🌈🌈🌈
欢迎关注公众号(通过文章导读关注:【11来了】),及时收到AI 前沿项目工具及新技术
的推送
发送资料
可领取深入理解 Redis 系列文章结合电商场景讲解 Redis 使用场景
、中间件系列笔记
和编程高频电子书
!文章导读地址:点击查看文章导读!
感谢你的关注!
🍁🍁🍁🍁🍁🍁🍁🍁
网关面试实战
技术选型方面
这一块的话,主要是考察对 网关技术
的了解,比如你使用了分布式系统,那你整个系统前肯定是有一个网关的
那你是如何去对网关进行技术选型的呢?这其实就是考察你对常见的几种网关是否熟悉,常用的几种网关以及优缺点如下:
Nginx
:性能高,成熟,但是可扩展性不足,并且 Nginx 使用 c 编写,很难根据源码去进行定制化开发Zuul
:Zuul 有两个大的版本 Zuul1 和 Zuul2,是基于 Java 实现的,核心功能比较简单,如果需要一些灰度发布、限流、动态路由之类的功能,需要自己二次开发Spring Cloud Gateway
:目的就是为了替换 Zuul1,功能比较完善,性能相对于 Zuul1 来说好了很多自研网关
:目前许多互联网都自研自己的网关,自研网关的好处就是可以根据自己业务特点提供一个定制化、高性能、可扩展的 API 网关解决方案,例如美团技术团队就自研了 Shepherd API 网关,可以参考文章:https://tech.meituan.com/2021/05/20/shepherd-api-gateway.html
上边只是简单的提到了一些优缺点,如果你去面试,并且在简历中有较多的分布式相关的项目,一定要去对这些技术选型好好了解一下,不要对每个问题都只是知道个大概,再问就什么不知道了!
网关的核心功能:
那么如果系统中使用了网关,你是希望去使用它的什么功能呢?一定要了解网关的 应用场景
,因为很可能讲完这个之后,会问你,让你自己设计一个网关,你会怎么设计呢?这不正是考察网关的功能以及对每个功能点如何进行设计的吗?
这里将网关的功能按照重要顺序列一下,重要的列在前边:
- 动态路由:新上线某个服务,可以动态的将请求路径和服务的映射关系
热加载到网关
里去,服务增加或减少机器,网关也可以自动感知到
- 灰度发布:新功能正式上线之前,将新功能在少量机器上进行发布测试
- 授权认证:对发送到网关的请求进行授权认证
- 限流熔断
- 性能监控:监控每个接口的
耗时
、成功率
、QPS
- 系统日志:打印接口请求日志
- 数据缓存
网关部署的机器配置:
这是属于网关系统在生产环境部署的内容了,这个之前在讲注册中心也讲过机器配置的问题,这里再啰嗦一下,多看看就记住了
常用的机器配置就是 4C8G、8C16G、16C32G、32C64G
那么像注册中心、网关系统,这种都是属于 基础架构类型的系统
,一定要上配置高一点的机器,8C16G 以上的
网关系统部署在 8C16G 的机器上,每秒钟抗几千的请求是可以的
16C32G 的话,抗上万的请求也是没问题的
将机器配置和对应的请求量级大概可以对应起来就可以
并且网关系统一般是使用集群部署的,通过 Nginx 将请求再分散到多个网关系统上,可以抗更多请求,因为网关系统一般不会是整个系统的性能瓶颈
网关在整个系统中所处的地位如图所示:
网关中一些核心技术实现思路
可以去了解一下网关中核心技术是如何实现的,这里就以 动态路由
和 灰度发布
来简单说一下实现思路
- 动态路由
动态路由目的就是让 网关系统可以感知到服务上下线
,你可以想一下学到的哪一个技术可以实现这个功能呢?
这个不就是 通知
功能吗?
那么直接通过 RocketMQ 就可以实现了,新服务上线,发送一个 MQ 通知,让网关系统去拉取最新的服务地址,如果机器下线,也可以发送 MQ 通知,让网关系统剔除掉这个服务即可
- 灰度发布
这里说一下实现灰度发布的一个思路
首先,需要创建一张灰度发布表,包含字段如下:
id int(11)
service_id varchar(255)
path varchar(255)
enable_gray_release int(11)
通过定时任务去查灰度发布表,存入 Map 中
再做一个灰度发布的 拦截器
,比对请求路径是否启用灰度发布,如果启用灰度发布,就将流量转发到新部署的机器上去
这里将新版本的系统设置一个标志位,比如 ReleaseVersion
,如果这个值为 NEW
的话,表示是新部署的系统,那么就可以根据这个标志位判断哪些机器上部署的系统是新版本了,将流量散发到这些新版本的机器上去