数据库治理的探索与实践

简介: 本文简单介绍了MSE微服务治理最近推出的数据库治理方面的实践,帮助用户更好地使用数据库,进一步提升微服务的稳定性。

本文简单介绍了MSE微服务治理最近推出的数据库治理方面的实践,帮助用户更好地使用数据库,进一步提升微服务的稳定性。

背景

在分布式系统架构中,业务的流量都是端到端的。每个请求都会经过很多层处理,比如从入口网关再到 Web Server 再到服务之间的调用,再到服务访问缓存或 DB 等存储。

image.png

对于我们的系统来说,数据库是非常重要的一块。因此无论是在稳定性的治理上,还是在开发提效等场景下,数据库相关的治理能力都是我们系统所需具备的能力。

以下列举一些典型的数据库相关的治理场景:

  • 某系统对外提供某查询接口,SQL语句涉及多表join,某些情况下会触发慢查询,耗时长达30s,最终导致 DB 连接池/Tomcat线程池满,应用整体不可用。

  • 应用刚启动,由于数据库Druid连接池还在初始化中,但是此时已经大量请求进入,迅速导致 Dubbo 的线程池满,许多现场卡在初始化数据库连接的过程中,导致业务请求大量报错。

  • 全链路灰度场景中,由于新的应用版本改了数据库表的内容,灰度流量导致线上数据库的数据错乱,业务同学连夜手动订正线上数据。

  • 在项目初期没有对SQL的性能做好考量,随着业务的发展,用户量级的增加,线上遗留老接口的SQL逐渐成为性能瓶颈,因此需要有有效的SQL洞察能力帮助我们发现遗留的SQL,并及时进行性能优化。

  • SQL语句处理时间比较长导致线上业务接口出现大量的慢调用,需要快速定位有问题的慢SQL,并且通过一定的治理手段进行隔离,让业务快速恢复。因此在微服务访问数据层时,实时的SQL洞察能力可以帮助我们快速定位慢的SQL调用。

其实针对大多数的后端应用来讲,系统的瓶颈主要受限于数据库,当然复杂度的业务肯定也离不开数据库的操作。因此数据库问题,也是优先级高的工作,数据库治的理也是微服务治理中必不可少的一环。

数据库治理相关常见场景

下面总结了微服务访问数据库层时,在数据库治理中的常见的一些场景与能力。

image.png

OpenSergo 领域中关于数据库治理的概览

慢SQL治理

慢SQL是比较致命的影响系统稳定性的因素之一,系统中出现慢SQL可能会导致CPU、负载异常和系统资源耗尽等情况。严重的慢SQL发生后可能会拖垮整个数据库,对线上业务产生阻断性的风险。线上生产环境出现慢SQL可能原因如下:

  • 网络速度慢、内存不足、I/O吞吐量小、磁盘空间被占满等硬件原因。

  • 没有索引或者索引失效。

  • 系统数据过多。

  • 在项目初期没有对SQL的性能做好考量。

image.png

对于线上常见的慢SQL问题,MSE 服务治理提供了场景化的解决方式。

SQL 洞察

MSE 提供了秒级的SQL调用监控

image.png

我们可以观察应用和资源API维度的实时数据(细化至秒级),同时 MSE 还提供了SQL的topN列表,我们可以一眼看出RT 高的 SQL 语句,快速定位应用变慢的根因。

image.png

我们通过MSE提供的SQL洞察能力,可以有效分析SQL语句是否写得合理,以及 SQL 执行的并发、RT是否符合系统表现的预期,根据这些SQL洞察的数据,从而可以有效地评估系统的整体表现,为流控降级规则的配置提供重要依据。

SQL的流控降级

我们可以根据MSE 自动识别的SQL语句,可以对出现慢SQL的应用配置线程数维度的流控或降级规则,当出现慢SQL调用时限制同一时刻执行的SQL数量,防止过多的慢SQL语句执行把资源耗尽。

image.png

关于MSE的SQL流控降级能力,MSE支持配置流控、隔离、熔断以及热点限流等四种规则。

  • 流量控制

通过流控能力,为服务接口配置流控规则,让容量范围内的请求通过,多余的请求被拒绝,相当于安全气囊的作用,可以有效保证SQL请求访问的流量控制在系统容量的阈值内。

  • 并发隔离

