当前位置:网站首页>SphereEx苗立尧:云原生架构下的Database Mesh研发实践
SphereEx苗立尧:云原生架构下的Database Mesh研发实践
2022-08-02 05:36:00 【开源头条】
嘉宾 | 苗立尧
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。
边栏推荐
猜你喜欢
MySQL索引常见面试题(2022版)
HCIP第十七天
zabbix邮件报警和微信报警
Leading the demand and justifying the HR value - the successful launch of the "Human Resource Leading Model HRLM"
MySQL - 多表查询与案例详解
Nacos database configuration
APT + Transform 实现多模块应用Application生命周期分发
MySQL Advanced SQL Statements (2)
Kind of weird!Access the destination URL, the host can container but not
Deep learning - CNN realizes the recognition of MNIST handwritten digits
随机推荐
nodejs的安装和全局配置(超详细哦)
MySQL高级语句(一)
Redis(十一) - 异步优化秒杀
MySQL Index Common Interview Questions (2022 Edition)
pl/sql之神奇的嵌套与变量生命周期
Dataset:机器学习中常用数据集下载链接集合之详细攻略
MySQL(3)
How to install the specified version package with NPM and view the version number
BGP实验(路由反射器,联邦,路由优化)
股价屡创新低 地产SaaS巨头陷入困境 明源云该如何转型自救?
node安装及环境变量配置
MySQL 5.7 安装教程(全步骤、保姆级教程)
Luogu mini game Daquan (everyone who uses Luogu must know)
蚂蚁三面:MQ 消息丢失、重复、积压问题,有哪些解决方案?
MySQL high-level statements (1)
从入门到精通的MySQL数据库视频教程
NPM ---- 安装yarn
Node installation and environment variable configuration
MySQL database video tutorial from beginner to proficient
反向解析dns服务器