首页 > 数据库 >数据库系列:大厂使用数据库中间件解决什么问题?

数据库系列:大厂使用数据库中间件解决什么问题?

时间:2024-03-05 09:13:21浏览次数:29  
标签:场景 系列 数据库 中间件 业务 大厂 备份

相关文章

数据库系列:MySQL慢查询分析和性能优化
数据库系列:MySQL索引优化总结(综合版)
数据库系列:高并发下的数据字段变更
数据库系列:覆盖索引和规避回表
数据库系列:数据库高可用及无损扩容
数据库系列:使用高区分度索引列提升性能
数据库系列:前缀索引和索引长度的取舍
数据库系列:MySQL引擎MyISAM和InnoDB的比较
数据库系列:InnoDB下实现高并发控制
数据库系列:事务的4种隔离级别
数据库系列:RR和RC下,快照读的区别
数据库系列:MySQL InnoDB锁机制介绍
数据库系列:MySQL不同操作分别用什么锁?
数据库系列:业内主流MySQL数据中间件梳理

1 背景

互联网大厂的业务场景,业务流量的规模都可以达到千万甚至亿级别,这时候简单的数据层连接和调用无法承接业务规模的需求。
需要数据库中间件来管理一些中间桥接工作,类似 连接池、负载均衡、故障隔离、监控预警等工作,大幅度提高性能和稳定性,应对大流量的冲击。
下面我们具体来看看,我们使用数据库中间件具体解决哪些存在痛点的业务场景。

2 数据库中间件解决的问题和实现方案

2.1 连接池管理

2.1.1 业务场景

客户端连接无限制,不可复用,不可隔离,业务间互相影响(如单个服务超载调用可能导致雪崩)

2.1.2 解决方案

归口到Proxy统一管理,提供连接池、连接数限制、重试、超时断开保护等能力。

image

如上,各业务线统一读写访问入口,所以业务连接池不会有

db1.read:3306,db2.write.com:3306

而是统一只有

db.all:3306

Service服务对db的访问,统一到一个入口上来了,由中间层来对请求进行智能路由、连接池管理、限流、重试、超时等工作。这种模式解决了业务直接管理数据实现层的问题。

2.2 读写分离机制

2.2.1 业务场景

需要为业务提供读写分离机制,而不是由业务花费精力去维护

2.2.2 解决方案

数据服务存在主从部署模式,业务在路有时Porxy自动区分读写,写路由到主存储服务(master),读路由到从存储服务(slave)
对业务是透明的,业务开发的同学无需关注读写的隔离。
image

这边可以看到,Proxy会自动将读和写操作分流,业务开发人员无需关注即可。

2.3 负载均衡策略

2.3.1 业务场景

需要为数据库分片提供负载均衡机制,如果多个读库甚至多个写库,需要一定的负载策略,类似VIP

2.3.2 解决方案

归口到Proxy统一管理,提供负载均衡能力,包括但不限于:

  • 轮询(Round Robin)
  • 来源 IP 哈希(IP Hash)
  • 最少连接(Least Connection)
  • 加权轮询(Weighted Round Robin)
  • 加权最少连接(Weighted Least Connection)
  • 随机策略

image

2.4 数据库分库分表sharding

2.4.1 业务场景

数据量比较大的场景下,需提供业务分库分表能力

2.4.2 解决方案

调用方屏蔽分表细节,跟单表操作一直。Proxy实现对分库分表的核心细节,不同大部分中间件会有一些限制(如带分表字段,不支持跨库join等)
image

从上面的图中可以看到,Proxy在逻辑表和物理表中间起桥接作用,开发同学不需要知道太多细节,也不需要改变访问的SQL脚本。

2.5 故障切换

2.5.1 业务场景

主/备发生异常、宕机等故障,需业务来处理故障切换

2.5.2 解决方案

屏蔽后端DB故障问题,自动故障切换

  1. master 故障,slave切换为master
    image

  2. slave 故障,多副本模式下进行异常副本的驱逐
    image

  3. slave 故障,单实例情况下读写都调度到master
    image

2.6 安全保障等

常见问题 说明 解决方案
权限 1. 账号权限放太开,没有最小化权限;
2.机器迁移等都需手动申请权限较麻烦
1. 通过user/pwds/ip等做权限控制,最小化权限。
2. 机器迁移自动权限扩缩容。
安全 需业务自己处理sql注入,核心数据加密等问题 Proxy增加一层保护机制,包含sql注入,sql黑名单(如sleep/drop),数据加密等
日志审计 MySQL 数据被修改了,无法确认被谁修改的 提供便捷的日志审计,日志流控和动态变更,方便定位查询

2.7 监控和预警

2.7.1 业务场景

需业务根据自己需求搭建监控系统

2.7.2 解决方案

提供诸多监控和预警能力,包括但不限于:
连接数监测、慢查询数统计、慢请求Sql采集、Sql语句统计、索引命中率分析、索引分析、DB负载、所属主机性能分析
image

