简介: 看到如今Serverless在云计算行业喷薄欲出的态势,像极了《星星之火,可以燎原》中的描述:虽然不能预测未来的发展和变化,但对于云计算来说这是个相对确定的方向。本文从产业界和学术界出发,聊聊关系型数据库和serverless技术之间的林林总总。

它是站在海岸遥望海中已经看得见桅杆尖头了的一只航船,它是立于高山之巅远看东方已见光芒四射喷薄欲出的一轮朝日,它是躁动于母腹中的快要成熟了的一个婴儿。

-- 星星之火,可以燎原

一、关于Serverless

看到如今Serverless在云计算行业喷薄欲出的态势,像极了《星星之火,可以燎原》中的描述:虽然不能预测未来的发展和变化,但对于云计算来说这是个相对确定的方向。

从Google Trends的Serverless关键字的趋势可以看到,对于Serverless的搜素一直居高不下,并且在未来的一段时间内也会保持相当的热度。从2015年开始,以AWS为代表的国内外云计算大厂也在不断的布局Serverless相关的产品,AWS Lambda、Aliyun FAAS,数据库领域的Aurora Serverless、RedShift Serverless、Azure SQL Database等。

学术界对Serverless的研究热度也不亚于工业界对商业化方案的追求,文末列出了一些相关文章作为参考。对于云计算往Serverless演进的趋势,学术界也经历过一些质疑,2018年“Serverless Computing: One Step Forward, Two Steps Back”[3] 文章曾经对Serverless的发展给现在IT基础设施带来的冲击表示过担忧,但2019年同一拨人在这个方向上又表现出了支持和乐观的态度。从Serverless领域被引用次数较多的论文上看到,主流科研机构对Serverless的趋势和方向研究上趋于一致,研究重点也慢慢从“why”转变为“how”[6]。

何为Serverless?为什么Severless是个趋势?“Cloud Programming Simplified: A Berkeley View on Serverless Computing”[5] 这篇文章为代表做了一个比较全面的分析和预测。同样是Berkeley在2009年发表的另一篇文章“Above the Clouds: A Berkeley View of Cloud Computing”[7] 预测了云计算作为IAAS基础设施的观点。该篇文章延续了之前的风格,分析了现状和难点,预测了云计算2.0的形态Serverless作为下一代基础设施,也定义了Serverless的主要三个特征:

 

资源的解耦和服务化:弱化了存储和计算之间的联系。服务的储存和计算被分开部署和收费,存储不再是服务本身的一部分,而是演变成了独立的云服务。这使得计算变得无状态化,更容易调度和扩缩容,同时也降低了数据丢失的风险。

自动弹性伸缩代码的执行不再需要手动分配资源。不需要为服务的运行指定需要的资源(比如使用几台机器、多大的带宽、多大的磁盘等),只需要提供一份代码,剩下的交由 Serverless 平台去处理就行了。当前阶段的实现平台分配资源时还需要用户方提供一些策略,例如单个实例的规格和最大并发数,单实例的最大 CPU 使用率。理想的情况是通过某些机器学习算法来进行完全自动的自适应分配。

按使用量计费Serverless按照服务的使用量(调用次数、时长等)计费,而不是像传统的 Serverful 服务那样,按照使用的资源(ECS 实例、VM 的规格等)计费。

值得一提的是[5]这篇文章有众多云计算厂商的背书,包括AWS、Micorsoft、Google、Alibaba等,同时文章也直接以AWS Lambda服务作为样板去分析Serverless的问题。而结合AWS之后在Serverless方向上推出的各种服务上可以看出,这篇文章在事实上贴合了AWS在Serverless上的演进计划,这个后面会有具体分析。Serverless本身的技术难度,这篇文章罗列了多项内容,这里不做赘述,可以具体读一下文章。

关于Serverless的技术实现[3]给出了一个可行的系统实现方式,当然还是以FAAS为背景。其中提到Serverless关键技术路径包括:

  1. 统一的标准运行环境支持多语言的运行时统一管理
  2. 轻量级/蝇量级安全容器(在[4]中额外提到安全和隔离的重要性)
  3. 冷热容器池设计做极致的多租户复用能力
  4. 高效的函数调度能力

其中,函数计算的实现方式,却与数据库Serverless息息相关。

二、数据库的Serverless

数据库品类繁多,关系型数据库自1979年E. F. Codd对于关系模型的描述[7]开始,后来者大多只是模仿,而尚未在用户接受度和规模上有超越。

数据库不仅仅是一个“stateful”的应用,而且是一个“state-heavy”的应用。数据库是Serverless最不友好的应用之一,包括云原生基础设施kubernates对于stateful应用的支持,也是等到StatefulSet和operator之后才有一个比较好的解决方案。而在这之前数据库都是作为Serverless对状态做解耦和状态下沉的工具,也是全栈Serverless解决方案中最难攻坚的最后一个堡垒。

