让数据更「高效」一点!IvorySQL在Neon平台上的迅速部署和灵活应用

图片

IvorySQL本身就是一个100%兼容PostgreSQL最新内核的开源数据库系统,而Neon Autoscaling Platform通常支持多种数据库和应用程序。将IvorySQL集成到该平台后,可以进一步增强与其他系统和应用程序的兼容性,同时更全面的体验IvorySQL的Oracle兼容功能带来的便利和优势,为用户提供更加灵活和多样化的选择。

在这篇文章中,我们将演示如何将 IvorySQL集成到 Neon Autoscaling Platform 的过程,引导您完成每个步骤,并提供清晰的说明和演示。

01

什么是Neon Autoscaling?

Neon的弹性伸缩功能为付费用户提供了极大的便利,该功能能够根据当前负载动态调整分配给Neon计算节点的计算资源量,无需用户进行繁琐的手动干预。

Neon Autoscaling的基本架构如下所示。有关更多详细信息,您可以参考这里。

https://docs.ivorysql.org/en/ivorysql-doc/v3.2/v3.2/8#architecture-overview

图片

弹性缩放主要功能:

>>>实时迁移

当Kubernetes集群中的节点负载趋于饱和时,NeonVM会管理实时迁移VM的流程,确保以最小的中断(通常仅约100毫秒)将VM从一台计算机无缝转移至另一台计算机。这一实时迁移机制不仅能在节点达到容量极限前主动减少负载,还能极大地提升集群的灵活性和可靠性。

>>>内存扩展

通过使用cgroups,Postgres的内存使用情况可以实现动态调整,当需要时,它能够有效地通过Kubernetes集群中的弹性伸缩程序代理请求其他的资源,以确保数据库始终保持最佳性能。

>>>本地文件缓存

利用Postgres扩展,我们实现了本地文件缓存功能,该功能能够充分利用额外的VM内存和动态调整缓存大小来加速查询处理速度,确保在扩展事件期间实现无缝且高效的操作。

通常,Neon的垂直弹性伸缩功能可智能地管理NeonVM中基于Postgres的计算节点的性能,通过动态分配和解除vCPU与RAM资源,实现高效且灵活的资源调度。

02

将IvorySQL放入Neon Autoscaling平台

在本节中,我们将为您详细指导IvorySQL 3.2版本与Neon Autoscaling平台的集成流程。在开始之前,请运行相应的命令以获取并查看Autoscaling的源代码。

git clone https://github.com/neondatabase/autoscaling.git
cd autoscaling
git checkout v0.28.1 -b IvorySQL3.2-autoscaling

接下来,请按照以下步骤对Autoscaling平台发布tagv0.28.1进行相应的更改。

2.1 创建IvorySQL vm示例

要创建IvorySQL VM示例,需要先复制“vm-examples”目录下的“pg16-disk-test”文件夹,并将其命名为“ivy3-disk-test”,然后对“image-spec.yaml”文件进行主要修改,修改后的所有文件均可在指定位置获取。

2.2 创建IvorySQL部署文件

为了创建IvorySQL的部署文件,请复制“vm-deploy.yaml”文件并命名为“vm-deploy-ivy3.yaml”。接下来,请参照提供的示例文件,对“vm-deploy-ivy3.yaml”进行必要的修改。

2.3 将ivy3-disk-test添加到Makefile

将“ivy3-disk-test”添加到Makefile中,并合并所需的修改,以便能够通过执行“make ivy3-disk-test”命令来构建“ivy3-disk-test”镜像。

2.4 加载liboracle_parser库

要加载 “liboracle_parser” 库,请在 “postgresql.conf” 的末尾添加以下行:shared_preload_libraries = 'liboracle_parser'。

如果要跳过上述所有步骤,只需运行以下命令即可:

git clone https://github.com/HighgoSoftware/autoscaling-ivorysql.git
cd autoscaling-ivorysql
git checkout IvorySQL3.2

2.5 使用kind设置本地Kubernetes集群

使用kind设置本地Kubernetes集群。下面简要概述了使用kind设置垂直自动缩放的过程;详情请参考此处。

1)构建NeonVM Linux内核:

make kernel

2)构建docker镜像:

make docker-build

3)使用kind启动本地集群:

make kind-setup

4)部署NeonVM和Autoscaling组件:

make deploy

5)生成并加载测试VM:

make pg16-disk-test

6)启动测试VM:

kubectl apply -f vm-deploy.yaml

7)运行pgbench:

VM_NAME=postgres16-disk-test scripts/run-bench.sh

2.6 体验IvorySQL的弹性伸缩

如果您已经按照上述步骤,成功自动扩容了 “postgres16”,那么运行以下三个命令,即可体验 IvorySQL 3.2 的自动扩容功能。

make ivy3-disk-test
kubectl apply -f vm-deploy-ivy3.yaml 
VM_NAME=ivorysql3-disk-test scripts/run-bench.sh

