云原生 Serverless Database 使用体验

简介:表格存储 Tablestore 作为一款广泛应用 Serverless DataBase,能够提供经济的计费模式,可以大幅缩减业务成本的同时, 具备极致的弹性服务能力和完全零运维的特性,能够给用户带来更丝滑的使用体验。

作者 | 李欣  

近十年来互联网技术得到了飞速的发展,越来越多的行业加入到了互联网的矩阵,由此带来了更为丰富且复杂的业务场景需求,这对于数据应用系统的性能无疑是巨大的挑战。

关系型数据库 MySQL 是应用系统中最广泛使用的数据库产品,拥有强大的数据查询和强事务处理能力。在如今的云时代,应用系统逐渐演进到基于云原生 Serverless 架构去进行搭建,因为它具有低成本、高弹性的优势。但基于 MySQL 的数据存储在 Serverless 架构体系下仍存在一些明显的不足:

  1. 弹性扩展能力差。Serverless 场景中一个重要特点是应用负载具有显著的波峰波谷。当面临流量洪峰时,DBA 又需要手动对集群进行扩容以避免集群被打爆;而适逢流量低谷时,则需要对集群进行缩容以节省成本。
  2. 运维复杂度高。MySQL 搭建需要进行购置集群、安装服务、管理连接。业务上线后还要关注数据安全、服务可用性、响应时间等等,用于集群运维的时间占比会变高,无法把更多的精力专注于业务研发上。
  3. 成本高。通常 DBA 需要预估业务规模来事先设定数据库初始容量,当业务请求量未达到预估值时,集群中的资源会一直处于闲置状态,造成资源浪费。

Serverless DataBase

MySQL 支持的关系模型和其强事务的特性,使其在应用系统中有非常重要的位置,是目前不可完全替代的存储组件之一。但若一味地依赖 MySQL 又会使得应用系统无法完全 Serverless 化,不能享受 Serverless 带来的极致弹性。

在阿里内部我们有一些新的架构实践,那些需要强事务处理的数据仍旧使用关系表存储,而对于非强事务表数据存储,我们则设计出了一款拥有极致弹性的 Serverless 表存储。

关于 Serverless 数据库产品,我们的设计要求是必须具备以下几个特征:

  • 完全弹性。可根据应用负载自动弹性扩缩容,这一特性可为用户带来更经济的计费模式和更丝滑的体验。
  • 按量计费。Serverless 数据库的使用成本主要来自于计算成本和存储成本。用户只需为业务实际产生的存储单元和响应单元付费,节省成本。
  • 零运维。即开即用,无需管理容量、水位、软件升级、内核优化等运维事项,真正让研发专注于业务开发。

Serverless 架构在诸多业务场景中都有广泛的应用实践。例如世纪联华集团在其核心的电商业务中,针对自建 IDC 机房遇到的资源难以预算、系统部署困难等痛点问题,将业务实现全面上云并逐步改造为全 Serverless 架构的中台模式。

世纪联华集团采用了函数计算+ API 网关+ Tablestore 方案,轻松支撑起了 6.18、双 11 等大促活动。其中,表格存储 Tablestore 作为世纪联华电商系统的云上 Serverlesss 架构中的核心存储,具备极致弹性、免运维、成本低等优势。

表格存储 Tablestore 简介

表格存储 Tablestore 于 2009 年阿里云成立之初便立项研发,基于底层飞天平台从零开始构建,是一款多模型、多引擎的 Serverless 表存储。在公共云上输出了国内外 30 多个区域,拥有 1.5 万服务器规模和 200PB 存储规模,是阿里云众多商业化产品的底层核心存储。

同时在线下已输出到金融、能源、电力、物流、医疗、政企等行业,服务于公共云 1000+ 企业客户和 500+ 线下项目。

表格存储 Tablestore 具备 HBase 和 ElasticSearch 的融合功能,拥有极致弹性体验、免运维、即开即用的特性,支持 GB 到 PB 的弹性存储和 十万级 TPS 服务能力的无感知扩展。支撑海量的表数据的同时,提供丰富的数据检索与分析能力,是集存储、搜索和分析多功能一体的一站式结构化数据存储平台。

