有的观点认为,点对点是反模式,也有人认为网关才是反模式。
李艳鹏在《分布式服务架构:原理、设计与实战》中认为,网关是反模式,因为网关会成为性能瓶颈,并且也不符合微服务去中心化的理念。
李艳鹏曾经在一个互联网平台上工作,平台决策者倡导建设 API 网关,所有外部服务和内部服务由统一的 API 网关进行管理。
项目初期,中心化的 API 网关统一了所有 API 入口,看起来很规范,但从技术角度看限制了 API 的多样化。
随着业务发展, API 网关开始暴露问题,每个用户请求经过机房时只要有服务之间的交互,都会从 API 网关进行路由,服务上量以后,由于内部服务之间的交互都会叠加在 API 网关的调用上,所以在很大程度上放大了 API 网关的调用 TPS, API 网关很快遭遇了性能瓶颈。
然而 API 还是有其必要性,如安全、限流、服务路由等,否则需要每个微服务自己实现代码。微服务本身的一个难题就是冗余代码问题。每个微服务可能不可避免地需要做一些重复的东西。
一个妥协的方案是,有 API 网关,但要能够降级到点对点模式。如果网关出现崩溃,能够切换到点对点远程调用。
如李艳鹏在书中提到,第一层 SOA 服务化采用 Dubbo 框架定制,如果 Dubbo 服务化出现了大面积地崩溃,则服务化体系切换到点对点地 hessian 远程调用,称作服务降级