大家好,我是鸭鸭!
此答案节选自鸭鸭最近弄的面试鸭小程序面试鸭,更多大厂常问面试题,可以点击进行阅读哈!
目前这个面试刷题小程序刚出,有网页和小程序双端可用!
回归面试题!说说什么是 API 网关?它有什么作用?
回答重点
API 网关是因为微服务架构的出现而出现的,因为微服务都是单独部署的,有各自的访问地址,对客户端而言一个页面的渲染可能需要调用多个服务的接口才能完成。
比如现在一个电商商品页面,可能需要涉及以下这么多功能:
如果让客户端直接与各个微服务通信会有以下几个问题:
1)客户端代码复杂。一些大公司一个页面的渲染可能涉及到几十上百个服务,客户端需要知晓这么多细节,大大增加客户端代码实现的复杂度。
2)性能不好。客户端与后端服务之间只能通过公网通信,大量的请求通信十分低效。
3)协议不友好。部分服务使用的并不是 web 友好的协议,可能是自定义的 RPC 协议或者 AMQP 协议等等。
4)难以重构。当后端需要进行服务拆分或者合并时,由于接口直接对客户端暴露,使得重构难以推进实施。
所以需要一个 API 网关,它作为系统的一个统一入口,负责服务请求路由、组合及协议转换。
客户端的所有请求都需要经过 API 网关,然后由它将请求路由到合适的微服务。并且 API 网管还可以调用多个微服务合并结果来处理一个请求。它可以在 Web 协议(如 HTTP 与 WebSocket)与内部使用的非 Web 友好协议(RPC 等)之间转换。
还能为不同的客户端定制 API,例如浏览器需要的信息多一些,手机需要更精简的信息等。
API 网关还可以实现一些非功能性需求:
日志和监控:记录请求日志,提供监控和报警功能,帮助开发人员及时发现和解决问题。
安全管理:可以在网关上进行身份验证、授权、令牌验证、IP 白名单等安全功能,而无须在每个微服务中进行认证。
限流量控制:统一进行限流、熔断、降级,保护后端服务不被过载。
负载均衡:将请求均匀分配到后端多个服务实例上,提高系统的可用性和性能
扩展常见的 API 网关实现:
开源实现:
Kong:基于 NGINX 的高性能 API 网关,支持插件扩展。
Zuul:Netflix 开源的 API 网关,集成了丰富的微服务架构功能。
Spring Cloud Gateway:Spring Cloud 生态系统中的 API 网关,适合与 Spring Cloud 微服务框架一起使用。
商业实现:
Amazon API Gateway:AWS 提供的托管 API 网关服务,集成了 AWS 的其他服务。
Google Cloud Endpoints:Google Cloud 提供的托管 API 网关服务。
最后
最后再推荐下鸭鸭目前努力在做面试小程序神器面试鸭,已经有 4000 多道面试题目啦,欢迎大家来阅读!如果大家有不会的面试题,也可以在小程序内反馈!鸭鸭会第一时间为大家解答!
我是鸭鸭,我们下期见~