微服务网关简介
在上文《如何开发微服务应用》中,已经介绍了如何开发一个微服务应用以及微服务模块之间的互相调用。本文主要讨论如何将微服务发布为 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非阻塞模型)。部署和运维网关系统带来一定的成本。 - 其它特性
支持流量控制、鉴权、熔断、可观测性等。
提示
上述是从不同维度简单粗暴的以定性的角度给出了一些比较,结论是孤立且脱离项目背景和业务场景的,仅供参考。采用什么样的开发模式不能一概而论,需要综合实际情况酌情选择。但对于大部分盘古开发项目而言,我们推荐整体性价比较高的方案一。当然,如果您的项目背景适合使用 ShenYu 网关,我们也给出了详细的集成方案,这也会是一个不错的选择。
下一步
继续阅读其它章节获取你想要的答案或通过我们的 开发者社区 寻求更多帮助。