数据库治理的最佳实践| 学习笔记

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 快速学习数据库治理的最佳实践

开发者学堂课程【数据库治理的最佳实践数据库治理的最佳实践】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/1191/detail/18107


数据库治理的最佳实践


内容介绍:

一、导入

二、常见场景及能力

三、演示

 

一、导入


MSE 在数据库治理方面的探索可以认为是 MSE 服务治理的数据库治理相关领域的最佳实践。

在分布式系统中,业务的流量其实都是端到端的流量。所有的请求都会经过很多层的处理,比如是从入口的网关再到 web server,再到的微服务之间的调用。最后再是微服务访问的缓存,或者访问的数据库。

那么对系统来说,其实数据库是非常重要的一块。因为无论在稳定性的治理上,还是说在开发提效等场景下,其实数据库相关的治理能力都是系统所必需的。比如提供的一些查询接口,可能在 SQL 语句涉及到多表的 join 在某些情况下会触发一些慢调用。然后耗时非常长,最终会导致的数据库连接迟缓以及的业务比如说 top 开的线程池,double 的线程池等被打满之后,导致应用的整体不可用。或者说应用刚启动的过程中,其实是有无损下线。在过程中,其实有遇到一些配置,比如像数据库的登录可能还在初始化中。但已经有大量的数据库访问进来,会导致请求等待数据库连接,导致许多的现场都会卡在初始化数据库连接的过程中。从而一系列的问题就会导致的业务请求大量报错。

所以就在全链路灰度或者项目环境隔离的场景中,或者敏捷开发的场景中,比如新的应用版本可能会改数据库表的一些内容,然后灰度的流量如果没有数据库的流量隔离、数据隔离的能力,灰度流量可能会导致线上的数据库的数据错乱,从而可能在发布后才发现这样的问题。可能需要连夜的手工订正线上的数据。

 

比如像在项目初期可能没有对 SQL 性能做好考量。那么可能刚上线的时候随便写或者写的刚好够用。但是随着业务的发展,用户量级增加,线上往往会遗留一些老的 SQL 语句,很可能会成为一些性能瓶颈。

因此,需要一种有效的自动洞察能力,可以帮助发现遗留的 SQL ,并且进行一些及时性能优化,防止应用新的腐败。

然后之前有提到过 SQL 语句处理时间比较长,可能会导致线上的一些业务接口出现大量的慢调用。因此一方面需要快速定位有问题的 mysql ,并且通过一定的治理手段进行隔离,帮助业务快速恢复。

另外一方面就可能如果是有大量的查询慢语句,是否考虑把卖句通过读写分离的来保证主库的稳定性以及提升的查询的效率,从而提升应用性能。

而以上等等这些 case,针对大多数的后端应用,系统的瓶颈主要是受限于数据库的访问。当然复杂的业务场景肯定离不开数据库的操作。因此数据库的问题是研发后端研发工程师是优先级比较高的工作。数据库治理其实就是微服务治理中必不可少的一环。

 

二、常见场景及能力


那下面在这一块总结微服务访问数据库时,在数据库治理中的一些常见的场景,以及对应的微服务治理这边提供的数据库治理的一些能力。

image.png

那将场景主要分为从应用的视角出发,主要分为五块。最下面一块其实是四个洞察以及可观测的一些配套。它可以帮助及时的发现那些慢 SQL ,并且可以帮助做 SQL 的诊断,提供一些 sql 优化的建议。然后之后可能是数据库流量的路由能力。比如像读写分离、数据库灰度,甚至数据分片分库分表数据的负载均衡。

左边上面是数据库的访问的稳定性的治理。比如像 SQL 流控、并发的隔离、mysql的治理等等一系列能力。然后有数据安全如 SQ L中路的防护,速度的拦截以及可信场景下的证书的访问,数据健全数据加密等等这些场景。

目前重点介绍微服务治理,SQL 洞察提供秒级的深度洞察能力,可以具备完善的sql 执行能力的审计,可以帮助营销的评估系统的整体表现,可以依据洞察的能力来进行一些 sql 的流控的以及 SQL 治理。那紧接着就是第二款基于 SQL 流量控制、降级与容错,还可以提供基于 sql 洞察的完整的流量防护能力,可以做到流量控制的并发、隔离、熔断、降级以及热点流控。

