根据RFC 1035CNAME 记录不能在区域顶点中使用,因为 CNAME 记录不能与 SOA 等记录共存。
对于那些试图设计 SaaS 应用程序以支持自定义域同时仍保持高可用性和可扩展性的人来说,这常常是一个令人沮丧的问题。
选择基本上是:
- 使用一组固定的 IP 地址
- 坚持让用户使用你的 DNS 服务器,这样你就可以更新记录
- 坚持让每个人都使用带有 CNAME 的 www.,并让用户弄清楚如何重定向他们的裸域名
在调查了许多大型 SaaS 产品之后,似乎大多数都支持选项 1,尽管在预期快速增长和实现高可用性时,这似乎是最困难的选项。
例如:
- GitHub:两个 IP 用于 A 记录
- 方形空间:A 记录有四个 IP,但我认为直到最近这才是一个
- BigCommerce:建议使用他们的DNS,但每个商店确实有一个指定的IP可能会改变
- Shopify:A 记录的单个 IP
- WordPress.com:必须使用其 DNS
一般来说,拥有一组固定的 IP 会带来以下挑战:
- 当你的某个负载均衡器发生故障时,你无法轻易删除 IP 地址
- 随着需求的增长,您无法添加 IP,并且需要在更多负载均衡器之间分配流量
- 你无法将故障转移到具有完全不同 IP 集的地理隔离基础设施
我的问题是,具体来说,提供固定 A 记录集的提供商如何克服这些限制? 特别是那些仅提供单个 A 记录的人?
他们是否:
- 他们提供的每个 IP 都有一个负载均衡器,希望它们永远不会超过他们可以在此角色中运行的最大服务器的容量,并且在发生故障时只需将 IP 移动到其他服务器?
- 用户硬件负载平衡器可能更可靠,并且具有足够的容量,不太可能成为瓶颈?
- 使用类似 IP 任播之类的东西,其中任意数量的负载均衡器都可以接收特定 IP 的数据包?
- 以上内容混合?
我猜测那些在公共云(例如 AWS、Azure 等)上运行的系统会是第一种,而那些拥有自己的基础设施的系统大多是第二种?