Database

  • Terraform 可以自动化的创建云端的资源,但是要想实现更高的灵活度,则需要更为灵活的使用Terraform的“Data Sources”能力。例如,在自动化的创建数据库时,云厂商允许创建的版本号是在动态变化的,例如,当前最新的允许的创建的MySQL版本通常是 8.0.40,但通常过了一个季度之后,就变成了 8.0.41。这时,对应的 Terraform 的脚本就需要调整或者传递参数就需要发生变化。而 Terraform 提供的 “Data Sources” 能力则可以很好的解决这个问题。

    在 Oracle 的 Terraform 中可以使用 “Data Source: oci_mysql_mysql_versions” 实现该能力。

    示例

    首先使用 data 命令定义该对象:

    data "oci_mysql_mysql_versions" "gmv" {
        compartment_id = oci_identity_compartment.oic.id
    }

    这里会获取该租户环境下支持的所有MySQL版本。

    然后,再使用 output 命令就可以获取并输出这些版本信息。详细的output命令如下:

    output "mysql_version" {
      value       = data.oci_mysql_mysql_versions.gmv.versions
    }

    详细的输出示例如下:

    mysql_version = tolist([
      {
        "version_family" = "8.0"
        "versions" = tolist([
          {
            "description" = "8.0.36"
            "version" = "8.0.36"
          },
          {
            "description" = "8.0.37"
            "version" = "8.0.37"
          },
          {
            "description" = "8.0.38"
            "version" = "8.0.38"
          },
          {
            "description" = "8.0.39"
            "version" = "8.0.39"
          },
          {
            "description" = "8.0.40"
            "version" = "8.0.40"
          },
          {
            "description" = "8.0.41"
            "version" = "8.0.41"
          },
        ])
      },
      {
        "version_family" = "8.4 - LTS"
        "versions" = tolist([
          {
            "description" = "8.4.0"
            "version" = "8.4.0"
          },
          {
            "description" = "8.4.1"
            "version" = "8.4.1"
          },
          {
            "description" = "8.4.2"
            "version" = "8.4.2"
          },
          {
            "description" = "8.4.3"
            "version" = "8.4.3"
          },
          {
            "description" = "8.4.4"
            "version" = "8.4.4"
          },
        ])
      },
      {
        "version_family" = "9 - Innovation"
        "versions" = tolist([
          {
            "description" = "9.1.0"
            "version" = "9.1.0"
          },
          {
            "description" = "9.1.1"
            "version" = "9.1.1"
          },
          {
            "description" = "9.1.2"
            "version" = "9.1.2"
          },
          {
            "description" = "9.2.0"
            "version" = "9.2.0"
          },
        ])
      },
    ])

    获取特定大版本的各小版本

    可以通过 data资源中新增filter模块以过滤出需要的对象。

    在 Terraform 中,关于 data 资源是否可以使用 filter,以及filter支持的完整度视乎并没有明确的说明。这需要更具不同的供应商的实现。常见的,在data resourcefilter可以支持“列表匹配”、“通配符匹配”或者“正则匹配”。具体的匹配方式,则需要通过文档、或者测试区验证。

    添加带正则匹配的 filter
    data "oci_mysql_mysql_versions" "gmv" {
        #Required
        compartment_id = oci_identity_compartment.oic.id
        filter {
            name = "version_family"
            values = ["8.0.*"]
            regex  = true
        }
    }

    通过 HCL 语言获取最新的版本
    output "latest_versions" {
      value = {
        for db_version in data.oci_mysql_mysql_versions.gmv.versions : db_version.version_family => sort([
          for v in db_version.versions : v.version
        ])[length(db_version.versions) - 1] // 取排序后的最后一个版本
      }
    }

    最后的输出如下:

    latest_versions = {
      "8.0" = "8.0.41"
      "8.4 - LTS" = "8.4.4"
      "9 - Innovation" = "9.2.0"
    }

    参考链接

  • 快速了解 Aurora DSQL

    ·

    上周在 AWS re:Invent大会(类似于阿里云的云栖大会)上推出了新的产品 Aurora DSQL[1] ,在数据库层面提供了多区域、多点一致性写入的能力,兼容 PostgreSQL。并声称,在多语句跨区域的场景下,延迟只有Google Spanner的1/4。

    Aurora DSQL 提供了多可用区、多区域的多点一致性写入的内容。在技术层面,Aurora DSQL 通过把数据库的 log 模块和 block (或者说是cache)模块做了分离,从而更好的实现多点/多区域分布式能力,这与 Google AlloyDB 是比较类似的;此外,在跨区域强一致性实现上,则使用“Amazon Time Sync Service” [3] 来保障多个区域之间事务顺序的一致性。

    在产品层面,分为两个场景,一个是 Aurora DSQL(region内模式)和一个 Aurora DSQL Global 模式(多 region 内模式)。在 Region 内场景下,相比于普通 Aurora PostgreSQL ,Aurora DSQL 在多个可用区内都可以提供强一致的读写接入点,而Aurora PostgreSQL只在一个可用区提供写,其他可用区仅提供只读节点。

    在跨 Region 的场景下,Aurora DSQL 则提供了同步的、跨区域的多点写入能力。这对于业务在全球分布的客户,则可以进一步的降低业务的复杂度。而原来的 Aurora Global Database 仅提供单个 Region 的写入能力,并且,在其他 Region 的读节点需要承受一定的数据访问延迟,这对于很多的在线业务场景可能是无法接受的,或者需要在应用层面做针对性的改造。

    这是 Aurora 发布的10周年,AWS 依旧是创新、技术能力非常强的一家公司。此外,产品是在内测阶段,普通用户还无法体验。

    参考文档

  • 数据库DevOps这个话题我讲过很多次了,在阿里的数据库环境,已经是成熟的实践经验。现在离开阿里,以独立数据库工具厂商的身份去讲这个话题,还是有一些不一样的思考。

    09年,刚加入淘宝DBA团队的前几年,其实是很痛苦的。最早还没有工具和平台的思维,很多事情都是”手挑肩扛”。不过生产环境的数据库数量增长很快就远超团队人员增长速度。最早,淘宝内部将DBA分为”系统DBA”,负责数据库的安装/部署、监控、备份、性能监控报警、故障诊断等工作;还有一部分是”产品DBA”,负责面向上层业务的数据库支持,包括数据库的设计与发布、架构选型、业务优化、容量规划等。

    当时我在”系统DBA”团队,为了解决人员与系统增长不匹配的问题,当时也在前辈建立的”北斗”数据库管理基础上进行改进,并构建了淘宝数据库环境内首个MySQL数据库管理平台”天机“,取名字也是来自”北斗”七星中的”天玑”,不过取自”天机不可泄露”便取”天机”。而后,这个平台也几经改造与重构,发展为内部一套完整、健壮的DBaaS系统。

    而”产品DBA”也面临着同样的问题,表现上略有不同。主要问题包括:业务/研发爆发式增长,”数据库的设计与发布、架构选型、业务优化(性能管理)、容量规划”这些原本DBA的工作,已经不可能再靠有限的DBA人力完成了。于是,内部的开始尝试通过一些简单的工具尝试解决这个矛盾。最早,先是使用WebSQLPlus解决数据查询的问题、而后是dbtask解决了数据库DDL发布的问题。再之后,对于研发、DBA如何一起共同支撑起业务发展,从而构建出了全新的iDB平台,并且在iDB从3.0升级到4.0版本时候,重新对平台做了定位,由一个面向DBA的工具,转变为面向研发使用数据库的产品,也是在这个时候,正式提出了数据库DevOps的理念。

    在2017年,这套产品也在阿里云上正式商业化发布,开始从一个服务阿里内部的系统正式的以商业化的形式服务云上的更多企业。

    2021年,离开了阿里,一方面是很冲动,另一个很重要的原因是认为,这套系统应该是一个独立于某个云厂商的、第三方的系统,这样可以更好的服务当前企业用户,无论企业用户的数据库是在阿里云、还是在华为云、腾讯云、AWS、百度云,亦或者是在自己筹建的IDC之内,都可以很好的使用这个产品,用这个理念去管理数据库,去解决研发、DBA与数据库的问题。

    记得特别清楚,有一年端午节,在内部p8->p9的晋升答辩上,有一个评委问我:“DMS/DTS”等这些工具产品,交由第三方厂商去做是不是更好?当时回答得很凌乱…,现在可以给评委一个简单的回答了:“是的”。

    关于这次分享的详细内容可以参考,这篇文章:《企业级数据库 DevOps 最佳实践,通过 NineData 实现高效安全的数据库开发》。分享的片子如下:

    orczhou-database-devops-best-practice-dtcc-2024
  • 标题:openGauss开发者大会、华为云HDC大会举行; PostgreSQL中国技术大会7月杭州开启

    重要更新

    openGauss Developer Day本周五于北京举行,大会聚集了相关行业专家、用户、伙伴和开发者,分享给予openGauss的联合创新成果和实践案例。[2] 华为云 HDC 2024本周五于东莞松山湖举行,主题演讲主要覆盖鸿蒙、AI [3] [29] 

    PostgreSQL中国技术大会重启,将在7月12日于杭州举办;大会以”聚焦云端创新,汇聚智慧共享”为主题,共同探讨数据库领域的发展趋势、技术创新和实践经验。

    更新详情

    阿里云
    • RDS PostgreSQL 发布新内核版本,兼容社区16.2版本。支持插件pg_proctab(0.0.10); pgvector(0.7.0) [6]
    • RDS SQL Server新增支持更多性能监控项,您可以通过RDS管理控制台查看实例的标准监控数据。[7]
    • RDS SQL Server 新版售卖页面支持设置系统字符集排序规则 [8]
    GCP(谷歌云)
    • 数据库迁移服务支持从Oracle迁移到AlloyDB [11] 
    火山云(字节)
    AWS(亚马逊云)
    • RDS 支持最新的MySQL版本 8.0.37[26]
    • RDS 最新的 MariaDB版本 10.11.8, 10.6.18, 10.5.25, 10.4.34[27]
    腾讯云
    • 云数据库 MySQL、TDSQL-C 发布数据库代理版本1.3.12。[28]
    参考链接
  • Oracle Cloud上的ECPU

    ·

    什么是Oracle Cloud上的ECPU

    总得来说,海外的云是更加追求“个性”的,几乎每家云厂商都会有一堆自己不一样的概念,而实际上底层相差并不是很大。在刚刚熟悉了Oracle OCPU概念之后,在去年OCI(Oracle Cloud Infrastructure,也就是Oracle云)又推出了ECPU。最近,OCI上的MySQL也支持了ECPU。

    ECPU代表的计算或存储服务器上CPU计算核心的一定的计算能力,ECPU会逐步取代OCPU的规格模型。一个猜测是:单位ECPU就是对应某个型号CPU的core的计算能力,关于这一点,还没有找到详细的文档对这一点进行描述。

    从当前的性能与价格上来看(性能数据后续会发布),2个ECPU与1 OCPU的性能是接近的,所以,可以简单的理解ECPU就是对应于其他云厂商的vCPU。

    (more…)
  • 最近,在ACMUG(中国MySQL用户组)的年度活动中,较为详细对之前的云数据库 RDS MySQL性能测试做了分享。如下为分享的PDF,供参考:

    (more…)