【AICon】探索RAG 技术在实际应用中遇到的挑战及应对策略!AICon精华内容已上线73%>>> 了解详情
写点什么

面向 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:179809

评论

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

数牍科技亮相上海 AI 基金“AI 驱动企业转型” 应用场景战略合作仪式,隐私计算拓展AI应用疆域

夏令营|第五届埃文网络安全技能训练营火热报名中

郑州埃文科技

理解Linux 终端、终端模拟器和伪终端

swordholder

Linux Shell SSH Linux Kenel

日更总结 6月日更 21天写作

万里无云万里天

6月日更

互联网产品经理之需求的一生

路边水果摊

产品经理

从装大象中我们学会了什么设计模式

skow

Java 面试 后端 设计模式

10万QPS,K6、Gatling和FunTester对比测试

FunTester

性能测试 接口测试 测试框架 压力测试 测试开发

阿里P9看了都说牛B!阿里巴巴史上最牛的分布式核心原理深度解析全彩手册

Java架构追梦

Java 阿里巴巴 架构 面试 分布式核心原理解析

工商银行:应用多k8s集群管理及容灾实践

华为云开发者联盟

容器 多云 工商银行 k8s集群 Karmada

Go 学习笔记之 函数

架构精进之路

Go 语言 7月日更

全面解读自动驾驶数据存储关键

焱融科技

人工智能 自动驾驶 云计算 高性能 文件存储

目前有哪些好用的用例管理工具?

万事ONES

测试用例 ONES 测试管理

揪出那个无主键的表

Simon

MySQL 主键

智能猫量化机器人炒币系统开发【专业定制、现成源码】

获客I3O6O643Z97

DAPP智能合约交易系统开发 量化策略 量化跟单 量化交易源码

鸿蒙轻内核源码分析:掌握信号量使用差异

华为云开发者联盟

鸿蒙 数据结构 信号量 结构体 OpenHarmony

有哪些好用的团队文档和技术资料管理的工具?

万事ONES

在线文档 ONES 协同办公

由浅入深C A S

程序猿阿星

CAS 自旋锁

我写什么,你们决定

喵叔

铂金10:能工巧匠-ThreadLocal如何为线程打造私有数据空间

MetaThoughts

Java 后端 多线程 并发

Eureka可用性解读

赵镇

Eureka

Mtail导致Nginx报警延迟

BUG侦探

运维 监控 日志

细说.NET 缓存

喵叔

7月日更

【LeetCode】 H 指数 IIJava题解

Albert

算法 LeetCode 7月日更

英特尔中国研究院宋继强:AI技术已成为推动数字化转型的超级力量|WAIC 2021

E科讯

程序员的自我修养-用科学的方法提高交付质量

刘绍

程序员 软件工程 软件质量 TDD 单元测试

玩转Spring Boot Actuator集成,基操,勿六

白亦杨

Java

台达DOP-100系列触摸屏(LUA程序编写用户管理应用)

林建

lua 台达 触摸屏 用户管理 DOP-100

详解 nebula 2.0 性能测试和 nebula-importer 数据导入调优

NebulaGraph

数据库 开源 图数据库

云图说|ASM灰度发布,让服务发布变得更敏捷、更安全

华为云开发者联盟

灰度发布 application 云图说 应用服务网格服务 Service Mesh (ASM)

FIL币最新价格怎么样?FIL币最新消息是什么?

直击技术最前沿 | Amazon S3增加新的存档访问层

亚马逊云科技 (Amazon Web Services)

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