• GaussDB(DWS)单语句执行报错ERROR: Failed to send internal begin to Datanodes
    【问题现象】DWS集群业务insert语句产生报错ERROR: Failed to send internal begin to Datanodes dn_6021_6022【问题分析】根据报错语句的线程ID:281401921239248 在1月14日的CN日志中查找,没有发现在报错语句之前的其他记录检查对应的DN日志,在CN报错的相同时间中显示未找到匹配进程​​​​​​​​​​​​​​发现服务器在1月5日重启过,21:55分DN重启并触发主备倒换,22:51分主实例恢复,备升主,集群做switchover主备均衡,​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​追溯报错语句线程ID,发现1.5集群重启时有4次清理残余连接的日志记录,1.5-1.11报过几次reset handle xmin, 随后在1月14日直接报DN连接错误直接查询残余连接,即查询的连接对应不存在的DN重启前的线程。发现残余连接50+:​​​​​​​select count(*) from pg_pooler_status where remote_pid in (select tid from pgxc_thread_wait_status);select count(*) from pg_pooler_status;select * from pg_pooler_status where remote_pid not in (select tid from pgxc_thread_wait_status);​​​​​​​​​​​​​​说明DN重启后还有未清理掉的连接,判断语句报错的原因为1月5日重启后CNDN之间的连接断开,但是连接断开后,清理失效连接的操作为完成;在1月14日业务复用该残余连接,造成语句报错。尽管日志中有清理连接的记录,但是从残余连接的查询结果来看,清理连接的实际过程并未完成。【规避方法】方案一、清理一遍所有业务连接,后续每次DN重启后得执行方式:CLEAN CONNECTION TO ALL FOR DATABASE xxx; --xxx为业务库影响:被清理的业务的连接会断开;方案二、用pg_pool_validate()清理CN上多余线程方式:执行SELECT * FROM pg_catalog.pg_pool_validate(true, ' '); (单引号里面为空格)主备切换或主备均衡后,每个CN均执行,不区分库;执行select * from pg_pooler_status where remote_pid not in (select tid from pgxc_thread_wait_status); 检查残余线程,如果查询结果为空说明当前无残余连接;​​​​​​​             影响:该函数仅清理残余连接,对业务无影响
  • [问题求助] Kmesh是否支持使用Redis、Memcached等缓存系统?
    Kmesh是否支持使用Redis、Memcached等缓存系统?
  • [问题求助] dws里建表的时候定义character varying的长度和不定义character varying的长度有什么区别?
    dws里建表的时候定义character varying的长度和不定义character varying的长度有什么区别?
  • [活动公告] 【有奖征文 第28期】华为云GaussDB:与数据库同行的日子,分享你的故事和技术经验,赢千元大礼包!
    云计算时代,云数据库的需求和技术也在不断的发展,华为云数据库GaussDB是华为自主创新研发的分布式关系型数据库。该产品具备企业级复杂事务混合负载能力,同时支持分布式事务,同城跨AZ部署,数据0丢失,支持1000+的扩展能力,PB级海量存储。同时拥有云上高可用,高可靠,高安全,弹性伸缩,一键部署,快速备份恢复,监控告警等关键能力,能为企业提供功能全面,稳定可靠,扩展性强,性能优越的企业级数据库服务。为了让各位开发者0距离体验GaussDB、GaussDB(for MySQL)等产品,特举办《与数据库同行的日子》有奖征文活动,提供一个沙箱实践和一个实操手册,以便大家可以更好地学习和使用华为云数据库产品。☞参与规则第一步:体验GaussDB、GaussDB(for MySQL)等产品点我进行沙箱实验- GaussDB数据库应用程序开发实验点我获取现网实操- GaussDB(for MySQL)场景化综合应用实验(见文末底部附件)点我前往产品免费体验区-云数据库第二步:围绕如下主题之一发表文章① 产品体验:体验GaussDB、GaussDB(for MySQL)等产品,撰写产品体验反馈,如体验感受,使用后建议,操作使用方法等内容。② 最佳实践:分享在使用华为云GaussDB、GaussDB(for MySQL)等产品过程中,解决痛点问题或者完成应用开发实践的案例,进行性能优化、预测性维护、风险排查、NL2SQL等的实践内容。③ 技术攻坚:分享在数据库技术攻坚过程中遇见的技术和理论的难题、解决方向、以及成功的解决方案等内容。④ 人物图鉴:分享与数据库相关的身份在生活和工作中的故事,内容用到的技术手段、收获的感受、困惑和奇思妙想等,比如“数据库应用开发的一天”。☞格式要求1、标题必须以【华为云GaussDB:与数据库同行的日子】结尾,例如华为云GaussDB性能优化【华为云GaussDB:与数据库同行的日子】2、文章需打上【云数据库GaussDB】/【云数据库GaussDB(for MySQL)】/【云数据库GaussDB(for Redis)】/【云数据库GaussDB(for Influx)】/【云数据库GaussDB(for Cassandra)】的标签(至少包含一个) 3、文章末尾需加上活动名称及链接地址,如:我正在参加【有奖征文 第28期】华为云GaussDB:与数据库同行的日子! 链接:4、建议投稿内容字数不少于500字(不含代码段),语句通顺、文章逻辑清晰、排版整洁、代码规范,尽量图文并茂(有技术架构图或者分析图等做支撑)。5、文章保证原创首次发布,如发现投稿内容为转载、复制、抄袭、恶意拼接、灌水等侵权作弊行为,均视为无效并取消参与资格。6、文章须符合征文主题及平台内容规范,不得出现违规负面内容。详见华为云开发者平台内容互动使用协议。7、 参加征文活动的文章作者拥有著作权,华为云拥有使用权、修改权等。点此立即发表博文· 以上奖品均为实体奖品,具体视出库情况而定。☞评分规则专家评分依据 :文章篇幅、经验含金量、排版美观度、阅读量、点赞、收藏等指标综合评分。其他说明: 1、一二三等奖不能叠加。 2、参与奖不与一二三等奖叠加。 3、本期征文的一二三等奖对应四个主题方向分别设置1名、2名和7名。 4、有奖征文投稿数量不计入月度激励活动(即社区明星评选)文章数量。☞你将获得什么?我们会把收到的优质内容汇编成册,并注明原作者,积累行业口碑,开放给圈内开发者下载查阅,提供实践参考。对于贡献优质内容的作者,我们还将送出各项大礼!同时,在华为云站内外10+个技术社区醒目位置进行推荐,给与百万级流量资源。优质作者更可获得长期约稿和更多内容合作机会。☞问题咨询如果有任何问题,可扫描下方二维码咨询。添加微信时请备注:有奖征文+华为云博客昵称!如果大家在征文中遇到有关华为云产品体验方面的问题建议,请到【云声平台】提出您的宝贵建议,标题以【云驻计划-定向征文】开头,还有机会赢取额外奖励。快来华为云社区博客,一起遨游技术海洋吧! 点击立即体验☞部分奖品展示定制保温杯 定制保温杯 游戏机礼盒 定制双肩包 手机支架 定制折叠雨伞 定制连帽卫衣 定制笔记本 定制笔记本
  • [问题求助] 华为云数据库的价格是多少?
    华为云数据库的价格是多少?能支持银行项目的 有方案么?
  • [问题求助] 业务将自建的redis切换到GuassDB(for Redis)咨询
    最近业务想将自建的redis切换到GuassDB(for Redis),想问一下能否申请这种组网的GuassDB(for redis)资源?
  • [技术干货] GaussDB(for Redis)助力金智教育业务数字化,增效降本双赢
    一、公司简介江苏金智教育成立于2008年,是国内领先的高等教育信息化服务提供商。公司专注于推动云技术与高等教育的深度融合,通过自主研发为客户提供教学、科研、管理、生活服务等领域的软件产品和服务,帮助高校以数字化、智能化驱动人才培养和校务治理模式的变革。凭借全面的产品解决方案和优质服务,金智教育已经累计助力1000余所高等院校和中职学校实现数字化转型和业务创新,成为高校信息化领域的领航者。二、业务背景金智教育有很多核心业务系统,其中大量使用了Redis。近年来随着业务量持续增长,其原先采用的自建开源Redis在使用上遇到几个明显的痛点。1)开源Redis主备倒换引起“丢Key”,只能人工补数据由于开源Redis主备采用的是异步复制,一旦发生故障倒换,将会丢失大量数据。在金智教育业务中,APP登录验证会使用Redis存储token,一旦主从切换,会导致大量用户重复验证登录。这也是Redis常见的问题。此外,在学生报表业务中,数据的完整性非常重要。一旦发生数据丢失,全国的老师都会发现系统中有一部分学生的信息无法查看,此时不得不通过人工来补救数据,非常耗时。2)开源Redis分片经常“被流控”,影响业务业务访问模型往往会存在一些热点,开源Redis集群虽然整体带宽高,但由于每个分片带宽小,因此经常触发分片流控,导致业务受损。在金智教育的业务中,流控触发就意味着业务受损,因此非常需要一款“不流控”的Redis服务。3)数据持续增长,开源Redis升配“太贵”,且影响业务在海量数据处理的场景下,需要Redis长期保存数据。开源Redis扩容操作意味着加分片,耗时久而且影响业务。扩容只能靠DBA熬夜支撑,效率低下。此外,随着数据增长,开源Redis的使用成本也会一次次“翻倍”,例如从32GB扩容到64GB,会给公司带来较高的成本开销,金智教育也急需要一款成本可控的KV数据库。三、华为云GaussDB(for Redis)解决方案       华为云GaussDB(for Redis)的设计目的,就是为了解决 Redis 的痛点问题,有效实现降本和增效。兼容性方面,它不但100%兼容Redis5.0,而且支持主备和集群全生态架构,业务可以无缝平迁。近年来,GaussDB(for Redis)产品团队基于开源生态额外做了诸多的特性增强,例如:解决了fork问题使性能更平滑,支持自动无感扩容(秒级完成),指定时间点原地PITR回档、跨Region容灾等等。针对金智教育在Redis使用中遇到的几大核心痛点,GaussDB(for Redis)提供了完善的配套解法:1)数据可靠性显著提升,不担心总丢key,也不再需要人工“补数据”试想在10000 QPS的写入流量下,开源Redis即使配置秒粒度的AOF下刷(影响性能,往往不适合在线上环境开启),主备倒换也会引起10000条业务数据的丢失,损失很大。因此,开源Redis的“丢数据”是先天的痛点,并不适合用在数据重要的业务场景下。GaussDB(for Redis)存储数据的可靠性非常高,用户数据在GaussDB(for Redis)默认存储3个副本,成本上仅按1个副本计费,不会带来额外费用。计算节点使用预写日志WAL实现了命令级的可靠存储,即使分片发生故障倒换,由于有存储池保障全量数据的可靠性,也能保障业务数据的安全。切换到GaussDB(for Redis)后,金智教育线上业务的稳定性得到了大幅度提升,而不再需要消耗人工精力去“补数据”了。2)采用独享容器部署,分片带宽充足,不担心流控开源Redis的部署往往是多租户共用一个容器,因此不得不做流控,否则会发生租户间相互干扰的情况。分片的流控是常发生的现象,这会产生“木桶效应”,只有采用独立容器部署Redis才能解决。GaussDB(for Redis)的每个分片都采用独立容器,带宽不做额外限流,分片(独立容器)带宽全部提供给业务程序使用,即使业务访问存在一定倾斜,也不担心被某个分片流控。3)支持自动扩容,且对业务零干扰;强数据压缩比,存数据成本节约30%+ GaussDB(for Redis)的扩容体验在行业里是领先的,目前已经支持全自动扩容,无需人工干预,且扩容平滑无感,秒级完成。对业务来说,连接不会被中断,也不会引起时延抖动,随着业务增长,扩容可以放心交给服务端自动化完成。此外,金智教育在迁移数据时,发现100GB的数据迁入到GaussDB(for Redis)只占用了不到50GB的空间,从长远来看存储成本非常有优势。这是由于GaussDB(for Redis)通过高效压缩技术对数据进行了逻辑+物理块压缩,能够有效降低存储开销。四、总结目前,金智教育的核心线上业务已经在华为云数据库GaussDB(for Redis)上平稳运行近一年,从日常综合表现来看,业务的平均时延在1ms以内,p99时延一般在2ms内,并且性能稳定,同时运维和开发效率也得到了大幅度提升。       后续华为云数据库还会继续和金智教育密切合作,在KV数据库业务方向深挖更多服务化能力,提升客户运维和开发体验。五、附录本文作者:华为云数据库GaussDB NoSQL团队杭州/深圳/西安简历投递:yuwenlong4@huawei.com更多产品信息,欢迎访问官方博客:bbs.huaweicloud.com/blogs/248875
  • [问题求助] 与PostgreSQL的差异_数据仓库服务 GaussDB(DWS)_8.2.0_华为云
    标记内容:与PostgreSQL的差异文档反馈:说明下,这个差异是针对哪个版本的postgreSQL的? 页面链接:https://support.huaweicloud.com/sqlreference-820-dws/dws_06_0002.html
  • 图解数据仓库服务_数据仓库服务 GaussDB(DWS)_产品介绍_华为云
    图不是很美观,没有界面好看,页面链接:https://support.huaweicloud.com/productdesc-dws/dws_01_1110.html
  • [问题求助] 数组类型_数据仓库服务 GaussDB(DWS)_8.2.0_数据类型_华为云
    标记内容:多为数组文档反馈:错别字 页面链接:https://support.huaweicloud.com/sqlreference-820-dws/dws_06_0357.html
  • [问题求助] 去IOE的政策
    目前国家对去IOE这块的政策,有谁有了解么?谁能给详细讲讲。
  • [技术干货] GeminiDB Redis接口企业级特性揭秘之多租户管理
    华为云GeminiDB Redis接口持续完善企业级增强特性,是名副其实的"Redis Plus",其中很经典的企业级特性是多租户能力,支持添加只读账号、读写账号,并且可约束每个账号可访问的数据库(DB)范围,避免误操作其他租户数据。该特性可以帮助企业在共享Redis实例的情况下,保护不同租户的数据安全,为企业的开发和管理提供便利。哪些用户需要使用租户管理功能?多租户是数据库用户刚需的一个功能,例如,企业中有两个业务部门A和B,他们都需要使用Redis来存储自己的数据,如果不使用多租户权限功能,那么A和B的数据就会混在一起,这样就会存在数据泄露和误操作的风险。一旦使用了多租户管理功能,就可以将A和B的数据分别存储在不同的Redis实例/DB中,并且对这些实例/DB进行权限控制,从而保障数据的安全性和可靠性。在数据库领域,多租户技术往往有以下一些标准属性:比如读写权限控制、跨DB鉴权隔离等等;而GeminiDB Redis接口就是具备完善的多租户管理技术的一个典范,实现了读写权限控制和数据库(DB)隔离这两大特性的完美融合。Redis 6.0已具备ACL功能,为什么还要使用GeminiDB Redis接口的多租户功能?关于权限控制,开源Redis虽然在6.0新版本有ACL,但只能设置为只读、读写,每个账号还是可以看到所有的DB的。这个设计比较鸡肋,跟数据库多租户的原理背道而驰。举个例子,业务开发小王应该用DB1,但有天忘记SELECT,不小心清库了小张的DB0,导致生产事故。而GeminiDB Redis接口的权限隔离就从根源上解决了这个问题,如小王被设置为只有DB1的权限而没有DB0的权限,那么即使他误操作也不会对DB0的数据产生影响。此外,开源Redis的多租户功能只有单机才可以使用,一旦业务上量需要集群,多DB功能反而就不可用了,只剩一个DB0;GeminiDB Redis接口基于自身天然的集群架构做了多DB增强,支持6w+DB,同时可创建200+个ACL子账号,满足多种业务场景的需要。Redis产品是否支持账户读写权限控制是否支持账户权限隔离多DB是否支持集群可支持DB数量开源Redis6.0支持支持不支持默认16GeminiDB Redis接口支持支持支持6w+开源Redis 6.0和GaussDB(for Redis)所具备的权限管理能力比较 功能听上去很全面,具体怎么使用?GeminiDB Redis接口的租户管理功能需要用户在控制台的账号管理页面建立账号,并为每个账号设置DB的只读/读写权限,操作非常直观方便。例如,下图创建了账号test123,具备读写权限,且只能访问DB1、DB2。账号建立好之后,用户可以直接在程序中使用“user:pwd”组合字串作为密码参数,并配置目标DB号,即可使用业务专属DB。下面以一个形象的例子来说明如何通过多租户管理功能来实现账户间的权限隔离。蜀国技术总监诸葛孔明需要为蜀国的用户和合作伙伴吴国的用户设计不同的DB权限,从而达到公有信息共享和机密信息保护这两个目的。首先,他为刘备设置了所有DB的读写权限;为大将关羽和张飞设置了“桃园结义”DB0和“华容道”DB1和的读写权限,然后为秘书赵云设置了“长坂坡”DB2的读写权限和其余DB(除“桃园结义”DB0)的只读权限。至于吴国的合作伙伴,周瑜和黄盖被授予了“赤壁之战”DB3的读写权限,而他们的主公孙权则被设置了“赤壁之战”DB3的只读权限。听上去是不是很复杂很难操作?其实GeminiDB Redis接口的账号管理页面设计得很灵活直观,孔明可以通过点击“授权所有数据库”为刘备授权,又可以选择一个或者多个DB为关羽张飞授权,还能选择“未授权数据库”为赵云免除“桃园结义”DB的只读权限,非常方便设置和后期管理。总结本文详细介绍了GeminiDB Redis接口全面的多租户管理特性,并以几个生动的例子为例,阐明了开源Redis账号管理能力的不足,以及GeminiDB Redis接口是如何解决这些不足的。在当前的大数据时代,GeminiDB Redis接口的企业级特性完美弥补了开源Redis的短板,为企业的数据安全保驾护航。附录本文作者:华为云数据库GeminiDB Redis接口团队杭州/西安/深圳简历投递:yuwenlong4@huawei.com更多产品信息,欢迎访问官方博客:bbs.huaweicloud.com/blogs/248875
  • [技术干货] 数据安全没保证?GaussDB(for Redis)为你保驾护航
    近日,一些用户反馈使用的开源Redis中新增了几个未知来源的Key。工程师小伙伴分析发现,用户使用的开源Redis没有设置密码,很可能是遭到了Redis扩散病毒的攻击,表面上只是新增了几个未知的key,实际上甚至可能面临数据库信息丢失和记录篡改的问题!作为一个重视技术的团队,保障用户的信息安全和使用体验始终是第一位的。对这次用户使用开源Redis遇到的问题,团队成员总结分析,列举出GaussDB (for Redis)精心打造的数据安全保护特性:账号管理、数据库权限隔离;高危命令禁用、重命名;安全IP/网段开启免密登录;实例回收站。基于这些企业级安全特性,GaussDB (for Redis)在为用户提供稳定、可靠、便捷的使用体验的同时,全力为用户的数据安全保驾护航。特性一:账号管理+权限隔离,数据不乱轻松松单个GaussDB (for Redis)实例提供多达6w+独立的数据库供用户使用,用户可以根据业务和存储场景使用不同的DB存储,从而实现数据分离。多DB的隔离储存功能为业务带来了极大的方便,但是错误的使用也可能会导致问题。设想以下场景:某电商平台提供多种抢购功能,每个活动每个用户仅能参加一次。为业务方便,直接使用一个新的DB进行新上线抢购业务的数据存储。由于使用同一个账号登录,粗心的同事复用了之前的代码,忘记或错误配置新业务使用的数据库ID信息,将数据写入其他的抢购场景中,干扰其他抢购场景的正常使用。铛铛铛,这里要隆重介绍GaussDB (for Redis)的账号管理功能,数据库实例的每个账号、数据库的权限彼此隔离,从根本上防止这种冲突场景的出现。数据库管理控制台中,可以创建对特定数据库、具有读写/只读权限的账号:回到前面的场景,我们可以创建如下账号:dbuser_1仅对DB1拥有读写权限dbuser_2对DB2-DB5拥有读写权限dbuser_3对所有数据库均有只读权限基于上述账号管理配置,通过GaussDB(for Redis)的账号管理+权限隔离功能的双重加持,即使dbuser_1使用方误操作DB2的数据,GaussDB(for Redis)将对错误操作进行拦截,从而实现账户和数据的隔离管理,保障用户的数据安全。探索账户管理的额外信息和功能,请访问华为云官网《账号管理》页面:https://support.huaweicloud.com/redisug-nosql/nosql_03_0237.html。特性二:高危命令重命名,命令安全又安心每个使用者在操作数据库时,都会战战兢兢,尤其害怕一个命令直接删库,或者执行时间过长,对正常业务执行造成影响。之前曾遇到客户在业务高峰期通过keys命令统计流量信息,此类高危命令执行时间过长,运维操作反而阻塞了正常业务的进行。那么,怎么从根本上规避这种问题呢?GaussDB (for Redis)提供命名重命名功能,可以将高危命令禁用或进行相应重命名。如,我们可以将高危flushall、flushdb以及keys命令禁用,修改hgetall, hkeys, hvals, smembers命令的名称,防止命令被错误调用执行,给业务和数据安全带来影响:命令禁用和重命名的具体使用方式,请访问华为云官网《命名重命名》页面:https://support.huaweicloud.com/redisug-nosql/nosql_10_0053.html特性三:安全IP输密码太麻烦?免密登录帮你解决通过完善的账户管理、精细粒度的权限隔离,GaussDB (for Redis)已经万无一失。那么有同学要问了,如果我们的服务器可以保证足够安全,是否可以省略掉输入密码这个步骤呢?当然可以。GaussDB (for Redis)可以对用户信任的指定IP或网段设置免密访问功能。例如,我们可以设置IP为10.0.0.216以及网段为192.168.1.0/24的免密访问功能,在机器上对数据库实例的访问就不需要密码进行验证:当然,互联网上对IP和网段的信任是相对的,因此GaussDB(for Redis)禁止对全局网段开始免密登录功能,在合理范围内提供用户操作便捷性的同时,对用户数据安全的保障是GaussDB(for Redis)的重中之重。关于免密IP登录的具体说明,请访问华为云官网《开启免密访问》一节:https://support.huaweicloud.com/redisug-nosql/nosql_03_0236.html。特性四:误删实例心慌慌?实例回收站来帮忙和实例中误操作flushall等命令齐名、最令使用者闻风丧胆的,便是将实例误删了。虽然实例删除功能藏在隐秘的角落里,也需要用户double check,但总还是有误删除的可能在时刻敲打着用户。而且,近年来恶意删库新闻屡见不鲜,如何保障被误删或者恶意删除的数据库的信息安全呢?信息安全当然、也必须要保证!GaussDB (for Redis)提供实例回收站的企业级特性,实例误删无法恢复?不存在的!在实例回收站,可以看到最近7天内至多100个已删除的数据库实例,不幸误删?一键重建,数据还原,丝般顺滑,和数据丢失说拜拜。总结GaussDB (for Redis)通过账号管理、权限隔离、高危命令禁删/重命名、安全IP免密登录、实例回收站等企业级特性,保障用户数据库数据和信息安全。GaussDB(for Redis)提供稳定、可靠、安全的数据库产品使用体验,为客户的业务成功保驾护航。附录本文作者:华为云数据库GaussDB(for Redis)团队杭州/西安/深圳简历投递:yuwenlong4@huawei.com更多产品信息,欢迎访问官方博客:bbs.huaweicloud.com/blogs/248875
  • [常见问题汇总帖] Invalid or unsupported by client SCRAM mechanisms
    目前我们的sonarqube版本是8.7,opengauss的版本是3.0.2,我想用sonarqube连接opengauss数据库,但是报错,如题,该怎么解决呢
  • [技术干货] 即时通讯系统为什么选择GaussDB(for Redis)?
    每当网络上爆出热点新闻,混迹于各个社交媒体的小伙伴们全都开启了讨论模式。一条消息的产生是如何在群聊中传递的呢?让我们一起来探索即时通讯系统(IM)的原理。IM系统架构的原理当你在群聊“相亲相爱一家人”中,发送了一条“我找到女朋友了,今天带回家吃饭”,你自然是希望全家人都收到你的喜讯,为你女朋友的到来分头准备。那么正常的流程应该是这样:遍历群成员、查询每个成员的在线状态、如果小伙伴们在线则实时进行推送,如果小伙伴们不在线则暂存至离线库待上线后主动拉取。这种模式就是传统的IM架构,由于发送成功的消息不会落入离线库,因此聊天记录多端漫游无法实现。如果在线用户推送发生异常,会导致个别人员丢失关键发言,错失重要信息。为了保证消息存储的可靠性,我们对IM系统架构进行了优化,不管成员是否在线都要先把消息和发送对象存储起来,再进行推送。流程变成:遍历群成员、为群聊的每一个人对应的消息队列都存一份消息、查询每个成员的在线状态、对在线成员进行推送。这就是所谓的写扩散模型。这里显然还存在一个问题,我们向每个小伙伴的消息队列中都存储了相同的“我找到女朋友了,今天带回家吃饭”消息,对磁盘和带宽造成了很大的浪费,这是写扩散的最大弊端。所以我们继续优化,群消息实体存储一份,用户只存消息 ID 索引。流程优化为:遍历群聊的成员、先存一份消息实体、群聊所有人都存一份ID 引用、查询每个成员的在线状态、对在线成员进行推送。这就是所谓的读扩散模型。简单总结下:1.读扩散:读取操作很重,写入操作很轻,资源消耗相对小一些。2.写扩散:读取操作很轻,写入操作很重,资源消耗相对大一些。IM系统架构优化实践接下来,让我们使用GaussDB(for Redis) 来实现一个简单的IM应用。使用GaussDB(for Redis)的List类型实现一个消息队列,防止发送端瞬时高流量会压爆消息处理模块;收到消息后,先生成一个全局唯一ID标识该信息,将消息ID和消息内容存入String类型的消息存储库中,如果消息字段复杂也可以考虑使用Hash类型;对于消息中可索引的信息,将消息的索引信息存入Zset类型的消息索引库中,这样无论是接收者还是发送者,都可以按照一定规则对历史消息进行检索;通过查询Set类型的消息关系群组库,查询该信息的接收者集合,这个集合可以根据一定的规则动态增删;将消息ID推入Stream类型的消息同步库,每个Stream对象对应一个接收者,接收者可以通过XRANG命令获取一个范围内的未读信息ID;最后,接收者再通过这组ID,从消息存储库中读取消息原始内容,即完成了一次消息传递。Why GaussDB (for Redis)?IM系统有哪些痛点?高斯Redis如何解决这些痛点?1. 开源Redsi数据库可靠性差,甚至丢数据,会直接导致IM系统瘫痪。GaussDB(for Redis)对数据进行分片,在故障场景下可以自动进行接管,最多可以满足N-1个计算节点故障;存储层使用华为自研的企业级存储池DFV Pool,基于分布式、强一致、高性能的先进架构,实现3AZ6副本存储,保证了在任何时间点的数据强一致,故障情况下数据不丢失。2. 大流量、高并发场景如何支持连接管理,按业务况分散压力?GaussDB(for Redis)可以满足IM系统对可用性的要求,客户端程序通过ELB接入GaussDB(for Redis)实例,可实现自动负载均衡。3. 突发的高流量、大量的历史消息数据如何处理?GaussDB(for Redis)采用先进的存算分离架构,在IM系统持续运营的过程中,如果出现突发流量,可以迅速对计算层资源进行秒级扩缩容,快速扛住流量尖峰;历史消息持续增长时,也可以单独对存储层资源大小进行秒级动态调整,最高可扩容至PB级。GaussDB(for Redis)广泛适用于社交媒体、游戏、电商、推荐系统等领域,在海量并发场景具备极强的高可用能力。如果你需要一款稳定可靠的高性能企业级KV数据库,不妨试试GaussDB(for Redis)。
总条数:48 到第
上滑加载中