KunlunBase Serverless简介
KunlunBase Serverless简介
Serverless概述
Serverless是云服务的新型形态,它具有一系列技术优势,比如免除用户安装、升级数据库集群,以及省去大多数运维工作。因此,Serverless正在快速普及成为包括数据库系统在内的基础软件服务的基本形式。
KunlunBase Serverless概述
KunlunBase 已经在AWS的DBaaS 服务就是Serverless模式运行的,我们称之为KunlunBase Serverless,用户已经可以在AWS Marketplace购买。在2022年我们与亚马逊云科技(Amazon Web Service, AWS) 探讨合作时,他们积极建议和鼓励我们以Serverless的形式提供云服务。我们考虑到Serverless确实是云计算的新模式,在PaaS等场景下已经有非常广泛的应用,其用户价值也适用于DBaaS,例如可以可以大幅降低用户的管理和运维成本,提升用户效率,用户只需要在AWS的KunlunBase Serverless服务购买页面使用GUI购买后,即可使用KunlunBase 做数据存储和事务处理,不需要安装、升级KunlunBase集群、也不需要日常的数据库运维工作。因此决定实现在AWS 实现KunlunBase Serverless,在此过程中我们也得到了AWS技术团队的积极配合,合作过程非常高效。
KunlunBase Serverless基于KunlunBase,在KunlunBase分布式数据库基础上增加了租户管理,数据隔离,以及为计费而增加的使用量统计等功能,并且限制了多租户场景下集群管理的部分功能,确保这些功能不暴露给租户,只有我们作为服务提供商才能使用。
我们使用AWS的EC2节点和EBS存储服务部署了一个KunlunBase分布式数据库集群,用它为多个租户提供KunlunBase Serverless服务。我们泽拓科技负责运维我们部署在AWS的KunlunBase集群,用户完全不需要安装、运维KunlunBase集群。在运行期间我们只要按需增加更多的EC2节点和EBS存储空间,就可以提供更多的存储和计算能力给当前租户和更多的新租户。
每个租户使用其私有账户和密码连接到KunlunBase Serverless,并读写其数据。任何租户无法访问其他租户的数据,也不知道集群当前有哪些租户在使用。
我们根据每个租户存储的数据量,以及使用的计算资源数量来设计计费规则。AWS按照我们设计的计费规则实现KunlunBase Serverless计费模块,并且安装到其计费系统运行。AWS的计费系统定期计费和并把费用从用户账户转给我们的账户。
基于KunlunBase分布式数据库的现有能力,构建Serverless模式的DBaaS的复杂度相对可控,主要涉及一下一些方面的工作。这也是本文的主要内容。
KunlunBase Serverless版本适合的场景
A. SaaS场景:相同的业务逻辑,不同的用户规模,不同用户的业务规模增长速度也不同
B. 统一的数据平台:大公司内数据平台部门,提供类似私有云的DBaaS给公司各部门或者各个产品、服务条线使用
C. 公有云DBaaS服务商
KunlunBase Serverless 的实现
数据隔离
数据隔离对于多租户模式的DBaaS来说是至关重要的,系统必须确保任何一个租户无法访问其他租户的数据,甚至无法看到其他租户有哪些database, schema, table等数据库对象 --- 这些对象的存在性和名称对其他租户都必须是不可知的。
我们利用KunlunBase的database的隔离能力,来实现不同租户的数据隔离。KunlunBase Serverless的每个租户可以连接到其专属的database,执行DDL和DML语句。租户可以在其database内创建schema实现数据的逻辑分割。但是租户不可以使用DML语句读写系统catalog中的元数据表。
与MySQL不同,一个客户端连接到一个database后,无法通过USE命令或者mysql_select_db()切换到其他database。同时,租户无法连接到其他租户的database,KunlunBase通过权限设置确保这一点。KunlunBase Serverless的业务逻辑为每个租户创建其在KunlunBase集群的专属账户,并配置适当的权限,详见下文。
用户账户
每个租户需要使用专属用户账户来使用KunlunBase Serverless,这样才能实现访问控制和其他高级管控功能。
当用户通过AWS market place的DBaaS购买界面买到一个KunlunBase Serverless后,购买流程中的内置逻辑会使用用户提供的数据库连接用户名和密码,在KunlunBase集群创建该用户的账户。每个账户配置的权限禁止它连接或者访问其他租户的database,不能创建账户和database,非超级用户,也不能继承或修改权限。这个账户是这个租户的主账户,他可以使用此账户创建更多的子账户,用于其内部的权限控制。还可以在其database中为其不同业务创建多个schema,分配给不同的子账户,分别给各个业务使用。所有这些子账户都只能连接此租户的database,并且KunlunBase的管控模块会合并他们对计算资源的使用量,以便AWS计费系统统一为此租户计费。
租户集群管控
我们扩展了KunlunBase的XPanel集群管控系统成为XPanel Serverless,让它为每个KunlunBase Serverless的租户提供独立的和有限的管控功能。相比于on premise部署的KunlunBase集群,诸多集群管控功能不适用于KunlunBase Serverless的租户,包括扩缩容,增加/删除集群节点和存储shard,集群物理备份和恢复,全集群的逻辑备份和恢复,多可用区(多机房)高可用,同城/异地集群双活等功能不再适用。仅有database, schema, table级别的逻辑备份恢复、online DDL&repartition,CDC等功能继续有效,并且租户使用CDC功能只能导出租户自己的database的数据更新事件流。每个租户使用其用户名密码登录XPanel Serverless,且只能访问和操作该租户所拥有的database以及其中的schema和table,存储过程等。
后台集群管控
我司作为KunlunBase Serverless的技术服务方,负责KunlunBase 集群的管控,包括扩缩容,增加/删除集群节点和存储shard,集群物理备份和恢复,全集群的逻辑备份恢复,多可用区(多机房)的高可用,同城/异地集群双活等功能。我们通过XPanel使用管理员账号登录集群完成这些功能。
日志访问控制
KunlunBase支持使用ElasticSearch收集集群所有节点的日志,出于数据安全的考虑,这些日志只有我司技术支持人员在后台集群管控界面可以访问全部日志,租户无法访问其他租户的操作产生的日志。租户只能访问其database对应的接口SQL日志(即计算节点发给存储节点的SQL语句),存储节点的慢查询日志,以及计算节点中的慢查询日志和SQL日志。
资源隔离
目前KunlunBase Serverless以尽力服务(best effort)的方式为用户提供服务,也就是使用集群可以使用到的所有计算资源来执行来自每一个连接客户端的每一个SQL语句,并没有做资源隔离。从用户角度看,没有资源隔离的KunlunBase Serverless是非常划算的。我们对用户唯一的限制是连接数量,这个参数是在用户购买KunlunBase Serverless服务时提供的,并且这个参数也会作为计费的基础参数之一被使用在计费规则中。
在Serverless模式下,传统使用cgroup做资源隔离的做法不再合适,因为KunlunBase任何一个存储节点的进程/线程可能在服务任何一个租户,与租户没有1对1的对应关系。因此,如果要针对租户做资源隔离,就要统计租户的资源消耗并做资源调度,这些工作本身也会消耗可观的CPU和内存资源。所以,目前我们还没有做这方面的工作,以后会适时完成。