从工程实践、容器框架、自渲染、平台体系等角度,解读各种跨端技术更为适用的业务场景>> 了解详情
写点什么

Serverless 加 CRDT 是 Edge 的未来

  • 2017 年 11 月 29 日
  • 本文字数:3581 字

    阅读完需:约 12 分钟

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 会员提供两天到货的物流服务,货品直接从各个分散的货仓发出。

去中心化仓储中心的好处在于:

  1. 延迟:Prime 会员要求货物必须在两天内送达,低延迟是 Prime 的核心竞争力。
  2. 带宽:仓储中心越多,每个仓储中心需要处理的货品就越少,Prime 会员规模就可以更好地伸缩。
  3. 健壮性:如果硅谷的仓储中心没有可用的送货车,或者遭遇了地震,加尼福尼亚的仓储中心可以接管订单。

SAE 系统与亚马逊的仓储中心类似:

  1. 延迟:Edge PoP 位于用户的就近位置或云区域,延迟被降到最低。
  2. 带宽:每个 PoP 只负责处理一部分用户,不需要将请求路由到中心系统:负载是分布式的,可以更好地伸缩。
  3. 健壮性:如果 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 应用去中心化,为客户提供超低延迟的服务。

原文地址: http://highscalability.com/blog/2017/11/6/birth-of-the-nearcloud-serverless-crdts-edge-is-the-new-next.html

感谢雨多田光对本文的审校。

2017 年 11 月 29 日 16:362211
用户头像

发布了 321 篇内容, 共 115.1 次阅读, 收获喜欢 118 次。

关注

评论

发布
暂无评论
发现更多内容

基于Java NIO框架区别对比,spring教程下载

Java 程序员 后端

进程相关的知识

刘帅强

堪称零瑕疵!仅用了330页直接封神,我要吹爆这份RocketMQ笔记

Java 程序员 后端

NQI一站式线上平台搭建,质量基础设施一站式服务

电微13828808271

多线程详解第3讲:线程状态,感悟分享

Java 程序员 后端

大厂面试题:有了G1还需要其他垃圾回收器吗?我教你怎么答

Java 程序员 后端

大学毕业年的找工作和学习总结,java中级开发工程师面试题

Java 程序员 后端

基于DRBD的KVM动态迁移,Java开发需要学什么

Java 程序员 后端

基础面试3:内存溢出 vs 内存泄漏,java自学教程视频

Java 程序员 后端

大厂面试算法到底有多重要?学会这份算法宝典,随便暴打头条面试官

Java 程序员 后端

图说线性表-搞懂链表从这篇文章开始,2021必看-Java高级面试题总结

Java 程序员 后端

基于springboot开发的国际物流管理系统,花费近一年时间整理的Java核心知识清单

Java 程序员 后端

复习54天二战字节跳动,终获offer定级2-2【面试答案,springboot底层原理面试题

Java 程序员 后端

太厉害了,终于有人把TCP-IP协议整合成864页学习笔记了

Java 程序员 后端

在外包公司从Java后端干到安卓开发,你醒醒吧!,阿里大师推荐的这份Java开发必读书单

Java 程序员 后端

备战金三银四吃透这些Spring Boot笔记文档,让你超过90%的Java面试者

Java 程序员 后端

大厂面试官:千万级数据量的表,如何进行快速查询,springmvc源码书籍

Java 程序员 后端

天天阿里,不如先吃透阿里技术官私藏的分布式笔记,最少能到P6

Java 程序员 后端

天才第一步!Java架构速成笔记必备精品成就年薪百万,掌门一对一java面试流程

Java 程序员 后端

天真,居然还有人认为java的参数传递方式是引用传递,互联网java工程师面试突击训练网盘

Java 程序员 后端

太为难我了,阿里面试了7轮(5年经验,java百度图像识别接口

Java 程序员 后端

架构实战营总结

Mr.He

架构实战营

质量基础设施一站式平台建设,NQI一站式系统开发

电微13828808271

多线程—可能你会遇到的多线程面试题都在这里了(含答案

Java 程序员 后端

大厂面试题中爱问的「调度算法」(1),java后端技术栈图谱

Java 程序员 后端

大厂面试题中爱问的「调度算法」,分享一波阿里、字节、腾讯、美团等精选大厂面试题

Java 程序员 后端

大四实习生”都四面成功拿到字节跳动Offer了,你还有什么理由去摸鱼

Java 程序员 后端

图解Redis:一套方案轻松搞定数据库与缓存数据不一致问题

Java 程序员 后端

在SQL SERVER中实现RSA加解密函数,java入门书籍推荐

Java 程序员 后端

天真,居然还有人认为java的参数传递方式是引用传递(1)

Java 程序员 后端

太全了吧!阿里面试官纯手打:金三银四跳槽必会Java核心知识点笔记整理

Java 程序员 后端

数据cool谈(第2期)寻找下一代企业级数据库

数据cool谈(第2期)寻找下一代企业级数据库

Serverless加CRDT是Edge的未来-InfoQ