第三块是连接池治理的场景。目前 MSE 提供完整的并且实时的连接是指标,完整的连接池的治理方案。比如像坏连续剔除,发现有问题的连接,并且把它剔除。然后还有在无损上线过程中的提前建连,在连接时做的一些访问控制。

第三块是数据流量路由。目前 MSE 支付两个能力,也是数据库数据库灰度,还有动态读写分离,无需代码改造都能做到。

数据库灰度是全链路灰度开发环境隔离能力的必备的场景。因为数据库是应用链路上的一环。

第二块是中台读写方面的能力。可以将入读请求动态变为只读实例中,从而提升的主库的稳定性。并且会减少一些比如写操作导致的场所,从而导致的查询语句的等待,会提升的查询效率,从而提升整体的吞吐量。

1SQL 洞察:

image.png

SQL 洞察主要是为帮助快速的发现一些慢调用以及遗留 SQL 的性能瓶颈,以及帮助快速定位有问题sql

通过秒级的深度洞察能力,可以观察到应用以及资源api的实时数据,从而可以让有效的评估系统的整体表现。然后第二块看右上角其实就是的某个接口的详情。SQL 洞察能力分析 top 洞察,可以来分析语句是否合理。也可以进行一些流量控制隔离。

2)慢SQL治理

image.png

第二块是应用访问数据库时的稳定性的治理。SQL 处理时间比较长,会导致一些线上的接口的大量的慢调用。因此需要快速定位问题。sql 分析通过一些治理手段进行隔离,将业务快速恢复。

原理如上图公式。当流量接近的时候,如果rt升高,那其实并发现的速度升高。这时候就代表服务是出现危机。通过深入洞察,可以快速定位并发 SQL ,并且配置隔离的能力,相当于软保险可以防止的慢调用 SQL 指向正常的服务资源,从而保证服务整体的稳定性。

从右边的原理图可以看到,通过隔离的方式把问题的隔离掉,然后从而保证正常的调用。

3)连接池治理

image.png

那第三块是连接池治理。目前数据库治理提供连接池治理的能力,有实时的连接时指标。通过一些连接词的实时指标,可以帮助有效的提前识别到系统中存在的风险。

同时第二节会提供连接词指标的一些动态配置,可以动态的调整连接池的各个指标,从而最大程度的保证应用的稳定性。

同时还提供一些action,比如像换连接,剔除访问控制体验建联。会从连接池的视角出发,及时的发现异常的连接,并且进行及时的回收与技术与回收。那么就可以保证连接池的整体内容稳定性能。同时通过动态的防控的能力,可以做到面向数据库实例表的禁毒净血的防控制的能力。

第三块其实就是提前建联的能力,会保证在微服务流量到达之前,会将请求连接数保证在最小的年龄树枝上,从而保证启动过程中的流量的平滑稳定,而不会有大量的请求阻塞在等待在创建连接的过程上。

4)数据库灰度

image.png

然后数据库灰度通过配合全量灰度的能力,可以将灰度的流量访问到的灰度数据库表上。正常的流量或接线环境流量其实访问基线的环境表。同时数据灰度有三个特点,首先是无需修改代码,只需提前创建灰度表即可。第二个就是应用里面的数字可能涉及到多个表,当前的变更可能只影响到表。所以说这一块其实是可以选择需要灰度的数据库表。比如像其他的表没必要创建汇总表。因为这边选以后,他只会针对特定正常表来进行恢复,其他涉及到的数据库表是不会有灰度,都是访问计算环境的点,也可以保证就是说只需灰度哪个比较就改哪个就行,而且是实时配置,动态生效。

第三块的优势,数据库归入它的灰度的sql的执行结果是实时可见。之前 SQL 洞察的能力,执行灰度的表之后会出现的汇总表的执行情况,就可以实时的看到的处理情况。

5)动态读写分离

image.png

动态读写分离的能力可以有效的提升主库的稳定性,帮助数据库可以进行扩容的需求。支持动态的加入读写请求路由至只读实例上,可以将的思路请求分为强读跟弱读,弱读只会从 rds 只读识别读写。

