SphereEx苗立尧:云原生架构下的Database Mesh研发实践

2023-11-19

​嘉宾 | 苗立尧

2022年7月27日,在由开放原子开源基金会主办的“2022开放原子全球开源峰会”上,SphereEx Mesh实验室负责人、云原生技术专家苗立垚带来了《云原生架构下的Database Mesh的研发实践》的主题演讲。

从云原生架构到Service Mesh

从单体到微服务,应用部署的基础设施规模越来越大,服务之间调用关系越来越复杂,对微服务的治理行为集中在流量控制、可观测性、安全访问、配置管理和高可用等方面。

服务网格通过透明代理层作为数据面接管应用流量,并通过控制面管理和下发服务发现、限流熔断、访问控制、安全证书等各种配置,为云原生环境中的微服务实现治理能力。

服务网格最典型的应用场景是Istio,Istio可以解决开发人员和运营商在分布式或微服务架构方面面临的挑战。无论是从零开始构建应用程序,还是将现有应用程序迁移到原生云,Istio都能提供帮助。

当服务治理遇到数据库治理

当服务治理遇到数据库治理,我们可不可以使用Service Mesh治理数据库的流量?

如果把数据库看作是微服务中的一个节点,那么可以通过Service Mesh对数据库访问进行治理。

数据库拥有一些特殊治理属性,比如通信协议、资源管理、基于数据请求的负载均衡、分库分表,还有可观测性、访问控制等。

2018年,SphereEx创始人张亮提出了Database Mesh概念,至今四年的时间,已经有很多厂商与企业客户对Database Mesh做了实践。

上图是三种典型的Database Mesh实现方式,以Sidecar方式实现数据库分片,将数据库流量管理纳入统一的管控,实现一个分布式数据库。

将ShardingSphere当作Sidecar进行部署,不论是ShardingSphere-JDBC或是ShardingSphere-Proxy,都可以实现数据库流量治理与计算能力的增强。

  • 以Sidecar方式实现数据库分片

  • 将数据库流量管理纳入统一的管控

    中等或大规模厂商往往会采用统一的Mesh管控,一般由专门的团队负责所有关于服务方面的治理,数据库也会被列入到治理范畴之中。其中,两套Sidecar受控于同一个服务网格,流量治理、访问控制、可观测性都通过统一的Mesh管控完成。

  • 实现一个分布式数据库

    利用Sidecar做接入,将计算、事务、存储管理都放在单独的节点中,构成分布式数据库。

以上三种实现都聚焦在数据库流量治理的部分,如果将其称为Database Mesh 1.0,那么2.0阶段又应该有哪些特征呢?除了流量之外,数据库治理还应该包括哪些方面?如何通过一个标准框架,提升开发人员的体验?如何减少SRE、DBA的工作负担,还可以为各种场景提供扩展性支持?

基于上述问题的思考,我们构建了Database Mesh 2.0的概念,希望构建高效可编程的数据库治理体验:

  • 进一步减轻开发人员的心智负担,提高开发效率,提供透明和无感的数据库基础设施使用体验;

  • 以可配置、可插拔、可编程的方式,实现一个覆盖数据库流量、运行时资源和稳定性保障等方面的治理框架;

  • 以异构数据源、云原生数据库、分布式数据库等多个数据库领域的典型场景提供标准的使用界面。

Database Mesh 2.0希望提供一种以数据库为中心的治理框架:

  • 数据库是一等公民:一切抽象围绕数据库治理行为进行,比如控制访问、流量治理、可观测性等;

  • 面向工程师体验:对于开发人员,通过便捷易用的数据库声明和定义即可进行开发,无需关心数据库的位置;对于运维和DBA,提供多种数据库治理行为抽象,实现自动化的数据库可靠性治理;

  • 云原生:以开放的生态和实现机制适配不同的云环境,面向云原生构建和实现,而无需担心厂商锁定。

设计一个面向数据库的治理框架

前面已经提到了Database Mesh的概念以及我们想做的事情,那么该如何把它从理论变成实际项目呢?

Kubernetes利用自身强大的扩展能力,如Sidecar模式、Admission Webhook、Custom Resource Definition等,为构建平台上的平台提供了便利。

Pisanix是面向Database Mesh的解决方案,由Go、Rust编写,适配Kubernetes环境,目前支持MySQL协议,有三个主要功能:

  • SQL感知的流量治理:借助SQL解析能力,提供对流量的负载均衡、审计、访问控制、可观测性等功能;

  • 面向运行时的资源可编程:通过多种Linux内核能力,实现流量治理运行时的资源可配置和可编程;

  • 数据库可靠性工程:以工程师为中心、以数据库可靠性为原则设计产品形态,建立数据库上云统一界面。

