Linux 之父出席、干货分享、圆桌讨论,精彩尽在 OpenCloudOS 社区开放日,报名戳 了解详情
写点什么

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

  • 2022 年 6 月 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 年 6 月 14 日 12:172220

评论

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

医疗保健行业如何从区块链中受益?

CECBC

再见了,我的散装研发管理平台;再见了,4台ECS!

阿里云云效

阿里云 DevOps 云原生 研发 敏捷研发

虎符Hoo研究院:Cosmos是如何实现链与链的“港口”相连的?

区块链前沿News

Hoo 虎符交易所 虎符研究院 Cosmos

数据同步与缓存一致性问题

Mars

布隆过滤器 缓存一致性

记录一些Oracle操作命令

wong

oracle

2022年1月视频行业用户洞察:假期影响下活跃用户开始回升

易观分析

移动视频 视频app

迁移学习综述与未来展望 | 社区征文

战场小包

人工智能 迁移学习 新春征文 2月月更

学生管理系统模块4作业

刘洋

#架构实战营 「架构实战营」

浅谈 AI 物联网基础常识 | 社区征文

liuzhen007

AI 新春征文 2月月更

浪潮国资云:国资为引,助力国企上云用数赋智

浪潮云

云计算运维

GitHub疯转120W的嵌入式LINUX系统开发教程

不想秃头

Java Linux 程序员 嵌入式

从冬奥看中国科技(六):千里光伏初长成

脑极体

【架构训练营-模块三】

默光

架构训练营5期

《数字经济全景白皮书》数字冰雪篇 重磅发布

易观分析

数字经济 冬奥会

网络安全kali渗透学习 web渗透入门 如何进行NESSUS漏洞检测

学神来啦

如何理解用户的行为?

石云升

产品经理 用户研究 用户模型 2月月更

【漏洞分析】反序列化漏洞

网络安全学海

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

网络损伤工具大乱斗

声网

Dev for Dev 网络损伤 网络仿真 网络与传输

当前主流视频编码技术浅析| 社区征文

王强

视频编解码 新春征文

会声会影2022重磅发布!会声会影2022全新功能详解

懒得勤快

系统学习 TypeScript(一)——认识 TypeScript

编程三昧

typescript

提权方式及原理简介(面试)

喀拉峻

黑客

netty系列之:EventExecutor,EventExecutorGroup和netty中的实现

程序那些事

Java Netty 程序那些事 2月月更

英特尔2022年投资者大会:以软件解锁更大增长机遇

科技新消息

会声会影2022美颜功能介绍 教你玩转视频美颜

懒得勤快

会声会影2022语音转文字功能怎么用

懒得勤快

黑客马拉松(Hackathon)是什么?

Speedoooo

黑客马拉松 黑客松

晟盾科技加入龙蜥社区,共建开源新生态

OpenAnolis小助手

Linux 开源

安卓隐私沙箱来了!Android Privacy Sandbox简介

XCG00

android

Bloom Filter 优化- CrimsonDB系列论文(一)

Emc

存储 LSM-Tree

AI安全技术总结与展望| 社区征文

herosunly

人工智能 新春征文 2月月更

GPU容器虚拟化:用户态和内核态的技术和实践详解

GPU容器虚拟化:用户态和内核态的技术和实践详解

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