2.8 备份和恢复能力

2.8.1 业务场景

Proxy需要为业务提供备份能力,通过简单配置即可,避免业务花费较大精力关注

2.8.2 解决方案

  • 提供多种类备份策略,一键配置
    • 全量备份
    • 增量备份
  • 备份模式
    • 定时备份
    • 手动备份
  • 通过管控平台功能快速恢复数据
    • 指定范围恢复,精确到表
    • 指定时间恢复,精确到秒

参考以下备份流程:
image

3 总结

本文介绍了互联网场景数据库中间件主要解决的业务难题,后续有时间我们详细介绍下下业内评价较高的几种数据库中间件,如 ProxySQL、 DBProxy、TDDL 等。

标签:场景,系列,数据库,中间件,业务,大厂,备份
From: https://www.cnblogs.com/wzh2010/p/15886947.html

相关文章

  • C++ mySQL数据库连接池(windows平台)
    C++MySQL数据库连接池新手学了C++多线程,看了些资料练手写了C++数据库连接池小项目,自己的源码地址关键技术点MySQL数据库编程、单例模式、queue队列容器、C++11多线程编程、线程互斥、线程同步通信和unique_lock、基于CAS的原子整形、智能指针shared_ptr、lambda表达式、生产......
  • 【Redis】Redis如何保证和MySQL数据库的数据一致性
    保障MySQL和Redis数据一致性需要使用不同的策略和技术,因为两者是不同的数据存储系统。以下是一些常见的方法:1.数据同步MySQL数据同步至Redis使用事件驱动机制:当MySQL中的数据更新时,通过触发器或者其他事件驱动的机制,将数据同步至Redis。定时任务:定期轮询MySQL数据......
  • Oracle数据库错误:ora-28014:cannot drop administrative users(无法删除管理用户或角色
    1.问题在创建用户test之后,删除时发生错误ora-28014:cannotdropadministrativeusers2.解决由于Oracle数据库要求创建用户必须以C##开头,在创建该用户时,我们设置了altersessionset"_oracle_script"=true;Oracle数据库如何解决创建用户名开头必须要C##问题?但是删除时,由......
  • Ubuntu安装zabbix,初始化数据库报没有这个文件 /usr/share/doc/zabbix-sql-scripts/mys
    报错信息如下: 解决方法:1、先查看是否安装了zabbix-server-mysql,我这里是已经安装过了,但是初始化还是报错找不到文件 2、去zabbix下载对应版本的源码,然后进行手动安装下载链接:https://www.zabbix.com/download_sources#60LTS 3、源码下载后解压,在database文件中找到m......
  • 记一次在oracle数据库中添加全文索引的过程
    前景:在创建全文索引之前,有如下几个内容需要确认下:1.全文索引不支持nvarchar2类型,所以需要创建全文索引的字段的字段类型,如果是这个类型,可以修改为varchar2();2.如果需要创建全文索引的字段包含(1、中文、英文结合,或者纯英文;2、中文、数字结合,或者纯数字的)这几种情况的,需要对......
  • 对象不能从 DBNull 转换为其他类型,数据库空数据映射实体类的时候如何处理数据
    场景是这样的数据库有几个字段是可以为空的、即插入的时候可以不插这些数据,当一条有‘缺口’的数据回到后端映射实体类的时候,会导致对象不能从DBNull转换为其他类型的错误此时可以编写一个通用的方法来处理这种转换publicstaticTConvertDBNull<T>(objectvalue,Tdefaul......
  • 肖SIR__数据库之安装navicat__11.3
    一、安装navicat1、下载navicat 2、解压压缩包 3、点击exe文件 4、输入密钥:NAVH-WK6A-DMVK-DKW35、点击打开:输入连接参数: 6、查看连接好仓库 ......
  • linux安装南大通用数据库 GBase 8s V8
    @目录1、操作系统、数据库2、下载链接3、安装文档4、安装前准备4.1、以root用户创建gbasedbt组和用户4.2、创建GBase8s数据库安装目录4.3、上传并解压安装包5、安装5.1、执行安装程序5.2、回车继续直到接受许可条款5.3、输入安装目录绝对路径5.4、选择安装类型5.5、选择安装......
  • linux 安装神州通用数据库 V7
    @目录操作系统、数据库1、官方下载链接2、windows客户端下载链接3、官方安装手册4、安装前准备3.1、创建安装用户3.2、以root用户修改神通数据库安装包的所有者为shentong用户3.3、以root用户创建神通数据库主目录并修改所有者为shentong用户3.4、以root用户临时修改init.d......
  • 拯救php性能的神器webman-数据库
    有了webman的这个框架,我们得看看它是怎么使用数据库的,毕竟我们不能一直用内存变量啊。好,很简单一句话跑起来。 composerrequire-Willuminate/databaseilluminate/paginationilluminate/eventssymfony/var-dumper 官方对于这里数据库的解释是:webman数据库默认采用的是......