一段时间后,您应该会看到每秒事务数(tps)自动增加,如下所示。

图片

如果要缩减计算资源,可以使用以下patch命令:

kubectl patch neonvm ivorysql3-disk-test --type='json' -p='[{"op": "replace", "path": "/spec/guest/cpus/use", "value":0.25}]'

一段时间后,您应该能够观察到每秒事务数(tps)减少,如下所示。

图片

除了使用patch命令之外,您还可以使用编辑命令 'kubectl edit neonvm ivorysql3-disk-test' 来扩展或缩减IvorySQL计算节点。只需更改“cpus”部分下的“use”值,如下所示:

spec:enableAcceleration: trueguest:cpus:max: 1250mmin: 250muse: 250m

2.7 体验 Oracle 与 IvorySQL 的兼容性

为了简化操作,避免使用复杂的Kubernetes命令,您可以选择直接登录运行IvorySQL的虚拟机。以下是登录IvorySQL VM、连接到IvorySQL数据库、检查版本以及测试Oracle兼容功能的详细步骤示例。

IVY_VM=$(kubectl get neonvm ivorysql3-disk-test -ojsonpath='{.status.podName}')kubectl exec -it $IVY_VM -- screen /dev/pts/0

图片

上面的屏幕截图显示IvorySQL 3.2在Neon Autoscaling Platform 上运行,并支持使用Oracle DUAL Table 的sysdate 查询。您可以参考IvorySQL开发人员指南,探索更多Oracle兼容功能。

03

总结

这篇文章提供了将IvorySQL集成到Neon垂直弹性伸缩平台的指南。通过详细的说明和演示,希望您可以了解如何将基于IvorySQL的数据库合并到Neon弹性伸缩环境中,并体验IvorySQL与Oracle的兼容功能。

04

今后工作

未来,我们正在考虑:

  • 合并Postgres-16将Neon更改为IvorySQL作为无服务器分支。

  • 使IvorySQL 3.0成为Neon存储库的子模块。

  • 构建具有独立存储节点的IvorySQL 3.0计算节点。

当IvorySQL集成到Neon Autoscaling Platform后,最终用户将能够指定除PostgreSQL 14/15/16之外的IvorySQL计算节点,同时更全面的体验IvorySQL的Oracle兼容功能带来的便利和优势。

原文链接:

https://www.highgo.ca/2024/05/02/bringing-ivorysql-to-neon-autoscaling-platform/


http://www.ppmy.cn/server/40230.html

相关文章

【go从入门到精通】精通并发编程-协程goroutine

之前给大家分享了go的基础语法和代码示例。接下来不管你是否听说过,相比于传统的线程和锁机制,Go使用轻量级的协程(goroutine)和通道(channel)实现并发,使得并发性能发挥到极致。 因此这篇文章算是一个介绍性的分享,让大家知道协程是什么?在分享协程之前,我们有必要回…

什么是数据仓库的mapping

在数据仓库(Data Warehouse)的上下文中,"mapping"(映射)通常指的是数据转换和加载(ETL,即Extract, Transform, Load)过程中的一个步骤,它涉及将数据从源系统转…

LVDS 接口标准和规范

低压差分信号具有传输速率快、抗干扰性强的特点,是现在广泛应用的数据接口标准之一。Xilinx FPGA支持LVDS电平标准,并提供了动态相位调整解决方案,解决了基于LVDS源同步传输时存在的数据偏斜问题。 1 LVDS 技术规范简介 随着接口和背板信号…

虚幻五关卡制作学习笔记

1.创建一个移动平台 这个移动平台的功能:从箭头1移动到箭头2来回移动,可移动时发绿光,不可移动时发红光 首先,创建两个材质,发红光和绿光 然后我们创建一个actor蓝图类,添加两个arrow组件,两个…

AI换脸原理(7)——人脸分割参考文献TernausNet: 源码解析

1、介绍 这篇论文相对来说比较简单,整体是通过使用预训练的权重来提高U-Net的性能,实现对UNet的改进。该方法也是DeepFaceLab官方使用的人脸分割方法。在介绍篇我们已经讲过了UNet的网络结构和设计,在进一步深入了解TernausNet之前,我们先简单回顾下UNet。 U-Net的主要结构…

差速机器人模型LQR 控制仿真(c++ opencv显示)

1 差速机器人状态方程构建 1.1差速机器人运动学模型 1.2模型线性化 1.3模型离散化 2离散LQR迭代计算 注意1:P值的初值为Q。见链接中的: 注意2:Q, R参数调节 注意3:LQR一般只做横向控制,不做纵向控制。LQR输出的速度…

STM32平衡车-MPU6050的DMP库移植

