• [问题求助] 多媒体数据库参数含义。
    【问题来源】【必填】    湖北银行    【问题简要】【必填】希望确认下多媒体数据库TSOCIALMESSAGE。各个参数的含义。【问题类别】【必填】   AICC【AICC解决方案版本】【必填】    【AICC版本:AICC 8.15.1spc1】    【UAP版本:UAP9600 V100R005C00SPC021】    【CTI版本:ICD V300R008C23】【期望解决时间】【选填】尽快
  • [热门活动] 华为云数据库全栈成长计划,0基础—>专项进阶,专家带你玩,秒懂数据库,快来和我一起来参与吧!
    华为云数据库全栈成长计划,0基础—>专项进阶,专家带你玩,秒懂数据库,快来和我一起来参与吧!
  • [优秀实践] swap分区过小导致系统异常案例总结
    1. 问题现象在某数据库测试的时候发现执行linux基础命令报错:-bash: fork: Cannot allocate memory重启后,问题不再出现。与此同时,客户也反馈测试过程中会经常出现数据库进程少了的现象。 2. 问题分析网上碰到的问题都是说是由于进程数满了,这个可能性不大,因为系统的进程最大数已经设置成32768了,已经很大了。由于出现问题后,无法执行命令查看系统状态。首先想到的办法是查看message日志。通过BMC登录后,收集到message日志查看后发现有crash的现象:从日志上可以看出,系统内存不够用了,所以kill了数据库进程,这也能够解释得了客户发现的数据库进程变少的现象了。从这个日志往上看,发现了另外一个关键信息:可以看出swap空间已经被用光了,出发了OOM,导致了系统出现了异常。对比这次测试跟之前的测试,数据库使用的内存大小都是一样的,发现这次开辟的SWAP空间较小。之前的SWAP分区有150G,而这次才开了4G,在内存紧张的情况下,很容易就出现了OOM。3. 解决方法由于客户不愿意修改数据库内存,认为当前的数据库内存配置是最优的,所以我们动态调整了SWAP分区大小。创建空文件# dd if=/dev/zero of=/home/swap bs=1G count=200挂载到swap空间mkswap /home/swap加载swap空间/sbin/swapon /home/swap以上命令重启后会失效,如果想让修改永久生效则需要修改配置:设置开机自动挂载,修改/etc/fstab/home/swap                       swap                    swap    defaults        0 0 按照这个方式修改后,再也没有出现过此问题了。
  • [问题求助] appCube应用不支持直连外部数据库,有什么其他解决方案来实现吗
    appCube应用不支持直连外部数据库,有什么其他解决方案来实现吗如何实现与外部现有系统的融合
  • [问题求助] appcube构建的应用支持外网数据库吗
    1、数据库是否支持其他网络下的任意数据库,如用户表调用现有外网应用的数据库中的用户表2、数据库是单个应用单独的数据库实例还是公用?3、appcube数据库是否支持数据迁移至其他应用
  • [优秀实践] XXX公司数据库性能调优案例
    1.1应用介绍G是一个关系型数据库管理系统,基于MySQL协议栈研发,G是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。G所使用的 SQL 语言是用于访问数据库的最常用标准化语言。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 G作为网站数据库。1.2调优思路调优分析思路如下:很多情况下压测流量并没有完全进入到服务端,在网络上可能就会出现由于各种规格(带宽、最大连接数、新建连接数等)限制,导致压测结果达不到预期。接着看关键指标是否满足要求,如果不满足,需要确定是哪个地方有问题,一般情况下,服务器端问题可能性比较大,也有可能是客户端问题(这种情况比较小)。对于服务器端问题,需要定位的是硬件相关指标,例如CPU,Memory,Disk I/O,Network I/O,如果是某个硬件指标有问题,需要深入的进行分析。如果硬件指标都没有问题,需要查看数据库相关指标,例如:等待事件、内存命中率等。如果以上指标都正常,应用程序的算法、缓冲、缓存、同步或异步可能有问题,需要具体深入的分析。可能的瓶颈点:      1.硬件:CPU、内存、磁盘I/O方面的问题,分为服务器硬件瓶颈、网络瓶颈(对局域网可以不考虑)      2.操作系统:在进行性能测试,出现物理内存不足时,虚拟内存设置也不合理,虚拟内存的交换效率就会大大降低,从而导致行为的响应时间大大增加,这时认为操作系统上出现性能瓶颈。     3.数据库配置等方面的问题。例如,由于参数配置不合理,导致数据库处理速度慢的问题,可认为是数据库层面的的问题。2.1BIOS配置       对于不同的硬件设备,通过在BIOS中设置一些高级选项,可以有效提升服务器性能。     步骤 1 关闭SMMU。     此优化项只在非虚拟化场景使用,在虚拟化场景,则开启SMMU。    1.重启服务器过程中,按Delete键进入BIOS,选择“Advanced > MISC Config”,按Enter进入。    2.将“Support Smmu”设置为“Disable” 。    步骤 2 关闭预取。   1.在BIOS中,选择“Advanced>MISC Config”,按Enter进入。   2.将“CPU Prefetching Configuration”设置为“Disabled”,按F10保存退出。2.2文件系统调优      对于不同的IO设备,通过调整文件系统相关参数配置,可以有效提升服务器性能。建议在文件系统的mount参数上加上noatime,nobarrier两个选项。命令为(其中数据盘以及数据目录以实际为准):mount  -o  noatime,nobarrier /dev/sdb /data一般来说,Linux会给文件记录了三个时间,change time, modify time和access time。access time指文件最后一次被读取的时间。modify time指的是文件的文本内容最后发生变化的时间。change time指的是文件的inode最后发生变化(比如位置、用户属性、组属性等)的时间。一般来说,文件都是读多写少,而且我们也很少关心某一个文件最近什么时间被访问了。所以,我们建议采用noatime选项,文件系统在程序访问对应的文件或者文件夹时,不会更新对应的access time。这样文件系统不记录access time,避免浪费资源。     2.现在的很多文件系统会在数据提交时强制底层设备刷新cache,避免数据丢失,称之为write barriers。但是,其实我们数据库服务器底层存储设备要么采用RAID卡,RAID卡本身的电池可以掉电保护;要么采用Flash卡,它也有自我保护机制,保证数据不会丢失。所以我们可以安全的使用nobarrier挂载文件系统。对于ext3, ext4和 reiserfs文件系统可以在mount时指定barrier=02.3关闭 irqbalance关闭irqbalance,通过手动绑定中断的方法优化性能步骤 1 停止irqbalance服务。systemctl stop irqbalance.service步骤 2 关闭irqbalance服务。systemctl disable irqbalance.service步骤 3 查看irqbalance服务状态是否已关闭。systemctl status irqbalance.service2.4网卡中断绑核手动绑定网卡中断,根据网卡所属CPU将其进行分配,从而优化系统网络性能。查询网卡所在的CPU,将网络中断绑定到该CPU的所有核上。步骤 1 查询中断号。cat /proc/interrupts | grep $eth | awk -F ':' '{print $1}'     #其中$eth表示需要优化的业务网口名称例如:cat /proc/interrupts | grep eth1 | awk -F ':' '{print $1}'步骤 2 根据中断号,将每个中断各绑定在一个核上。echo $cpunum > /proc/irq/$irq/smp_affinity_list      #其中$cpunum表示需要绑定到的目标CPU序列号,$irq表示步骤 1执行的结果,如存在多个序列号,则需逐一执行绑定。2.5网络参数调优对于不同的操作系统,通过在OS层面调整一些参数配置,可以有效提升服务器性能。OS优化参数Linux参数参数含义操作tcp_max_syn_backlogtcp_max_syn_backlog是指定所能接受SYN同步包的最大客户端数量。默认值是2048,建议修改成8192。echo 8192 > /proc/sys/net/ipv4/tcp_max_syn_backlognet.core.somaxconn服务端所能accept即处理数据的最大客户端数量,即完成连接上限。默认值是128,建议修改成1024。echo 1024 > /proc/sys/net/core/somaxconnnet.core.rmem_max接收套接字缓冲区大小的最大值。默认值是229376,建议修改成16777216。echo 16777216 > /proc/sys/net/core/rmem_maxnet.core.wmem_max发送套接字缓冲区大小的最大值(以字节为单位)。默认值是229376,建议修改成16777216。echo 16777216 > /proc/sys/net/core/wmem_maxnet.ipv4.tcp_rmem配置读缓冲的大小,三个值,第一个是这个读缓冲的最小值,第三个是最大值,中间的是默认值。默认值是"4096 87380 6291456",建议修改成"4096 87380 16777216"。echo "4096 87380 16777216" > /proc/sys/net/ipv4/tcp_rmemnet.ipv4.tcp_wmem配置写缓冲的大小,三个值,第一个是这个读缓冲的最小值,第三个是最大值,中间的是默认值。默认值是"4096 16384 4194304",建议修改成"4096 65536 16777216"。echo "4096 65536 16777216" > /proc/sys/net/ipv4/tcp_wmemnet.ipv4.max_tw_buckets表示系统同时保持TIME_WAIT套接字的最大数量。默认值是2048,建议修改成360000。echo 360000 > /proc/sys/net/ipv4/tcp_max_syn_backlog2.6 IO参数调优对于不同的IO设备,通过在OS层面调整一些IO相关参数配置,可以有效提升服务器性能Linux参数参数含义操作/sys/block/${device}/queue/scheduler配置IO调度,deadline或者noop更适用于GreatDB数据库场景。命令中的${device}为磁盘名称,根据实际磁盘名称进行修改。NVME盘不支持此操作。echo deadline > /sys/block/${device}/queue/scheduler/sys/block/${device}/queue/nr_requests提升磁盘吞吐量,尤其对myisam存储引擎,可以调整到更大。命令中的${device}为磁盘名称,根据实际磁盘名称进行修改。echo 2048 > /sys/block/${device}/queue/nr_requests2.7 缓存参数调优对于不同系统的内存使用情况,通过在OS层面调整一些缓存相关参数配置,可以有效提升服务器性能Linux参数参数含义操作swappiness值越大,越积极使用swap分区,值越小,越积极使用内存。执行命令 vi /etc/sysctl.conf ,将 vm.swappiness = 1添加到文件底部,保存退出,执行命令sysctl -p使其生效。dirty_ratio内存里的脏数据百分比不能超过这个值。echo 5 > /proc/sys/vm/dirty_ratio3.软件调优使用如下配置文件参数启动数据库,默认配置文件路径为/etc/my.cnf,  其中G软件安装及数据存放路径根据实际情况修改。完成
  • [干货汇总] 【转载】【精品汇总】数据库项目实践全系列精品汇总贴(持续更新中)
    转载:https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=156102&fromuid=102209结合项目实践板块总体发帖内容,从如下几个角度进行了整理和汇总,方便大家查阅与检索。后续如有精品将持续进行更新~分类整理如下:序号主题分类应用场景标题访问链接1迁移系列Oracle语法迁移【Oracle语法迁移】存储过程中table%Rowtype语法改写https://bbs.huaweicloud.com/forum/thread-132423-1-1.html2【Oracle语法迁移】pivot语法https://bbs.huaweicloud.com/forum/thread-123046-1-1.html3【Oracle语法迁移】Max/Min...keep语法https://bbs.huaweicloud.com/forum/thread-123044-1-1.html4【Oracle语法迁移】Rownum语法迁移案例https://bbs.huaweicloud.com/forum/thread-114322-1-1.html5【Oracle语法迁移】connect_by_root语法迁移案例https://bbs.huaweicloud.com/forum/thread-114317-1-1.html6【Oracle语法迁移】order siblings by语法迁移案例https://bbs.huaweicloud.com/forum/thread-114312-1-1.html7【Oracle语法迁移】sys_connect_by_path语法迁移案例https://bbs.huaweicloud.com/forum/thread-114307-1-1.html8【Oracle语法迁移】单表递归语法迁移案例https://bbs.huaweicloud.com/forum/thread-114304-1-1.html9Gauss DB(DWS)迁移系列-Oracle 函数转换差异(四)https://bbs.huaweicloud.com/forum/thread-122099-1-1.html10Gauss DB(DWS)迁移系列-Oracle 函数转换差异(二)https://bbs.huaweicloud.com/forum/thread-122098-1-1.html11Gauss DB(DWS)迁移系列-Oracle 函数转换差异(一)https://bbs.huaweicloud.com/forum/thread-122097-1-1.html12Gauss DB(DWS)迁移系列-Oracle 数据类型差异https://bbs.huaweicloud.com/forum/thread-122096-1-1.html13oracle列转行unpivot函数语法转换https://bbs.huaweicloud.com/forum/thread-133591-1-1.html14Oracle 分析函数 keep改造方案https://bbs.huaweicloud.com/forum/thread-122150-1-1.html15Oralce  in相关子查询中包含distinct Gauss适配改造https://bbs.huaweicloud.com/forum/thread-122146-1-1.html16Oralce listagg/stragg/WM_CONCAT 迁移改造方案https://bbs.huaweicloud.com/forum/thread-122145-1-1.html17oracle 递归改造案例https://bbs.huaweicloud.com/forum/thread-122143-1-1.html18Oracle package 在gauss中的替换方法https://bbs.huaweicloud.com/forum/thread-122103-1-1.html19gauss与oracle存储过程差异和改写方法https://bbs.huaweicloud.com/forum/thread-122102-1-1.html20GaussDB和Oracle DDL的差异和替换示例https://bbs.huaweicloud.com/forum/thread-122101-1-1.html21Gauss 和 Oracle DML的差异和规避方案https://bbs.huaweicloud.com/forum/thread-122100-1-1.html22[项目实践-迁移系列] Gauss DB(DWS)迁移系列-Oracle迁移分析函数https://bbs.huaweicloud.com/forum/thread-122095-1-1.html23ORACLE 触发器在GaussDB(DWS)上的实现https://bbs.huaweicloud.com/forum/thread-117970-1-1.html24oracle CONNECT_BY_ROOT,CONNECT_BY_ISLEAF等在GaussDB(DWS)实现https://bbs.huaweicloud.com/forum/thread-117964-1-1.html25TD语法迁移【Teradata语法迁移】VOLATILE表语法迁移改写https://bbs.huaweicloud.com/forum/thread-117690-1-1.html26【Teradata语法迁移】Teradata set语法迁移案例https://bbs.huaweicloud.com/forum/thread-117686-1-1.html27Gauss DB(DWS)迁移系列-TD迁移DDL差异-分区定义设置Partition by https://bbs.huaweicloud.com/forum/thread-117993-1-1.html28Gauss DB(DWS)迁移系列-TD迁移DDL差异-字段字符集设置Character set Latinhttps://bbs.huaweicloud.com/forum/thread-117990-1-1.html29Gauss DB(DWS)迁移系列-TD迁移DDL差异-字段多值压缩属性compresshttps://bbs.huaweicloud.com/forum/thread-117989-1-1.html30Gauss DB(DWS)迁移系列-TD迁移DDL差异-字段数据格式化显式属性formathttps://bbs.huaweicloud.com/forum/thread-117988-1-1.html31Gauss DB(DWS)迁移系列-TD迁移DDL差异-视图迁移差异https://bbs.huaweicloud.com/forum/thread-117985-1-1.html32Gauss DB(DWS)迁移系列-TD迁移DDL差异-大小写敏感CASESPECIFIC/NOT CASESPECIFIChttps://bbs.huaweicloud.com/forum/thread-117982-1-1.html33Gauss DB(DWS)迁移系列-TD迁移DDL差异-行列存存储格式https://bbs.huaweicloud.com/forum/thread-117981-1-1.html34Gauss DB(DWS)迁移系列-TD迁移DDL差异-是否允许重复记录Set/MultiSethttps://bbs.huaweicloud.com/forum/thread-117955-1-1.html35Gauss DB(DWS)迁移系列-TD迁移DDL差异-可变临时表Volatilehttps://bbs.huaweicloud.com/forum/thread-117952-1-1.html36Gauss DB(DWS)迁移系列-TD的日期类型和数值型互转操作差异https://bbs.huaweicloud.com/forum/thread-117946-1-1.html37Gauss DB(DWS)迁移系列-Teradata迁移PIVOT/UNPIVOT 语法转换对照https://bbs.huaweicloud.com/forum/thread-113049-1-1.html38TD常用字典视图在GaussDB(DWS)上实现https://bbs.huaweicloud.com/forum/thread-117977-1-1.html39Gauss DB(DWS)迁移系列-TD迁移函数之next函数https://bbs.huaweicloud.com/forum/thread-114003-1-1.html40MySQL语法迁移【MySQL语法迁移】str_to_date()迁移https://bbs.huaweicloud.com/forum/thread-136679-1-1.html41【MySQL语法迁移】date_format()语法迁移https://bbs.huaweicloud.com/forum/thread-136677-1-1.html42【MySQL语法迁移】分页查询https://bbs.huaweicloud.com/forum/thread-136674-1-1.html43【MySQL语法迁移】double类型迁移https://bbs.huaweicloud.com/forum/thread-136673-1-1.html44【MySQL语法迁移】AUTO_INCREMENT自增列迁移https://bbs.huaweicloud.com/forum/thread-136672-1-1.html45【MySQL语法迁移】Datetime类型https://bbs.huaweicloud.com/forum/thread-136671-1-1.html46【MySQL语法迁移】表注释迁移https://bbs.huaweicloud.com/forum/thread-136669-1-1.html47【MySQL语法迁移】列注释迁移https://bbs.huaweicloud.com/forum/thread-136668-1-1.html48GaussDB(DWS)实践系列-MySQL->GaussDB(DWS)常用语法对照表https://bbs.huaweicloud.com/forum/thread-146647-1-1.html49ADB for mysql 【INSERT INTO table_name】迁移 DWS 改写方法https://bbs.huaweicloud.com/forum/thread-111391-1-1.html50对接系列ETL对接GaussDB(DWS)与Kettle对接指导https://bbs.huaweicloud.com/forum/thread-104549-1-1.html51Informatica10.2与GaussDB A对接https://bbs.huaweicloud.com/forum/thread-119448-1-1.html52GaussDB(DWS)与OGG对接https://bbs.huaweicloud.com/forum/thread-102196-1-1.html53驱动对接JDBC 对接 GaussDB(DWS)的数据库连接问题https://bbs.huaweicloud.com/forum/thread-101725-1-1.html54DWS perl通过ODBC连接GaussDB(DWS)https://bbs.huaweicloud.com/forum/thread-119608-1-1.html55AIX服务器安装psql工具连接GaussDB DWShttps://bbs.huaweicloud.com/forum/thread-119444-1-1.html56使用Python连接GaussDB(DWS)https://bbs.huaweicloud.com/forum/thread-119609-1-1.html57BI报表DWS使用.net驱动对接powerBIhttps://bbs.huaweicloud.com/forum/thread-133293-1-1.html58DWS Power BI对接指导https://bbs.huaweicloud.com/forum/thread-120839-1-1.html59GAUSSDB(DWS)对接OBIEE指导https://bbs.huaweicloud.com/forum/thread-102193-1-1.html60Cognos11.0.12 对接GaussDB Ahttps://bbs.huaweicloud.com/forum/thread-119437-1-1.html61Gauss DB(DWS)对接系列-BI工具BIP对接https://bbs.huaweicloud.com/forum/thread-109303-1-1.html62跨源访问使用DWS访问存算分离的MRS集群的数据https://bbs.huaweicloud.com/forum/thread-117770-1-1.html63【融合对接】DWS和Hadoop互联互通--读取hdfs数据和将数据写入hdfshttps://bbs.huaweicloud.com/forum/thread-113331-1-1.html64DWS对接DLI Flink实现实时数据接入https://bbs.huaweicloud.com/forum/thread-124688-1-1.html65Gauss DB(DWS) DWS与OBS数据互导https://bbs.huaweicloud.com/forum/thread-119433-1-1.html66实践系列性能优化解决表过多导致的 PGXC_GET_STAT_ALL_TABLES 查询慢问题https://bbs.huaweicloud.com/forum/thread-101196-1-1.html67DWS内存参数调优https://bbs.huaweicloud.com/forum/thread-99652-1-1.html68GaussDB(DWS) 【低效SQL分析案例】https://bbs.huaweicloud.com/forum/thread-131969-1-1.html69GaussDB(DWS)实践系列-行级访问策略优化实践https://bbs.huaweicloud.com/forum/thread-130766-1-1.html70DWS 多表关联创建PCK提升性能https://bbs.huaweicloud.com/forum/thread-119538-1-1.html71GaussDB(DWS)实践系列-性能优化最佳实践https://bbs.huaweicloud.com/forum/thread-118241-1-1.html72DWS 泰山服务器未做配置加固影响性能的问题https://bbs.huaweicloud.com/forum/thread-110780-1-1.html73DWS 参数设置不合理导致作业下盘影响性能的问题https://bbs.huaweicloud.com/forum/thread-110776-1-1.html74DWS 统计信息不准触发nestloop导致查询语句执行缓慢https://bbs.huaweicloud.com/forum/thread-110543-1-1.html75DWS SQL语句中in常量优化https://bbs.huaweicloud.com/forum/thread-110535-1-1.html76DWS 语句中not in触发NestLoop导致SQL执行慢的问题https://bbs.huaweicloud.com/forum/thread-110506-1-1.html77DWS语句不下推问题分析https://bbs.huaweicloud.com/forum/thread-110436-1-1.html78Gauss 子查询性能调优https://bbs.huaweicloud.com/forum/thread-122147-1-1.html79GaussDB 中实现current_user下推的方法https://bbs.huaweicloud.com/forum/thread-122131-1-1.html80应用技巧GaussDB的递归https://bbs.huaweicloud.com/forum/thread-101514-1-1.html81行转列的一个函数https://bbs.huaweicloud.com/forum/thread-100204-1-1.html82通过sql查询获取表字段详细信息https://bbs.huaweicloud.com/forum/thread-133428-1-1.html83通过sql查询快速获取分区表的的分区键https://bbs.huaweicloud.com/forum/thread-133424-1-1.html84处理执行sql文件时,某个sql语句报错,需要继续执行其余sql,直至所有sql执行完毕。https://bbs.huaweicloud.com/forum/thread-132498-1-1.html85GaussDB(DWS) 【查询包含某个字段的所有表清单方法】https://bbs.huaweicloud.com/forum/thread-131778-1-1.html86GaussDB(DWS) 【多值列场景的处理方法】https://bbs.huaweicloud.com/forum/thread-131777-1-1.html87GaussDB(DWS) 【并发测试脚本】https://bbs.huaweicloud.com/forum/thread-131776-1-1.html88GaussDB(DWS) 【常用对象赋权方法】https://bbs.huaweicloud.com/forum/thread-131775-1-1.html89GaussDB(DWS) 【角色权限相关视图使用方法】https://bbs.huaweicloud.com/forum/thread-131774-1-1.html90GaussDB(DWS) 【查询对象所有权限属性的两种方法】https://bbs.huaweicloud.com/forum/thread-131772-1-1.html91GaussDB(DWS)【用SQL方式查询所有带主键的表的主键字段方法】https://bbs.huaweicloud.com/forum/thread-131771-1-1.html92GaussDB(DWS)【通过SQL方式查询分区表的的分区字段方法】https://bbs.huaweicloud.com/forum/thread-131770-1-1.html93GaussDB(DWS)【查找视图依赖的表对象方法】https://bbs.huaweicloud.com/forum/thread-131377-1-1.html94GaussDB(DWS)实践系列-低效业务脚本检测指导https://bbs.huaweicloud.com/forum/thread-151360-1-1.html95GaussDB(DWS)实践系列-函数实现JSON类型解析https://bbs.huaweicloud.com/forum/thread-151349-1-1.html96GaussDB(DWS)实践系列-RoaringBitmap替换方案https://bbs.huaweicloud.com/forum/thread-151119-1-1.html97GaussDB(DWS)实践系列-List行转列函数实现https://bbs.huaweicloud.com/forum/thread-148308-1-1.html98GaussDB(DWS)实践系列-分区表TTL管理实现https://bbs.huaweicloud.com/forum/thread-147907-1-1.html99GaussDB(DWS)实践系列-日常硬件巡检指导https://bbs.huaweicloud.com/forum/thread-146654-1-1.html100【实践系列】GaussDB(DWS)存储过程中实现作业执行过程日志记录方法https://bbs.huaweicloud.com/forum/thread-124684-1-1.html101GaussDB(DWS)倾斜表查询实践https://bbs.huaweicloud.com/forum/thread-127754-1-1.html102DWS 局部聚簇(Partial Cluster Key)选取规则https://bbs.huaweicloud.com/forum/thread-112478-1-1.html103DWS 开发过程中SQL编写建议https://bbs.huaweicloud.com/forum/thread-112471-1-1.html104数据仓库,数据脱敏、and,or,in处置方案https://bbs.huaweicloud.com/forum/thread-99866-1-1.html
  • [版主精选] 华为云企业级Redis评测第一期:稳定性与扩容表现
    本文转自墨天轮,作者:杨明翰,原文链接:https://www.modb.pro/db/171623GaussDB(for Redis) 是华为云推出的企业级Redis,采用计算存储分离架构,兼容Redis生态的云原生NoSQL数据库,基于共享存储池的多副本强一致机制,支持持久化存储,保证数据的安全可靠。具有高兼容、高性价比、高可靠、弹性伸缩、高可用、无损扩容等特点。GaussDB(for Redis)满足高读写性能场景及容量需弹性扩展的业务需求,广泛使用于电商、游戏以及视频直播等行业。即可作为前端缓存支撑大并发的访问,也可作为底层数据库负责核心数据可靠存储。接下来我们使用采用Redis Labs推出的多线程压测工具memtier_benchmark对比测试下GaussDB(for Redis) 和原生Redis的特性差异。目录导航1、创建GaussDB(for Redis)实例2、安装memtier_benchmark3、数据批量装载向GaussDB(for Redis) 中装载数据向原生Redis中装载数据4、实例紧急扩容GaussDB(for Redis)扩容到16G原生Redis扩容到16G5、数据淘汰问题插入数据到GaussDB(for Redis)插入数据到原生Redis6、测试总结1、创建GaussDB(for Redis)实例在华为云通过控制台购买GaussDB(for Redis)实例,测试实例的配置为8G容量,如下所示。如截图所示,GaussDB(for Redis)提供了统一的负载均衡地址和端口,方便应用程序访问高可用的Redis服务。持久化数据存储空间直观展示了数据量及容量上限。另外,依托于GaussDB(for Redis)存算分离的架构,实例的容量和性能可以按需分别扩展:如需更多容量,只需点击“磁盘扩容”;如需更高的吞吐性能,则通过“规格变更”或“添加节点”完成。2、安装memtier_benchmark使用与GaussDB(for Redis)测试实例相同子网的ECS云服务器,部署memtier_benchmark测试环境# yum install autoconf automake make gcc-c++ # yum install pcre-devel zlib-devel libmemcached-devel openssl-devel# git clone https://github.com/RedisLabs/memtier_benchmark.git# cd memtier_benchmark# autoreconf -ivf# ./configure# make && make install如libevent版本较低,需要在安装memtier_benchmark前 按以下步骤安装libevent# wget https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz# tar xfz libevent-2.0.21-stable.tar.gz# pushd libevent-2.0.21-stable# ./configure# make# sudo make install# popd# export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:${PKG_CONFIG_PATH}确认安装成功# memtier_benchmark --help3、数据批量装载向GaussDB(for Redis) 中装载数据使用memtier_benchmark向GaussDB(for Redis) 中装载数据命令如下,单个value长度1000字节,12个线程,每个线程16个客户端,每个客户端发出请求数100000个,全部是写入操作。memtier_benchmark -s 192.XXX.XXX.XXX -a XXXXXXX -p 8635 -c 16 -t 12 -n 100000 --random-data --randomize --distinct-client-seed -d 1000 --key-maximum=65000000 --key-minimum=1 --key-prefix= --ratio=1:0 --out-file=./result_small_6G_set.log可以看到执行了1920万次操作,平均每秒4.4w的ops,总耗时438秒。使用redis-cli登录实例,查看dbsize(注意:由于采用MVCC机制,查询结果为key数量的预估值,非实时的准确值。)向原生Redis中装载数据为了对比方便,我们在另一台4核8G的ECS上部署一个单节点的开源Redis,版本与GaussDB(for Redis)一致使用5.0还是使用memtier_benchmark相同的配置向原始redis中插入数据memtier_benchmark -s 192.XXX.XXX.XXX -a XXXXXXX -p 6379 -c 16 -t 12 -n 100000 --random-data --randomize --distinct-client-seed -d 1000 --key-maximum=65000000 --key-minimum=1 --key-prefix= --ratio=1:0 --out-file=./result_small_6G_set_2.log执行一段时间后出现大量报错从Redis日志中查看,是在做RDB快照的时候出现了问题。从系统日志中分析当时发生了OOM故障。这其实和原生Redis的RDB快照处理方式有关,Redis是fork了一个进程使用copy-on-write的方式持久化内存数据,这必然会导致更多内存的申请和使用。并且除了RDB快照,原生redis在执行aof重写,新加从库的操作时也会申请使用更多的内存。为了避免OOM的情况出现,操作系统往往要预留出一倍的空闲内存,限制了内存资源的使用率造成极大的浪费。反观GaussDB(for Redis) 由于摒弃了fork机制,使得架构更健壮。从上面的测试也可以看到,导入同样数量的数据时,GaussDB(for Redis) 的可用性和响应的性能没有受到任何的影响。4、实例紧急扩容为了测试能进行下去,我们将GaussDB(for Redis) 和原生Redis分别扩容到16G。GaussDB(for Redis)扩容到16G对GaussDB(for Redis) 来说由于采用了存算分离的架构,分布式存储池海量在线,按额度分配给用户使用。扩容过程没有数据拷贝,也不会影响业务使用。接下来我们测试使用memtier_benchmark在持续的RW操作场景下GaussDB(for Redis)的扩容过程,看看是否会影响业务的读写;memtier_benchmark -s 192.XXX.XXX.XXX -a XXXXXXXX -p 8635 -c 16 -t 12 -n 10000 --random-data --randomize --distinct-client-seed -d 1000 --key-maximum=65000000 --key-minimum=1 --key-prefix= --ratio=1:0 --out-file=./result_small_6G_set_get.log在执行命令的同时进行扩容操作,查看测试结果和监控发现,扩容期间未见报错,GaussDB(for Redis) 响应时延没有明显变化。原生Redis扩容到16G原生Redis实例受服务器内存限制,要扩容到16G只能先升级ECS配置。需要重启服务器,存在短时间业务不可使用的问题。升级后再次使用memtier_benchmark插入数据依旧报错,检查发现还是出现了OOM没办法,只能再次升级云服务器ECS配置到32G,升级期间Redis服务再次不可用。这次升级后终于使用memtier_benchmark成功的插入了数据。5、数据淘汰问题下面我们来看高压力下导致数据写满的场景,直观对比双方的表现。插入数据到GaussDB(for Redis)memtier_benchmark参数设置如下,全部为写入操作,set的单个value长度50k字节,12个线程,每个线程16个客户端,每个客户端发出请求数10000次请求。折算下来 总的插入的key约为192万,数据量约96G,远大于实例的规格了。memtier_benchmark -s 192.XXX.XXX.XXX -a XXXXXXX -p 8635 -c 16 -t 12 -n 10000 --random-data --randomize --distinct-client-seed -d 50000 --key-maximum=65000000 --key-minimum=1 --key-prefix= --ratio=1:0 --out-file=./result_small_6G_set.log 运行了一段时间后,从监控上看到GaussDB(for Redis)磁盘空间100%,并且实例进入只读模式拒绝新数据的写入。检查发现共导入数据194954条。对于GaussDB(for Redis)来说,当容量接近写满的时候,用户会收到告警通知,此时只需在控制台点击“磁盘扩容”,即可秒级完成扩容,对业务没有影响。插入数据到原生Redis原生Redis通过配置限制了内存大小为8G,同样执行以下命令导入数据memtier_benchmark -s 192.XXX.XXX.XXX -a XXXXXXX -p 8635 -c 16 -t 12 -n 10000 --random-data --randomize --distinct-client-seed -d 50000 --key-maximum=65000000 --key-minimum=1 --key-prefix= --ratio=1:0 --out-file=./result_small_6G_set.log 运行一段时间后报错。登录redis查看内存已写满也可以通过配置maxmemory-policy设置数据淘汰策略保障数据写入,如图我们将淘汰策略设置成allkeys-lru,即淘汰最近最少使用的key 满足插入数据的内存需求;修改配置后 插入正常综上,GaussDB(for Redis)更加看重数据安全,将“保障用户数据不丢”作为最高优先级。当数据写满后自动进入只读模式,确保实例中数据的安全。通过控制台可以做到快速的扩容,最大可能降低对业务的影响。 原生Redis提供了数据淘汰参数,用户可自主选择策略当数据写满后淘汰符合条件的数据,设计思想更偏向于缓存的用途“数据可随意丢弃”。如使用在重要的业务场景,不希望数据丢失,建议选择GaussDB(for Redis)。6、测试总结本次我们使用memtier_benchmark分别对GaussDB(for Redis) 和原生Redis进行set操作的测试,8G规格的GaussDB(for Redis) 很顺利的完成了数据加载的操作,原生Redis出现OOM异常导致数据加载失败。原生Redis通过fork进程copy-on-write的方式拷贝数据,在RDB快照、aof重写以及新增从库等操作时容易出现OOM异常。反观GaussDB(for Redis) 由于摒弃了fork机制,使得架构更健壮,服务的可用性更强。在后续的扩容操作中GaussDB(for Redis)能够快速完成且对业务RW操作无影响,而原生Redis扩容需停服,期间业务无法正常使用。GaussDB(for Redis)快速扩容的特性非常适合生产环境中需要紧急扩容的场景,如游戏开服、电商抢购的火爆程度远超预期时。从测试的情况看,扩容几乎达到了秒级完成,且扩容过程中对业务的读写完全没有影响。另外更重要的原生Redis无论采用RDB还是aof方式进行数据持久化,都有数据丢失的风险,而GaussDB(for Redis)支持全量数据落盘,GaussDB基础组件服务提供底层数据三副本冗余保存,能够保证数据零丢失。如果使用场景既要满足KV查询的高性能,又希望数据得到重视能够不丢,建议从原生Redis迁移到GaussDB(for Redis) 。
  • [版主精选] 分钟级查看报表,华为云&一汽-大众,让商机时刻被洞见
    摘要:华为云DRS助力一汽-大众BI平台实时查看报表,提升数字化决策能力数字化时代下,企业IT的数据重心从支持在线交易后移到运营分析,数据的及时更新、高效分析、减少人工干预,是企业经营的追求目标,因此企业不再满足于“T+1”,而是“T+0”,需要实时和个性化,对于汽车行业也不例外。一汽-大众汽车有限公司(简称一汽-大众)于1991年成立,是我国第一个按经济规模起步建设的现代化乘用车工业基地,旗下有奥迪、大众、捷达三大品牌20余款产品,覆盖A、B、C级全系列乘用车型。数字革命的浪潮下,4S门店的服务也更加精准高效,为了更好的服务客户,4S集团通过分析客户使用习惯及偏好、产品个性化需求收集等方式,多维度满足用户购车和体验需求。但随着数据挖掘的深入,对BI平台的要求也越高,为解决报表业务系统数据量的快速增长、数据汇集、交互分析难等难题,一汽-大众携手华为云数据库在MEP(经销商多功能生态平台)-BI平台项目合作中取得了突破,跨越了挑战。实时数据更新,才能具备更快的市场反应能力众所周知,BI平台的报表系统可以连接多维数据库,报表目的是帮助用户掌握和了解数据,企业决策者通过实时的数据进行分析和挖掘,为业务的变化及时作出应对策略。一汽-大众4S门店的BI报表业务需要实时汇集所有门店的数据,面临巨大的技术挑战。一汽-大众所有的4S门店拥有总计60+MySQL实例,200+数据库,每个数据库约有150+张表要同步,共有3万张表需要数据实时同步到BI系统内。如果按照传统的数据入湖方式,需要配置3万条数据同步链路,更需要海量的工作比对数据一致性,维护成本极高,同步效率低下。此外,随着数据量的膨胀,现有的数据库无法支撑数TB级别的数据量。因此打造支持海量数据存储、数据实时同步的商业数据智能分析的BI平台迫在眉睫。面对一汽-大众的业务挑战,华为在方案选型上的主要考量如下:抽取数据对源数据库影响最小化:抽取数据绝对不能拖垮源数据库,也不能对源业务的性能造成较大的衰减,甚至表被锁定;部署实施要轻量简单:不需要在每个数据源安装代理程序,即开即用,配置操作简单易用;数据一致性有保障:基于binlog解析进行逻辑数据同步,具有断点续传和严格的认点技术,不惧网络抖动,有效确保数据一致性。综上,具备实时精准同步且保障数据一致的轻量级服务,华为云数据复制服务DRS是迎接业务挑战的不二之选。华为云DRS助力一汽-大众报表系统数据实时同步,全面释放数据价值DRS(Data replication Service)华为云数据复制服务,将云上的数据通过多对一的方案汇集到具备超强写入能力的华为旗舰型云原生数据库GaussDB(for MySQL)中,保证数据一致性和实效性,再通过DRS实施同步,从GaussDB(for MySQL)同步到华为云数据仓库GaussDB(DWS)中进行分析。但要想达到实时数据同步难度极大,因此,华为云数据库解决了如下核心难题:增加数据来源列,解决主键冲突:通过MySQL到GaussDB(for MySQL)的多对一方案,增加数据来源列,记录server/database/table信息,避免多个源表主键冲突。同步链路支持动态加减表:新增业务随时需要增加同步的表,华为云DRS支持GaussDB(for MySQL)的链路动态增减表,配置更加简单方便。标记数据入湖时间,帮助实时分析:华为云数据库提供的方案中,增加附加列数据行写入时间和更新时间的列,标记数据插入和更新时间。为数据入湖及数据实时分析打下基础。引入缓冲数据库,实时计算:针对8万张表不停的汇集和写入,选择了百万级QPS吞吐量和海量数据存储能力的GaussDB(for MySQL)作为缓冲层数据库,解决OLTP和OLAP数据库之间天然的数据处理能力差异。基于DRS实时准确的数据同步后,华为云GaussDB(DWS)实现实时计算,极大缩短复杂报表的执行时间。数据实时精准同步:基于华为云DRS准确的数据同步能力,正常情况下延迟均在1s以内,为实时报表提供基础条件,帮助一汽-大众实现了销售报表数据可用时间从1天降低为10分钟。且数据同步准确度高,源端和目标端数据行数一致。业务上线后,一汽-大众业务报表系统维护的链路数量从3万条降低至65条,工作效率大幅提升;同时DRS保证数据一致性,10亿级数据无一条丢失,极大降低数据比对工作;帮助一汽-大众实现了销售报表数据可用时间从1天降低为10分钟,时效性大幅提升。此外,对于缓冲层数据库GaussDB(for MySQL) 具备海量数据存储能力,最大支持128TB,超百万级QPS吞吐,可支撑业务快速发展;基于GaussDB(for MySQL)的计算存储分离架构,数据三副本存储强一致,数据零丢失;RTO秒级,故障秒切换,全面保障数据安全。一汽-大众以用户为中心,构建以数据分析为核心的生态圈,洞察用户需求,提供高价值产品,深受客户青睐。而华为云数据库通过技术手段实现数据实时同步,从海量的数据中发现洞察,为企业经营决策提供数据基础。未来,华为云数据库将持续携手一汽-大众通过数字技术,打造差异化有竞争力的数字化服务,满足客户对产品和服务日益增长的个性化需求。更多华为云数据库详情了解,欢迎前往华为云官网:https://www.huaweicloud.com/product/dbs.html
  • [干货汇总] 一文搞定传统、容器、CCE云上部署应用
    # 目录> 1、验证进程> 2、传统化部署>> 2.1、数据库部署>> 2.2、前端部署>> 2.3、后端部署>> 2.4、系统验证> 3、容器化部署>> 3.1、前端容器制作及部署>> 3.2、后端容器制作及部署>> 3.3、系统验证> 4、华为云CCE部署>> 4.1、镜像上传华为云SWR>> 4.2、华为云CCE部署镜像>>> 4.2.1、购买华为云CCE>>> 4.2.2、创建MySQL工作负载>>> 4.2.3、创建Javajob工作负载>>> 4.2.4、创建front工作负载>> 4.3、系统验证> 5、CCE helm模板部署>> 5.1、获取配置文件以及负载的yaml文件>> 5.2、基于服务器安装helm>> 5.3、基于helm chart模型打包>> 5.4、上传至华为云CCE>> 5.5、一键部署到华为云CCE>> 5.6、系统验证---# 1、验证进程!(https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/26/114146og1vnlld8qisdidk.png)---# 2、传统化部署!(https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/26/153620vjyqqmkmsur49uh4.png)## 2.1、数据库部署- 数据库部署参考:https://www.runoob.com/mysql/mysql-install.html- 后端业务数据存储在 MySQL ,暴露端口为3306;(实际项目中,数据库请使用部署系统所系的数据库,当前仅为演示。)- 数据库初始化脚本:initdb.sql- 数据库密码使用:!1Zezhang(实际项目中,数据库密码请自行设置,当前仅为演示。)- 数据库部署完成后,使用Navicat连接数据库,导入initdb.sql文件初始化数据库,编码格式选择gbk。## 2.2、前端部署- 前端是vue的项目,通过webpack打包成dist文件夹。再通过nginx做代理,把静态资源暴露在前端服务器80端口上- 获取前端静态资源:dist.zip- 静态资源解压到 /root/- yum 安装 nginx。并配置nginx.conf 文件,参考配置如下;```shell user root; //nginx 启动用户 worker_processes auto; error_log /var/log/nginx/error.log; pid /run/nginx.pid # Load dynamic modules. See /usr/share/doc/nginx/README.dynamic. include /usr/share/nginx/modules/*.conf; events { worker_connections 1024; } http { log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 4096; include /etc/nginx/mime.types; default_type application/octet-stream; # Load modular configuration files from the /etc/nginx/conf.d directory. # See http://nginx.org/en/docs/ngx_core_module.html#include # for more information. include /etc/nginx/conf.d/*.conf; server { listen 80; //前端访问端口 listen [::]:80; server_name _; root /usr/share/nginx/html; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; location / { //前端静态资源配置 root /root/dist; index index.html; } error_page 404 /404.html; location = /404.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } }```- service nginx start 启动前端并进行访问。!(https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/26/15470293q118b6euezctbp.png)## 2.3、后端部署- 后端是springboot项目,编译成一个jar包,服务默认端口为8081,启动服务需要Java环境,需要提前安装jdk。- 获取jar包:score-system-1.0-SNAPSHOT.jar- 启动命令```shellnohup java -jar score-system-1.0-SNAPSHOT.jar --spring.profiles.active=dev --MYSQLADDR=localhost &```- 访问:curl localhost:8081 获取返回信息!(https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/27/095835duqzx9v7axwnnmiz.png)## 2.4、系统验证- 访问前端界面并设置后端服务地址!(https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/27/101227b9u0h1gypoepbpb0.png)- 登录系统!(https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/27/101346izcr9dintfpebm5v.png)---# 3、容器化部署!(https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/27/101949hlgttvj9p3usdtjl.png)## 3.1、前端容器制作及部署- 新建文件夹存放构建镜像需要的静态资源、配置文件、dockfile等!(https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/27/103810a3dm6cahgdwpoghp.png)- dockerfile 内容如下:```shellFROM centosRUN yum intsall nginx -yCOPY nginx.conf /etc/nginx/nginx.confCOPY dist /root/distENTRYPOINT ["nginx","-g","daemon off ;"]```- 构建镜像,在当前目录下执行以下命令```shelldocker build -t front:v1 . //构建镜像```!(https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/27/11432765ca1s1je1l0ordu.png)```shelldocker images //查看镜像```!(https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/27/114456u0al7ppntczqnece.png)- 运行镜像```shelldocker run -it --name front -p 80:80 -d front:v1```!(https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/27/114834yydi0zulrlqs0bbm.png)## 3.2、后端容器制作及部署- 新建文件夹存放构建镜像需要的jar包、配置文件、dockfile等!(https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/27/115653gd40fb3rimtytgwe.png)- dockerfile 内容如下:```shellFROM centosRUN yum intsall java-1.8.0-openjdk -yCOPY score-system-1.0-SNAPSHOT.jar /root/CMD java -jar /root/score-system-1.0-SNAPSHOT.jar --spring.profiles.active=dev```- 构建镜像,在当前目录下执行以下命令```shelldocker build -t javajob:v1 . //构建镜像``````shelldocker images //查看镜像```!(https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/27/142635sgge3jxnpapq0vxl.png)- 运行镜像```shelldocker run -e MYSQLADDR='实际部署数据库的主机IP' -it --name javajob -p 8080:8081 -d javajob:v1```!(https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/27/143027lbkcmyromq2uw0br.png)## 3.3、系统验证- 访问前端界面并设置后端服务地址!(https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/27/143500byzw2pvungiwgmay.png)- 登录系统!(https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/27/143745ltk5opxv5n4ebrpf.png)---# 4、华为云CCE部署## 4.1、镜像上传华为云SWR!(https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/29/194450k1u2jmw1jtfh5bzg.png)- 镜像上传-step1 连接华为云镜像服务!(https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/27/145313jfqkxabxns7bjfgd.png)- 镜像上传-step2 本地镜像重新打标签!(https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/27/145619i9tabk0lvoo6w0ac.png)- 镜像上传-step3 本地镜像上传!(https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/27/1458591kyb4pg3jhesuweb.png)- 参考:https://support.huaweicloud.com/usermanual-swr/swr_01_0011.html- 查看swr中的镜像!(https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/27/150500qd4s6aa8ocwzfgrn.png)## 4.2、华为云CCE部署镜像### 4.2.1、购买华为云CCE!(https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/27/151336nnotvqxbtdbehxjy.png)- 参考链接:[https://support.huaweicloud.com/usermanual-cce/cce_01_0028.html](https://support.huaweicloud.com/usermanual-cce/cce_01_0028.html)### 4.2.2、创建MySQL工作负载- 设置数据库配置项 configmap(初始化脚本)!(https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/27/153535t0vrnxbqnjkxgxgn.png)- 设置数据库秘钥 Secert!(https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/27/1540138rdsm7ieiib1vunr.png)- 创建有状态工作负载MySQL-step1-工作负载信息!(https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/27/154235saczzipyglni8qam.png)- 创建有状态工作负载MySQL-step2-容器设置1.开源镜像站选择MySQL 版本号为 8.0!(https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/27/154425esmcsetdwg6rcnkx.png)2.环境变量导入设置好的Secret!(https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/27/154730kt7nvs6dpdnozc0u.png)3.configmap挂载到容器目录/docker-entrypoint-initdb.d!(https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/27/154920iwuisvtdgde3qqsk.png)- 创建有状态工作负载MySQL-step3-工作负载访问设置!(https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/27/155603vcrjsyhs9ehmwhsi.png)- 创建有状态工作负载MySQL-step4-高级设置默认即可,点击创建### 4.2.3、创建Javajob工作负载- 创建无状态工作负载Javajob-step1-工作负载基本信息!(https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/27/1613232invu9oev1ig79oc.png)- 创建无状态工作负载Javajob-step2-容器设置1.选择我的镜像 test-java 版本号V1!(https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/27/161559vdbtzbhfpeddufz0.png)2.环境变量设置 MYSQLADDR!(https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/29/1608405u3lhimch0nkrxll.png)!(https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/27/161936ukbnnbi9kdwelmhn.png)- 创建无状态工作负载Javajob-step3-工作负载访问设置!(https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/27/1621085uj5hcbuenqkznuw.png)- 创建无状态工作负载Javajob-step4-高级设置默认即可,点击创建- 查看javajob负载并访问服务!(https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/29/141322qwzo34avdpz2a8ll.png)!(https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/29/141349jxnw7imq3dyglrwi.png)### 4.2.4、创建front工作负载- 创建无状态工作负载front-step1-工作负载基本信息!(https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/29/141618fa0lsiqqnbboha1b.png)- 创建无状态工作负载front-step2-容器设置1.选择我的镜像 test-front 版本号V1!(https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/29/141831xcou7jgjg5arvn4h.png)- 创建无状态工作负载front-step3-工作负载访问设置***由于当前负载起了两个实例,可以通过负载均衡方式进行访问***!(https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/29/142305ulgirv54rqrmyilx.png)!(https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/29/144012cdfviuoazi9uambp.png)- 创建无状态工作负载front-step4-高级设置默认即可,点击创建- 查看front负载并访问服务!(https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/29/142841riyzs4bv4ncafygp.png)!(https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/29/143537ksef0rlpe83mkf7k.png)## 4.3、系统验证- 访问前端界面并设置后端服务地址!(https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/29/144331off7udyiturljb1t.png)- 登录系统!(https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/29/144435wgoa6rvtswjde4ok.png)---# 5、CCE helm模板部署!(https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/29/1942448wsmau2eyyzikpn7.png)## 5.1、获取配置文件以及负载的yaml文件- 负载yaml文件获取1、点击编辑yaml文件并下载获取!(https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/29/144850ejtlldznfbxmwlqw.png)- 获取配置项configmap配置项yaml文件1、点击编辑yaml文件并下载获取!(https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/29/145305w88iuf7wnuozhkfr.png)- 获取秘钥Secrect配置项yaml文件!(https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/29/145428e1wg19cnhpzmqsb3.png)- yaml 文件汇总!(https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/29/145820atforhb1cfvs0kyt.png)- 避免后续冲突删除掉yaml文件中的 resourceVersion 字段## 5.2、基于服务器安装helm- 下载代码包```shellwget https://get.helm.sh/helm-v3.0.2-linux-amd64.tar.gz```- 解压安装包```shelltar –zxvf helm-v3.0.2-linux-amd64.tar.gz```shell- 复制helm文件到bin目录```shellcp linux-amd64/helm /usr/local/bin/```- helm version查看```shellhelm version```## 5.3、基于helm chart模型打包- helm创建chart模型```shellhelm create score-chart```- yaml 文件上传到 score-chart/templates!(https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/29/165727ry19hwhjnzt4q3vw.png)- helm 打包模型```shellhelm package socre-chart```!(https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/29/152901abnbl36ueew0xqs9.png)## 5.4、上传至华为云CCE- 将打包好的文件上传华为云CCE!(https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/29/153229jfkdzyfp8p4vuu0u.png)## 5.5、一键部署到华为云CCE**注意:安装前请删除工作负载、service、Configmap、Secret**- 点击模板中的安装按钮进入到配置界面!(https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/29/153449uitauy0di2jankvj.png)- 配置完成点击自定义安装,提交!(https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/29/153844torslzkocsbqi86i.png)## 5.6、系统验证- 访问前端界面并设置后端服务地址!(https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/29/1600481axlnu6wzqjh282c.png)- 登录系统!(https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/29/144435wgoa6rvtswjde4ok.png)
  • [优秀博文] 性能提升100倍!GaussDB(for MySQL)近数据处理(NDP)解锁查询新姿势
    业务增长对数据库吞吐量和响应能力提出新挑战随着企业和政府机构将其应用程序迁移到云端,对基于云的数据库即服务(DBaaS)产品的需求也在迅速增长。传统上的DBaaS产品,是云服务提供商基于现有的数据库软件本身,将常规数据库部署在云端虚拟机上,使用的是本地或者云存储。这种方法易于实施,但是未能提供足够的性能和可扩展性,而且由于需要复制数据,存储成本也很高。为了应对这些挑战,云服务提供商开始构建新的云原生关系数据库系统,专门为云基础架构设计,通常采用将计算和存储分离到独立扩展的分布式层的设计。这种方法具有多种优势,包括数据库存储的自动扩展、按使用付费功能、跨多个AZ部署的高可靠性以及故障快速切换和恢复。这些云原生设计还有助于减少只读副本的数据更新时延,并提高硬件共享和可扩展性。华为云数据库GaussDB(for MySQL),正是具备上述优势的一款云原生分布式数据库。由于计算和存储节点通过网络通信,网络带宽和延迟往往成为瓶颈。为了克服这一挑战,GaussDB(for MySQL)通过从数据库节点中去除写页面的操作并将检查点操作向下推送到存储节点,以优化与写入相关的网络流量。GaussDB(for MySQL)数据库节点向存储节点发送REDO日志,而不是数据页。因为REDO日志(记录对数据页的修改)通常比修改的数据页小得多, 所以这种方法减少了网络流量。存储节点(也称为页面存储)能够根据REDO日志构建数据库页面,并可以响应数据库节点的请求,将页面返回到数据库节点。在传统数据库中,SQL执行引擎从存储中获取数据,并执行包括投影、谓词计算和聚合在内的步骤。对于经常涉及大型表扫描的分析查询,SQL执行引擎必须从存储中读取大量数据页。当存储节点与计算分离,通过网络通讯时,大表扫描会转化为增加的网络流量。一个典型的例子是对一个非常大的表进行计数查询,查询对象表的所有页面必须从页面存储池(Page stores)发送到要计数的数据库节点,之后,数据库节点将丢弃这些页面中的大部分,因为缓冲区池不能装载这么多数据页,这是对网络带宽资源的浪费。华为云创新的NDP(Near Data Processing,近数据处理,简称NDP)方案解决了这一问题。  GaussDB(for MySQL)近数据处理(NDP)详解 NDP的设计思路是避免在分布式系统中移动数据,并让数据处理在其所存储的地方进行。在云原生数据库中,存储节点通常由大量性能强大的服务器组成,这些存储节点上的CPU资源经常利用率较低,这就为近数据处理(NDP)提供了一个绝佳的机会。GaussDB(for MySQL)的NDP功能将选定的SQL操作下推到页面存储中,页面存储过滤掉不必要的数据,只将匹配的数据子集返回给数据库节点进一步处理。例如,要处理计数查询,页数据存储可以计数行,并将计数而不是实际数据页返回到数据库节点。这样就避免了大量的网络流量,使用此技术也提升了查询响应时间。GaussDB(for MySQL)可以将三种SQL操作推送到页面存储:列投影、谓词计算和聚合。列投影:页面存储通过仅保留查询所需的列并丢弃其余列,从而减少行的长度。谓词计算:页数据存储仅保留满足谓词的行,并丢弃不满足谓词的行。聚合:页面根据查询中聚合函数的要求,将多行聚合到单行中,并丢弃原始行。这三种SQL操作可以以任何组合出现在NDP中。例如,NDP操作可能仅包含列投影,也可能包含所有三个SQL操作。让我们看看一个示例SQL查询:sele ctsum(salary)from workerwhere age< 40 andjoin_date>= date ‘2010-01-01’ andjoin_date< date ‘2010-01-01’ + interval ‘1’ year对于“worker”表中的每一行,页面存储计算谓词“age < 40 and join_date >= date‘2010-01-01’ and join_date < date ‘2010-01-01’ + interval ‘1’ year”。如果行不满足谓词,则将立即丢弃。如果该行满足谓词,则将其聚合到sum(salary)值中,并丢弃原始行。如果页数据存储无法聚合行(由于某些内部处理要求),它仍然可以从行投影三列(salary, age, and join_date),并生成更窄的行。此后,原始行将被丢弃。最后,将一个显著减少的数据集返回到数据库节点。GaussDB (for MySQL)的 NDP特性架构如下图所示。数据库节点向页面存储发送NDP请求(请注意,通常有多个页面存储服务于每个数据库节点),为了降低IOPS(每秒IO数),将多个页面分组为一个NDP请求(批量页面读取请求),页面存储中的NDP运算符可以执行上述三种SQL操作,并将较小的数据集返回到数据库节点。数据库节点可以是主节点,也可以是只读副本节点,两者都支持NDP。NDP中的批处理读取和并行处理 在云原生数据库系统中,即使数据库节点和页面存储通过高速RDMA网络连接,但与传统数据库中的本地存储相比,延迟仍然很高,通过降低网络IOPS和并行执行多个IO可以减少延迟带来的负面影响。在NDP功能中,我们实现了“批处理读取”的概念。这个想法是在B+树叶数据节点中向前看,并将相邻的叶数据节点分组到一个批处理请求中,而这些B+树叶数据节点是正在进行近数据处理的查询所需要的。批量读取是降低IOPS的一个绝佳方法。如果我们在每个请求中发送一个页面,那么IO的数量将等于页面的数量。如果我们将1000个页面分组到一个请求中,IO的数量将减少1000倍。下图阐述了批处理读取的工作原理。数据库节点发送批量请求,SAL(存储抽象层)标识页面所在的页面存储,并将批处理读取拆分为多个子读取:每个页面存储一个子读取。然后,子读取将并行发送到页面存储。使用这种方法,可以同时使用多个页面存储来服务NDP请求。页面存储接收包含多个页面的NDP请求,而这些页面之间没有依赖关系,因此可以使用NDP以任何顺序处理。这样既提供了灵活性,又使页面存储能够将页面分配给多个线程并行处理。GaussDB(for MySQL)使用增强的SQL优化器自动判定NDP是否可能对特定查询有利。如果有利,它将自动启用NDP,SQL优化器查看扫描大小等因素,以及SQL运算如果推送到页面存储,是否可以显著降低数据集大小。一般来说,NDP并不有利于小扫描,例如,当可以用索引减少要扫描的数据量时。同时,NDP也有自己的资源诉求。在数据库节点中,NDP主要占用内存资源,因为它需要内存来保存NDP页面。在GaussDB(for MySQL)数据库节点中,NDP页面与常规页面共享相同的内存池(又名缓冲区池),没有专门为NDP保留的内存。这种方法的优点是,当系统中没有NDP时,整个缓冲池可用于常规处理。但是页面内存一旦被NDP操作占用,在NDP操作完成之前,不能被其他查询使用。这就是为什么必须控制分配的NDP页数,以避免常规页被剥夺内存。NDPQ(NDP+PQ),释放查询极致性能,定义分布式数据库新方向并行查询(PQ)是商业关系型数据库系统的事实标准,为分析工作负载提供高性能支持。PQ通常采用“leader-worker”设计,要处理的表被划分为非重叠的数据块,并把这些数据块分配给多个worker处理。每个worker都会产生中间结果,leader会累积这些结果并做进一步处理,以产生最终结果。PQ在数据库节点中提供并行性,利用多个CPU并发处理查询。华为云GaussDB(for MySQL)具备PQ特性,而且NDP和PQ可以协同工作,进一步提高查询性能。可以为PQ worker启用NDP。PQ worker执行的一些SQL操作可以推送到页面存储区,通过将NDP和PQ结合,我们在GaussDB系统的数据库节点、多个页面存储之间和一个页面存储内部这三层激活了并行处理的魔力,进一步提高查询性能。如何启用NDP?GaussDB(for MySQL)会自动判断NDP是否有助于查询,并为查询启用NDP。用户需要做的就是打开系统变量“ndp_mode”。ndp_mode可以为整个数据库打开,也可以仅为当前会话打开。要为整个数据库打开ndp_mode,请在“set”命令中添加“global”关键字,如下所示:set[global] ndp_mode = on您可以使用“explain”查询以了解是否为查询启用了NDP。例如,以下是树格式的TPC-H查询14的解释输出。为LINEITEM表扫描启用了NDP,投影和谓词计算都会推送到数据页面存储区。此外,还为LINEITEM表扫描启用了PQ。下面是另一个例子,在LINEITEM表上的计数查询,我们将此查询命名为Q002。谓词计算和聚合都会推送到页面存储区,PQ也已启用。下面我们通过在100GB的TPC-H数据库上运行多个查询,展示NDP和PQ如何提升查询效率。测试环境:上海-1区域的华为云GuassDB (for MySQL)CPU:16个,内存:64GB,缓冲池大小:20GB将join_buffer_size 和 sort_buffer_size增加到1MB,因为这两个缓冲区对于哈希连接和排序的性能很重要PQ并发度设置为16下图的y轴显示查询响应时间加速因子。加速因子定义:如果原始查询时间为100秒,而启用PQ后,查询时间变为50秒,则加速因子应为2。从下面的测试结果可以看出, NDP+PQ将Q002加速了100多倍。NDP将数据库节点和存储节点解耦,这一特性将成为未来云原生数据库系统的一个标准。大型扫描在OLAP工作负载中很常见,NDP将大大提升此类操作的效率。综上所述,NDP可以:减少网络带宽的使用量降低网络IOPS同时使用多个页数据存储来实现NDP并行处理提高需要大表扫描的SQL查询的性能降低数据库节点的CPU使用率,使数据库节点能够支持更多的OLTP工作负载
  • [知识分享] 存算分离架构的高斯Redis,用强一致提供可靠保障
    >摘要:其实开源Redis的弱一致性已经不满足很多应用场景的诉求。怎么,不信?本文分享自华为云社区[《华为云企业级Redis揭秘第15期:Redis为什么需要强一致?》](https://bbs.huaweicloud.com/blogs/312935?utm_source=csdn&utm_medium=bbs-ex&utm_campaign=database&utm_content=content),作者: GaussDB 数据库。有人说,开源Redis的最终一致性已经能满足大部分应用场景,也有人说,多副本的强一致代价太大,没有必要实现。要笔者说,其实弱一致性已经不满足很多应用场景的诉求。怎么,不信?请听笔者娓娓道来。# 1. 不一致带来的困扰**1.1 秒杀变秒崩**分享一个电商秒杀活动中限流器的例子,在电商的秒杀活动中,为了扛住前端对数据库的超大流量冲击,一般使用两种方案来保护系统,一个是缓存,另一个则是限流。缓存这个容易实现,只需要在数据库前加一层缓存服务器,而对于限流来说,最简单的可以使用Redis的计数器来实现限流功能。具体来说,假设我们需要对某个接口限定流量为5000QPS,即每秒钟访问的次数不能超过5000。那么我们可以这么做:在一开始的时候设置一个计数器counter为5000,并且过期时间为1s,即1s后计数器失效。每当一个请求过来的时候,counter的值减1,判断当前counter的值是否等于0,如果等于,则说明请求次数过多,直接拒绝请求。如果counter计数器不存在,则重置计数器为5000,开始新一秒的接口限流,注意并发情况下计数器需要加锁。正常情况下,这种方案不会出现问题,但是针对这种秒杀活动,不怕一万,就怕万一,万一Redis突然宕机怎么办,那岂不是限流器形同虚设,所有流量全部涌向后端的数据库,瞬间系统崩溃。此时聪明的你肯定会想到,给Redis搞一个备用服务器不就解决了,主服务器如果宕机,备用服务器顶上。没错,这种方案是对的,但是只正确了一半。为什么呢,如下图所示。当给Redis配置从服务器之后,如果主服务器出现宕机,可以立刻切换到从服务器,但是由于开源Redis主从服务器之间的数据是异步复制的,如果网络不畅,经常发生主从数据不一致,如果此时主服务器发生宕机,切换到从服务器之后,因为限流器的判断出错,流量压力很容易超出阈值,一下子涌向数据库服务器,同样会造成系统崩溃。仔细探究这个问题产生,根因是在于开源Redis的一致性机制为弱一致性,在某些时间内,主从副本数据不一致。而要彻底解决这个问题,只有真正的强一致才能解决。**1.2 难以维护的MySQL组件**其实不止Redis,就连大名鼎鼎的MySQL也逃不过弱一致的坑。MySQL的部署中,为了保证高可用性,主从热备份是MySQL常用的部署方式。但是如果发生故障时,仅仅靠MySQL自身的同步机制,是无法保证主库和从库之前的数据一致的,于是出现了重要的辅助组件MHA(Master High Availability),它的部署方式如下:!(https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/27/105205p4vfwitamwiquitg.png)MHA由管理服务和Node服务组成,Node服务部署在每个MySQL节点上,MHA组件负责让MySQL的从库尽可能的追平主库,提供主从一致的状态。发生故障进行主从切换时,Manager首先为从库补充落后的数据,然后再将用户访问切换到从库,这个过程可能长达数十秒。MHA的部署和维护都相当复杂,如未能顺利执行故障切换或发生数据丢失,运维面临的场面都将很棘手。其实运维同学何尝不希望手中的系统稳定运行呢?要是数据库自身能提供强一致保障,何苦再依赖复杂的辅助组件!# 2. 什么是强一致上一节中笔者介绍了弱一致带来各种问题,接下来这一节具体介绍下什么是强一致。在“分布式系统”和“数据库”这两个领域中,一致性都是重要概念,但它表达的内容却并不相同。对于分布式系统而言,一致性是在探讨当系统内的一份逻辑数据存在多个物理的数据副本时,对其执行读写操作会产生什么样的结果,这也符合 CAP 理论对一致性的表述。而在数据库领域,“一致性”与事务密切相关,又进一步细化到 ACID 四个方面。因此,当我们谈论分布式数据库的一致性时,实质上是在谈论事务一致性和数据一致性两个方面。**2.1 事务一致性**事务的一致性主要是指的事务的ACID,分别是原子性、一致性、隔离性和持久性,如下图所示:!(https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/27/105235mfrof7gbprhdpano.png)- 原子性:事务中的所有变更要么全部发生,要么一个也不发生,通过日志技术实现;- 一致性:事务要保持数据的完整性,它是应用程序的属性,依赖原子性和隔离属性来实现;- 隔离性:多事务并行执行所得到的结果,与串行执行(一个接一个)完全相同,通过并发控制技术来实现;- 持久性:一旦事务提交,它对数据的改变将被永久保留,不应受到任何系统故障的影响,通过日志技术实现。**2.2 数据一致性**在分布式系统中,为了避免网络不可靠带来的问题,通常会存储多个数据副本,逻辑上的一份数据存储在多个物理副本上,自然带来了数据一致性问题。**(1)状态视角**从状态的视角来看,任何变更操作后,数据只有两种状态,所有副本一致或者不一致。在某些条件下,不一致的状态是暂时,还会转换到一致的状态,而那些永远不一致的情况几乎不会去讨论,所以习惯上大家会把不一致称为“弱一致”。相对的,一致就叫做“强一致”了。以一个一主两备的MySQL集群为例,“强一致”的交互过程如下:!(https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/27/105303hhyvfrv29gtfnhud.png)在该模式下,主库与备库同步 binlog 时,主库只有在收到两个备库的成功响应后,才能够向客户端反馈提交成功。显然,用户获得响应时,主库和备库的数据副本已经达成一致,所以后续的读操作肯定是没有问题的,这就是状态视角的“强一致”的模型。但是状态视角的这种强一致副作用很大:第一个是性能很差,主库必须要等备库1和备库2成功返回后才能返回;第二个是可用性问题,如果主备节点很多,出现故障的概率非常高。因此,状态视角的强一致代价非常大,所以很少使用。**(2)操作视角**状态视角的强一致降低了系统的可用性,因此很多系统选择状态视角的弱一致性模型,通过额外的算法(如Raft、Paxos)在不保证所有节点状态的一致的情况下,来保证操作视角的一致性,同时提高了系统的可用性。通过加入一些限定条件,衍生出了若干种一致性模型:!(https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/27/105328zsof87lfgcelgayz.png)- 线性一致性:操作视角实现真正的强一致- 顺序一致性:一致性强度弱于线性一致性- 因果一致性:一致性强度弱于顺序一致性- 写后读一致性:一致性强度相当,弱于因果一致性# 3. 强一致的刚需场景上一节我们介绍了什么是强一致,这一节我们介绍下强一致的典型应用场景。在常见的互联网应用中,如果数据库服务器只部署在单个节点上,那么应用程序所有的读和写都只会访问单个节点,一份逻辑数据在物理上也只有一份,这种场景下就谈不上强一致的问题。但是随着系统中业务访问量的增加,如果是单机部署数据库,就会导致I/O访问频率过高,数据库就会成为系统的瓶颈。此时,为了降低单机磁盘的I/O访问频率,提高单个机器的I/O性能,通常会增加多个数据存储节点,形成一主一从或者一主多重的架构,此时,我们可以将负载分布在多个从节点上,一方面可以实现读写分离,写请求访问主库,读请求访问备库。另一方面,还可以在主库如果出现宕机的情况下进行主备切换,增强系统的稳定性。在以上两个场景中,由于一份逻辑数据在物理上有多个副本,那么如何保证多个副本之间的数据一致呢,这就是强一致需要解决的问题。**3.1 读写分离场景**以关系型数据库MySQL为例,典型的部署方案为一主两从三节点方案,主节点负责处理写操作,两个从节处理读操作,分担主库的压力,如下图所示:!(https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/27/105408qahmi448cckjj8il.png)此时,如果系统没有实现强一致,就有可能会遇到执行完写操作后,立刻去读,然后发现读不到或者读到旧状态的尴尬场景,比如操作顺序为以下操作:- 客户端首先通过代理向主节点 Master 进行了写入操作,此时由于没有实现强一致,写操作写完后立即返回;- 紧接着第二步去从节点 Slave A 执行读操作,此时Master和Slave A之间的同步还未完成,系统处于非强一致的状态,所以第二步的读操作读取到了旧状态。可以看出,在一主多备读写分离的场景下,如果想要保证写入和读取操作的准确无误,系统实现强一致是非常重要的。**3.2 主备切换场景**主备切换的场景也需要强一致来保证,以目前业内使用最广泛的内存数据库Redis为例,Redis的主从同步如下图所示:!(https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/27/105435muypaefrtkyetier.png)从上图可以看出,当Redis客户端向Master服务器发送一条命令时,Master服务器立即回复客户端命令的执行结果,并不等待命令同步到从服务器再回复,也就是说Redis的主从同步其实是异步的。由于Master节点存在宕机的可能,在这种情况下,如果在Master收到命令但是还没同步到Slave服务器时发生了宕机,Redis就会发生主备切换,然后此时Master服务器和Slave服务器的数据还没有同步,就导致了数据丢失的情况。可见,开源Redis弱一致性本身的缺陷和不足,而要解决这个问题,必须实现强一致性才能解决。# 4. 高斯Redis强一致由于开源的Redis不具备强一致的特性,导致开源Redis的应用也受到了诸多限制,为了解决开源Redis弱一致的问题,GaussDB(for Redis)应运而生。GaussDB(for Redis) 是华为云数据库团队自主研发的兼容Redis协议的云原生数据库,彻底解决了开源Redis一致性问题带来的痛点。**4.1 高斯Redis架构**高斯Redis的整体架构如下:!(https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/27/105502othnq4czrw5lgcrx.png)相比开源Redis,高斯Redis采用存算分离的设计思想,计算层负责计算和协议的处理,聚焦服务。而存储层负责副本管理、扩缩容等处理,聚焦数据本身。高斯Redis的优势如下:- 数据强一致:存储层使用分布式存储DFV,轻松实现了3副本强一致;- 超可用:N个节点的集群最多可以挂掉N – 1个节点;- 低成本:数据采用磁盘存储并且进行压缩,每GB的成本不到开源Redis的十分之一;- 秒扩容:计算层仅需修改路由映射,无需数据搬迁,实现秒级扩容;- 自动备份:高斯Redis可以实现MVCC快照备份和定期自动备份。**4.2 高斯Redis强一致的实现**开源Redis和高斯Redis的架构如下图所示:!(https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/27/105521nphlyi98gmr6xd4z.png)# 5. 结语我们在做架构设计的时候,其实很多场景都隐藏着强一致的诉求。如朋友圈这类应用,如果没有实现强一致,朋友圈的评论很容易乱序。再比如限流器的场景,如果没有强一致的保证,也极容易造成数据库的崩溃。因此,必须在系统设计之初就认识到强一致的重要性,才能设计出更加稳定和可靠的系统。而高斯Redis基于存算分离的架构设计,实现了数据的强一致,为业务的稳定可靠提供了超强保障。
  • [交流吐槽] 数据库未来发展趋势
    新应用驱动的数据库(5G、车、终端云)从数据库诞生开始,新的应用领域就不断为数据库带来新诉求,例如巨大的数据量、更短的数据处理时间、更高的可靠性、新的数据类型,而数据库也在满足这些新的诉求的同时得到不断的发展与更新。一、 及其相关应用对数据库系统带来的挑战与机遇从历史上看,通信技术对数据库发展起到了至关重要的作用:1980—1990年,TCP/IP网络协议出现,大中型企业内部开始规模部署局域网,甚至通过卫星技术将地域上分散的局域网互联互通,这推动了企业IT系统从主机时代走向客户端/服务端(Client/Server,C/S)时代。Oracle数据库抓住C/S架构下数据库系统需要应对更高并发、更多客户端连接的挑战,加大C/S架构数据库研发,在数据库市场上取得了决定性胜利,市场份额甚至接近当时企业IT 霸主IBM 的DB2数据库。上分散的局域网互联互通,这推动了企业IT系统从主机时代走向客户端/服务端(Client/Server,C/S)时代。Oracle数据库抓住C/S架构下数据库系统需要应对更高并发、更多客户端连接的挑战,加大C/S架构数据库研发,在数据库市场上取得了决定性胜利,市场份额甚至接近当时企业IT 霸主IBM 的DB2数据库。1990—2000年,互联网和万维网普及,对运营电子商务和在线购物公司的数据库系统提出更为艰巨的挑战,单一服务器无法满足运营公司对处理能力、数据容量等的诉求,且在线业务对服务的持续可用性也提出了更高的要求。Oracle公司抓住市场机会,推出了Oracle RAC集群数据库,在这一时期最终成为数据库市场的老大。2000年至今,移动互联网和智能手机兴起,用户从过去固定时间和地点接入互联网,到随时随地进行网络社交活动、在线支付和购物,即使集群数据库系统也无法满足性能、扩展性和服务可用性的诉求,必须从过去垂直扩展Scale-up(通过升级硬件配置提升性能)走向横向扩展Scale-out(通过增加新的服务器硬件提升系统整体性能)。分布式数据库系统从研究走入商用,这一时期的典型代表是谷歌公司于2012年发表的论文中阐述的Google Spanner分布式数据库系统。维基百科对5G(5th generation mobile networks or 5th generation wireless systems,第五代移动通信技术)的定义: 是最新一代蜂窝移动通信技术,是4G(LTEA、WiMAX-A)系统后的延伸。5G 的性能目标是具有高数据传输速率、减少延迟、节省能源、降低成本、提高系统容量和连接大规模设备。5G作为最新移动通信技术,其高带宽(吉比特每秒级)、极低延迟(毫秒级)的特征使其主要潜在应用于AR(Augmented Reality,增强现实)/VR(Virtual Reality,虚拟现实)、云游戏、实时视频通信、无人机、工业互联网等。这将对数据库系统带来新的挑战,体现在:终端设备到云端网络延迟通常上百毫秒,不利于充分利用5G 的低延迟特性,考虑在终端设备与云端之间部署中小型计算中心,这种部署称为边缘计算。如何将计算和数据在终端-边缘-云之间进行高效的协同,是新型数据库系统的研究方向。5G网络下,视频和计算机视觉相关应用将成为杀手级应用,如何解决图像的实时查询和分析等问题,也会成为新型数据库系统的热点话题。二、自动驾驶汽车对数据库系统带来的挑战与机遇根据维基百科对自动驾驶汽车的定义: 自动驾驶汽车能通过雷达、光学雷达、GPS(Global Positioning System,全球定位系统)及计算机视觉等技术感测其环境。先进的控制系统能将感测资料转换成适当的导航道路以及障碍与相关标志。根据定义,自动驾驶汽车能透过感测输入的资料,更新其地图信息,让交通工具可以持续追踪其位置。当前业界研发自动驾驶需要采集大量数据,包含来自车载传感器的各类时序数据(上百种)、激光雷达的点云(Point Cloud)数据、毫米波雷达数据、GPS定位数据、车载摄像头的视频数据等。自动驾驶汽车会产生海量数据,厂商会采集并在云端存储某些车辆数据,用于研发。典型数据量如下:600GB/h-radar;140GB/h-lidar;3.2TB/h-camera;40GB/h-sonar;6GB/h-CANbus。厂商一般在云端需要存储和管理数十PB(1PB=1000000GB)甚至更多数据量,如何高效地存储、管理和查询这些海量、异构、多模的数据,是当前自动驾驶领域面临的严峻挑战。三、终端云对数据库系统带来的挑战与机遇智能手机厂家为了给用户提供优良的体验,一般都构筑终端云服务,为用户提供云存储备份(如相册、短信、通讯录等),这极大方便了用户更换手机,即使用户手机丢失,但手机中数据无损。同时,如何保证用户数据隐私和安全是一个重大的技术挑战。2016年欧盟专门为数据隐私和安全提出新的法案《通用数据保护条例》(General Data Protection Regulation,GDPR,欧盟法规编号为(EU) 2016/679),是在欧盟法律中对所有欧盟个人关于数据保护和隐私的规范,涉及了欧洲境外的个人资料出口。GDPR主要目标为取回公民以及居民对于个人资料的控制,以及为了国际商务而简化在欧盟内的统一规范。当前数据库缺乏原生对用户数据隐私和安全的保障机制,这对终端云数据库提出新的挑战,例如:数据主体(Data Subject)有被遗忘权(Right to be Forgotten),即可以要求控制资料的一方,删除所有个人资料的任何连接、副本或复制品。数据库系统如何保证数据主体所产生的数据按照要求,正确、一致、稳妥地进行删除,这涉及数据主体所产生数据在不同子系统中流转的跟踪、所产生数据副本的管控与追溯、存储介质的擦除等难题。GDPR要求执行安全防护(Security Safeguards Principle),即个人资料应受到合理的安全保护,以防止丢失或未经授权的访问、破坏、使用、修改或披露数据等风险。这对数据库系统提出数据需要在存储、传输和计算中均保证安全、可信,不因为被攻击而产生数据泄露等难题。
  • [热门活动] 【HCIA职业认证训练营:“云服务”的成长与“我”的成长】
    “华为云服务课程的成长”    2017年   云服务课程诞生了HCIA 1.0,那时候的华为云还处于萌芽期,基础资源的产品已经有了,产品功能还没那么完善。                  一、公有云计算部分(ECS,IMS,AS,CCE)                 二、公有云存储部分(EVS,CBR,OBS,SFS)                 三、公有云网络(VPC,ELB)                 四、公有云其他服务( 安全,监控,云数据库,云桌面)  2019年   云服务课程衍生了HCIA 2.0,借助于2018年云大物智的一个节点,云服务的课程有了一个新的变化,课程架构。                 一、初始华为公有云                 二、计算云服务(ECS,IMS,AS)                 三、存储云服务(EVS,CBR,OBS,SFS)                 四、网络云服务(VPC,ELB,DC,VPN)                 五、华为云服务( 安全,监控,云数据库,EI,API)  2020年   云服务HCIA 2.2,课程再变化                  一、初始华为公有云                 二、计算云服务(ECS,AS,IMS,BMS,容器)                 三、存储云服务(EVS,OBS,SFS,CBR)                 四、网络云服务(VPC,ELB,DC,VPN,Peering)                 五、管理与部署云服务( IAM,CES,CTS,LTS)                 六、华为云服务( 安全,云数据库,CDN&云视频,创新EI)  2021年   云服务HCIA 3,0课程再变化,与云计算的基础(计算、网络、存储虚拟化)再结合华为发布的擎天架构+分布式云操作系统瑶光,把云运维的职位工作内容再描述,奠定一个好的基础,后续进行HCIP云运维,云架构,云开发;HCIE云架构,云开发的行业人才培养输出。                 一、云计算基础                 二、华为云介绍                 三、计算云服务                 四、网络云服务                 五、存储云服务                 六、更多云服务(安全,数据库,大数据,EI)                七、华为云运维基础   “我的成长”        华为云学院,开过很多期训练营,像大前端,Java开发,AI等,以及同期的大数据二期全栈,物联网全栈,数据库全栈;重点在本次学习的华为云HCIA-Cloud Service V3.0职业认证训练营,真的是给有认证需求的在校大学生、云计算初学者、开发者、云服务工程师、相关华为云伙伴等人员群体,提供了一个很好的学习平台,从预热到开始学习课程以及结营考试,报名的学员目前也有2400+,通过免费的沙箱实验室和一些场景化的优惠微认证,需要学习啥,学习计划都已经拟定好了,跟着群里的小助手进行循序渐进的学习。       这个云服务的训练营也是我一直所期待的,因此我跟着计划把沙箱实验室做了,虽然沙箱实验室是有很详细的操作步骤,但是我们操作的时候难免还是会有很多问题,比如安全组选错误,界面看不懂不知道点哪里,这些等等问题,在群里都有小助手耐心回复解答,因为在实验上也是有很多细节的,这个是针对我们自己的细心思考有一个好的帮助,然后进行微认证,我考第一次直接考试挂了,差两分,然后再回过来仔细看视频,比如playbook这样的描述,再考就通过了,然后就在还未开课期间,针对教材拟好了word的标题式的文档,结合材料开始进行学习,再借助于开课的视频进行做整个文档笔记。开课的视频对我来说是意外的,在以前我学过2.0  看过2.2的公开课,跟这次3.0是不一样的,结构时理论+实验讲解+综合实验讲解,整个学习贯彻思路是很好的,再有比如在网络开始讲的板块,讲课老师先进行一个本地IDC的三层架构划分,然后来讲 运营商  公网,针对存储的IP-SAN, FC-SAN也做了一个解释,并不只是把材料的产品功能一带而过的那种,是会把整个基础资源体系串起来的讲解以及基于传统的优劣势对比。学完以后了解了云计算与云服务的关系,华为云计算,存储,网络,存储,数据库,安全,EI,BigData等产品的介绍,应用场景,功能特性,基础操作;可以自己再掌握linux的基础来搭建一个属于自己的博客或者论坛。在此对于整个HCIA3.0的课程我是给予满分好评。    但是有一个点:其实公开课这样计划学习是好的,有些有一定云服务,云计算基础的学员,会觉得这样太慢了,一天开一章节课,然后结营考试,考虑学习周期性太长,无法完成下来,在这里我想说,好好学习,天天向上!
  • [优秀博文] 华为云企业级Redis揭秘第15期:Redis为什么需要强一致?
    有人说,开源Redis的最终一致性已经能满足大部分应用场景,也有人说,多副本的强一致代价太大,没有必要实现。要笔者说,其实弱一致性已经不满足很多应用场景的诉求。怎么,不信?请听笔者娓娓道来。1.不一致带来的困扰1.1 秒杀变秒崩分享一个电商秒杀活动中限流器的例子,在电商的秒杀活动中,为了扛住前端对数据库的超大流量冲击,一般使用两种方案来保护系统,一个是缓存,另一个则是限流。缓存这个容易实现,只需要在数据库前加一层缓存服务器,而对于限流来说,最简单的可以使用Redis的计数器来实现限流功能。具体来说,假设我们需要对某个接口限定流量为5000QPS,即每秒钟访问的次数不能超过5000。那么我们可以这么做:在一开始的时候设置一个计数器counter为5000,并且过期时间为1s,即1s后计数器失效。每当一个请求过来的时候,counter的值减1,判断当前counter的值是否等于0,如果等于,则说明请求次数过多,直接拒绝请求。如果counter计数器不存在,则重置计数器为5000,开始新一秒的接口限流,注意并发情况下计数器需要加锁。正常情况下,这种方案不会出现问题,但是针对这种秒杀活动,不怕一万,就怕万一,万一Redis突然宕机怎么办,那岂不是限流器形同虚设,所有流量全部涌向后端的数据库,瞬间系统崩溃。此时聪明的你肯定会想到,给Redis搞一个备用服务器不就解决了,主服务器如果宕机,备用服务器顶上。没错,这种方案是对的,但是只正确了一半。为什么呢,如下图所示。当给Redis配置从服务器之后,如果主服务器出现宕机,可以立刻切换到从服务器,但是由于开源Redis主从服务器之间的数据是异步复制的,如果网络不畅,经常发生主从数据不一致,如果此时主服务器发生宕机,切换到从服务器之后,因为限流器的判断出错,流量压力很容易超出阈值,一下子涌向数据库服务器,同样会造成系统崩溃。仔细探究这个问题产生,根因是在于开源Redis的一致性机制为弱一致性,在某些时间内,主从副本数据不一致。而要彻底解决这个问题,只有真正的强一致才能解决。1.2 难以维护的MySQL组件其实不止Redis,就连大名鼎鼎的MySQL也逃不过弱一致的坑。MySQL的部署中,为了保证高可用性,主从热备份是MySQL常用的部署方式。但是如果发生故障时,仅仅靠MySQL自身的同步机制,是无法保证主库和从库之前的数据一致的,于是出现了重要的辅助组件MHA(Master High Availability),它的部署方式如下:MHA由管理服务和Node服务组成,Node服务部署在每个MySQL节点上,MHA组件负责让MySQL的从库尽可能的追平主库,提供主从一致的状态。发生故障进行主从切换时,Manager首先为从库补充落后的数据,然后再将用户访问切换到从库,这个过程可能长达数十秒。MHA的部署和维护都相当复杂,如未能顺利执行故障切换或发生数据丢失,运维面临的场面都将很棘手。其实运维同学何尝不希望手中的系统稳定运行呢?要是数据库自身能提供强一致保障,何苦再依赖复杂的辅助组件!2.什么是强一致上一节中笔者介绍了弱一致带来各种问题,接下来这一节具体介绍下什么是强一致。在“分布式系统”和“数据库”这两个领域中,一致性都是重要概念,但它表达的内容却并不相同。对于分布式系统而言,一致性是在探讨当系统内的一份逻辑数据存在多个物理的数据副本时,对其执行读写操作会产生什么样的结果,这也符合 CAP 理论对一致性的表述。而在数据库领域,“一致性”与事务密切相关,又进一步细化到 ACID 四个方面。因此,当我们谈论分布式数据库的一致性时,实质上是在谈论事务一致性和数据一致性两个方面。2.1 事务一致性事务的一致性主要是指的事务的ACID,分别是原子性、一致性、隔离性和持久性,如下图所示:原子性:事务中的所有变更要么全部发生,要么一个也不发生,通过日志技术实现;一致性:事务要保持数据的完整性,它是应用程序的属性,依赖原子性和隔离属性来实现;隔离性:多事务并行执行所得到的结果,与串行执行(一个接一个)完全相同,通过并发控制技术来实现;持久性:一旦事务提交,它对数据的改变将被永久保留,不应受到任何系统故障的影响,通过日志技术实现。2.2 数据一致性在分布式系统中,为了避免网络不可靠带来的问题,通常会存储多个数据副本,逻辑上的一份数据存储在多个物理副本上,自然带来了数据一致性问题。(1)状态视角从状态的视角来看,任何变更操作后,数据只有两种状态,所有副本一致或者不一致。在某些条件下,不一致的状态是暂时,还会转换到一致的状态,而那些永远不一致的情况几乎不会去讨论,所以习惯上大家会把不一致称为“弱一致”。相对的,一致就叫做“强一致”了。以一个一主两备的MySQL集群为例,“强一致”的交互过程如下:在该模式下,主库与备库同步 binlog 时,主库只有在收到两个备库的成功响应后,才能够向客户端反馈提交成功。显然,用户获得响应时,主库和备库的数据副本已经达成一致,所以后续的读操作肯定是没有问题的,这就是状态视角的“强一致”的模型。但是状态视角的这种强一致副作用很大:第一个是性能很差,主库必须要等备库1和备库2成功返回后才能返回;第二个是可用性问题,如果主备节点很多,出现故障的概率非常高。因此,状态视角的强一致代价非常大,所以很少使用。(2)操作视角状态视角的强一致降低了系统的可用性,因此很多系统选择状态视角的弱一致性模型,通过额外的算法(如Raft、Paxos)在不保证所有节点状态的一致的情况下,来保证操作视角的一致性,同时提高了系统的可用性。通过加入一些限定条件,衍生出了若干种一致性模型:线性一致性:操作视角实现真正的强一致顺序一致性:一致性强度弱于线性一致性因果一致性:一致性强度弱于顺序一致性写后读一致性:一致性强度相当,弱于因果一致性这些一致性模型的介绍参考《高斯Redis与强一致》这篇文章。3.强一致的刚需场景上一节我们介绍了什么是强一致,这一节我们介绍下强一致的典型应用场景。在常见的互联网应用中,如果数据库服务器只部署在单个节点上,那么应用程序所有的读和写都只会访问单个节点,一份逻辑数据在物理上也只有一份,这种场景下就谈不上强一致的问题。但是随着系统中业务访问量的增加,如果是单机部署数据库,就会导致I/O访问频率过高,数据库就会成为系统的瓶颈。此时,为了降低单机磁盘的I/O访问频率,提高单个机器的I/O性能,通常会增加多个数据存储节点,形成一主一从或者一主多重的架构,此时,我们可以将负载分布在多个从节点上,一方面可以实现读写分离,写请求访问主库,读请求访问备库。另一方面,还可以在主库如果出现宕机的情况下进行主备切换,增强系统的稳定性。在以上两个场景中,由于一份逻辑数据在物理上有多个副本,那么如何保证多个副本之间的数据一致呢,这就是强一致需要解决的问题。3.1 读写分离场景以关系型数据库MySQL为例,典型的部署方案为一主两从三节点方案,主节点负责处理写操作,两个从节处理读操作,分担主库的压力,如下图所示:此时,如果系统没有实现强一致,就有可能会遇到执行完写操作后,立刻去读,然后发现读不到或者读到旧状态的尴尬场景,比如操作顺序为以下操作:客户端首先通过代理向主节点 Master 进行了写入操作,此时由于没有实现强一致,写操作写完后立即返回;紧接着第二步去从节点 Slave A 执行读操作,此时Master和Slave A之间的同步还未完成,系统处于非强一致的状态,所以第二步的读操作读取到了旧状态。可以看出,在一主多备读写分离的场景下,如果想要保证写入和读取操作的准确无误,系统实现强一致是非常重要的。3.2 主备切换场景主备切换的场景也需要强一致来保证,以目前业内使用最广泛的内存数据库Redis为例,Redis的主从同步如下图所示:复客户端命令的执行结果,并不等待命令同步到从服务器再回复,也就是说Redis的主从同步其实是异步的。由于Master节点存在宕机的可能,在这种情况下,如果在Master收到命令但是还没同步到Slave服务器时发生了宕机,Redis就会发生主备切换,然后此时Master服务器和Slave服务器的数据还没有同步,就导致了数据丢失的情况。可见,开源Redis弱一致性本身的缺陷和不足,而要解决这个问题,必须实现强一致性才能解决。4.高斯Redis强一致由于开源的Redis不具备强一致的特性,导致开源Redis的应用也受到了诸多限制,为了解决开源Redis弱一致的问题,GaussDB(for Redis)应运而生。GaussDB(for Redis) 是华为云数据库团队自主研发的兼容Redis协议的云原生数据库,彻底解决了开源Redis一致性问题带来的痛点。4.1 高斯Redis架构高斯Redis的整体架构如下:相比开源Redis,高斯Redis采用存算分离的设计思想,计算层负责计算和协议的处理,聚焦服务。而存储层负责副本管理、扩缩容等处理,聚焦数据本身。高斯Redis的优势如下:数据强一致:存储层使用分布式存储DFV,轻松实现了3副本强一致;超可用:N个节点的集群最多可以挂掉N – 1个节点;低成本:数据采用磁盘存储并且进行压缩,每GB的成本不到开源Redis的十分之一;秒扩容:计算层仅需修改路由映射,无需数据搬迁,实现秒级扩容;自动备份:高斯Redis可以实现MVCC快照备份和定期自动备份。4.2 高斯Redis强一致的实现开源Redis和高斯Redis的架构如下图所示:开源Redis或者传统的主从结构如左图所示,如果在读写分离的场景或者主节点出现宕机发生主从切换的时候,都会导致数据不一致的情况。高斯Redis采用存算分离的架构,如右图所示,在存储层DFV的副本管理中采用分布式共识算法实现了3副本的强一致。计算层调用存储层的接口时,如果返回OK,那么即表示存储层已经实现副本强一致的复制。5.结语我们在做架构设计的时候,其实很多场景都隐藏着强一致的诉求。如朋友圈这类应用,如果没有实现强一致,朋友圈的评论很容易乱序。再比如限流器的场景,如果没有强一致的保证,也极容易造成数据库的崩溃。因此,必须在系统设计之初就认识到强一致的重要性,才能设计出更加稳定和可靠的系统。而高斯Redis基于存算分离的架构设计,实现了数据的强一致,为业务的稳定可靠提供了超强保障。6.附录本文作者:华为云数据库GaussDB(for Redis)团队杭州/西安/深圳简历投递:yuwenlong4@huawei.com更多产品信息:GaussDB(for Redis)官网更多技术文章:GaussDB(for Redis)博客
总条数:1627 到第
上滑加载中