最近尝试将 Java 系的服务都转到更轻量级的方案上,包括 springboot->gin,nacos->consul 等,但是在微服务网关的选择上不是很清楚有什么轻量的方案。PS:跟着网上的推荐也看了几天 apisix ,但是用 consul 作为上游服务发现类型的时候出现 no allow host 然后 502 ,搜索了一下没发现解决方案,去 apisix 的 discussion 提问还没回复。而且 apisix-dashboard 里服务发现类型还没有 consul 选项,看了一圈 issue 都说会在下一个 release 里发,结果距离上一个 release 已经过去一年多了还没有发新的。
1
xxxccc 221 天前
traefik
|
2
bootvue 221 天前
traefik+1
|
3
heqingpan 221 天前
nacos 也可以考虑换成轻量级 r-nacos (用 rust 重写的 nacos ,协议完成兼容),这样就可以和 apisix 配套使用。
|
4
haiku 221 天前 via Android
traefik 确实轻量,容器下动态配置也方便
|
5
tramm 221 天前
Apinto
还没试过 |
6
lwq84510 221 天前
apisix
|
7
lwq84510 221 天前
apisix 配合 nacos
|
8
xwayway 221 天前
apisix + 1 ,当然如果觉得 low 可以用 kong ,我个人倒是觉得 apisix 还行
|
9
halov 221 天前
apisix
|
10
pming1 221 天前
上了 k8s ,nacos 都可以省了。
|
11
bthulu 221 天前
为什么你们还在用网关, 网关这种东西, 自 k8s 诞生的那一天起就被淘汰了.
|
12
zhenjiachen 221 天前
apisix 不推荐
/t/1033395 |
13
RainCats 221 天前
nacos 目前发现有个 rust 重写的 rnacos 可以替换,但生产环境没试过。
同样起了八个服务,资源消耗差不多是十几二十倍的差距: nacos:698.6MB rnacos:29.2MB |
15
pckillers 220 天前
@BQsummer
Q:没网关跨 vpc 怎么调用? A:先在路由策略上实现 service 网段跨 VPC 访问,然后通过 k8s 的 RBAC 精确控制各个项目之间访问权限即可。 Q:金丝雀发布怎么精确控制流量到 pod A: 个人只用过基于 Nginx 的 ingress ,但即使是这种传统的 ingress 也支持特定规则 header 流量,特定规则 cookie 流量,或者按照比例的控制流量到多个 service 。 此外 APISIX Ingress 、Kong Ingress 与 Istio 都支持金丝雀发布,个人没在生产环境里用过。 至于精确到 pod ,service 可以包含多个 pod 也可以只包含一个 pod ,这非常简单。 Q:失败逻辑怎么精确到接口? A: 分析 Ingress 层的 log 就行了,比如用 Nginx-ingress 的话就找个能分析 nginx 日志的系统监听 Nginx-ingress 的日志。 |
16
pckillers 220 天前
个人非常同意 @pming1 的看法。
nacos 的配置中心功能完全能用 k8s 的 configmap 、secret 甚至 workload 的环境变量替代。 nacos 的注册服务则是完全能被 k8s 的 service 替代。 至于很多人喜欢的 java 网关,ingress 要强大得多。 在 k8s 里搭建 nacos 的行为,纯粹是在浪费性能套娃。 |
17
Ayanokouji 220 天前
@pckillers k8s 就不需要网关了吗,你考虑过多集群吗?
|
18
heqingpan 220 天前 via Android
@pckillers
k8s 的 configmap 很难完全替代配置中心。 部分场景有依赖配置中心的运行时动态变更配置能力,k8s 通过重启方式重新加载配置是不太能接受的。 比如我们新写一个新的处理流程,支持出问题时通过配置控制是回切到老逻辑。 如果通过配置中心,可以在 1 秒内把几十个实例秒级回退到老逻辑。 如果走 k8s 的分批重启加载新配置,回切时长达不到这效果。 类似的场景还有临时动态调整处理线程池数量等。 |
19
KP45 220 天前
https://docs.spring.io/spring-security/reference/servlet/oauth2/resource-server/jwt.html
// Spring Security OAuth 2.0 Resource Server JWT implementation 'org.springframework.security:spring-security-oauth2-jose' implementation 'org.springframework.security:spring-security-oauth2-resource-server' 维护一个 jwks 获取地址就行啦,网关都不需要 |
20
pckillers 220 天前
@heqingpan
configmap 通过文件夹形式挂载不设置 subpath ,就能自动更新配置文件。不过确实达不到秒级。 通过改配置文件就能改逻辑。这功能高级,我遇到的 springboot 项目逻辑都是写死在 jar 里的😂 至于动态调整处理线程池数量,k8s 规范上 pod 都是要加性能限制的,我寻思针对单 POD 调好最佳性能的参数后,改这些参数但不提升 CPU 与内存并不能真正应对大量负载吧? 除非一开始的参数就设置为无法发挥出硬件能力的偏低参数,但这样又是纯粹的浪费资源。目前我这里的 k8s 服务就是单纯的测好单 pod 的最佳性能参数后,再根据流量、CPU 、内存指标自动扩充 POD 数量。 |
21
heqingpan 220 天前 via Android
@pckillers
我上面说的动态感知配置变更,是通过配置中心 client 监听配置中心内容实现的,是不是监听本地配置文件。 k8s 就算能更新 pod 的配置文件,如果想不重启更新配置,还应要应用主动监听配置文件内容是否有变化。(相当于自己实现动态配置功能) 通过动态配置做切流、回滚等流程控制很好用。 没有动态变更配置的能力,可能不会想去写这类控制代码;但系统支持这个能力,在写新的高风险链路逻辑时一般都会加上,在遇到问题能快速回切止损。 当你用上一次避免问题扩大代之后,你应该就不愿意放弃它。 |
22
mark2025 220 天前
nacos 把后门当特性的想法有点抽象 https://github.com/alibaba/nacos/issues/4593
|