对于Serverless的定义,文章给出来一个公式:Serverless = FAAS+ BAAS。将FAAS(Functions as a Service)定义为事件、API、消息驱动的计算层;将BAAS(Backends as a Service )定义为类似数据库、消息队列等后端服务。

“State-heavy applications will remain as BaaS”是目前对于数据库的一个基本认知,但这与数据库本身是否具备一定程度的Serveless能力其实是两回事。前者强调的是在应用向Serverless做架构转型的过程当中,数据库的大量状态存储做不到FAAS这样即开即用的能力,只能作为“+”来对接Serverless生态;后者说的是在某种程度上也能够满足“资源解耦”、“自动弹性”、“按使用量付费”的特点,某种程度上也可以认为是Serverless。

数据库Serverless的难点究竟在哪里?

数据库做Serverless有若干难点[4],总结如下:

  1. Serverless没有内置的持久化存储,需要依赖远端存储,这就会导致在延时上较高;
  2. 客户端是基于连接的方式访问数据库,在客户端往往会维护连接池的方式供应用访问,而函数计算往往具备飘忽不定的网络地址,与数据库传统的IP+User+password鉴权的方式迥异;
  3. 很多高性能的数据库使用共享内存技术,而FAAS本身不具备共享内存的能力,会使得计算和数据库之前的资源动态扩展能力不一致

其中尤其要注意的是第2点,在应用进FAAS之后,当前的数据库访问方式已经不适用于Serverless生态:

  1. 服务器与DB做连接保持,这就意味着访问状态是由客户端和数据库共同维护,而FAAS无法做到连接持续保持的能力;
  2. 服务器通过driver和连接池的方式访问数据库,每次的连接初始化相对较重,FAAS上无法承受如此重的连接初始化工作;
  3. 服务器访问鉴权通过user/password/ip的方式访问数据库,而FAAS多租户场景所有用户共享IP地址池,user/password内置到FAAS当中也暴露了极大的安全风险;

数据库需要一种新的访问方式,直接影响到数据库能否作为Serverless生态当中的一部分,直接影响到当前Serverless应用做全栈Serverless改造。其重要程度甚至大于数据库Serverless(资源解耦、极致弹性、按使用量付费等)本身。

当然数据库本身要做的事情远远不止如此,数据库本身要实现高效的弹升弹降,涉及到更多的管控和内核紧密的联动。

三、他山之石

行业翘楚AWS在Serverless相关的布局从2015年推出Lambda开始,引领着这个方向的发展。这里更多的关注在数据库方面,结合AWS在Aurora Serverless上的取舍,洞察AWS对于数据库Serverless的理解。

从Aurora Serverless V1发表于2018年,在Serverless的理念上做了大胆的创新,做了几件事情:

  1. 以ACU的方式去统一底层的资源,不再对上层暴露底层具体的机型和代数。1ACU“相当于”2GiB的RAM,统一对底层资源做了标准化和规范化的处理。这与Serverless理念中资源的解耦、以及对底层资源的屏蔽一致;
  2. 支持自动启停,在无负载的情况下支持将计算节点降低至“0”。将Serverless中按资源使用量付费体现到极致,但也带来了另外的问题。自动启停在一般场景下首次拉起需要30s左右,牺牲了部分auto scale的能力;
  3. 数据库弹性过程中内核相关buffer pool等参数随着资源配合的变化而发生变化,这也是数据库这种特殊的应用场景需要做的一些特殊处理;
  4. 2019年推出Data API功能,补全了数据库作为BAAS接入FAAS的能力,解决了前面提到的生态兼容的问题。

2020年发布的Aurora Serverless V2的介绍视频并提供内测申请,而在前不久V2也正式GA。从Aurora Serverless V2的能力来看,在Serverless能力上做了增强和取舍:

  1. 将V1中弹性能力继续提升至秒级,做极致快速的弹性。将V1中跨机升级的能力优化为本地升级的能力,保证业务在弹性过程中不受损。从Aurora Serverless只在3.0.2这一个版本上支持可以看出,内核层针对Serverless场景也做了大量的优化;
  2. 去除了V1中关于自动启停的能力,用户可以手动启停实例;更加关注实例的auto scale能力,最小资源降低至0.5ACU而非0,牺牲了部分按使用量付费的能力,这也是一种取舍;
  3. 将弹性缩容的策略做得更加保守,以保证业务压力情况下对业务的影响尽可能小。

从V1到V2的变化,对比V2和V1的User Case可以看出,Aurora Serverless V2主要解决的是从“开发测试环境”到有限场景下的生产环境的转变,至于底层的实现原理,可以从一丝丝蛛丝马迹中去探究。结合其他云的做法,Serverless的能力目前还是看重这个理念,各个厂商也在以自己的产品形态去向贴近这个理念,至于说一统行业标准的产品化方案,还为时过早,这一领域大有可为。