主要组件有:

  • Pisa-Controller:Pisanix的控制面,Go语言实现,负责配置转换和下发等;

  • Pisa-Proxy:Pisanix的数据面,Rust语言实现,负责流量治理相关能力,以Sidecar形式部署;

  • Pisa-Daemo:Pisanix的数据面,Rust语言实现,负责资源治理相关能力,以Daemon形式部署。 

Pisa-Proxy的整体流程

Pisa-Proxy可以看作是面向数据库流量的负载均衡器,主要工作流程如下:

  • 目前Pisa-Proxy支持MySQL协议,将自己伪装成数据库服务器,应用连接配置只需要修改访问地址即可建连;

  • Pisa-Proxy通过读取应用发来的握手请求和数据包,得到应用希望执行的SQL;

  • 对该SQL进行词法和语法解析后得到对应AST;

  • 基于AST实现高级访问控制和SQL防火墙能力;

  • 访问控制和防火墙通过后,SQL提交执行;

  • SQL执行阶段的指标将采集Prometheus Metrics;

  • 根据负载均衡策略获取执行该语句的后端数据库连接;

  • 如果连接池为空,将根据配置建立和后端数据库的连接;

  • SQL将从该链接发往后端数据库,并读取相应返回结果;

  • SQL执行结果进行组装后返回给业务应用。

MySQL Protocol

Pisa-Proxy作为服务端监听数据库连接请求的流程为:

  • 接收客户端发来的TCP请求并建连;

  • 向客户端发送握手请求,设置服务端标志位;

  • 读取客户端发来的握手响应,验证密码等配置;

  • 向客户端发送握手结果。

Pisa-Proxy作为客户端连接后端数据库的流程为:

  • 和后端数据库建立TCP连接;

  • 接收后端数据库发来的握手请求;

  • 根据收到的握手请求中的标志位组装客户端握手请求,如SSL、AuthSwitch、密码加密等;

  • 与后端数据库交换握手信息;

  • 接受后端数据库发来的握手结果。

SQL Parser

Pisa-Proxy使用Grmtools根据MySQL yacc构建Parser:

  • Parser中通过Scanner读取SQL Token,经过词法分析、语法分析后生成抽象语法树AST;

  • 抽象语法树中可以得到SQL要操作的列和表信息;

  • 基于列、表信息等可以实现细粒度的访问控制、分库分表、加解密等能力。

负载均衡

Pisa-Proxy支持多种负载均衡策略,现已支持:

  • 基础负载均衡(随机、轮询);

  • 读写分离(静态规划和主从感知)。

下一步将支持:

  • 简单分库分表:支持一定计算规模内的分库分表规则;

  • 标签定义规则:通过标签匹配的方式,指定SQL路由到不同的数据源;

  • 未来将提供策略框架,用户可以自定义策略,注入框架后即可使用。

可观测性

Pisa-Proxy支持多种可观测性指标,现有指标为:

  • SQL_PROCESSED_TOTAL;

  • SQL_PROCESSED_DURATION;

  • SQL_UNDER_PROCESSING。

下一步将支持:

  • Latency、Throughput、Error Rate;

  • TopN Queries by Total Time、TopN Queries by Count;

  • SQL Runtime Memory。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SphereEx苗立尧:云原生架构下的Database Mesh研发实践 的相关文章

