前段时间,sphereex 正式对外推出了面向 的开源金马国际的解决方案--pisanix v0.1.0 版本。pisanix 从设计之初就吸收了 database mesh 的核心思想:通过可编程实现高性能扩展,应对云上数据库治理挑战。这意味着,由 sphereex 创始人 & apache member 张亮提出的 database mesh 正式成为了一个真正可以实现和落地的框架。
是 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_total
、sql_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,配置示例如下:
trafficstrategy
trafficstrategy 描述了数据库访问流量的治理策略,dba 根据实际业务需要进行策略配置,如基于标签的请求路由、sla 驱动的负载均衡、sql 断路和并发控制等。
pisanix 目前已支持基础负载均衡、基于正则的 sql 断路和并发控制,配置示例如下:
databaseendpoint
databaseendpoint 描述了真实的数据库访问端点,它可以是部署在云上的数据库实例,是 dba 关心的重点资源。作为真实数据库的抽象,databaseendpoint 可以被多个 virtualdatabase 所消费,从而将开发人员的视角和 dba 视角进行区分。
pisanix 目前支持 mysql 类型的 databaseendpoint,配置示例如下:
weaveworks 的 socks-shop 是一个面向用户的在线销售袜子商店系统,旨在帮助微服务和云原生技术进行演示和测试,并且提供一个真实可测试的应用程序。该项目使用了以下技术或框架:java spring boot、go、node.js 并使用容器进行构建部署。
以 socks-shop 微服务项目为例,如果使用 pisanix 框架进行治理的流程如下:
由开发人员为 catalogue 服务提交 virtualdatabase 申请虚拟数据库类型
由 dba 为 virtualdatabase 创建关联的 trafficstrategy 和 databaseendpoint
由负责上线的 sre 为 catalogue 服务添加标签
pisanix.io/inject=enabled
,开启 sidecar 注入,然后配置 catalogue 数据库访问信息为 virtualdatabase 中的地址并启动应用
配置完成后,访问 front-end 服务即可验证:
pisanix 的设计思想:database mesh
在《数据库治理的云原生之道 —— database mesh 2.0》文章里提出了一种以数据库为中心的治理模型:
数据库是一等公民:一切抽象都围绕数据库治理行为进行,比如访问控制、流量治理、可观测性等
面向工程师体验:对于开发人员,通过便捷易用的数据库声明和定义,即可继续进行开发,无需关心数据库的位置;对于运维和 dba,提供多种数据库治理行为抽象,实现自动化的数据库可靠性工程
云原生:以开放的生态和实现机制适配不同的云环境,面向云原生构建和实现,而无需担心厂商锁定
详见:
展望
pisanix 项目目前仍处于早期阶段,在接下来的工作中,会首先重点增强流量方面的治理能力,如添加基于分片键的数据分片能力、针对数据访问行为的审计申请、流量运行时资源 qos 等,同时不断提升性能和易用性。未来 pisanix 计划开放插件扩展机制,用户编写适应不同的业务场景的策略,实践 unix “策略与机制分离”的设计哲学。
社区
开源项目千万步,pisanix 才刚起步。开源是一扇门,pisanix 欢迎各位小伙伴一起参与进来,发表自己的想法,分享自己的见解,不管是代码还是文档,issue 还是 pull request,社区一样欢迎。各位乐意帮助数据库治理的小伙伴们,让我们一起来建设 pisanix 社区吧~
目前 pisanix 社区每两周都会组织线上讨论,详细安排如下,我们等你~
作者介绍:
苗立尧,现任 sphereex 云研发负责人,开源布道师,专注于 saas 和 database mesh。从 2015 年起开始接触 kubernetes,是国内最早一批云原生实践者,2016 年创办“容器时代”公众号,原创和翻译引进了 600 余篇技术文章。曾在株式会社ネットスターズ、北京穿杨科技、蚂蚁金服、易宝支付等担任基础设施架构师、云产品负责人、云原生研发工程师等相关职位。
评论