云服务培训五-数据库服务
如上图所圈,这次主要学习云数据库RDS for MySQL、GaussDB和GeminiDB相关内容。
一、结构化数据、非结构化数据
选择数据库时,首先从模型上分析,是否涉及事务处理、复杂的查询关联,还是数据量大、有并发访问需求。同理,其余指标如访问性能、类型等类似分析。
结构化数据:有标准的格式
=> 关于数据治理,在拿到数据后,首先要分析该数据是结构化还是非结构化的,根据类型选择对应的服务。
=> 非结构化数据放到存储(如OBS、EVS)里面存放;
=> 结构化数据,完全结构化就用关系型数据库,半结构化用非关系型数据库。
华为云数据库选择
云原生通过容器化、微服务架构、自动化运维等技术手段,实现了应用的快速部署、弹性扩展、高效运维和跨云部署。
二、关系型数据库服务RDS
利用数据库搭建如下简单架构。是否存在问题?问题出在哪里呢?
=> 明显看出,上述架构存在一个故障单点,即RDS。
很好理解,应用服务器不是单点,一台坏了剩下一台也能继续服务,但如果RDS坏了,整个系统就不能正常工作了。
既然如此,又该如何解决呢?主备部署
=> 主备部署,简单理解,就是当主数据库出现故障时,RDS服务会自动把访问接口切换到备用服务器上,然后把主服务器替换掉,变成一台新的备用服务器。通过该机制,当一台服务器坏掉就会被自动的替换,甚至可达秒级切换。
=> 主备服务器可同时放在一个可用区里,以获得较好的同步性;也可选择放在不同的可用区,从而获得跨可用区的容灾能力。
因为可用区可能会坏掉,有了多可用区的选择,就能在一个可用区坏掉时使用另外一个可用区的备数据库服务器,以保持业务连续性。
主备部署这么好,就没有啥缺点吗?
=> 成本增加,如多部署一台服务器、多了一些数据同步的成本。
回到最开始的问题,如下是基于主备部署实现的高可用架构的落地方案。
=> 只有主数据库向应用服务器提供服务,即承载所有数据库的访问流量;而备数据库则随时准备切换上来,平常不参与工作。
有自动Binlog和手动两种备份方式,如下:
RDS可以通过创建只读副本的方式,建立读写分离的数据库系统。
读写分离是一种常见的数据库架构设计,通过将读操作和写操作分开到不同的数据库实例,来提升系统性能和可扩展性。读写分离将读操作分配到读数据库,而写操作由写数据库处理,该方式能有效分担数据库的负载,避免单个数据库成为瓶颈,且能实现读操作和写操作的并行处理,提高系统的整体处理能力和响应速度。
6、只读副本实现水平扩展
同样,可以通过创建只读副本的方式实现水平扩展,如下:
以上为主备部署+只读副本
RDS for MySQL产品架构
三、GaussDB (for MySQL)
除了 RDS for MySQL,还有没有其他数据库服务和解决方案呢?GaussDB (for MySQL)
RDMA:远程直接内容访问
注:RPO(Recovery point objective),恢复点目标,是指业务系统所能容忍的数据丢失量。
四、GaussDB 云数据库
注:GaussDB和GaussDB (for MySQL)是两种不同的数据库服务,不要混淆。
五、非关系型数据库:云数据库GeminiDB
1、非关系型数据库特点
① 每条数据都是一个结构文档。
② 表格中的记录之间没有逻辑关系。
③ 擅长对完整值进行哈希定位而非复杂查询。
云数据库GeminiDB架构
1)高可用
=> 当计算节点故障:秒级的故障切换;
=> 当存储节点故障:存储三副本,单点故障整体系统仍可运行。
2)弹性扩容
=> 扩容计算节点:计算节点无状态,可快速扩容;
=> 扩容存储节点:共享存储,一键扩容,不中断业务。
非关系型数据库使用注意
① 设计好数据键和索引定义。快速定位,避免全表查找。
=> 避免热键;
=> 避免数据过于复杂;
=> 不论数据量多少,毫秒级数据定位。
② 如果需要,在应用层进行逻辑锁和数据逻辑关联。
③ 在压力提高时,合理利用集群来分散压力。
=> 利用分片算法快速定位数据在集群中的位置;
=> 数据设计上让访问压力分散到集群内各个节点,避免热分区。
六、数据库管理服务 DAS