springmvc的controller和api 网关有啥区别?

感觉api 网关的功能和springmvc的controller的功能差不多啊
nginx+controller所在服务的集群可以负载均衡
controller可以实现登录和权限控制
controller可以实现服务路由

阅读 7.5k
4 个回答

我的理解是 网关的目标是将权限控制,路由,负载均衡等所有的与业务开发无关的部分提炼出来。我们通常用spring开发java应用,在单应用的时代网关和业务代码杂糅在一起,问题不大。但是在分布式业务开发的场景下,我们的应用通常会部署在不同机房不同的机器上,每个应用可能会存在成百甚至上千的实例。这时候如果再将网关和应用绑定,二者之间的强耦合可能会大大降低应用的可维护性,比如网关的升级可能需要所有的应用实例也同时更新,这样明显非常不方便。因此我们会专门将网关部分的业务提炼出来,单独管理,单独维护。spring cloud也有自己的网关实现,可以看看

controller确实可以做登录和鉴权,其次更主要的是业务逻辑
但是如果有api网关的话,登录和鉴权可以放到网关层来做,controller只负责具体业务逻辑,有利于代码分层隔离。
也有利于解耦

api网关的作用和nginx的确很像,区别就在于你可以在网关写一些鉴权等代码,这样就不必在底层的每一个微服务里面写鉴权代码。nginx的话,我相信很多人包括我都不会去动他的代码写一些自己的业务逻辑。

首先,可以用 springmvc 的 controller 实现网关的功能,甚至可以用 springmvc 的 controller 实现网关服务。

但是大型组织一般都会有个单独的网关,业务系统的 springmvc 的 controller 会只关注业务,而不会去关注鉴权,负载军和这些。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题