限时领|《AI 百问百答》专栏课+实体书(包邮)! 了解详情
写点什么

面向 Database Mesh 的解决方案 Pisanix 已被正式开源

  • 2022-06-14
  • 本文字数:3888 字

    阅读完需:约 13 分钟

面向 Database Mesh 的解决方案 Pisanix 已被正式开源

前段时间,SphereEx 正式对外推出了面向 Database Mesh 的开源解决方案--Pisanix v0.1.0 版本。Pisanix 从设计之初就吸收了 Database Mesh 的核心思想:通过可编程实现高性能扩展,应对云上数据库治理挑战。这意味着,由 SphereEx 创始人 & Apache Member 张亮提出的 Database Mesh 正式成为了一个真正可以实现和落地的框架。

 

Pisanix 是 SphereEx 面向 Database Mesh 推出的开源解决方案,由 Go 和 Rust 编写,适配 Kubernetes 环境,目前已支持 MySQL 协议。其主要包括 Pisa-Controller、Pisa-Proxy 和 Pisa-Daemon(即将推出)这三个组件,帮助用户轻松实现基于 Database Mesh 框架下 SQL 感知的流量治理、面向运行时的资源可编程、数据库可靠性工程等能力,助力用户云上数据库治理。

Pisanix v0.1.0 版本特性


本次正式发布的 Pisanix v0.1.0 版本,已支持的特性有:

 

  • Pisa-Controller

  • 支持 Sidecar 注入

  • 读取 kubernetes 自定义资源:VirtualDatabase, TrafficStategy 和 DatabaseEndpoint 并转换为 Pisa-Proxy 配置

  • Pisa-Proxy

  • 支持 kubernetes Sidecar 部署并从 Pisa-Controller 获取配置

  • 支持多端口 MySQL 协议代理

  • 支持连接池和基础负载均衡

  • 实现了基于 Yacc 的 SQL 解析器,已支持:SELECT、INSERT、UPDATE、DELETE、PREPARE、EXECUTE、BEGIN、SET

  • 支持基于正则的 SQL 断路器

  • 支持 SQL 并发控制:基于正则,限制指定时间内执行的 SQL 数量

  • 可观测性:支持 sql_processed_totalsql_processed_duration

  • 支持非 kubernetes 环境以独立组件部署

Pisanix 简述


Pisanix 采用控制面和数据面分离的经典部署模式,通过各种 CustomResourceDefinition 支持统一的数据库接入声明配置、支持可编程的数据库访问资源限制、支持标准化的数据库自动维护体验,实现多种数据库治理行为的云原生编排。

 

目前 Pisanix 主要包含三部分能力:

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

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

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

 


Pisa-Controller


Pisa-Controller 是 Pisanix 的控制面,由 Go 语言实现,是必选组件。它负责对数据面组件的管控,是 Pisanix 所有配置的入口。其主要功能为:

  • Sidecar 注入:借助 MutationAdmissionWebhook 向指定 Pod 中注入 Pisa-Proxy 容器

  • Pisa-Proxy 配置下发和指标采集:获取并转换集群里 CRD 格式的服务发现、负载均衡、限流、SQL 防火墙规则等,并下发给 Pisa-Proxy,以及采集 Pisa-Proxy 运行时的各种指标

  • Pisa-Daemon 配置转换和指标采集:获取并转换集群里 CRD 格式的流量 QoS 等规则,并下发给 Pisa-Daemon,以及采集 Pisa-Daemon 运行时的各种指标

Pisa-Proxy


Pisa-Proxy 是 Rust 实现的高性能代理,是必选组件。Pisa-Proxy 以 Sidecar 方式与业务应用部署在同一个 Pod 中,监听 MySQL 协议获取应用访问数据库的流量,并提供各种治理能力:

  • SQL 流量治理:通过解析 SQL,实现多种负载均衡策略、限流等

  • 访问控制:根据用户和数据权限关系,实现细粒度的权限控制

  • SQL 防火墙:阻止高危 SQL 语句执行

  • 可观测性:暴露各种数据库访问指标:如吞吐、延时等

Pisa-Daemon(即将推出)


Pisa-Daemon 是节点级数据面,是可选组件。Pisa-Daemon 部署在 kubernetes 集群中每个节点上,通过宿主机内核的各种能力提供资源管理等功能。现已支持:

  • 运行时流量管理:借助 eBPF 等技术为数据库访问流量提供 QoS 保证,减少流量之间的相互干扰

Pisanix 示例


在 Database Mesh 中,治理框架依赖于如下工作负载:

  • 虚拟数据库:开发人员视角里一个可以被访问的数据库端点

  • 流量策略:对数据库访问流量的治理策略,如分库分表、负载均衡、并发控制、断路

  • 访问控制:根据指定规则提供细粒度的访问控制,如表级别

  • 安全声明:数据安全性声明,如数据加密等

  • 审计申请:记录应用对数据库的操作行为,如接入风控系统

  • 可观测性:数据库的访问流量、运行状态、性能指标等可观测性的配置

  • 事件总线:接受数据变更的事件总线

  • QoS 声明:提高数据库整体 SLO 指标而设定的资源 QoS 指标

  • 备份计划:按计划任务的方式执行数据库备份

  • Schema 流水线:以代码方式管理数据库 schema 变更,提高数据库 DDL 和 DML 变更的成功率

 

