云服务器内容精选

  • GeminiDB Redis各版本的生命周期规划 在正式EOM/EOS前会发布公告,在此期间客户可以通过数据复制服务将版本在EOS之前切换到高版本。 EOM:End of Marketing,停止该版本的销售。 EOS:End of Service & support,停止该版本的服务,建议您在执行作业时选择最新版本的引擎。在该日期之后,不再提供该软件版本的任何技术服务支持。 表1 GeminiDB Redis各版本生命周期规划表 版本 当前状态 华为云商用时间 计划EOM时间 计划EOS时间 5.0 已商用 2021年6月 暂无计划 持续运营 6.2 已商用 2024年3月 暂无计划 持续运营
  • 兼容接口和版本 介绍GeminiDB Redis目前支持的兼容接口和版本。 表1 兼容接口和版本 兼容接口 实例类型 版本 Redis 集群版 采用分片集群架构,提供Proxy代理连接,同时兼容Cluster接入方式。性能水平扩展能力强,可支撑百万QPS、数十TB级业务量。 主备版 标准的master-replica架构,兼容单机、哨兵接入方式。适用于无法使用hashtag的业务场景。 6.2(包含6.2.x)、5.0及以下版本。 父主题: 产品介绍
  • 注意事项 目前仅支持MySQL到GeminiDB Redis接口Hash类型的转换。 新规则的Redis键前缀+键分隔符不能是已有规则的Redis键前缀+键分隔符的子前缀,反之亦然。例如新规则的前缀为 "pre1:",键分隔符为 "," ,老规则前缀为 "pre1",分隔符为":", 这种情况不允许创建新规则。 如果修改映射规则中MySQL实例的表名后,则需要重新配置映射规则。 暂不支持对MySQL实例表的TRUNCATE TABLE、DROP TABLE、DROP DATABASE等语句的识别及同步。 暂不支持ENUM、SET、JSON三种数据类型的同步。 如果对映射规则中键(Key)字段中的一个或多个字段执行改名、删除等操作时,会使映射规则失效。
  • 企业级特性介绍 GeminiDB Redis接口基于云原生分布式架构,实现了计算与存储分离,完全兼容社区版Redis6.2(包含6.2.x)、5.0及以下版本,提供了更多的企业级特性。 资源独享,分片不限流 计算节点部署在独享容器,租户隔离,稳定性高。面对高并发流量,节点不被限流。 内置独享型负载均衡器,转发性能和稳定性更高。 计算节点支持绑定公网IP,方便用户迁移上云和远程调试。 秒级弹性伸缩,轻松应对业务峰谷 支持存储和计算各自独立伸缩。单实例最大支持千万级QPS和36TB容量。 数据量增长场景,容量的扩容只需一键即可秒级完成,业务应用无感知。 业务量突增的场景(比如游戏、电商的活动期间,临时有更高的QPS诉求),可通过增加节点和提升规格两种方式进行扩容,后续可轻松缩容,对业务的影响仅为秒级连接重连。 一库替代多库,简化业务架构 基于高性能存储池,实例自动加载高频访问的热数据在计算节点的内存中,内部自动完成冷热数据交换,业务优先从内存中读取热数据,兼顾数据的高可靠和低时延。 GeminiDB Redis接口适合存储持续增长的重要业务数据(比如游戏玩家数据、用户画像、行为日志、文章资讯等),相比使用Redis+MySQL的架构场景,架构更简洁、数据存储更可靠,同时还具备更高的综合性能和性价比。 支持3AZ部署 3AZ实例支持将计算和存储资源都会均匀分布在3个可用区,部署规则严格遵循反亲和组,实例具备超高可靠性。 支持故障节点秒级接管,在独有的存算分离架构下,即使发生N-1节点同时故障的极端场景,依然可以秒级恢复业务访问,超高可用。 支持跨Region双活容灾 支持企业级双活容灾能力,用户可创建2个独立的实例(同Region或跨Region),并搭建容灾关系,如果其中一个实例出现极端场景的故障,另一个实例能继续提供可靠的数据库服务。 支持双向数据同步,支持断点续传。 账号管理,支持DB级权限控制 支持使用65536个DB,支持创建200个子账号。 用户不但可以为子账号设置只读或读写权限,还可为子账号配置可访问的DB列表,从根本上避免多租户之间数据误操作风险。 支持为Hash key的Field单独设置过期时间 开源Redis只支持为Hash key整体设置过期时间。GeminiDB Redis接口新增了一组hash命令,这一新功能让用户可以为一个Hash key中的指定Field单独设置过期时间,将业务层面的淘汰逻辑下沉到数据库中实施,简化业务架构。 exHash最佳实践详见广告频控业务exHash方案。 数据强一致,不会发生脏读 开源Redis采用异步复制,数据副本间弱一致。在计数器、限流器、分布式锁等常见业务场景中,会带来脏读隐患,可能会导致业务逻辑错乱。 GeminiDB Redis接口将数据副本下沉到高性能存储池中,一旦写入成功,将保障数据3副本强一致存储,后续业务访问不会发生脏读。 增强版事务功能 支持事务功能,即MULTI/EXEC。相比开源Redis的伪事务,GeminiDB Redis接口实现了真事务,即支持ACID,在底层实现了对回滚的支持,满足了事务的原子性。 增强版前缀扫描 当用户对实例执行Scan类扫描命令时,如指定前缀匹配(match prefix*),则此时的扫描性能将远远超越开源Redis。这是因为GeminiDB Redis接口将该场景下达命令复杂度优化到了O(logN + M),其中N是整体数据量,M是匹配的数据量。而开源Redis的扫描复杂度则是更慢的O(N)。 父主题: 产品介绍
  • GeminiDB基础命令 针对社区Redis提供的全部命令类型,GeminiDB 5.0和6.2(包含6.2.x)兼容情况如下: 表1 GeminiDB Redis接口命令兼容度 Redis命令分类 命令详情 GeminiDB Redis 5.0兼容情况 GeminiDB Redis 6.2(包含6.2.x)兼容情况 String String命令列表 100%兼容 100%兼容 Hash Hash命令列表 100%兼容 100%兼容 List List命令列表 100%兼容 100%兼容 Sorted set Sorted set命令列表 100%兼容 100%兼容 Set Set命令列表 100%兼容 100%兼容 Bitmap Bitmap命令列表 100%兼容 100%兼容 Stream Stream命令列表 100%兼容 暂不支持xgroup子命令createconsumer Geo Geo命令列表 100%兼容 100%兼容 Hyperloglog Hyperloglog命令列表 100%兼容 100%兼容 发布订阅(Pub/Sub) 发布订阅命令列表 100%兼容 100%兼容 Lua脚本(Scripting) Lua脚本命令列表 100%兼容 100%兼容 事务(Transactions) 事务命令列表 100%兼容 100%兼容 其他通用Key操作 其他通用Key操作 暂不支持2个命令: SWAPDB、MOVE 暂不支持2个命令: SWAPDB、MOVE
  • GeminiDB运维管理命令 GeminiDB在社区Redis的INFO/CLIENT/SLOWLOG/MONITOR/CONFIG等运维管理命令能力基础上,提供全面服务化且高度易用的DBA运维能力。 表2 GeminiDB Redis接口运维功能介绍 GeminiDB运维功能 GeminiDB运维功能简介 社区Redis同类命令/能力 监控指标 提供命令级别QPS/平均时延/P99时延指标。提供丰富节点级指标以及实例级汇聚指标。 INFO 实例会话 展示客户端IP信息以及Top会话统计,支持一键批量Kill会话。 CLIENT 参数配置 展示慢日志及诊断信息。 CONFIG 慢日志 审计高危命令操作。 SLOWLOG 用户权限管理 支持账号管理功能 ACL (Access Control List) 审计日志 支持一键查询与修改内核参数。是社区Redis CONFIG命令的能力加强版。 MONITOR 实时大Key诊断 实时观测大Key信息,不影响业务。 不支持 实时热Key诊断 实时观测热Key情况,不影响业务。 不支持 实时前缀Key分析 实时观测前缀Key分布,不影响业务。 不支持 高危命令重命名 支持修改命令别名以及查看重命名记录。 通过手动修改配置文件实现 异常Key熔断 一键屏蔽指定Key,拒绝被业务访问。用于快速恢复。 不支持
  • GeminiDB高级命令 exHASH类型 使用场景:GeminiDB支持为Hash Key的每个Field设置过期时间,适用于构建频控、购物车等业务。 命令列表:请参考exHash命令列表。 使用方式:请参考广告频控业务exHash方案。 布隆过滤器(BloomFilter)类型 功能介绍:布隆过滤器(BloomFilter)可用于检索某个元素是否存在于某个海量集合中,适用于Web拦截器、防缓存穿透等场景。 命令列表:请参考布隆过滤器(Bloom Filter)介绍。 使用方式:请参考布隆过滤器(Bloom Filter)命令说明。
  • 测试模型 workload模型 表2 测试模型 测试模型编号 测试模型 读多写少场景 workload-read-mostly 95% read, 5% update 读写均衡场景 workload-read-write-combination 50% update, 50% read 读改写均衡场景 workload-read-modify-write 50% read, 50% readmodifywrite 读更新写混合场景 workload-mixed-operational-analytical 65% read, 25% update, 10% insert 写多读少场景 workload-insert-mostly 90% insert, 10% read 数据模型 fieldlength=100, fieldcount=10 预置数据量 本次性能测试中,针对每种规格的实例,测试了如下预置数据量的性能。 预置数据具体如下表所示: 表3 预置数据量 编号 规格 预置数据量 cluster1 4U16GB 50GB cluster2 8U32GB 100GB cluster3 16U64GB 200GB cluster4 32U128GB 400GB
  • 测试环境 区域:华北-北京四 可用区:可用区1+可用区2+可用区3(跨3个可用区部署) 弹性云服务器(Elastic Cloud Server,简称ECS):规格选择h3.4xlarge.2,16U32GB,操作系统镜像使用CentOS 7.5 64位版本。 被测试实例的配置:每个实例均包含3个节点。 被测试实例的规格:覆盖以下规格类型,详见表1 实例规格。 表1 实例规格 编号 规格 cluster1 4U16GB cluster2 8U32GB cluster3 16U64GB cluster4 32U128GB
  • 产品优势 使用成本低 随着业务的发展,企业数据量持续不断地增加,DynamoDB读写请求累加带来的费用也日渐高涨。而GeminiDB DynamoDB协议具有较高的性价比,既能提供更高的吞吐,又可以降低一半的DynamoDB使用成本,尤其当数据量较大时成本降低更加明显。 更灵活开发的部署方式 DynamoDB是一项全托管服务,用户使用需要遵循一定的部署方式和规则。相比之下,GeminiDB DynamoDB协议可以根据用户的具体需求灵活地部署服务,客户可以选择部署在私有云或公有云上,而不是被锁定在昂贵的平台上。无论在哪种部署环境下,GeminiDB DynamoDB协议都可以保证服务的稳定和高效。 平滑的迁移 除了以上两点,GeminiDB DynamoDB协议可以完全兼容DynamoDB的语法和数据模型,所以从DynamoDB迁移到GeminiDB DynamoDB协议将变得非常容易,应用程序也不需要进行任何修改,迁移工作将会更高效便捷,对业务也更加友好。
  • 性能测试数据 不同测试模型下,不同规格且预置相当数据量,测试的OPS*数据(表格中黑色字体),详见表1 测试数据中加粗内容。 表1 测试数据 节点规格 4U16GB 8U32GB 16U64GB 32U128GB 客户端并发数 32 64 128 256 预置数据量 50GB 100GB 200GB 400GB 读多写少场景 workload-read-mostly 15627 44612 90713 169037 读写均衡场景 workload-read-write-combination 19565 46240 95065 158793 读改写均衡场景 workload-read-modify-write 11768 29488 59332 96964 读更新写混合场景 workload-mixed-operational-analytical 17534 40214 80661 137616 写多读少场景 workload-insert-mostly 23830 44548 67290 111540 OPS:Operation Per Second,数据库每秒执行的操作数。 测试模型编号:测试模型编号对应的测试模型,请参见表2 测试模型。 父主题: 性能白皮书
  • 兼容的接口列表 表1 接口列表 接口名称 CreateTable UpdateTable DescribeTable ListTables DeleteTable PutItem UpdateItem GetItem DeleteItem BatchWriteItem BatchGetItem Query Scan UpdateTimeToLive 表2 CreateTable接口兼容性介绍 接口名称 参数 是否必选 是否支持 备注 CreateTable 请求参数 AttributeDefinitions 是 是 - KeySchema 是 是 - TableName 是 是 Table Name 字符长度3~48,正则表达式([\w-]+)。 BillingMode 否 否 计费属性,暂不支持。 GlobalSecondaryIndexes 否 是 - LocalSecondaryIndexes 否 是 - ProvisionedThroughput 否 是 - SSESpecification 否 否 当前版本不支持,规划中。 StreamSpecification 否 否 当前版本不支持,规划中。 Tags 否 否 当前版本不支持,规划中。 返回参数 TableDescription - 是 - 表3 UpdateTable接口兼容性介绍 接口名称 参数 是否必选 是否支持 备注 UpdateTable 请求参数 AttributeDefinitions 否 是 - BillingMode 否 否 计费属性,不予支持。 GlobalSecondaryIndexesUpdates 是 是 支持Create和Delete,不支持Update。 ProvisionedThroughput 否 否 计费属性,不予支持。 ReplicaUpdates 否 否 默认强一致性。 SSESpecification 否 否 当前版本不支持,规划中。 StreamSpecification 否 否 当前版本不支持,规划中。 TableName 是 是 - 返回参数 TableDescription - 是 - 表4 DescribeTable接口兼容性介绍 接口名称 参数 是否必选 是否支持 备注 DescribeTable 请求参数 TableName 是 是 - 返回参数 Table - 是 不支持itemCount字段。 表5 ListTables接口兼容性介绍 接口名称 参数 是否必选 是否支持 备注 ListTables 请求参数 ExclusiveStartTableName 否 是 - Limit 否 是 - 返回参数 LastEvaluatedTableName - 是 - TableNames - 是 - 表6 DeleteTable接口兼容性介绍 接口名称 参数 是否必选 是否支持 备注 DeleteTable 请求参数 TableName 是 是 - 返回参数 TableDescription - 是 - 表7 PutItem接口兼容性介绍 接口名称 参数 是否必选 是否支持 备注 PutItem 请求参数 Item 是 是 - TableName 是 是 - ConditionalOperator 否 否 遗弃参数,见ConditionExpression。 ConditionExpression 否 是 - Expected 否 否 遗弃参数,见该接口中ConditionExpression字段。 ExpressionAttributeNames 否 是 - ExpressionAttributeValues 否 是 - ReturnConsumedCapacity 否 否 计费属性,暂不支持。 ReturnItemCollectionMetrics 否 否 统计属性,暂不支持。 ReturnValues 否 是 - 返回参数 Attributes - 是 - ConsumedCapacity - 否 计费属性,暂不支持。 ItemCollectionMetrics - 否 统计属性,暂不支持。 表8 UpdateItem接口兼容性介绍 接口名称 参数 是否必选 是否支持 备注 UpdateItem 请求参数 Key 是 是 - TableName 是 是 - AttributeUpdates 否 否 遗弃参数,见该接口中UpdateExpression字段。 ConditionalOperator 否 否 遗弃参数,见该接口中UpdateExpression字段。 ConditionExpression 否 是 - Expected 否 否 遗弃参数,见该接口中UpdateExpression字段。 ExpressionAttributeNames 否 是 - ExpressionAttributeValues 否 是 - ReturnConsumedCapacity 否 否 计费属性,暂不支持。 ReturnItemCollectionMetrics 否 否 统计属性,暂不支持。 ReturnValues 否 是 - UpdateExpression 否 是 - 返回参数 Attributes - 是 - ConsumedCapacity - 否 计费属性,暂不支持。 ItemCollectionMetrics - 否 统计属性,暂不支持。 表9 GetItem接口兼容性介绍 接口名称 参数 是否必选 是否支持 备注 GetItem 请求参数 Key 是 是 - TableName 是 是 - AttributesToGet 否 否 遗弃参数,见该接口中ProjectionExpression字段。 ConsistentRead 否 否 默认强一致性。 ExpressionAttributeNames 否 是 - ProjectionExpression 否 是 - ReturnConsumedCapacity 否 否 计费属性,暂不支持。 返回参数 ConsumedCapacity - 否 计费属性,暂不支持。 Item - 是 - 表10 DeleteItem接口兼容性介绍 接口名称 参数 是否必选 是否支持 备注 DeleteItem 请求参数 Key 是 是 - TableName 是 是 - ConditionalOperator 否 否 遗弃参数,见该接口中ConditionExpression字段。 ConditionExpression 否 是 - Expected 否 否 遗弃参数,见该接口中ConditionExpression字段。 ExpressionAttributeNames 否 是 - ExpressionAttributeValues 否 是 - ReturnConsumedCapacity 否 否 计费属性,暂不支持。 ReturnItemCollectionMetrics 否 否 统计属性,暂不支持。 ReturnValues 否 是 - 返回参数 Attributes - 是 - ConsumedCapacity - 否 计费属性,暂不支持。 ItemCollectionMetrics - 否 统计属性,暂不支持。 表11 BatchWriteItem接口兼容性介绍 接口名称 参数 是否必选 是否支持 备注 BatchWriteItem 请求参数 RequestItems 是 是 - ReturnConsumedCapacity 否 否 计费属性,暂不支持。 ReturnItemCollectionMetrics 否 否 统计属性,暂不支持。 返回参数 ConsumedCapacity - 否 计费属性,暂不支持。 ItemCollectionMetrics - 否 统计属性,暂不支持。 UnprocessedItems - 是 - 表12 BatchGetItem接口兼容性介绍 接口名称 参数 是否必选 是否支持 备注 BatchGetItem 请求参数 RequestItems 是 是 无 ReturnConsumedCapacity 否 否 计费属性,暂不支持。 返回参数 ConsumedCapacity - 否 统计属性,暂不支持。 Responses - 是 - UnprocessedKeys - 是 - 表13 Query接口兼容性介绍 接口名称 参数 是否必选 是否支持 备注 Query 请求参数 TableName 是 是 - AttributesToGet 否 否 遗弃参数,见该接口中ProjectionExpression字段。 ConditionalOperator 否 否 遗弃参数,见该接口中ProjectionExpression字段。 ConsistentRead 否 否 默认强一致性。 ExclusiveStartKey 否 是 - ExpressionAttributeNames 否 是 - ExpressionAttributeValues 否 是 - FilterExpression 否 是 - IndexName 否 是 - KeyConditionExpression 否 是 - KeyConditions 否 否 遗弃参数,见该接口中KeyConditionExpression字段。 Limit 否 是 - ProjectionExpression 否 是 - QueryFilter 否 否 遗弃参数,见该接口中FilterExpression字段。 ReturnConsumedCapacity 否 否 计费属性,暂不支持。 ScanIndexForward 否 是 - Select 否 是 不支持Count。 返回参数 ConsumedCapacity - 否 计费属性,暂不支持。 Count - 是 - Items - 是 - LastEvaluatedKey - 是 - ScannedCount - 是 - 表14 Scan接口兼容性介绍 接口名称 参数 是否必选 是否支持 备注 Scan 请求参数 TableName 是 是 - AttributesToGet 否 否 遗弃参数,见该接口中ProjectionExpression字段。 ConditionalOperator 否 否 遗弃参数,见该接口中ConditionExpression字段。 ConsistentRead 否 否 默认强一致性。 ExclusiveStartKey 否 是 - ExpressionAttributeNames 否 是 - ExpressionAttributeValues 否 是 - FilterExpression 否 是 - IndexName 否 是 - Limit 否 是 - ProjectionExpression 否 是 - ReturnConsumedCapacity 否 否 计费属性,暂不支持。 ScanFilter 否 否 遗弃参数,该接口中FilterExpression字段。 Segment 否 是 - Select 否 是 不支持Count类型。 TotalSegments 否 是 - 返回参数 ConsumedCapacity 否 否 计费属性,暂不支持。 Count - 是 - Items - 是 - LastEvaluatedKey - 是 - ScannedCount - 是 - 表15 UpdateTimeToLive接口兼容性介绍 接口名称 参数 是否必选 是否支持 备注 UpdateTimeToLive 请求参数 TableName 是 是 - TimeToLiveSpecification 是 是 - 返回参数 TimeToLiveSpecification - 是 -
  • 使用须知 流量统计以及流量限制,当前版本不支持。 Stream功能、事务功能(TransactWriteItems, TransactGetItems) 不支持。 不支持按需备份接口:CreateBackup、DescribeBackup、 DeleteBackup, ListBackups, RestoreTableFromBackup。 在DynamoDB中,哈希键(或分区键)决定项目将存储在DynamoDB内部存储中的位置。DynamoDB使用专有的哈希函数,GeminiDB DynamoDB采用的是Murmur3算法,这种差异会导致Scan操作在DynamoDB和GeminiDB DynamoDB数据返回的顺序不同。 DynamoDB应用程序指定一个Endpoint地址,采用客户端的负载均衡插件,将请求均匀的发送到后端节点。若不使用该插件,则只会连接单个Endponit。详细负载均衡代码包可联系客服提供。 表/索引名称中不能包含.。 由于编码方式的不同,每行数据大小不会严格400K限制, DDL接口均为同步接口。
  • 负载均衡 DynamoDB应用程序通常连接的一个URL,在服务端内部会进行请求的分发。我们希望DynamoDB接口的请求均匀的分布在所有的节点,实现这个目标DynamoDB提供了低成本并且小型的库,将它附加到DynamoDB SDK。其基本原理是客户端维护当前DB集群存活的节点列表,在DynamoDB SDK发送请求前拦截器会修改请求头中的目标地址,从而达到负载均衡的目的。下面提供简单的使用示例: TABLE_NAME ='user' // seed url URL = boto3_lb.setup(['***.***.***.***'],'http',8000,'fake.domain.com') dynamodb = boto3.resource('dynamodb', endpoint_url=URL,region_name='None', aws_access_key_id='None', aws_secret_access_key='None')
  • 支持的表达式 GeminiDB DynamoDB中的ConditionExpression支持的函数语法如下: function ::= attribute_exists (path) | attribute_not_exists (path) | attribute_type (path, type) | begins_with (path, substr) | contains (path, operand) contains(path,operand)中operand只能是属性值(即传入的value占位符)。 GeminiDB DynamoDB中的UpdateExpression语法如下: update-expression ::= [ SET action [, action] ... ] [ REMOVE action [, action] ...] [ ADD action [, action] ... ] [ DELETE action [, action] ...] set-action ::= path =value value ::= operand | operand '+' operand | operand '-' operand operand ::= path | function function ::= if_not_exists (path, value) | list_append (list1, list2) remove-action ::= path add-action ::= path value delete-action ::= path value SET path = operand语法中,不支持operand是path的场景。 SET path = operand1 '+'|'-' operand2语法中,operand1必须等于path,operand2必须是属性值 SET path = if_not_exists (path, value)语法中,两个path必须相等,且value只能是表达式属性值。 所有的value只能是占位符,比如':placeholder'。