表格存储 Tablestore 的整体架构如下图所示:

Tablestore 架构图

表格存储提供了多种数据模型,主要包括宽表模型(Widecolumn)、消息模型(Timeline)和时序模型(Timeseries)。

  • 宽表模型主要承载表结构数据存储,例如电商订单数据。
  • 消息模型主要承载消息数据存储,例如 IM/Feeds 消息。
  • 时序模型主要承载时序数据存储,例如物联网设备时序数据。

下面我们将以电商订单场景为例子,带大家体验基于 Tablestore 的宽表模型构建一个 Serverless 的订单存储系统。

Tablestore 体验

1、准备工作

在体验 Tablestore 带来的极致弹性之前,需要准备如下几个步骤:

(1)创建一个阿里云账号,并获取到阿里云账号的 AK。(云账号 AK 是访问所有云服务包括 Tablestore 的密钥,后续需要通过 AK 来访问 Tablestore 服务)

(2)下载并启动 Tablestore 提供的命令行工具 Tablestore CLI,命令行工具提供一些简单的指令来管理表格存储服务。

首先通过 config 命令配置连接密钥并通过 enable_service 命令开通 Tablestore 服务:

config --id accessKeyID --key accessKeySecretenable_service

(3)通过 create_instance 命令创建一个实例:

create_instance -d "order storage" -n serverless-db -r cn-hangzhou

实例相当于 MySQL 数据库的概念,实例创建后无需思虑实例所在物理机集群的水位,只需专注开发业务逻辑即可。同时实例上的读写和存储均为按量计费,若无读写无存储,实际则不会产生任何费用。

至此,一个能够支持 GB 到 PB 存储的、无并发限制、零运维、完全弹性的 Serverless DataBase 就创建完成了。

2、创建表

宽表模型是(Widecolumn) 是 Schema-free 的一种数据表,与关系型数据库 MySQL 不同的是,创建一张表 Widecolumn 模型的数据表仅需要定义主键结构,并不需要定义属性列结构。

例如一张订单表 order 的表结构如下图表格所示(可滑动):

id(PrimaryKey)

cName

pType

sId

total_Price

......

数据类型

STRING

STRING

STRING

STRING

DOUBLE

......

业务含义

订单ID

消费者姓名

订单商品类型

售货员ID

订单总金额

......

创建一张宽表模型的订单表,属性列信息无需定义,只需定义订单表主键 id ,命令如下:

create_instance -d "order storage" -n serverless-db -r cn-hangzhou

执行 create 命令后成功创建一张订单宽表,刚创建的订单宽表会被初始化 1 个数据分区。

随着订单数据量的增加或访问量的增加,宽表模型会根据第一主键的分布范围(上述数据模型中即是订单ID)分裂扩展成多个数据分区平均分布到多台物理机上以支持更大的数据规模(TB 甚至 PB)和读写吞吐(十万 TPS 以上),整个扩展过程完全由服务端自动完成,无需人工干预。

3、数据导入

模拟生成了 100 万条样例订单数据,并通过 import 命令批量导入到 order 表中。单数据分区的写入速度可以达到几万行/s,随着分区扩展,写入吞吐还可以进一步提高。

import -i orderDataFile -l 1000000

Current speed is: 10000 rows/s. Total succeed count 10000, failed count 0.Current speed is: 12600 rows/s. Total succeed count 22600, failed count 0.......Current speed is: 9200 rows/s. Total succeed count 1000000, failed count 0.Import finished, total count is 1000000, failed 0 rows.

4、订单查询

使用 get 命令按照订单号(id)单行查询宽表模型,得到一条订单数据。get 命令只能够基于 rowKey 来进行单行查询。

查询一条订单示例:

get --pk '["0000005be2b43dd134eae18ebe079774"]'

