乐趣区

关于数据库:SphereEx-正式开源面向-Database-Mesh-的解决方案-Pisanix

明天,SphereEx 正式对外推出了面向 Database Mesh 的开源解决方案 – Pisanix v0.1.0 版本。Pisanix 从设计之初就排汇了 Database Mesh 的核心思想:通过可编程实现高性能扩大,应答云上数据库治理挑战。这标记着 Database Mesh 不再停留于纸上,而成为了一个真正能够实现和落地的框架。

Pisanix(https://github.com/database-mesh/pisanix)是 SphereEx 面向 Database Mesh 推出的开源解决方案,由 Go 及 Rust 编写,适配 Kubernetes 环境,目前已反对 MySQL 协定。其次要包含 Pisa-Controller、Pisa-Proxy 和 Pisa-Daemon(行将推出)三个组件,帮忙用户轻松实现基于 Database Mesh 框架下 SQL 感知的流量治理、面向运行时的资源可编程、数据库可靠性工程等能力,助力用户云上数据库治理。

1 Pisanix v0.1.0 版本个性

本次正式公布的 Pisanix v0.1.0 版本,已反对的个性有:

  • Pisa-Controller
  • 反对 Sidecar 注入
  • 读取 Kubernetes 自定义资源:VirtualDatabase, TrafficStrategy 和 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 环境以独立组件部署

2 Pisanix 简述

Pisanix 采纳管制面和数据面拆散的经典部署模式,通过各种 CustomResourceDefinition 反对对立的数据库接入申明配置、反对可编程的数据库拜访资源限度、反对标准化的数据库主动保护体验,实现多种数据库治理行为的云原生编排。

目前 Pisanix 次要蕴含三局部能力:

  • SQL 感知的流量治理 :借助 SQL 解析能力,提供对流量的负载平衡、审计、访问控制、可观测性等性能;
  • 面向运行时的资源可编程 :通过多种 Linux 内核能力,实现流量治理运行时的资源可配置和可编程;
  • 数据库可靠性工程 :以工程师为核心、以数据库可靠性为准则设计产品状态,建设数据库上云对立界面。

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

  • Sidecar 注入:借助 MutatingAdmissionWebhook 向指定 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 保障,缩小流量之间的互相烦扰。

3 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/v1alpha1
kind: VirtualDatabase
metadata:
  name: catalogue
  namespace: default
spec:
  services:
  - databaseMySQL:               # 申明虚构数据库类型为 MySQL
      db: socksdb                # 申明虚构数据库 schema
      host: 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/v1alpha1
kind: TrafficStrategy
metadata:
  name: catalogue
  namespace: default
spec:
  loadBalance:                   # 申明虚构数据库拜访负载平衡策略
    simpleLoadBalance:           # 申明负载平衡策略为根底负载平衡
      kind: random               # 申明负载平衡策略为随机
  selector:
    matchLabels:                 # 申明标签选择器以抉择指标 DatabaseEndpoint
      source: catalogue

DatabaseEndpoint
DatabaseEndpoint 形容了实在的数据库拜访端点,它能够是部署在云上的数据库实例,是 DBA 关怀的重点资源。作为实在数据库的形象,DatabaseEndpoint 能够被多个 VirtualDatabase 所生产,从而将开发人员的视角和 DBA 视角进行辨别。

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

apiVersion: core.database-mesh.io/v1alpha1
kind: DatabaseEndpoint
metadata:
  name: catalogue-db
  namespace: default
spec:
  database:
    MySQL:                        # 申明数据源类型为 MySQL
      db: socksdb                 # 申明数据库 schema
      host: 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 服务即可验证:

4 Pisanix 设计思维:Database Mesh

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

  • 数据库是一等公民:所有形象都围绕数据库治理行为进行,比方访问控制、流量治理、可观测性等;
  • 面向工程师体验:对于开发人员,通过便捷易用的数据库申明和定义,即可持续进行开发,无需关怀数据库的地位;对于运维和 DBA,提供多种数据库治理行为形象,实现自动化的数据库可靠性工程;
  • 云原生:以凋谢的生态和实现机制适配不同的云环境,面向云原生构建和实现,而无需放心厂商锁定。点击并拖拽以挪动

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

5 瞻望

Pisanix 我的项目目前仍处于晚期阶段,在接下来的工作中,会首先重点加强流量方面的治理能力,如增加基于分片键的数据分片能力、针对数据拜访行为的审计申请、流量运行时资源 QoS 等,同时一直晋升性能和易用性。将来 Pisanix 打算凋谢插件扩大机制,用户编写适应不同的业务场景的策略,实际 Unix“策略与机制拆散”的设计哲学。

6 社区

开源我的项目千万步,Pisanix 才刚刚起步。开源是一扇门,Pisanix 欢送各位小伙伴一起参加进来,发表本人的想法,分享本人的见解,不论是代码还是文档,issue 还是 pull request,社区一样欢送。在这里,咱们诚挚邀请对云原生及数据库治理畛域感兴趣的小伙伴退出咱们,独特建设 Pisanix 社区。

目前 Pisanix 社区每两周都会组织线上探讨,具体安顿如下,咱们等你。

表列 A 表列 B
邮件列表 https://groups.google.com/g/d…
英文社区双周会(2022 年 2 月 27 日起),周三 9:00 AM PST https://meet.google.com/yhv-z…
中文社区双周会(2022 年 4 月 27 日起),周三 9:00 PM GMT+8 https://meeting.tencent.com/d…
微信小助手 pisanix
Slack https://databasemesh.slack.com/

​欢送点击链接,理解更多内容:

Pisanix 官网:https://www.database-mesh.io/ Pisanix

GitHub 地址:https://github.com/database-mesh/pisanix

SphereEx 官网:https://www.sphere-ex.com

退出移动版