微服务网关简介
在上文《如何开发微服务应用》中,已经介绍了如何开发一个微服务应用以及微服务模块之间的互相调用。本文主要讨论如何将微服务发布为 HTTP 接口供前端调用。(HTTP -> Dubbo Provider)
技术实现方案
在盘古开发框架下实现将微服务发布为 HTTP 接口有两种方式。
- 基于 Spring WebMVC 的接口调用模式
严格意义上说,这只能算是一种将 Dubbo 服务包装为 HTTP 接口的传统模式。并不能算真正意义上的网关。 - 基于 Apache ShenYu 的泛化调用模式
一种标准的网关实现。访问:Apache ShenYu。 - 其它
网关的实现方式或现成技术组件还很多。比如:你也可以自己在 WebMVC 或者 WebFlex 框架上实现 Dubbo 泛化调用;其次,除 ShenYu 之外,Dubbo 官方也 推荐了几款的网关组件可以选择。
技术方案选型对比
基于 Spring WebMVC 的接口调用模式
- 实现原理
基于 Spring WebMVC,本质上是 Servlet 同步请求机制,依赖 Servlet 容器。 - Dubbo 集成
依赖接口 JAR ,通过接口调用 Dubbo 服务。 - 性能 & 复杂度
性能高,开发简单,部署运维简单。 - 其它特性
- 关于跨域配置、流量控制、鉴权、熔断、白名单等(盘古 Web 模块提供了部分功能)。
- 提供了Controller聚合层,可一定程度上减少了微服务之间的循环依赖和调用。
基于 Apache ShenYu 的泛化调用模式
- 实现原理
基于 Spring WebFlex,依赖 Netty 框架或 Servlet 3.1+ 容器。 - Dubbo 集成
不依赖接口 JAR,泛化调用 Dubbo 服务。(需要维护接口元数据,有一定的性能损耗) - 性能 & 复杂度
网关自身性能较高(WebFlex非阻塞模型)。部署和运维网关系统带来一定的成本。 - 其它特性
支持流量控制、鉴权、熔断、可观测性等。
提示
下一步
继续阅读其它章节获取你想要的答案或通过我们的 开发者社区 寻求更多帮助。