+----------------------------------+-------+--------+---------+-------------+---------------+--------+--------+----------+--------+---------+-------+-------+--------+------------+| order_id                         | cId   | cName  | hasPaid | oId         | orderTime     | pBrand | pCount | pId      | pName  | pPrice  | pType | sId   | sName  | totalPrice |+----------------------------------+-------+--------+---------+-------------+---------------+--------+--------+----------+--------+---------+-------+-------+--------+------------+| 0000005be2b43dd134eae18ebe079774 | c0015 | 消周五  | false   | o0035062633 | 1507519847532 | 小米    | 3      | p0005003 | 小米 6 | 2299.21 | 手机   | s0017 | 售郑七  | 6897.63    |+----------------------------------+-------+--------+---------+-------------+---------------+--------+--------+----------+--------+---------+-------+-------+--------+------------+

5、订单检索与统计

订单场景中经常会出现依赖多条件组合筛选,这种情况下需要依赖 Tablestore 的多元索引特性。多元索引是 Tablestore 提供的类似 Elasticsearch 的表数据索引,支持丰富的查询方式和数据聚合能力,可在多个列上分别建立索引。和 MySQL 中的联合索引不同的是,多元索引可根据任意字段组合查询,不会按照多列的最左前缀来匹配。

例如我们在 id、pName、totalPrice 等字段上分别建立索引,采用倒排索引、分词、BKDTree 等数据结构,提供了精确查询、全文检索、范围查询等查询能力。另外,多元索引也支持按字段分组、多字段排序以及统计聚合能力。

使用 create_search_index 命令在宽表上建立多元索引,起到查询加速的作用。

