2016.8.12, 深圳, Ken Fang
在微服务的核心概念中, api layer 主要是在微服务与微服务外部的使用者界面、系统或设备之间构建 endpoint proxy 与 load balancer。
所以, 在微服务的架构中, 架构师规划 Integration Hub; 如: Mule,Camel, ESB…等等, 应该是个合理且正确的架构方案。
但是, 在微服务的架构中, 规划所谓的 Integration Hub, 往往却会为微服务的架构, 引入下列的问题:
1. 性能:
微服务架构最主要的特点便是: 能使产品的架构能够 “水平扩展”。所以, 架构师应将不论是微服务之间的调用或是来自微服务外部的使用者界面、系统或设备的调用, 都应当成是 “分布式远程调用”。
因此, 假如, 在已是 “分布式远程调用” 的微服务架构下, 再置入个 “远程调用” 的 Integration Hub, 则产品的整体性能将会受到某种程度负面的影响。
2. 复杂度:
微服务的分布式架构的复杂度是相当高的。所以, 架构师在微服务的架构下, 置入 Integration Hub 时, 则会使原先只会发生的微服务的分布式远程调用, 便会需先发生 Integration Hub 的远程调用, 然后, 才会发生微服务的分布式远程调用。毫无疑问的, 这将使当发生运维问题时; 如: 某笔交易的资料丢失时; 增加问题定位的难度与时间。因为, 整体架构的复杂度已因 Integration Hub 的置入, 而更往上提升。
3. 边界上下文 (Bounded Context) :
当架构师在微服务的架构中置入 Integration Hub 时, 则表示各微服务都可将自身部分的功能 (业务流) 上升至 Integration Hub 中做处理。如此的作法, 将使各微服务可能会在Integration Hub 中, 发生共享。 也就是说, 当各微服务的边界上下文 (Bounded Context) 不仅包含了各自的某一端到端的业务场景 (功能) 、数据 (数据库) 外, 更包含了Integra