另外,AWS始终未在RDS上去实现Serverless能力。据内部人士透露,RDS MySQL的内核研发人数远远少于Aurora的内核研发人数,主要岗位还是以DBA为主。可以看出,在开源托管产品上要做到Serverless的能力,要比在云原生自研产品上的难度大很多。结合AWS本身产品策略,开源托管RDS的Serverless化我们或许永远也等不到那一天。

四、未来可期

从2009年开始,云的能力不断增强,云的本质是资源的池化,而这些资源不仅仅包含硬件资源,更包含专业的技术人才、以及核心的技术专利标准等。经过了十来年在规模和成本上的激烈竞争,IAAS资源也在不断的向Serverless的方向演进,以阿里云本身为例,包括弹性的存储AutoPL、弹性的容器ECI、Serverless服务引擎SAE。底层能力的增强也意味着上层PAAS层和SAAS服务有了更快的向Serverless演进的路径,阿里云数据库就是其中受益的一方PAAS。

从艾瑞2022年初对数据库云管平台的发展趋势预测[9]、以及结合云的趋势和Serverless本身,我们可以对Aurora Severless未来的发展方向做一些大胆的预测:

  1. 智能化加持:从re:Invent2021发布的Devops Guru产品上看到,AWS正在智能化场景下进行追赶。内置的智能化引擎对Serverless的场景可以做出更多的精准预测,让“响应式”扩容升级为“响应式兜底,智能化加持”的双引擎驱动;
  2. 资源解耦和极致的弹性:共享内存技术、Brust IO能力等会推着Serverless将更多的资源进行解耦,以及进行独立的升降配;
  3. 更多的Serverless手段:扩容是最有效直接应对数据库流量的方式,但是有了更多智能化的手段之后,单纯的“扩容”已经有更多选择,自动索引优化、智能调参会是很好的选项;
  4. 自动的横向扩展能力:scale out和scale up同样可以应对业务流量的变化,但scale out的复杂程度要远远高于scale out本身,也是个可能的选项;
  5. 低成本硬件大规模使用:ACU的单位定义屏蔽了底层资源属性,ARM、x86还是RISC-V已经不是那么重要,标准化归一化的算力能力让更多类型的硬件无缝无感的接入到Serverless当中。

阿里云 RDS MySQL 也在4月份推出了Serverless版本,我们将在后续的文章中做重点的介绍,我们会以一个标准的网站应用(前端页面+API服务器+数据库)为样板,介绍如何在FAAS+BAAS的架构下一步步做全栈Serverless的改造,真正做到“0”服务器。

参考文献

  1. 2016: "Emerging Technology Analysis: Serverless Computing and Function Platform as a Service", Gartner, Tech.
  2. 2017: "Serverless Computing: Current Trends and Open Problems", IBM Research
  3. 2017: "Serverless Computing:Design, Implementation, and Performance",IEEE 2017 ICDCSW
  4. 2018: "Serverless Computing: One Step Forward, Two Steps Back ", CIDR 2019
  5. 2019: "Cloud Programming Simplified: A Berkeley View on Serverless Computing", EECS 2019
  6. 2020: "Serverless Applications: Why, When, and How?", IEEE Software
  7. 2009: "Above the Clouds: A Berkeley View of Cloud Computing", EECS 2009
  8. 1970: "A relational model of data for large shared data banks", Commun. ACM 1970
  9. 2022: https://www.iresearch.com.cn/Detail/report?id=3922&isfree=0艾瑞咨询

原文链接:http://click.aliyun.com/m/1000348233/

本文为阿里云原创内容,未经允许不得转载。

