码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 数据库系列:大厂使用数据库中间件解决什么问题?


    相关文章

    数据库系列: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 等。

  • 相关阅读:
    js禁用F1至F12、禁止缩放、取消选中并且取消右键操作、打印、拖拽、鼠标点击弹出自定义信息、禁用开发者工具js
    logstash 消费kafka数据,转发到tcp端口
    低代码平台:构建应用程序的“银弹”
    基于QT技术实现无线点菜系统设计与实现
    lua --- 基本语法学习
    java的健身房管理系统计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
    ORB-SLAM2从理论到代码实现(十四):KeyFrame类长
    Appium 移动端自动化测试(Mac)
    大模型赛道如何实现华丽的弯道超车【赠书活动|第十期《分布式统一大数据虚拟文件系统 Alluxio原理、技术与实践》】
    WebRTC系列-SDP之setLocalDescription(2)
  • 原文地址:https://www.cnblogs.com/wzh2010/p/15886947.html
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号