工作中使用了微服务架构,接下来的一段时间里,我会写一系列的文章来介绍微服务架构,同时我也会在github上写一个microservices的应用框架(地址会在后续文章给出)。
这篇文章主要讲述了微服务架构中的API Gateway。
翻译和整理自:
- http://microservices.io/patterns/apigateway.html
一、问题
微服务架构应用的客户端如何访问个体的service?
二、强制条件
-
微服务提供的API的粒度与客户端所需要的不一样。微服务一般提供细粒度的API, 意味着客户端需要与多个服务进行交互。
-
不同的客户端需要不同的数据。比如说,桌面浏览器比手机版本的APP需要更细粒度的数据。
-
服务的数量和地址动态改变。
-
服务的分割会随着时间改变,这对于客户端应该是隐藏的。
三、解决方案
实现一个API Gateway, 这是所有客户端的唯一入口点。
API Gateway用两种方式来处理请求,一种是直接把请求转发到合适的service,另一种是写一些业务逻辑,跨多个service。
与一刀切的API对应的是,API Gateway可以暴露给不同的客户端不同的API。API Gateway也可以实现安全机制,验证客户端是被授权的。
示例:
- Netflix API gateway
- A simple Java/Spring API gateway from the Money Transfer example application.
四、结果
优点:
- 把客户端与应用是怎么分割成微服务相隔离
- 客户端不需要知道service实例的地址
- 提供给不同的客户端优化的API
- 减少请求环路、简化客户端逻辑。比如说,API Gateway使得客户端用一次请求就可以从多个service处获取数据。
缺点:
- 增加了复杂性