我有两个用 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 私有区域)是否是一个很好的用例。