目前 Pisanix 已支持 VirtualDatabase、TrafficStrategy 和 DatabaseEndpoint 三个 CustomResourceDefinition。

VirtualDatabase


VirtualDatabase 是所有数据库治理行为发生的中心概念。对于开发人员来说,VirtualDatabase 代表了数据库访问的端点,对于 DBA 来说代表了一个逻辑的数据库,并且需要为该 VirtualDatabase 提供实际的后端数据源 DatabaseEndpoint,以及指定流量策略 TrafficStrategy。

 

Pisanix 目前支持 MySQL 类型的 VirtualDatabase,配置示例如下:

 

apiVersion: core.database-mesh.io/v1alpha1kind: VirtualDatabasemetadata:name: cataloguenamespace: defaultspec:services:- databaseMySQL: # 声明虚拟数据库类型为 MySQLdb: socksdb # 声明虚拟数据库 schemahost: 127.0.0.1 # 虚拟数据库访问地址port: 3306 # 虚拟数据库访问端口user: catalogue_user # 虚拟数据库访问用户名password: default_password # 虚拟数据库访问密码name: mysql # 虚拟数据库名称trafficStrategy: catalogue # 声明指定虚拟数据库流量策略

复制代码

 

TrafficStrategy


TrafficStrategy 描述了数据库访问流量的治理策略,DBA 根据实际业务需要进行策略配置,如基于标签的请求路由、SLA 驱动的负载均衡、SQL 断路和并发控制等。

 

Pisanix 目前已支持基础负载均衡、基于正则的 SQL 断路和并发控制,配置示例如下:

 

apiVersion: core.database-mesh.io/v1alpha1kind: TrafficStrategymetadata:name: cataloguenamespace: defaultspec:loadBalance: # 声明虚拟数据库访问负载均衡策略simpleLoadBalance: # 声明负载均衡策略为基础负载均衡kind: random # 声明负载均衡策略为随机selector:matchLabels: # 声明标签选择器以选择目标 DatabaseEndpointsource: catalogue
复制代码

 

DatabaseEndpoint


DatabaseEndpoint 描述了真实的数据库访问端点,它可以是部署在云上的数据库实例,是 DBA 关心的重点资源。作为真实数据库的抽象,DatabaseEndpoint 可以被多个 VirtualDatabase 所消费,从而将开发人员的视角和 DBA 视角进行区分。

 

Pisanix 目前支持 MySQL 类型的 DatabaseEndpoint,配置示例如下:

 

apiVersion: core.database-mesh.io/v1alpha1kind: DatabaseEndpointmetadata:name: catalogue-dbnamespace: defaultspec:database:MySQL: # 声明数据源类型为 MySQLdb: socksdb # 声明数据库 schemahost: cataloguedb.codtynlacssn.rds.cn-northwest-1.amazonaws.com.cn # 声明数据源地址port: 3306 # 声明数据源访问端口user: root # 声明数据源访问用户名password: fake_password # 声明数据源访问密码
复制代码

 

Weaveworks 的 Socks-shop 是一个面向用户的在线销售袜子商店系统,旨在帮助微服务和云原生技术进行演示和测试,并且提供一个真实可测试的应用程序。该项目使用了以下技术或框架:Java Spring Boot、Go、Node.js 并使用容器进行构建部署。

 

以 Socks-shop 微服务项目为例,如果使用 Pisanix 框架进行治理的流程如下:

  1. 由开发人员为 Catalogue 服务提交 VirtualDatabase 申请虚拟数据库类型

  2. 由 DBA 为 VirtualDatabase 创建关联的 TrafficStrategy 和 DatabaseEndpoint

  3. 由负责上线的 SRE 为 Catalogue 服务添加标签 pisanix.io/inject=enabled,开启 Sidecar 注入,然后配置 Catalogue 数据库访问信息为 VirtualDatabase 中的地址并启动应用

 

配置完成后,访问 front-end 服务即可验证:

 


Pisanix 的设计思想:Database Mesh


在《数据库治理的云原生之道 —— Database Mesh 2.0》文章里提出了一种以数据库为中心的治理模型:

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

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

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

 


详见: https://www.database-mesh.io

展望


Pisanix 项目目前仍处于早期阶段,在接下来的工作中,会首先重点增强流量方面的治理能力,如添加基于分片键的数据分片能力、针对数据访问行为的审计申请、流量运行时资源 QoS 等,同时不断提升性能和易用性。未来 Pisanix 计划开放插件扩展机制,用户编写适应不同的业务场景的策略,实践 Unix “策略与机制分离”的设计哲学。

社区