本文目录 一、硬件接线二、需要移植的三个文件夹1. DMP文件夹目录2. IIC文件夹目录3. MPU6050文件夹目录 三、文件内容IO12C.cIO12C.hMPU6050.cMPU6050.hmain.c 四、附录1.更改IIC引脚 一、硬件接线 SCL-- PA11 SDA-- PA12 VCC-- 3.3v GND-- GND INT-- PC9 二、需要移植的三个…

docker安装的es配置密码认证

docker安装的es配置密码认证 前言 ​ 今天客户提出来,说es的端口是暴露出来的,可以直接取出来数据,按照要求,必须对9200进行密码配置。准备好几种方案,nginx的反向代理加上认证配置(但是是一个单体的服务…

C++中rand()函数和随机数种子

C中rand()函数的用法 rand() % (b-a1) a ; 就表示 a~b 之间的一个随机整数。 表达式 int num rand() % 100 1; 产生的是1到100之间的随机数,而不是1到99。 rand() % 100 会产生一个从0到99的随机数,因为 % 是取模运算符,它会给出 rand() …

Android中使用POI库读写Excel(.xlsx/.xls)文件

在Android开发中,处理Excel文件是一项常见需求,无论是从Excel导入数据还是导出数据到Excel。Apache POI是一个强大的Java库,专为操作Microsoft Office文档而设计,它也提供了对Android平台的支持。本文将指导你如何在Android项目中使用Apache POI库来读取和写入Excel文件(包…

动态规划算法练习——计数问题

题目描述 给定两个整数 a 和 b,求 a 和 b 之间的所有数字中 0∼9 的出现次数。 例如,a1024,b1032,则 a 和 b 之间共有 9 个数如下: 1024 1025 1026 1027 1028 1029 1030 1031 1032 其中 0 出现 10 次,1 出现…

C# 不用lock写一个多线程程序

多线程并发 当一段代码有可能被不止一个线程同时访问时,且存在共享资源(变量、文件句柄等),可能出现并发冲突。发生并发冲突时如果不加锁,程序的行为是不可预测的。而加锁本身又是一件麻烦事,弄不好会出现死锁,死锁时程…

Gateway基础配置指南

Gateway基础配置指南 一、引言 随着微服务架构的普及,API网关(Gateway)作为微服务架构中的关键组件,其重要性日益凸显。Gateway作为系统的唯一入口,负责处理所有客户端的请求,并根据业务规则将请求转发到…

关于学习与智慧

向优秀者学习,是进步最快的途径。 樊登说,如果你想要成功,最有效的方法是你装作自己是这样的人,最终你就会成为这样的人。 当你看到你身边有一个人很厉害,这个学一下。所以,向他人学习,让自己…

基于卷积神经网络的一维信号降噪(简单版,MATLAB)

简单演示一下基于卷积神经网络的一维信号降噪,有个大致印象即可。 %% Plot the previous training CNN. set_plot_defaults(on) load(denoiser_sparse.mat); h1{1} double(conv1); h1{2} double(conv2); h1{3} reshape(double(conv3),[8,1,17]); figure(1) [r,c…

【Linux笔记】 基础指令(二)

风住尘香花已尽 日晚倦梳头 重命名、剪切指令 -- mv 简介: mv 命令是 move 的缩写,可以用来移动文件或者将文件改名,是 Linux 系统下常用的命令,经常用来备份文件或者目录 语法: mv [选项] 源文件或目录 目标文件或目录…

TikTok海外运营:云手机的四种快速变现方法

随着TikTok用户基数的持续扩大,这个平台已成为全球创业者和品牌的新战场。其用户群接近20亿,并以年轻用户为主力军,市场渗透率逐年攀升。无论是大型组织、知名品牌,还是个人创业者,都无法忽视TikTok所带来的巨大商机。…

Activity7框架使用学习记录

用于记录在项目中使用工作流框架 PROC_DEF_ID: 流程定义的id bpmn文件中对流程图定义的id TASK_DEF_KEY:任务定义的id bpmn文件中对每个任务定义的id PROC_INST_ID:流程实例id 启动一个流程时对流程定义的id PROC_DEF_ID(流程定义的ID):在…

虚拟机ubuntu配置网络重启联网

前言 一段时间没用虚拟机&#xff0c;打开发现网络一直连接不上【如下图】 flags4099<UP,BROADCAST,MULTICAST> mtu 1500inet 172.18.0.1 netmask 255.255.0.0 broadcast 172.18.255.255ether 02:42:c2:5b:60:75 txqueuelen 0 (Ethernet)原因 1.以为是网络适配器选…

简易留言板

目录 前端实现 数据库的使用 创建数据表 创建项目 连接数据库 后端实现 接口定义 持久层 业务逻辑层 控制层 前端代码完善 留言板是一个常见的功能&#xff0c;在本篇文章中&#xff0c;将实现一个简易的留言板&#xff1a; 页面中能够显示所有留言内容&#xff0c…