同时支持接口应用级别标志落户请求。比如在微服务的某个接口上给标记接口风的所有读请求有更为弱读请求。

也可以在应用维度标记下交易,加购物车。

然后同时可以结合的秒级的洞察能力,先找出慢调用或者大查询的语句,可能会影响主库的稳定性以及查询的一些应用的吞吐量。可以将这些查询的接口找出来,然后并且标记它为弱读请求,这样会被分流至 rds 只读实例,从而提升的稳定性。

第四块慢调用的sql大查询语句可以路由至只读实例中。

简单的演示

为了演示的效果,在从库中提前执行,插入 ID 8的数据。

image.png

为演示的效果,所以现在将库分成两个,只读库配另外生产的库,然后在只读插入SQL。找到的微服务应用。

image.png

这是的 demo 应用。访问它,执行写操作,看日志。

可以直接的主库,发现就写入信息。然后也会有数据的监控。

现在对已经提前配置读写并且是将读的 SQL 是配置路由到这张库里面。先看查询的结果。

image.png

查到的是读库

那接下来执行事物,创建两个数据,查询后删除。

创建成功之后查询可以看到所有查询的语句都是从读库中进行,从而实现读写动态读写分离的效果。

6AccessLog

image.png

白屏化的能力可以支持任意点位的数据的 ccess log 。以及任意接口的甚至可以支持自定义买点,任意的方法甚至是业务代码的一些方法,它都可以支持,要使用白屏化的精密访问的能力。

查询后可以看到写的请求访问到 bp13 库中,然后来看读的请求同样也是。

动态读写分离能力已经将写的一些操作路由器,读的操作在实例中,然后写的操作在主实例中,实现动态的读写方面能力。后面还会针对的应用接口以及微服务动态的配置的入读进行操作。


三、演示


先找到应用发送一些请求,在数据输入页面,可以看到刚才发两次请求。

image.png

访问的情况如上图,然后可以看到的连接时的一些指标,同时在 SQL 详情页面也可以看到 sql 的一些执行情况。

image.png

自动洞察下,可以看到统计的页面,来配置 SQL 防护,保证所通过的 QPS 一直是在运行范围内。

image.png

看到 QPS 5,正好符合的 sq 流通能力。

同时当前配置隔离规则,会保证当前的接口线程数控制在有效的范围内。

image.png

第二块其实就是隔离。假设的慢调用方法非常耗时,可以配置阈值为5,控制在5个并发投入的线程,从而保证正常调用的一些线程数。

对应用相当于是保险,来保证服务整体的稳定性。

同时基于洞察期,可以看到即时的指标。下面可以再演示热点流控。关闭的热点。打开的热点流控个。因为热点流控是根据参数的目前只有一个为0 ,参数0即可,通过请求数,阈值为3,保存,开启。

image.png

关了流控调用就恢复了,刚才配置热点的规则,保证按照参数来索引通过。

流量防护中可以看到对 sq l进行防护,阻止55个请求。

热点流控是如果参数位于 top n 的参数通过的值,的是3,那么数据每秒钟最多只能通过3个。

主要介绍动态分离以及后面的执行的效果。然后第二块慢SQL治理的一些流程以及熔断中热点流控以及并发隔离和限流能力。

 