当流量近似稳态时:并发线程数 =QPS * RT(s),其中 RT 升高,并发线程数升高,代表服务调用出现堆积。采用流量治理提供的服务并发隔离能力,给重要服务调用配置并发线程数限制,相当于一道“软保险”,防止慢SQL或者不稳定的服务过多挤占正常服务资源。

  • 熔断降级

业务高峰期,某些下游的服务提供者大量的数据访问遇到性能瓶颈,出现大量的慢SQL,甚至影响业务。我们对部分非关键服务的数据库访问配置自动熔断规则,当一段时间内的慢调用比例或错误比例达到一定条件时自动触发熔断,后续一段时间服务调用直接返回Mock的结果,这样既可以保障调用端不被堆积的数据访问请求拖垮,从而保障整个业务链路的正常运转。

  • 热点流控

通过热点参数流控能力,自动识别SQL请求访问参数中的 TopN 访问热度的参数值,并对这些参数进行单独流控,避免单个热点访问过载;并且可以针对一些特殊热点访问(如极热门的抢购单品)配置单独的流控值。参数可以是SQL访问中的带有业务属性的条件,如以下 tid 参数的值。

 SELECT * FROM order WHERE tid = 1$

连接池治理

连接池治理是数据库治理中非常重要的一个环节,通过一些链接池的实时指标,我们可以有效地提前识别系统中存在的风险,以下是一些常见的连接池治理的场景。

  • 提前建连

在应用发布或者弹性扩容的场景下,如果刚启动实例中的连接并有没完成建立,但此时实例已经启动完成,Readiness检查已经通过,意味着此时会有大量的业务流量进入新启动的pod。大量的请求阻塞在连接池获取连接的动作上,导致服务的线程池满,大量业务请求失败。如果我们的应用具备提前建连的能力,那么就可以在流量到达前,保持连接请求数在minIdle之上,并且配合小流量预热的能力,那么就可以解决以上这个让人头疼的冷启动问题了。

  • "坏"连接剔除

有时候连接池中会存在一些有问题的连接,可能是底层的网络出现了抖动,也有可能是执行的业务出现了慢、死锁等问题。如果我们可以从连接池的视角出发,及时地发现异常的连接,并且进行及时地剔除与回收,那么就可以保证连接池整体的稳定性,不至于被个别有问题的业务处理或者网络抖动给拖垮。

  • 访问控制

理论上并不是全部数据库表都可以随便访问的,在某些时候,有些重要的表可能对于一些不太重要的服务来说,我们希望它是一个禁写、只读的状态,或者当数据库出现抖动、线程池满的情况下,我们希望减少一些耗时的读库SQL执行,又或者有一些敏感数据的表只允许某个应用去进行读写访问。那么我们就可以通过动态的访问控制能力,实时下发访问控制规则,来做到对于个别方法、应用的SQL面向数据库实例、表的禁读禁写等黑白名单的访问控制。

数据库灰度

微服务体系架构中,服务之间的依赖关系错综复杂,有时某个功能发版依赖多个服务同时升级上线。我们希望可以对这些服务的新版本同时进行小流量灰度验证,这就是微服务架构中特有的全链路灰度场景,通过构建从网关到整个后端服务的环境隔离来对多个不同版本的服务进行灰度验证。MSE 通过影子表的方式,用户可以在不需要修改任何业务代码的情况下,实现数据库层面全链路灰度。

image.png

动态读写分离

image.png

总结

以上这些是MSE推出的一个数据库治理能力的简介,我们从应用的视角出发整理抽象了我们在访问、使用数据库时场景的一些稳定性治理、性能优化、提效等方面的实战经验,对于每一个后端应用来说,数据库无疑是重中之重,我们希望通过我们的数据库治理能力,可以帮助到大家更好地使用数据库服务。

  • 最后提一下服务治理的标准OpenSergo

说明

Q:OpenSergo 是什么? A:OpenSergo 是一套开放、通用的、面向分布式服务架构、覆盖全链路异构化生态的服务治理标准,基于业界服务治理场景与实践形成服务治理通用标准。OpenSergo 的最大特点就是以统一的一套配置/DSL/协议定义服务治理规则,面向多语言异构化架构,做到全链路生态覆盖。无论微服务的语言是 Java, Go, Node.js 还是其它语言,无论是标准微服务还是 Mesh 接入,从网关到微服务,从数据库到缓存,从服务注册发现到配置,开发者都可以通过同一套 OpenSergo CRD 标准配置针对每一层进行统一的治理管控,而无需关注各框架、语言的差异点,降低异构化、全链路服务治理管控的复杂度。

