springmvc的controller和api 网关有啥区别?
感觉api 网关的功能和springmvc的controller的功能差不多啊
nginx+controller所在服务的集群可以负载均衡
controller可以实现登录和权限控制
controller可以实现服务路由
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
首先,可以用 springmvc 的 controller 实现网关的功能,甚至可以用 springmvc 的 controller 实现网关服务。
但是大型组织一般都会有个单独的网关,业务系统的 springmvc 的 controller 会只关注业务,而不会去关注鉴权,负载军和这些。
controller确实可以做登录和鉴权,其次更主要的是业务逻辑
但是如果有api网关的话,登录和鉴权可以放到网关层来做,controller只负责具体业务逻辑,有利于代码分层隔离。
也有利于解耦
api网关的作用和nginx的确很像,区别就在于你可以在网关写一些鉴权等代码,这样就不必在底层的每一个微服务里面写鉴权代码。nginx的话,我相信很多人包括我都不会去动他的代码写一些自己的业务逻辑。
我的理解是 网关的目标是将权限控制,路由,负载均衡等所有的与业务开发无关的部分提炼出来。我们通常用spring开发java应用,在单应用的时代网关和业务代码杂糅在一起,问题不大。但是在分布式业务开发的场景下,我们的应用通常会部署在不同机房不同的机器上,每个应用可能会存在成百甚至上千的实例。这时候如果再将网关和应用绑定,二者之间的强耦合可能会大大降低应用的可维护性,比如网关的升级可能需要所有的应用实例也同时更新,这样明显非常不方便。因此我们会专门将网关部分的业务提炼出来,单独管理,单独维护。spring cloud也有自己的网关实现,可以看看