开源项目千万步,Pisanix 才刚起步。开源是一扇门,Pisanix 欢迎各位小伙伴一起参与进来,发表自己的想法,分享自己的见解,不管是代码还是文档,issue 还是 pull request,社区一样欢迎。各位乐意帮助数据库治理的小伙伴们,让我们一起来建设 Pisanix 社区吧~

 

目前 Pisanix 社区每两周都会组织线上讨论,详细安排如下,我们等你~

邮件列表

 

https://groups.google.com/g/database-mesh

英文社区双周会(2022 年 2 月 27 日起),周三 9:00AM PST

 

https://meet.google.com/yhv-zrby-pyt

中文社区双周会(2022 年 4 月 27 日起),周三 9:00 PM GMT+8

 

https://meeting.tencent.com/dm/6UXDMNsHBVQO

 

微信小助手

 

pisanix

 

Slack

 

https://databasemesh.slack.com/

 

会议记录

 

https://bit.ly/39Fqt3x

 


作者介绍:

苗立尧,现任 SphereEx 云研发负责人,开源布道师,专注于 SaaS 和 Database Mesh。从 2015 年起开始接触 Kubernetes,是国内最早一批云原生实践者,2016 年创办“容器时代”公众号,原创和翻译引进了 600 余篇技术文章。曾在株式会社ネットスターズ、北京穿杨科技、蚂蚁金服、易宝支付等担任基础设施架构师、云产品负责人、云原生研发工程师等相关职位。

2022-06-14 12:1711073

评论

发布
暂无评论
发现更多内容

自动化,怎么能少了性能测试

飞算JavaAI开发助手

网络安全之内核提权漏洞深入分析

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 漏洞挖掘

Java面试题库答案(技术+人事)

Java架构追梦

Java java面试 后端开发 程序员面试、

云原生时代的搜索服务算力管理

百度Geek说

架构 云原生 后端

张文骁:游戏开发的“零件人”梦碎之后|OneFlow U

OneFlow

堪称完美的SQL调优笔记居然是百万年薪阿里P8大佬熬肝纯手打,内容简直太香

Java架构追梦

Java 程序员 java面试 后端开发

nginx配置系列(一)nginx配置语法解读

乌龟哥哥

4月月更

宜搭小技巧|巧用审批按钮,流程随心流转

一只大光圈

低代码 数字化 钉钉宜搭

阿里云EMAS旗下低代码平台Mobi开放定向内测

移动研发平台EMAS

阿里云 低代码 公有云 研发工具 全端

编程好习惯

源字节1号

软件开发

精巧的Boyer-Moore投票算法

皓月

算法

关于一家企业的成长性评价,其评价维度都有哪些?

企评家

企业 分析 成长性 评价 企业成长性分析

区块链合约安全系列(一)公链合约权限校验引发的严重安全问题

BSN研习社

区块链

如何用 Serverless 低成本打造个人专属网盘?

阿里巴巴云原生

阿里云 Serverless 云原生 网盘 低成本

多方安全计算(MPC)发展脉络及应用实践

洞见科技

数据安全 隐私计算 多方安全计算 密码学和算法

恒源云(Gpushare)_模块化oss数据上传小技巧

恒源云

深度学习 GPU服务器

企业团队协同软件,SaaS模式产品快速增长

小炮

SaaS 企业团队协同

受信通院之邀出席全球信息系统稳定性峰会,数列技术实力再获认可

TakinTalks稳定性社区

架构训练营毕业总结

Geek_16d2b8

架构训练营

利器解读!Linux 内核调测中最最让开发者头疼的 bug 有解了|龙蜥技术

OpenAnolis小助手

开源 内存 技术分享 内核 龙蜥大讲堂

数据库管理系统的未来是什么?

CnosDB

IoT 时序数据库 开源社区 CnosDB infra

2022年短视频电商品牌营销专题—手机品牌抖音营销分析报告

极客天地

易观分析发布:证券类APP用户体验指数评测框架

易观分析

证券app

聚焦新基建,企业如何实现供应链管理再升级?

数商云

产业互联网 新基建 供应链

【今晚19点】关于论文复现赛,你想知道的都在这里啦!

OpenI启智社区

PaddlePaddle 论文复现

腾讯云百万容器镜像安全治理运营实践

腾讯安全云鼎实验室

安全服务

架构训练营模块九作业

Geek_16d2b8

架构训练营

与多家机构战略合作,背后彰显PlatoFarm元宇宙龙头的实力

BlockChain先知

企评家|上海星光电影股份有限公司成长性报告简述文章

企评家

大数据 企业 企业评价 企业大数据 企业成长性

被裁后半月面试8家公司无果,凭借这份Java面试指南成功入职阿里

Java全栈架构师

程序员 JVM 高并发 架构师 java面试

虎符Hoo即将上线现货网格交易功能

区块链前沿News

虎符交易所

面向 Database Mesh 的解决方案 Pisanix 已被正式开源_语言 & 开发_苗立尧_InfoQ精选文章