OPPO云数据库访问服务技术解析

1、背景

MySQL是OPPO使用最广泛的关系数据库,不同编程语言的微服务都是通过MySQL官方的SDK直连真实的数据库实例。这种最传统的使用方式,会给业务开发和数据库运维带来一系列影响效率和稳定性的问题。

  • 不合理的数据库访问,比如不恰当的连接池设置、高危SQL无拦截、无限流和熔断等治理能力
  • 无弹性伸缩能力,单机数据库性能或者容量不足时,扩容非常繁琐低效
  • 缺乏常用的功能特性,不支持读写分离、影子库表、单元化架构、数据库加密
  • 不支持跨语言,并且与应用服务强耦合,编码和升级都非常困难

以上问题,我们讲通过CDAS来解决单MySQL带来的一系列问题。

2、CDAS产品简介

MySQL在并发能力、稳定性、高可用方面久经考验,是绝大多数网联网产品首选的OLTP场景存储组件,但单机MySQL在超高并发、海量存储、OLAP能力上先天不足,因此当数据到达一定量级后一般采用分库分表的方式来水平扩展MySQL,提升系统的整体处理能力。

CDAS基于分片理念设计,目的是解决MySQL单机性能瓶颈,对外提供超过并发、海量存储、支持HTAP的MySQL服务。在一组MySQL集群前搭建一套高可用的代理 + 计算集群,提供分片能力、自动化的弹性伸缩能力、读写分离、影子库、数据加密存储能力,为用户提供一体化的产品。

在这里插入图片描述

CDAS Proxy使用Java语言开发,基于开源产品Apache ShardingSphere Proxy改造而来,并添加了许多高级特性来支持内部业务。我们的开发理念是依托开源的成熟产品来搭建服务,从社区汲取营养的同时也把发现的问题、特性回馈给社区,积极参与、和社区共同发展。

2.1 CDAS产品特点

(1)稳定性

CDAS进行了大量的基准测试、调优,实现了特殊的动态队列 + 线程池模型来保证Proxy的总体并发程度不会由于线程数过多导致上下文切换频繁从而性能下降,同时Proxy在长时间高负载的场景下不会产生Full GC导致业务中断,目前正式环境已有多个QPS:5000+的业务场景使用了CDAS,表现稳定。

(2)高度可扩展

我们建议业务在申请分片表时预估未来35年的数据总量来设定分片总数,前期可申请12个数据库,数据量变大后扩容。
理论上可扩展性和分片总数相关,最大可扩展分片数相等的数据库实例,最大可扩展到250TB,同时Proxy集群也支持在线扩容。

(3)平台化运维

由云平台统一运维、部署,MySQL和Proxy都支持自动化流程申请和变更,自动接入元数据管理系统。

(4)兼容MySQL语法

支持绝大多数MySQL语法。

  • 路由至单数据分片100%兼容
  • 支持分页、去重、排序、分组、聚合、关联等常见查询场景

(5)功能丰富

  • 多种分片算法
  • 自增分布式ID
  • 读写分离,可设置主从同步容忍阈值
  • 影子库
  • HTAP
  • 完善的监控信息:审计日志、慢日志、鉴权

3.核心设计

CDAS的核心目标是解决用户海量数据存储、访问问题,聚焦到分片场景中,主要体现在解析、路由、重写、聚合等逻辑 。

3.1 内核架构

在这里插入图片描述

站在高处看Proxy内核,主要分为连接接入模块、I/O多路复用模块、解析路由执行引擎3个大的部分,左侧可以看到线程模型也分为3块,实际涉及线程资源的还有其他子逻辑,如并行执行线程池等,接下来将围绕多个模型和执行流程了解内核架构的细节。

3.2 线程模型

内核入口层基于Netty实现,从整体上看是一个典型的Netty使用场景,内核图从可以看到主要分为3个部分。

(1)Boss Thread

负责Accept connection,也就是接受、建立连接,客户端一般都会使用连接池技术,因此建立连接的请求不会太多,单线程即可处理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值