随机推荐

  • Vue中鼠标悬停更换图片/文字内容,动态展示/修改某些属性

    Vue中鼠标悬停更换图片 文字内容 动态展示 修改某些属性 鼠标悬停时 mouseenter 鼠标离开时 mouseleave 利用以上来绑定相应方法 例如 div 分别为鼠标悬停时和离开时绑定方法changeImageSrc 并传递参数
  • GBase 8s内置数据类型—大对象数据类型

    大对象数据类型 大对象数据类型已定义表与大对象存储分开大对象是逻辑存储在表列中但物理存储与列无关的数据对象 大对象是独立于表存储的 因为它们通常存储大量的数据 将此数据与表分开可提高性能 大对象分为简单大对象和智能大对象 简单大对象又分为B
  • MyBatis 学习笔记(四)---源码分析篇---配置文件的解析过程(一)

    概述 前几篇我们介绍了MyBatis的一些基本特性 对MyBatis有了个初步了解 接下来 我们将着手来分析一下MyBatis的源码 从源码层面复盘MyBatis的执行流程 思维导图概括 配置文件解析过程分析 有了上述思维导图 我们对配置文
  • jar包远程调试

    以冰蝎为例 新建一个Java项目 将冰蝎的jar包拷贝进lib文件夹 需要创建一个lib文件夹 右键选择Add as Library 编辑配置 添加远程jvm调试 在其jar文件夹下打开cmd窗口 运行如下命令 java agentlib
  • matlab求矩阵 均值、标准差、最大值以及reshape()函数

    1 读入图像 矩阵 求矩阵均值的方法 gt gt a 1 2 3 4 5 6 7 8 9 a 1 2 3 4 5 6 7 8 9 gt gt mean a 1 求矩阵的所有列的均值 ans 4 5 6 gt gt mean a 求矩阵的所有
  • cas5.3.2单点登录-Cas Server开启Oauth2.0协议(二十)

    原文地址 转载请注明出处 https blog csdn net qq 34021712 article details 82290876 王赛超 学习Cas这么久了 一直在按照CAS自身的协议接入 Cas的强大在于有官方的插件 可以支持其
  • 修改代码后,刷新页面没有更新的解决办法。Disable cache禁止缓存

    工作内容 不对外开放 很多时候 我们修改代码并保存后 到浏览器看效果 发现并没有更新 刷新页面后也没有更新 可能是你的缓存开启了 Network 里勾选Disable cache重新加载页面后 会发现浏览器使用缓存了 打开Disable c
  • Vue中高德地图获取经纬度及逆地理解析的两种方式CDN或NPM(协议必须是https) 否则定位会一直失败

    高德地图获取经纬度 npm方式 npm i amap amap jsapi loader save import AMapLoader from amap amap jsapi loader npm方式 export function NP
  • SimSiam:Exploring Simple Siamese Representation Learning

    Siamese网络最大化了一个图像的两个增强之间的相似性 服从于避免崩溃解的某些条件 在本文中 SimSiam即使 不使用以下任何一项也可以学习有意义的表示 i 负样本对 ii 大批量 iii 动量编码器 我们的实验表明 停止梯度stop
  • 推荐工具!使终端便于 DevOps 和 Kubernetes 使用

    如果你熟悉 DevOps 和 Kubernetes 的使用 就会知道命令行界面 CLI 对于管理任务有多么重要 好在现在市面上有一些工具可以让终端在这些环境中更容易使用 在本文中 我们将探讨可以让工作流程简化的优秀工具 帮助你在 DevOp
  • ai人工智能制作视频_建立一个人工智能驱动的可搜索视频档案

    ai人工智能制作视频 In this post I ll show you how to build an AI powered searchable video archive using machine learning and Goo
  • 为什么要使用零知识证明来开发跨链协议

    用户需要什么样的跨链服务 在过去的几年当中出现了各种各样的独立公链以及以太坊 Layer 2 由于在安全性 低成本 快速交易以及开发者和用户社区差异等方面 不同链都具有各自不同的优势 用户在不同链之间切换使用的行为是很常见的 比起以太坊链
  • B端产品设计与实现总结

    Author skatexg Time 2022 03 06 适用范围 B端产品的迭代需求和研发管理总结 end
  • win10关闭电池保护模式_Windows10如何关闭电源保护模式?

    展开全部 首先 在Win10系统桌面上32313133353236313431303231363533e78988e69d8331333365633962能看到笔记本电源标志 当然台式电脑是没有这个图标的 这里的节电模式仅适用于笔记本电脑
  • 设置HTML为桌面壁纸

    我们程序员每天都面对着静态或动态壁纸 但是谁不想拥有一个炫酷的html桌面呢 先看一下效果 下面是几例使用html当桌面进行交互的实际效果 1 桌面可以玩魔方 2 飞机跟随鼠标移动 3 火箭跟随鼠标移动 4 可以通过调节参数的星空 英文自查
  • springboot-rocketmq日志rocketmq_client.log问题

    问题描述 springboot配置rocketmq后 会写入日志到rocketmqlogs目录下的rocketmq client log文件中 且日志过于庞大 解决 1 启动类增加代码 System setProperty ClientLo
  • 因果推断dowhy之-ihdp数据集上的案例学习

    0x01 案例背景 IHDP Infant Health and Development Program 就是一个半合成的典型数据集 用于研究 专家是否家访 对 婴儿日后认知测验得分 之间的关系 原数据集是基于随机控制实验进行的 因此可以获
  • matlab 曲线拟合插值问题

    引言 polyfit 和polyval 经常用于多项式拟合和插值取点 但不能乱用 原理 polyfit根据一些列的点去拟合成一个多项式 多项式的阶次可以设定 假设对于某一小段数据 如图 现在想根据当前点的变化趋势拟合多项式并插值 使用pol
  • 源码漏洞思路笔记

    根据文件名称判断内容 部分文件没有固定的名称和位置 取决于编写网站人员 以下是一般情况 admin 后台路径 data 处理数据 install 安装 menber 会员中心 temple 模板文件 bak文件 数据库备份 bak是back
  • SphereEx苗立尧:云原生架构下的Database Mesh研发实践

    嘉宾 苗立尧 2022年7月27日 在由开放原子开源基金会主办的 2022开放原子全球开源峰会 上 SphereEx Mesh实验室负责人 云原生技术专家苗立垚带来了 云原生架构下的Database Mesh的研发实践 的主题演讲 从云原生