相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
1月前
|
存储 SQL 关系型数据库
Mysql学习笔记(二):数据库命令行代码总结
这篇文章是关于MySQL数据库命令行操作的总结,包括登录、退出、查看时间与版本、数据库和数据表的基本操作(如创建、删除、查看)、数据的增删改查等。它还涉及了如何通过SQL语句进行条件查询、模糊查询、范围查询和限制查询,以及如何进行表结构的修改。这些内容对于初学者来说非常实用,是学习MySQL数据库管理的基础。
131 6
|
1月前
|
SQL 开发框架 .NET
ASP.NET连接SQL数据库:详细步骤与最佳实践指南ali01n.xinmi1009fan.com
随着Web开发技术的不断进步,ASP.NET已成为一种非常流行的Web应用程序开发框架。在ASP.NET项目中,我们经常需要与数据库进行交互,特别是SQL数据库。本文将详细介绍如何在ASP.NET项目中连接SQL数据库,并提供最佳实践指南以确保开发过程的稳定性和效率。一、准备工作在开始之前,请确保您
171 3
|
2月前
|
消息中间件 缓存 监控
优化微服务架构中的数据库访问:策略与最佳实践
在微服务架构中,数据库访问的效率直接影响到系统的性能和可扩展性。本文探讨了优化微服务架构中数据库访问的策略与最佳实践,包括数据分片、缓存策略、异步处理和服务间通信优化。通过具体的技术方案和实例分析,提供了一系列实用的建议,以帮助开发团队提升微服务系统的响应速度和稳定性。
|
1月前
|
SQL Ubuntu 关系型数据库
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
本文为MySQL学习笔记,介绍了数据库的基本概念,包括行、列、主键等,并解释了C/S和B/S架构以及SQL语言的分类。接着,指导如何在Windows和Ubuntu系统上安装MySQL,并提供了启动、停止和重启服务的命令。文章还涵盖了Navicat的使用,包括安装、登录和新建表格等步骤。最后,介绍了MySQL中的数据类型和字段约束,如主键、外键、非空和唯一等。
71 3
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
|
20天前
|
存储 Java 关系型数据库
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践,包括连接创建、分配、复用和释放等操作,并通过电商应用实例展示了如何选择合适的连接池库(如HikariCP)和配置参数,实现高效、稳定的数据库连接管理。
39 2
|
1月前
|
关系型数据库 MySQL 数据库
MySQL数据库:基础概念、应用与最佳实践
一、引言随着互联网技术的快速发展,数据库管理系统在现代信息系统中扮演着核心角色。在众多数据库管理系统中,MySQL以其开源、稳定、可靠以及跨平台的特性受到了广泛的关注和应用。本文将详细介绍MySQL数据库的基本概念、特性、应用领域以及最佳实践,帮助读者更好地理解和应用MySQL数据库。二、MySQL
116 5
|
1月前
|
SQL 数据管理 数据库
文章初学者指南:SQL新建数据库详细步骤与最佳实践
引言:在当今数字化的世界,数据库管理已经成为信息技术领域中不可或缺的一部分。作为广泛使用的数据库管理系统,SQL已经成为数据管理和信息检索的标准语言。本文将详细介绍如何使用SQL新建数据库,包括准备工作、具体步骤和最佳实践,帮助初学者快速上手。一、准备工作在开始新建数据库之前,你需要做好以下准备工作
121 3
|
2月前
|
SQL 关系型数据库 MySQL
php学习笔记-连接操作mysq数据库(基础)-day08
本文介绍了PHP中连接操作MySQL数据库的常用函数,包括连接服务器、设置字符集、关闭连接、选择数据库、结果集释放、获取影响行数以及遍历结果集等操作。通过书籍查询的实例演示了如何使用这些函数进行数据库操作,并提供了一个PHP操纵MySQL数据库的模板。
php学习笔记-连接操作mysq数据库(基础)-day08
|
3月前
|
开发者 UED Java
Play Framework惊天秘密:如何让异常处理优雅得像芭蕾舞?
【8月更文挑战第31天】在Web应用开发中,异常处理至关重要,直接影响应用稳定性和用户体验。Play Framework作为轻量级Java Web框架,提供了基于Scala偏函数的灵活异常处理机制。通过实现`HttpErrorHandler`接口可定义全局异常逻辑,而在控制器中使用try-catch块则能捕获特定异常。定义自定义异常类也有助于表示特定错误情况。最佳实践包括保持处理一致性、提供有用错误信息、记录日志及分类处理异常。掌握这些技巧,能使Play应用更健壮可靠。
65 1
|
3月前
|
SQL NoSQL 关系型数据库
Grafana 与数据库连接:最佳实践
【8月更文第29天】Grafana 是一个开源的度量分析和可视化套件,被广泛应用于展示来自各种数据源的时间序列数据。它可以与多种数据库类型连接,从传统的 SQL 数据库到现代的 NoSQL 解决方案。本文将介绍如何通过 Grafana 连接到不同的数据源,并提供一些最佳实践。
304 2
下一篇
无影云桌面