你想在Cloudflare的大厅里开始一场激烈的争论吗,那就试着把我们描述成一个“CDN”吧。CDN通常不提供负载平衡,它们不允许部署无服务器的应用程序,当然它们也不会安装到您的手机上。这种混乱的代价之一是,许多人没有意识到Cloudflare可以为那些希望在多个公共云中操作,或者希望同时在云和自己的硬件上操作的人所做的一切。
负载均衡
Cloudflare在全球180个(目前已有190多个)数据中心中拥有无数的服务器。每一个都可以作为第7层的负载均衡器,在不同的起点之间指挥传入的流量。例如,您可以在AWS的EC2中的一组机器和谷歌云中的另一组机器之间添加负载平衡。
这种负载平衡不仅是轮询流量。它支持加权,从而允许您控制去往每个群集的流量。它支持基于延迟的路由,可以自动将流量路由到更近的群集(因此,添加地理分布就像纺纱一样简单)。它甚至支持运行状况检查,使其能够自动将流量定向到当前运行状况良好的云。
最重要的是,它不在任何云服务提供商的云中运行,也不依赖于它们来正常运行。更好的是,由于负载均衡几乎遍及世界各地的每个互联网用户,所以它不会带来任何性能损失。(使用我们的Argo技术性能通常会更好!)
Argo隧道
管理多云部署最困难的组成之一是联网。每个提供者都有自己的定义网络和防火墙的方法,甚至可以跨多个云部署集群的工具通常也无法完全复刻网络配置并确保其运作。设置网络配置的任务通常是一个反复试验的游戏,得出的结果就是——最好不再修改最后的配置,任凭“多云部署”成为组织内部的试验失败的产物。
在Cloudflare,我们有一项叫做Argo隧道的技术,它可以颠覆网络。你的每台虚拟机(或k8s pod)都不需要打开端口并引导传入的流量,而是可以建立到最近的Cloudflare PoP(网络连接点)的出站隧道,你所有的网络流量都会通过这些隧道。这使得您可以令所有端口对入站流量保持关闭,并且再也不必考虑互联网连接。
这种配置的强大之处在于,它使得在新位置上启动机器变得非常简单。想在澳大利亚买一打机器吗?只要他们启动Argo隧道守护进程,他们就可以开始接收流量。不再需要它们了吗?把它们关闭,流量就会被路由到别处。当然,所有这些都不依赖于任何一个公共云提供商,即使云提供商出现问题,也可以保证您网络资产的可靠性。
Argo隧道使得在新云中添加机器变得非常简单,甚至在您开始将工作负载转移到云中时也可以保持机器在本地部署(也称On-Premise,自建设施自定义部署)。
访问控制
使用Argo隧道会让你意识到一件事,那就是你现在有了连接你的基础设施和Cloudflare网络的安全隧道。一旦流量到达网络,它不必直接流向您的计算机。例如,它可以在我们通过您的身份提供商(如Okta或Active Directory)来决定谁应该能够访问什么时,应用访问控制。
实际上,您现在也可以使用SSH来执行此操作!您可以在一个地方管理所有用户帐户,并可以精确地控制谁可以访问哪个基础架构,而不管它在哪个云中。
我们的可靠性
没有什么计算机系统是无懈可击的,我们的也不例外。我们会犯错,我们的代码存在一些错误,并且我们每天都要面对在互联网范围内执行操作的痛苦。但是,计算机近代史上的一项重大创新是,人们可以在许多独立的不可靠的组件之上构建可靠的系统。
Cloudflare的每个网点都被设计为无需其他人或中央数据中心的通信或支持即可正常工作。仅这一点就极大地提高了我们对网络分区的容错性,并且使我们可以从维护单个系统变成维护接近180个独立的云,任意一个云都可以为所有流量提供服务。
我们也是一个建立在anycast(任播技术)上的系统,它使得我们能够利用互联网的基本可靠性。互联网使用一种叫BGP的协议(边界网关协议),它要求每个希望接收特定IP地址流量的系统对其进行“公告”。然后,每个路由器会根据公告地址最近的人来决定流量的转发。我们在每一个数据中心公告我们所有的IP地址。如果一个数据中心宕机,它就会停止BGP路由的公告,而原本要发送给它的数据包会无缝地到达另一个网络连接点。
归根结底,我们正在尝试帮助建立一个更好的互联网。我们不认为互联网是建立在单一供应商的基础上的。这些云提供商提供的许多服务过于复杂,以致于无法满足互联网要求的可靠性。
真正的可靠性和成本控制都需要建立在多云的前提上。很明显,80年代和90年代的互联网给我们提供的工具可能不足以进入那个未来。有了更智能的网络,我们可以做得更多、更好。