什么是网关
网关(英语:Gateway)是转发其他服务器通信数据的服务器,接收从客户端发送来的请求时,它就像自己拥有资源的源服务器一样对请求进行处理。有时客户端可能都不会察觉,自己的通信目标是一个网关。
api网关
API 网关将各系统对外暴露的服务聚合起来,所有要调用这些服务的系统都需要通过 API 网关进行访问,基于这种方式网关可以对 API 进行统一管控,例如:认证、鉴权、流量控制、协议转换、监控等等。
面向 Web 或者移动 App
这类场景,在物理形态上类似前后端分离,前端应用通过 API 调用后端服务,需要网关具有认证、鉴权、缓存、服务编排、监控告警等功能。
面向合作伙伴开放 API
这类场景,主要为了满足业务形态对外开放,与企业外部合作伙伴建立生态圈,此时的 API 网关注重安全认证、权限分级、流量管控、缓存等功能的建设。
企业内部系统互联互通
对于中大型的企业内部往往有几十、甚至上百个系统,尤其是微服务架构的兴起系统数量更是急剧增加。系统之间相互依赖,逐渐形成网状调用关系不便于管理和维护,需要 API 网关进行统一的认证、鉴权、流量管控、超时熔断、监控告警管理,从而提高系统的稳定性、降低重复建设、运维管理等成本。
具备的能力
服务注册和服务接入能力
网关接入和发布核心功能
服务安全
服务管控和治理
ps:https://www.infoq.cn/article/api-gateway-architecture-design
zuul
我司的api网关服务是基于zuul2实现的。为了搭建一个类似的网关服务,我将详细的搭建一个demo,来跑这个服务。
我先根据网上的教程,搭建了一个简单的eureka注册中心,然后搭建了2个简单的server注册到这个注册中心里面,然后搭建一个简单的基于zuul的网关注册到eureka里面,这个api网关是基于serverId实现的,然后启动一个server,路由访问,成功得到数据。实现这个ZuulFilter这个接口做的效果,默认则是org.springframework.cloud.netflix.zuul.filters这个包下的过滤器的实现。
ps:参考这篇文章
http://blog.didispace.com/spring-cloud-source-zuul/
ps(SpringCloud的整体组建包括:Zuul、Ribbon、EureKa、Fein、Hystrix等。其中Zuul就是一个类似APIGateway的组建,Ribbon是类似于Nginx的代理服务器,Eureka用于注册和发现服务,Hystrix可以作为整个架构的断路服务,用于服务降级。Fein可以作为一个Rest服务的提供者,可以供内部服务之间相互调用)