Java技术栈
www.javastack.cn
优秀的Java技术公众号
1
什么是服务网关
服务网关 = 路由转发 + 过滤器
1、路由转发:接收一切外界请求,转发到后端的微服务上去;
2、过滤器:在服务网关中可以完成一系列的横切功能,例如权限校验、限流以及监控等,这些都可以通过过滤器完成(其实路由转发也是通过过滤器实现的)。
2
为什么需要服务网关
第二种,相较于第一点好很多,代码开发不会冗余,但是有两个缺点:
由于每个服务引入了这个公共服务,那么相当于在每个服务中都引入了相同的权限校验的代码,使得每个服务的jar包大小无故增加了一些,尤其是对于使用docker镜像进行部署的场景,jar越小越好;
将权限校验的逻辑写在网关的过滤器中,后端服务不需要关注权限校验的代码,所以服务的jar包中也不会引入权限校验的逻辑,不会增加jar包大小;
如果想修改权限校验的逻辑,只需要修改网关中的权限校验过滤器即可,而不需要升级所有已存在的微服务。
3
服务网关技术选型
引入服务网关后的微服务架构如上,总体包含三部分:服务网关、open-service和service。关注微信公众号:Java技术栈,在后台回复:架构,可以获取我整理的 N 篇最新架构教程,都是干货。
服务网关、open-service和service启动时注册到注册中心上去;
智能路由:接收外部一切请求,并转发到后端的对外服务open-service上去;API 网关是什么鬼?这推推荐大家阅读。
权限校验:只校验用户向open-service服务的请求,不校验服务内部的请求。服务内部的请求有必要校验吗?
API监控:只监控经过网关的请求,以及网关本身的一些性能指标(例如,gc等);
API日志统一收集:类似于一个aspect切面,记录接口的进入和出去时的相关日志。
4
技术选型
技术选型参考如下:
开发语言:java + groovy,groovy的好处是网关服务不需要重启就可以动态的添加filter来实现一些功能;
微服务基础框架:springboot;
网关基础组件:netflix zuul;
服务注册中心:consul;
权限校验:jwt;
API监控:prometheus + grafana;
API统一日志收集:logback + ELK;
压力测试:Jmeter;
作者:赵计刚
https://www.cnblogs.com/java-zhao/p/6716059.html
- END -