OpenSergo 也会在9月推出数据库治理相关的标准,会进一步抽象与标准化数据库治理相关的能力。目前OpenSergo 社区正在联合各个社区进行进一步的合作,通过社区来一起讨论与定义统一的服务治理标准。当前社区也在联合 bilibili、字节跳动等企业一起共建标准,也欢迎感兴趣的开发者、社区与企业一起加入到 OpenSergo 服务治理标准共建中。欢迎大家加入 OpenSergo 社区交流群(钉钉群)进行讨论:34826335

相关文章
|
6月前
|
存储 人工智能 NoSQL
AI大模型应用实践 八:如何通过RAG数据库实现大模型的私有化定制与优化
RAG技术通过融合外部知识库与大模型,实现知识动态更新与私有化定制,解决大模型知识固化、幻觉及数据安全难题。本文详解RAG原理、数据库选型(向量库、图库、知识图谱、混合架构)及应用场景,助力企业高效构建安全、可解释的智能系统。
|
人工智能 前端开发 JavaScript
代码采纳率从 22% 到 33%,通义灵码辅助数据库智能编码实践
通义灵码本质上是一个AI agent,它已经进行了大量的优化。然而,为了更完美或有效地调用模型的潜在能力,我们在使用时仍需掌握一些技巧。通常,大多数人在使用通义灵码时会直接上手,这是 AI agent 的一个优势,即 zero shot 使用,无需任何上下文即可直接使用通义灵码的能力。
|
7月前
|
存储 弹性计算 Cloud Native
云原生数据库的演进与应用实践
随着企业业务扩展,传统数据库难以应对高并发与弹性需求。云原生数据库应运而生,具备计算存储分离、弹性伸缩、高可用等核心特性,广泛应用于电商、金融、物联网等场景。阿里云PolarDB、Lindorm等产品已形成完善生态,助力企业高效处理数据。未来,AI驱动、Serverless与多云兼容将推动其进一步发展。
357 8
|
9月前
|
人工智能 运维 数据挖掘
瑶池数据库Data+AI驱动的全栈智能实践开放日回顾
阿里云瑶池数据库重磅推出“Data+AI能力家族”,包括DTS AI数据准备、Data Agent系列智能体及DMS MCP统一数据访问服务,重构数据与AI协同边界。通过智能化工具链,覆盖数据全生命周期,提升企业数据开发、分析、治理与运维效率,降低技术门槛,激活数据资产价值,助力企业迈向全栈智能新时代。
|
10月前
|
人工智能 运维 数据挖掘
瑶池数据库开放日:全新发布Data+AI能力家族,赋能企业全栈智能实践
近日,阿里云瑶池数据库生态工具产品重磅升级,推出“Data+AI能力家族”,并举办了为期3天的全栈智能实践开放日活动。发布会上首次公开了 “Data Agent for Analytics、Data Agent for Meta、DAS Agent”等瑶池数据库Data Agent系列能力,以工具智能化 × 智能化工具的双引擎重构数据与AI的协同边界,揭秘AI时代数据价值释放的全新路径。
|
关系型数据库 OLAP API
非“典型”向量数据库AnalyticDB PostgreSQL及RAG服务实践
本文介绍了非“典型”向量数据库AnalyticDB PostgreSQL及其RAG(检索增强生成)服务的实践应用。 AnalyticDB PostgreSQL不仅具备强大的数据分析能力,还支持向量查询、全文检索和结构化查询的融合,帮助企业高效构建和管理知识库。
893 19
|
缓存 NoSQL JavaScript
Vue.js应用结合Redis数据库:实践与优化
将Vue.js应用与Redis结合,可以实现高效的数据管理和快速响应的用户体验。通过合理的实践步骤和优化策略,可以充分发挥两者的优势,提高应用的性能和可靠性。希望本文能为您在实际开发中提供有价值的参考。
425 11
|
弹性计算 安全 关系型数据库
活动实践 | 自建数据库迁移到云数据库
通过阿里云RDS,用户可获得稳定、安全的企业级数据库服务,无需担心数据库管理与维护。该方案使用RDS确保数据库的可靠性、可用性和安全性,结合ECS和DTS服务,实现自建数据库平滑迁移到云端,支持WordPress等应用的快速部署与运行。通过一键部署模板,用户能迅速搭建ECS和RDS实例,完成数据迁移及应用上线,显著提升业务灵活性和效率。

热门文章

最新文章

下一篇
开通oss服务