微服务之间内部流量的最佳实践设计是什么?

微服务之间内部流量的最佳实践设计是什么?

我有两个用 PHP 编写的微服务 A 和 B。端点是 a.example.com 和 b.example.com。两个服务都需要公开访问。此外,服务 B 在处理时向 a.example.com 发出大量 curl 请求。

两种服务都运行在同一个 AWS VPC 上(在同一个私有网络内)。我还为每个端点配备了一个外部 CDN(例如 Akamai)。

设计1:

Public and Service B make requests to A
                 |
                 V
           a.example.com
                 |
                 V
                CDN
                 |
                 V
        Public Load Balancer
                 |
                 V
      Web Servers for service A
  • 成本更高,因为 AWS 的带宽成本更高
  • 由于服务 A 位于 CDN 后面,因此对其提供了更多保护
  • 由于流量传出到云端并返回,服务 B 的响应时间变慢

设计2:

     Public makes requests to A        Service B makes requests to A
                 |                                  |
                 V                                  V
           a.example.com                 a-internal.example.com
                 |                                  |
                 V                                  |
                CDN                                 |
                 |                                  |
                 V                                  V
        Public Load Balancer              Internal Load Balancer
                 |                                  |
                 V                                  V
              Web     servers       for      service   A
  • 由于流量在专用网络内,服务 B 响应时间更快
  • 由于流量在私有网络内,因此带宽成本较低
  • 服务 A 可能被服务 B 破坏的风险
  • 额外的内部负载均衡器费用
  • 维护两个 a. 和 a-internal. 端点的复杂性

问题,这些是微服务互联的正确设计吗?如果不是,微服务互联的常见设计是什么?

附加问题,如果我想维护单个端点 a.example.com 而不是两个(a. 和 a-internal.),那么拆分 DNS(例如 AWS Route 53 私有区域)是否是一个很好的用例。

相关内容