create_search_index -t order -n order_index{     "IndexSetting": null,     "FieldSchemas": [{         "FieldName": "id",         "FieldType": "KEYWORD",         "Index": true,         "EnableSortAndAgg": true,         "Store": true     },{         "FieldName": "pName",         "FieldType": "TEXT",         "Index": true,         "EnableSortAndAgg": false,         "Store": true     },{         "FieldName": "totalPrice",         "FieldType": "DOUBLE",         "Index": true,         "EnableSortAndAgg": true,         "Store": true     }     ...//其他字段     ] }

Tablestore 支持 SQL 查询能力,兼容了 MySQL 的查询语法,并且尽量保留了关系型数据库的使用习惯。SQL 能够自动选择索引并进行查询加速,通过多元索引的查询加速,在百亿数据规模下也具备了毫秒级延迟查询的能力。

根据 sName、pBrand、pName 三个字段条件进行订单检索:

select * from `order` where  sName = "售周五" and  pBrand = "小米" and  pName like "红米%"limit 3;

+----------------------------------+-------+--------+---------+-------------+---------------+--------+--------+----------+---------+--------+-------+---------------+-------+--------+------------+| id                               | cId   | cName  | hasPaid | oId         | orderTime     | pBrand | pCount | pId      | pName   | pPrice | pType | payTime       | sId   | sName  | totalPrice |+----------------------------------+-------+--------+---------+-------------+---------------+--------+--------+----------+---------+--------+-------+---------------+-------+--------+------------+| 00001c760c04126da067e90409467c4e | c0022 | 消赵一  | true    | o0009999792 | 1494976931954 | 小米    | 3      | p0005004 | 红米 5s | 499.01 | 手机   | 1494977189780 | s0005 | 售周五  | 1497.03    |+----------------------------------+-------+--------+---------+-------------+---------------+--------+--------+----------+---------+--------+-------+---------------+-------+--------+------------+| 0000d89f46952ac03da71a33c8e83eef | c0012 | 消钱二  | false   | o0024862442 | 1502415559707 | 小米    | 2      | p0005004 | 红米 5s | 499.01 | 手机   | null          | s0015 | 售周五  | 998.02     |+----------------------------------+-------+--------+---------+-------------+---------------+--------+--------+----------+---------+--------+-------+---------------+-------+--------+------------+| 0000f560b62779285e86947f8e8d0e4c | c0008 | 消冯八  | false   | o0000826505 | 1490386088808 | 小米    | 1      | p0005004 | 红米 5s | 499.01 | 手机   | null          | s0015 | 售周五  | 499.01     |+----------------------------------+-------+--------+---------+-------------+---------------+--------+--------+----------+---------+--------+-------+---------------+-------+--------+------------+

统计所有订单中每个商品品牌的订单数:

select pBrand,count(*) from `order` group bypBrand;

+--------+----------+| pBrand | count(*) |+--------+----------+| vivo   | 162539   |+--------+----------+| 联想   | 304252   |+--------+----------+| oppo   | 242513   |+--------+----------+| 苹果   | 96153    |+--------+----------+| 小米   | 194543   |+--------+----------+

总结

表格存储 Tablestore 作为一款广泛应用 Serverless DataBase,提供了经济的计费模式,能大幅缩减业务成本。以上文订单场景为例子,在一亿订单数据量级和平均 2000TPS 的读写量下,采用表格存储 Tablestore 仅需不到 400元/月 的使用成本。与此同时,Tablestore 具备极致的弹性服务能力和完全零运维的特性,能够给用户带来更丝滑的使用体验。

原文链接

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/511731.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

首推业人一体,北森2022春季发布会,正式发布iTalentX5.0

5月19日,中国最大的一体化HR SaaS及人才管理平台北森于线上召开“HR x业务”2022春季新品发布会,基于“业务人力一体化”理念发布iTalentX5.0,以战略和业务为牵引,用数字化平台赋能经理、员工和HRBP, 实现人力资源与业…

【阿里云 CDP 公开课】 第二讲:CDH/HDP 何去何从

简介:Hadoop社区版CDH/HDP已经不再更新,也将终止服务。后续的平台路线图怎么规划?Cloudera CDP整合了CDH和HDP,有哪些性能提升和功能增强?如何平滑的进行迁移?本文结合CDH/HDP平台现状,详细介绍…

mysql表全连接_关于mysql 实现表连接(左,右,内,全连接)

mysql 实现表连接(左,右,内,全连接)查询中出现两个表的连接,下面通过实例来讲解一下各种连接查询的不同之处表 a,和表b 如下图a 表中 有 abcdb表中有 abcf内连接:SELECT * from a INNER JOIN b on a.nameb.…

阿里云 Serverless Kubernetes 的落地实践分享

简介:Serverless Kubernetes 基于 Kubernetes 之上,提供按需使用、节点免运维的 Serverless 能力,让开发者真正实现通过 Kubernetes 标准化 API 进行 Serverless 应用编程,值得关注。 作者 | 元毅(阿里云容器平台高级开…

DevLake 加入 Apache 孵化器,开源共建 Apache 生态首个研发大数据平台

4 月 29 日,开源研发数据平台 DevLake 通过投票决议,正式成为 Apache 软件基金会 (ASF) 的孵化项目。 进入孵化后,Apache DevLake 将遵循 The Apache Way[1],在导师们的引导下,坚持以人为本、社区高于代码的理念&#…

idea连接mysql注册登录_IDEA+MySQL实现登录注册的注册验证时出现 Cannot resolve query parameter '2'...

问题描述:在ideamysqltomcat 实现登录注册jsp的注册信息insert验证时出现 cannot resolve query parameter 2贴上创建链接的代码:if(conn ! null){string sql "select *from login_info where dbuser?";pstm conn.preparestatement(sql);ps…

如何画一张架构图(内含知识图谱)

简介:架构图是什么?为什么要画架构图?如何画好架构图?有哪些方法?本文从架构的定义说起,分享了阿里文娱高级技术专家箫逸关于画架构图多年的经验总结,并对抽象这一概念进行了深入地讨论。内容较…

软件分析与设计:分析什么?如何设计?

简介:分析与设计这两个词我们平时经常听到,也经常讲,那么分析与设计的本质究竟是什么呢?到底要分析什么?又到底要怎样去设计?这3个问题如果平时没有一些积累,突然被问到这些,一时也会…

协程到底有什么用?6种I/O模式告诉你!

作者 | 陆小风来源 | 码农的荒岛求生今天来聊一聊协程的作用。假设磁盘上有10个文件,你需要读取的内存,那么你该怎么用代码实现呢?在接着往下看之前,先自己想一想这个问题,看看自己能想出几种方法,各自有什…

阿里云数据治理系列(一):治理项目启动前的必答三问

简介:近一年以来,越来越多的企业在考虑或正在启动数据治理的项目。作为在该领域从业多年的人士,也常会被咨询:数据治理不是很多年前就有的概念么?为什么忽然很多企业都在提及?是不是新瓶装旧酒?…

揭晓远程证明架构EAA:机密容器安全部署的最后一环 | 龙蜥技术

简介:如果需要在云上 HW-TEE 环境里启动一个加密容器,如何在启动过程中获取容器的解密密钥? 文 / 周亮, 云原生机密计算 SIG 核心成员。 在云原生场景下,基于HW-TEE(如Intel SGX, Intel TDX 和 AMD SEV&am…

java哪个城市的需求量大_4大互联网热门城市Java薪资情况,看完你想去哪个城市发展呢?...

程序员作为薪资最高的行业之一,一直是很多人转行的热门首选行业。Java程序员又在所有程序员中占比最大, 因此,Java程序员的薪资就能够很好的代表行业的薪资水准。今天就为大家整理一下4大热门城市的Java薪资情况,看看你还差多少&a…

Gartner:上云步伐加速,中国公有云部署最佳实践

作者 | Gartner高级研究总监 周玲 供稿 | Gartner 在数字化转型需求的驱动下,中国的上云步伐持续加速。Gartner预测,到2024年,中国40%的IT基础设施支出将用于云服务(参见图1)。 图1:中国云基础设施和平台服…

kubernetes pv-controller 解析

简介:pv controller是 kcm 的组件之一,它负责处理集群中的pvc/pv对象,对pvc/pv 对象进行状态转换。本文将基于 kubernetes 1.23进行解析。 作者 | 牧琦 来源 | 阿里技术公众号 基于 kubernetes 1.23 一 简介 pv controller是 kcm 的组件之…

Apsara Stack 技术百科 | 标准化的云时代:一云多芯

简介:随着今年云栖大会现场平头哥的自研云芯片倚天710发布,以及众多新兴厂商的芯片发布,将有越来越多的类型芯片进入到主流市场,“多芯”的架构将在数据中心中越来越常见,阿里云混合云在安全和稳定的基础上&#xff0c…

用户态 tcpdump 如何实现抓到内核网络包的?

作者 | 张彦飞allen来源 | 开发内功修炼今天聊聊大家工作中经常用到的 tcpdump。在网络包的发送和接收过程中,绝大部分的工作都是在内核态完成的。那么问题来了,我们常用的运行在用户态的程序 tcpdump 是那如何实现抓到内核态的包的呢?有的同…

技术实践第三期|HashTag在Redis集群环境下的使用

简介:欢迎了解友盟技术干货第三期内容:Redis集群环境如何按照前缀批量删除缓存。希望能对开发者们在实际应用中有所帮助。 一、背景 数据源列表添加缓存支持,types字段可传多值,如app, mini, web等,会构建如下缓存ke…

android java加密_Android Java字符串加密

Java字符串加密学习笔记Java字节码字节码生成Java2bitcode由Java源代码生成字节码的过程如下图(图片来源于网络)JVM执行不是热代码直接走字节码解释器热代码:多次调用,多次执行的循环体,会被JIT优化成机器码字节码执行方法调用在JVM中即是字节…

数据质量漫谈

简介: 数据质量问题无处不在,本文尝试找到一种方法,能够尽可能的发现数据质量问题并解决之。 作者 | 茂才 来源 | 阿里技术公众号 一 概述 1 数据质量问题无处不在 基本上每个用数据的同学,都遇到过以下类似的问题。 表没有按…

7招,实现安全高效的流水线管理

简介:云效团队多年来为阿里巴巴内部(Aone)和云上企业用户(云效)分别提供研发运维工具,并致力于打造企业级一站式的 DevOps 平台,更多关注不同类型的企业用户在使用过程中的管理与协作场景&#…