为什么要有网关
最近公司工作安排研究微服务的单点登录,初衷便于公司各个业务系统运营的方便。
网上查看资料后发现,在设计单点系统时,若能同时整合网关,则在后续的业务系统的改造、接入等方面会轻松很多。
此文为 为什么微服务一定要有网关? 笔记
WHAT
服务网关=路由转发+过滤器
- 路由转发:接收一切外界请求,转发到后端的微服务上去;
- 过滤器:在服务网关中可以完成一系列的横切功能,例如权限校验、限流以及监控等,这些都可以通过过滤器完成(其实路由转发也是通过过滤器实现的)。
在配合单点系统时,可以将业务系统的权限校验工作全部放在网关中实现,无需每个业务系统都各自实现一遍。
WHY
如果没有网关,仅有单点登录系统,那么权限校验的功能实现方式无非下列三种:
- 各自为政:每个微服务各自实现一遍,各自管理用户权限,用户权限系统不通用。
- 众星拱月:写到专门的权限校验微服务,提供接口供其他微服务调用。
- 事不关己:在请求到达微服务前,在网关处拦截,进行过滤,实现权限校验。
第一种代码冗余,维护成本高,不推荐。
第二种虽然无代码冗余,但是在各个服务皆需依赖此公共服务,耦合度高,不利于微服务升级。公共服务更新时,需要各个微服务重新引包,重新部署。
而服务网关恰好可以解决这样的问题:
- 将权限校验的逻辑写在网关的过滤器中,后端服务不需要关注权限校验的代码;
- 如果想修改权限校验的逻辑,只需要修改网关中的权限校验过滤器即可,而不需要升级所有已存在的微服务。
所以,需要服务网关!!!
HOW
网关基本功能
智能路由
权限校验
API 监控
限流
API 日志统一收集
技术选型
缺点
性能下降
相比较直接访问业务系统,引入网关后多了一层转发,性能自然会下降一点。要求网关服务器的性能要好,且网关到业务系统为内网访问。
单点风险
网络访问过程中,必有一个环节是有单点风险的,为避免网关出现单点故障,可在网关层之前再加一台 Nginx(ginx 的性能极高,基本不会挂),通过添加网关的机器,避免单点故障。但是这样一个请求就转发了两次,所以最好的方式是网关单点服务部署在一台牛逼的机器上。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于