TypeORM适配Gaussdb开源验证任务心得

举报
yd_233636485 发表于 2024/12/07 13:44:47 2024/12/07
【摘要】 TypeORM 是一个流行的 TypeScript 和 JavaScript 数据库 ORM(对象关系映射)工具,用于在 Node.js 环境中与数据库交互。它使开发者能够使用面向对象的编程方式来操作数据库,而无需编写复杂的 SQL 查询。文章大概描述TypeORM适配GaussDB数据库的整个流程及可能会出现的问题,希望能帮读者解决自身问题。

背景介绍

开源 for Huawei 通过和公司、高校、社区的开发者合作,完成鲲鹏、昇腾、欧拉、鸿蒙、高斯、云服务等与开源软件的适配开发,帮助繁荣 Huawei 的基础生态,同时让开源软件能够更加简单、高效的运行于华为云上。

开始之前,开发者可以下载 开源 for Huawei Wiki了解详细的开发步骤,技术准备,以及开发过程需要的各种资源。

适配准备

ECS 配置

  • 计费模式选择:包月
  • 区域:中国-上海 1
  • CPU 架构:鲲鹏通用计算增强型
  • CPU 规格:kc1.large.4
  • CPU 规格:2vCPUs&&8GiB
  • 镜像类型:公共镜像
  • 镜像:Huawei Cloud EulerOS 2.0 标准版 64 位 ARM 版

GaussDB 配置

  • 计费模式选择:按需
  • 区域:中国-上海 1
  • 数据库类型:基础版
  • 数据库版本:8.x
  • 实例类型:主背版
  • 部署形态:1 主两备
  • 性能规格:4 核 16GB

需要注意的小点

  1. 服务器和 DB 最好放在同一区域,GassDB 目前只支持同区域的内网访问。
  2. 若使用按需的 GuassDB,使用完需删除实例

环境准备

  1. 配置 SSH 免密登录 ECS
  2. 本地通过 SSH 实现, 本地端口:ECS 内网 GaussDB 的端口
#!/bin/bash
ssh -L 本地端口:GaussDB内网IP:GaussDBPort 本地ECS-ssh配置别名 sleep infinity

开发过程

遇到无法连接 GaussDB 的问题?

Cannot connect:  Error: SASL: Only mechanism SCRAM-SHA-256 is currently supported
    at Object.startSession (/Users/yhj/code/code/typeorm/node_modules/.pnpm/pg@8.13.1_pg-native@3.2.0/node_modules/pg/lib/crypto/sasl.js:6:11)
    at /Users/yhj/code/code/typeorm/node_modules/.pnpm/pg@8.13.1_pg-native@3.2.0/node_modules/pg/lib/client.js:261:33
    at Client._checkPgPass (/Users/yhj/code/code/typeorm/node_modules/.pnpm/pg@8.13.1_pg-native@3.2.0/node_modules/pg/lib/client.js:225:7)
    at Client._handleAuthSASL (/Users/yhj/code/code/typeorm/node_modules/.pnpm/pg@8.13.1_pg-native@3.2.0/node_modules/pg/lib/client.js:259:10)
    at Connection.emit (node:events:517:28)
    at Connection.emit (node:domain:489:12)
    at /Users/yhj/code/code/typeorm/node_modules/.pnpm/pg@8.13.1_pg-native@3.2.0/node_modules/pg/lib/connection.js:116:12
    at Parser.parse (/Users/yhj/code/code/typeorm/node_modules/.pnpm/pg-protocol@1.7.0/node_modules/pg-protocol/src/parser.ts:103:9)
    at Socket.<anonymous> (/Users/yhj/code/code/typeorm/node_modules/.pnpm/pg-protocol@1.7.0/node_modules/pg-protocol/src/index.ts:7:48)
    at Socket.emit (node:events:517:28)

由异常返回大概定位到问题是pgpackage 的函数 startSession 抛出异常。

  1. 本地启动 Postgres 容器, 并使用 gaussdb driver 进行本地测试,连接成功,可推断 pg package 是正常的。
  2. 通过异常跳转到startSession函数发现抛出异常的逻辑是基于mechanisms参数内是否包含SCRAM-SHA-256来判断,接下来通过向上 debug 查出mechanisms组成就可以得出异常的原因
  3. 最终确认是:建立 socket 后,并进行 authenticationSASl 时候,buffter 里面无法解析出’SCRAM-SHA-256’。

鉴于此情况,通过查阅官方文档,得到结论,需要通过 GaussDB 控制台内,进行参数配置,把参数dn:password_encryption_type改为 1。

CCE 部署

  1. 建立集群,按默认推荐选择就可以,按需模式。需要注意的点:保持与 GaussDB 服务在同一个网段
  2. 建立节点,根据 docker 镜像平台,选择对应的服务器配置,4 核 8GB,六个节点
  3. 建立负载。
    1. 负载实例选择 1 个,
    2. 在实例的环境变量中填写你所需要注入的环境变量。
    3. 核心最高为 4,最低保持默认。
    4. 内存最高为 8G,最低保持默认。
    5. 镜像选择对应镜像
  4. 弹性 IP 绑定对应的负载服务器,就可以公网访问(注意:留意相关安全组是否开放对应端口)。

总结

从功能角度看,GaussDB 的功能多于 Postgre,导致 pg package 和 TypeORM 上的 Driver 满足不了 GaussDB 的需求。
从开发角度看,目前已基本支持 TypeORM 的 API,一些功能还需要结合调节 GaussDB 控制台上的参数。
最后,通过该任务,可以证明使用 pg 配合 TypeORM 是可以接入 GaussDB 的。

建议

  1. driver 的支持不完善与缺乏,目前只能用pg,从配置、使用等角度看,pg 是无法满足 GaussDB。但不阻碍使用。期待未来有一个完全适配 GaussDB 的 开源 driver
  2. 文档方面,数据类型方面和功能方面给出的文档,给人感觉还是大而不全,有些功能的支持还是需要与 PostgreSQL 相互印证才能确认,期待未来 GaussDB 官方文档的完善。
  3. docker 镜像方面,向上游社区推送代码时候,缺乏 docker 镜像供其他开发者测试与验证。期待未来 GaussDB 官方提供 docker 镜像,或者可供社区测试验证的入口。
  4. CI/CD 方面, 希望 GitCode 尽快支持 import 第三方仓库后 Sync 的功能
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。