说说关系型数据库与Serverless的更多相关文章

  1. 非关系型数据库(NoSql)

    最近了解了一点非关系型数据库,刚刚接触,觉得这是一个很好的方向,对于大数据 方面的处理,非关系型数据库能起到至关重要的地位.这里我主要是整理了一些前辈的经验,仅供参考. 关系型数据库的特点 1.关系型 ...

  2. 关系型数据库与NoSQL数据库

    关系型数据库的优缺点 优点: 可以做事务处理,从而保证了数据的一致性: 可以进行JOIN等多表查询: 由于以SQL标准化为前提,数据更新的开销很小(相同的字段基本上都只有一处). 缺点: 大量数据的写 ...

  3. 非关系型数据库来了,CRL快速开发框架升级到版本4

    轮子?,我很任性,我要造不一样的轮子,同时支持关系型和非关系型的框架有没有 新版数据查询作了些调整,抽象了LabmdaQueryy和DBExtend,升级到版本4,非关系数据库MongoDB被支持了! ...

  4. SQLite vs MySQL vs PostgreSQL:关系型数据库比较

    自1970年埃德加·科德提出关系模型之后,关系型数据库便开始出现,经过了40多年的演化,如今的关系型数据库种类繁多,功能强大,使用广泛.面对如此之多的关系型数据库,我们应该如何权衡找出适合自己应用场景 ...

  5. 关系型数据库与NOSQL

    本文转载自: http://www.cnblogs.com/chay1227/archive/2013/03/17/2964020.html(只作转载, 不代表本站和博主同意文中观点或证实文中信息) ...

  6. MongoDB学习笔记(二:入门环境配置及与关系型数据库区别总结)

    一.下载及安装MongoDB MongoDB下载官网链接:http://www.mongodb.org/downloads 具体安装步骤教程:http://www.shouce.ren/api/vie ...

  7. [MongoDB]MongoDB的优缺点及与关系型数据库的比较

    汇总: 1. [MongoDB]安装MongoDB2. [MongoDB]Mongo基本使用:3. [MongoDB]MongoDB的优缺点及与关系型数据库的比较4. [MongoDB]MongoDB ...

  8. 数据库:mongodb与关系型数据库相比的优缺点 (转)

    与关系型数据库相比,MongoDB的优点:①弱一致性(最终一致),更能保证用户的访问速度:举例来说,在传统的关系型数据库中,一个COUNT类型的操作会锁定数据集,这样可以保证得到“当前”情况下的精确值 ...

  9. NoSQL:从关系型数据库到非关系型数据库

    关系型数据库 所谓关系型数据库,,就是指采用了关系模型来组织数据的数据库. 什么是关系模型,简单说,关系模型就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织. 关系模 ...

  10. 关系型数据库ACID

    关系型数据库ACID 一.事务 定义:所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位. 准备工作:为了说明事务的ACID原理,我们使用银行账户及资金管理的案例 ...

随机推荐

  1. 基于泰凌微TLSR825x的物联网解决方案之ibeacon开发总结

    一 概念   iBeacon 是苹果公司2013年9月发布的移动设备用OS(iOS7)上配备的新功能.其工作方式是,配备有 低功耗蓝牙(BLE)通信功能的设备使用BLE技术向周围发送自己特有的ID,接 ...

  2. 【leetcode 1425. 带限制的子序列和】【矩阵幂快速运算】

    class Solution { public int countVowelPermutation(int n) { long[][] matrix = new long[][]{ {0, 1, 1, ...

  3. 虚拟现实(VR)在医疗保健中的5种应用

    医疗保健中的VR虚拟现实 虚拟现实的由来已久,18世纪,法国的医生使用布制的分娩模拟器向助产师和外科医生教授医学技术.在20世纪60年代初,医生一边对心肺复苏学员口述心肺复苏的技巧,一边使用一家塑料玩 ...

  4. WPF命令绑定

    在WPF中有时候不想将命令写在List中,但是却要在前端绑定的List中写入命令 暂时知道两种解决方法 1. Command="{Binding DataContext.NavicateCo ...

  5. struts2-66漏洞复现

    Strut2-66漏洞从搭建到复现到原理 0x0 创建JavaEE环境 使用idea创建JavaEE项目,添加Strut2的依赖 点击右上角创建新项目 下一步,依赖项只选择一个Servlet就行了,版 ...

  6. Spring Security 中的 BCryptPasswordEncoder

    一.使用BCryptPasswordEncoder加密的值可以解出来吗 Spring Security 中的 BCryptPasswordEncoder 是一种单向加密算法,它是为了安全性考虑而设计的 ...

  7. SpringBoot集成drools

    目录 1.背景 2.需求 3.实现 3.1 引入jar包 3.2 编写drools配置类 3.3 编写Person对象 3.4 编写drl文件 3.5 编写kmodule.xml文件 3.6 编写Co ...

  8. KingbaseES 逻辑读与物理读

    oracle数据库中逻辑读,物理读 数据访问方式:数据库少不了和操作系统进行数据交互,表数据最好的方式是从数据库共享池中访问到,避免发生磁盘IO,当然如果共享池中没有访问到数据就难免发生磁盘IO. 物 ...

  9. FFmpeg开发笔记(九)Linux交叉编译Android的x265库

    ​<FFmpeg开发实战:从零基础到短视频上线>一书的"12.1.2  交叉编译Android需要的so库"介绍了如何在Windows环境交叉编译Android所需FF ...

  10. 欢迎体验BotBattle!

    目录 1.常规游玩 2.快速开始 3.规则介绍 3.推荐的示例代码 1.常规游玩 前往复制 最基础代码 到剪切板 这有助于您开始游戏,且对于您熟悉 Bot 代码的 I/O 进而创建其他 bot 很有意 ...