1. 为什么需要网关
API网关的出现的原因是微服务架构的出现,不同的微服务一般有不同的网络地址,而外部客户端可能需要调用多个服务的接口才能完成完成一个业务需求,如果让客户端直接与各个微服务通信,会出现以下的问题。
- 客户端会多次请求不同的微服务,增加了客户端的复杂性。
- 存在跨域请求,在一定场景下处理相对复制。
- 认证复杂,每个服务都需要独立的认证。
- 难以重构,随着项目的迭代。可能需要重新划分微服务。如果客户端与微服务直接通信,那么重构将会很复杂。
- 某些微服务可能使用了防火墙/浏览器不友好的协议,直接访问会有一定的困难。
以上的问题可以借助API网关来解决。API网关是介于客户端和服务器端之间的中间层,所有的外部请求都会先经过API网关这一层。也就是说,API网关可以完成安全、性能、监控等功能,而服务提供者可以专门的完成具体的业务逻辑。
API网关典型的架构图使用API网关的优点:
- 易于监控,可以在网关收集监控数据并将其推送到外部系统进行分析;
- 易于认证,可以在网关进行认证,然后再将请求转发到后端的微服务,而无需在每个微服务中进行认证;
- 减少客户端和各个微服务之间的交互次数。
2. 网关如何实现高可用
在生产环境中,一般需要部署高可用的API网关集群来避免单点故障,这里有两种部署方案。(以Zuul举例)
2.1 客户端注册到Eureka Server上
这种情况是比较简单的,即多个Zuul客户端注册到Eureka Server上,就可以实现Zuul的高可用。Zuul客户端会从Eureka Server查询Zuul Server列表,然后使用负载均衡组件(Ribbon)请求Zuul集群。
网关实现高可用方案一2.2 客户端不能注册到Eureka Server
假如我们的客户端是手机APP,那么是客户端是不能注册到Eureka Server上。这种情况下,我们可以使用额外的负载均衡器来实现Zuul的高可用,例如Nginx,F5等。
相关nginx请参考:nginx从入门到精(fang)通(qi)
网关实现高可用方案二客户端将请求发送到负载均衡器,负载均衡器将请求转发到其代理的其中一个Zuul节点上。这样就实现了Zuul节点的高可用。
网友评论