Kuhiro 的 CTO Russell Sullivan 发文介绍了他们的 NearCloud 产品,并指出 Serverless 加 CRDT 是 Edge 未来的发展方向。
作为新兴的 IaaS 解决方案,Serverless 已然成为野心勃勃的互联网计算平台。从亚马逊 2014 年推出 Lambda 开始,Serverless 已经扩展到了 CDN Edge ,并向移动、物联网和存储领域进军。CDN Edge 的 Serverless(SAE)是一个全新的领域,它预示着业务逻辑将从单一的云区域向互联网边缘转移,未来的服务器有可能直接运行在蜂窝基站里。随着 5G 技术的发展与普及,SAE 到服务之间的延迟降到了几毫秒,互联网将转变成一个全局性的实时计算平台。
在经历了创业并出售了一个 NoSQL 公司之后,Russell 意识到,计算无非局限于两个方面:数据中心或设备,这两者之间存在着一个巨大的待开发处女地。于是,他召集了一班聪明人成立了 Kuhiro,一个专注于将云推向互联网边缘的初创公司,逐步创建一个靠近用户的去中心化云——NearCloud。
NearCloud 的基础是计算和数据,于是他们构建了一个有状态的 SAE 系统。他们在 CDN Edge 运行客户的业务逻辑,让这些函数实时地读取和写入客户数据。他们在 CRDT 数据层投入了大量精力,实现低延迟的动态 Web 处理。客户借助 Kuhiro 将对延迟敏感的应用从云端迁移到边缘,变成全局性的实时应用。
Edge Serverless
从物理层面来看,SAE 有点类似 CDN:很多迷你数据中心分散在国家(或者全球)的各个角落,为近距离的用户提供低延迟的服务。SAE 用户将 URL 域名改成 SAE 供应商的域名,他们的请求就会被发送给就近的 SAE PoP(Points-of-Presence)。
在美国,SAE 系统可以部署在 30 万个基站上,99% 的人口距离他们附近的基站只有几公里。
去中心化的好处
一般来说,去中心化在带宽、延迟和健壮性方面都会带来好处。为了说明这点,接下来以亚马逊的仓储中心为例。亚马逊的仓储中心为 Prime 会员提供两天到货的物流服务,货品直接从各个分散的货仓发出。
去中心化仓储中心的好处在于:
- 延迟:Prime 会员要求货物必须在两天内送达,低延迟是 Prime 的核心竞争力。
- 带宽:仓储中心越多,每个仓储中心需要处理的货品就越少,Prime 会员规模就可以更好地伸缩。
- 健壮性:如果硅谷的仓储中心没有可用的送货车,或者遭遇了地震,加尼福尼亚的仓储中心可以接管订单。
SAE 系统与亚马逊的仓储中心类似:
- 延迟:Edge PoP 位于用户的就近位置或云区域,延迟被降到最低。
- 带宽:每个 PoP 只负责处理一部分用户,不需要将请求路由到中心系统:负载是分布式的,可以更好地伸缩。
- 健壮性:如果 PoP 出现饱和或者遭遇地震,负载立即被重定向到就近的 PoP。
几乎所有的互联网应用都会从去中心化中受益
去中心化的三大好处(延迟、带宽、健壮性)给整个互联网带来了不可估量的价值,Web、移动、游戏、广告、虚拟现实、地图,等等。
降低延迟可以改进用户体验,是竞争力的源泉。而对于公司来说,带宽和健壮性更是无价之宝,他们不再担心运维和动态伸缩问题,在流量高峰来临时也不怕。几乎所有的互联网应用都可以从去中心化的云中获得好处。
Serverless 为 Edge 带来多租户和伸缩性
接下来从物理层面来比较一下 Edge 和云的区别。
单个云可以包含超过 10 万个服务器,而 Edge PoP 则要小得多(通常在 10 到 100 台之间),PoP 提供的硬件资源比云要少很多。
所以,想象一下,10 台服务器如何能够为 1 万个用户提供 IaaS 服务?不用说每个用户是否能够获得一台虚拟机,单是一个私有的容器都不行。所以必须缩小计算单元,也就是使用函数——FaaS(也就是 Serverless),那么这样可以把 1 万个用户函数部署在 10 台服务器上吗?这个是可以做到的,甚至可以部署更多的函数。
Serverless 的低资源消耗特点与 Edge PoP 有限的资源配置相得益彰。
SAE 的状态:无状态持续运行
那么 SAE 现在已经发展到什么程度了?作为一个新兴领域(始于 2016 年),提供 SAE 服务的公司还很少,但一直在增长。目前最主要的两个产品分别是 Cloudflare 的 Workers 和亚马逊的 Lambda@Edge。这两个产品都很安全,并以无服务器的形式提供最小化的 IaaS Edge 服务,但在灵活性和性能方面则有所区别。
对无状态计算支持不足
可惜,不管是 Cloudflare Workers 还是 Lambda@Edge 都没有提供动态数据选项,它们只提供计算功能。缺乏动态数据能力(也就是无状态能力)限制了一些 SAE 功能,比如基于客户端状态(如 URL-Parameters、Cookie、User-agent)或 orign 状态(如 Etag、Cache-Control)重写请求和响应消息。
无状态计算更像是网络路由,而不是一般的编程模型:智能负载均衡和重写请求或响应消息。可以想象一下,如果亚马逊把所有的商品存放在一个中心仓库里,而且仓储中心只有接收订单和向外发送包裹的能力,那么 Prime 的体验会很糟糕,一个订单可能需要等上几天甚至几周。
Edge 数据的小秘密:数据冲突
SAE 之所以是无状态的,是因为往大量 PoP 增加数据层会比较复杂。理想情况下,可以为每个 PoP 增加一个数据库,每个函数直接操作这个本地数据库,然后把数据复制到其他 PoP 数据库里。但这里有一个问题:在将一个中心数据库拆分成多个数据库之后,在这些数据库之间复制数据会导致冲突,而且节点之间的物理距离越长,出现数据冲突的几率就越高。
对数据进行去中心化有两种方式:一种是基于共识(consensus),一种是基于 CRDT(Conflict-free Replicated Data Type)。这两种方式都有各自的优缺点,稍后会详细解释。
Edge 复制
接下来深入了解一下如何往 SAE 添加数据层。
如果在 SAE 中修改了单个 PoP 的数据,那么需要把数据复制到哪些地方?是复制到所有的 PoP 上还是部分 PoP 上,又或者不复制?这个要取决于实际情况,所以说以上三种情况都是有可能的。
SAE 复制可以被想象成一个图谱,左边是为 single-user 复制,右边是 all-users 复制。
single-user 复制的流程很简单,只需要将单个 PoP 的数据备份起来就可以了,而 all-users 复制则需要进行点对点的数据广播(加上备份)。如果发生故障,single-user 复制会变得复杂一些。用户需要切换到另一个 PoP 上,所以需要从多个 PoP 并行复制到其他多个 PoP 上。
在最糟糕的情况下,如果数据修改频繁,那么 all-users 复制就会变成自我 DDoS 攻击。为了避免出现这种情况,可以通过增加延迟来换取性能,并采用批次的方式,这样可以获得更好的伸缩性。
Edge 的数据复制问题非常独特,与已有的数据存储复制流程不太一样,所以需要新的技术来支持它。
基于 CRDT 的解决方案
所幸,Edge 的状态复杂性可以通过一些数据结构和相关算法(Conflict-free Replicated Data Type,CRDT)来解决。CRDT 算法允许参与者自主修改数据,并以零共识的方式自动解决数据冲突。CRDT 的这些特点(自主性、零共识、自动解决冲突)是 SAE 平台实现低延迟的基础要素。
自主性意味着 PoP 可以在本地处理请求并快速做出响应,不需要与千里之外的其他 PoP 达成共识。PoP 的自主性和并行修改数据会导致数据冲突,而 CRDT 可以通过多种数据结构自动解决数据冲突,并提供最终强一致性。
尽管 CRDT 也存在一些不足,但比起基于共识的解决方案要好得多。
基于共识的解决方案太慢了
以谷歌的 Spanner 为例,Spanner 是目前最为先进的基于共识的数据层解决方案,Spanner 的论文中提到:
客户端和区域需要处于网络延迟低于 1 毫秒的数据中心里。
Spanner 并不适合用于长距离节点,也无法实现低延迟的并行提交。Spanner 使用的是两阶段提交,每个事务需要穿行网络两次。美国东海岸到美国西海岸一个来回需要 100 毫秒,那么两阶段提交需要 200 毫秒,这对于大部分应用程序来说都太慢了。
Kuhiro 比 Lambda 快上 5 到 10 倍
经过实测,对于美国西海岸的用户,Kuhiro 比 Lambda 快上 5 到 10 倍,东海岸用户为 2 到 4 倍,而国际用户则为 50 倍。降低延迟对增加营收有直接的影响,Kuhiro 正是这样的一种工具,帮助客户提升应用程序速度,改进用户体验,最大化利润。
Kuhiro 不可思议的健壮性
这里有一个视频记录下了Kuhiro 数据层不可思议的健壮性。在12 分钟的时间里,随机停掉不同数据中心里的节点,甚至关闭整个数据中心,然后再重新启动,简直就是乱来一通。而视频里显示,基于CRDT 的系统仍然健壮如牛。
数据层的健壮性不仅在发生宕机或发生数据中心故障时能够带来好处,它还能降低DDoS 攻击所带来的影响。
Edge Serverless 进行时
NearCloud 看似遥不可及,但其实它已经带着有状态 Serverless 来到了 Edge 系统里。SAE 最主要的优势在于它全局性的低延迟,另外还具有高度的健壮性(包括降低 DDoS 攻击的影响面),当然也具备 Serverless 所有的优点。Kuhiro 的有状态 Serverless 为用户提供了创建去中心化应用的能力,也可以对已有的 Serverless 应用去中心化,为客户提供超低延迟的服务。
感谢雨多田光对本文的审校。
评论