官方教程来啦!上手体验YashanDB主备部署、同步延迟和自动切换能力

简介: 本文详细介绍了YashanDB主备高可用能力的实践操作,包括一主一备和一主多备的部署与测试。通过配置文件生成、参数调优、同步延迟测试及自动切换实验,展示了其秒级故障转移能力和稳定的业务连续性。文中还涉及在线增加备机和Raft协议切换的步骤,验证了RTO<8s的高性能表现。适合希望快速体验YashanDB高可用特性的用户参考。

在上一篇深度干货 | 如何兼顾性能与可靠性?一文解析YashanDB主备高可用技术中,我们深入探讨了 YashanDB 高可用的架构设计原理和关键技术,本文将聚焦于实践操作,快速体验 YashanDB 的主备高可用能力。

image.png

概要
YashanDB 提供了不同部署形态下故障自动切换的能力:一主一备环境中,可以基于外部仲裁 OM 实现主备自动切换;一主多备配置中,可以基于 Raft 协议实现主备自动切换。当主机异常时,触发超时时间后,备机可以快速完成角色切换,继续执行业务,业务中断时间在秒级水平。

本文将进行一主一备安装部署、体验 YashanDB 的备机同步延迟和两种自动切换能力。整体操作简单易上手,大家可前往 YashanDB 官网下载中心下载最新的个人版进行体验。

安装前准备
1 前提条件

获取 YashanDB 的安装包
准备三台服务器(有条件的可以准备四台服务器,OM 部署到单独的服务器)
开启 SSH 服务
创建 yashan 用户及用户组
创建 HOME 目录和 DATA 目录
检查 YashanDB 所需端口是否被占用
准备测试工具:benchmarksql-5.0
时钟同步,确保测试结果的正确性
2 测试环境
服务器配置情况:

image.png

环境信息:

image.png

3 创建用户

useradd -d /home/yashan -m yashan# passwd yashan

4 创建安装目录
HOME 目录和 DATA 目录均规划在 /data/yashan 下,yashan 用户需要对该目录拥有全部权限,可执行如下命令授权:# cd /

mkdir yashan_data# mkdir yashan_home# chmod -R 770 /data/yashan/yashan_data# chmod -R 770 /data/yashan/yashan_hom

5 下载安装包并解压
从 YashanDB 的官网(https://download.yashandb.com/download)下载最新的个人版安装包并解压。

安装一主一备
生成安装配置文件:hosts.toml 和 yashandb.toml
[yashan@ob1 install]$ yasboot package se gen --cluster yashandb -u yashan -p yashan --ip 192.168.7.10,192.168.7.11 --port 22 --install-path /data1/yashan/yasdb_home --data-path /data1/yashan/yasdb_data --begin-port 1688 --node 2

hostid | group | node_type | node_name | listen_addr | replication_addr | data_path


host0001 | dbg1 | db | 1-1 | 192.168.7.10:1688 | 192.168.7.10:1689 | /data1/yashan/yasdb_data

----------+-------+-----------+-----------+-------------------+-------------------+--------------------------

host0002 | dbg1 | db | 1-2 | 192.168.7.11:1688 | 192.168.7.11:1689 | /data1/yashan/yasdb_data

----------+-------+-----------+-----------+-------------------+-------------------+--------------------------

Generate config success

调整配置文件:根据实际需要调整 yashandb.toml 配置文件中的安装参数,可在 group 级别设置 YashanDB 的所有建库参数,可在 node 级别设置 YashanDB 的所有配置参数。为了保证本次测试的稳定,redo 文件、数据文件以及归档文件需要单独使用一块磁盘,需要调整文件的创建路径[group.config]
REDO_FILE_NUM = 10

REDO_FILE_SIZE = "10G"

REDO_FILE_PATH = '/data2/yashan/redo'

[group.node.config]

ARCHIVE_LOCAL_DEST = '/home/yashan/archive'

执行安装:安装 YashanDB 的运行程序到其他服务器,并且启动运维服务进程 yasom 和 yasagent
[yashan@ob1 install]$ yasboot package install -t hosts.toml -i yashandb-personal-23.1.1.100-linux-x86_64.tar.gz

checking install package...

install version: yashandb 23.1.1.100

host0001 100% [====================================================================] 3s

host0002 100% [====================================================================] 3s

update host to yasom...

部署集群
[yashan@ob1 install]$ yasboot cluster deploy -t yashandb.toml

type | uuid | name | hostid | index | status | return_code | progress | cost ------------------------------------------------------------------------------------------------------------

task | e3205df3e98645ed | DeployYasdbCluster | - | yashandb | SUCCESS | 0 | 100 | 174 ------+------------------+--------------------+--------+----------+---------+-------------+----------+------

task completed, status: SUCCESS

设置 sys 用户密码:设置为 yashandb_123
[yashan@ob1 install]$ yasboot cluster password set --new-password yashandb_123 --cluster yashandb

type | uuid | name | hostid | index | status | return_code | progress | cost ----------------------------------------------------------------------------------------------------------

task | 4e11fb328e1695ac | YasdbPasswordSet | - | yashandb | SUCCESS | 0 | 100 | 3 ------+------------------+------------------+--------+----------+---------+-------------+----------+------

task completed, status: SUCCESS

安装后检查
检查整个集群的状态:
[yashan@ob1 install]$ yasboot cluster status --cluster yashandb --detail

hostid | node_type | nodeid | pid | instance_status | database_status | database_role | listen_address | data_path -------------------------------------------------------------------------------------------------------------------------------------------------

host0001 | db | 1-1:1 | 69010 | open | normal | primary | 192.168.7.10:1688 | /data1/yashan/yasdb_data/db-1-1 ----------+-----------+--------+-------+-----------------+-----------------+---------------+-------------------+---------------------------------

host0002 | db | 1-2:2 | 86135 | open | normal | standby | 192.168.7.11:1688 | /data1/yashan/yasdb_data/db-1-2 ----------+-----------+--------+-------+-----------------+-----------------+---------------+-------------------+---------------------------------

检查主备的链接状态:

SQL> select DEST_ID, CONNECTION, PEER_ADDR, STATUS, DATABASE_MODE from v$archive_dest_status;

DEST_ID CONNECTION PEER_ADDR STATUS DATABASE_MODE ------- ----------------- ---------------------------------------------------------------- ----------------- -----------------

1 CONNECTED 192.168.7.11:1689 NORMAL OPEN 1 row fetched.

检测主备的同步情况:做一些简单的业务测试

配置参数调优
根据服务器的负载生成推荐参数
SQL> EXEC DBMS_PARAM.OPTIMIZE(NULL, NULL, 90, 90);

PL/SQL Succeed.

‍查看参数推荐报告

SQL> SELECT DBMS_PARAM.SHOW_RECOMMEND() FROM DUAL;

DBMS_PARAM.SHOW_RECO ---------------------------------------------------------------- ** Recommended Settings For HEAP Table *+--------------------------------+-------------+-------------+---------+| name | current | recommend | restart |+--------------------------------+-------------+-------------+---------+| DATA_BUFFER_SIZE | 64M | 272785M | True || VM_BUFFER_SIZE | 32M | 34823M | True || WORK_AREA_STACK_SIZE | 1024K | 2M | True || WORK_AREA_POOL_SIZE | 16M | 128M | True || WORK_AREA_HEAP_SIZE | 512K | 512K | True || SHARE_POOL_SIZE | 256M | 34823M | True || LARGE_POOL_SIZE | 128M | 2048M | True || MAX_PARALLEL_WORKERS | 32 | 372 | True || SCOL_DATA_BUFFER_SIZE | 128M | 128M | True || SCOL_DATA_PRELOADERS | 2 | 2 | True || COLUMNAR_WORK_AREA_HEAP_SIZE | 64M | 32M | True || COLUMNAR_VM_BUFFER_SIZE | 2G | 128M | True || COLUMNAR_BULK_SIZE | 1024 | 1024 | True || COMPRESSION | LZ4 | LZ4 | True || PQ_POOL_SIZE | 128M | 128M | True || MAX_SESSIONS | 1024 | 1024 | True || MAX_WORKERS | 0 | 0 | True || TAB_QUEUE_WINDOW_SIZE | 4 | 4 | True || BLOOM_FILTER_FACTOR | .3 | .3 | True || DEGREE_OF_PARALLEL | 1 | 1 | True || MMS_DATA_LOADERS | 4 | 8 | True || CHECKPOINT_INTERVAL | 100000 | 256M | False || CHECKPOINT_TIMEOUT | 300 | 60 | False || REDOFILE_IO_MODE | DSYNC | DSYNC | True || DATAFILE_IO_MODE | DEFAULT | DEFAULT | True || COMMIT_LOGGING | IMMEDIATE | IMMEDIATE | False || RECOVERY_PARALLELISM | 16 | 64 | True || REDO_BUFFER_SIZE | 64M | 64M | True |+--------------------------------+-------------+-------------+---------+| total memory | 346760M |+--------------------------------+-------------+-------------+---------+

Note: You can execute 'DBMS_PARAM.APPLY_RECOMMEND()' to apply the recommend parameters.

After applying the parameters, you need to restart the database.

1 row fetched.

将参数写入配置文件

SQL> EXEC DBMS_PARAM.APPLY_RECOMMEND();

PL/SQL Succeed.

配置参数是实例级别,需要每个节点都执行该操作。

开启自动切换:设置 FailoverThreshold 为 5,并且开启自动切换
[yashan@ob1 install]$ yasboot election config set -k FailoverThreshold -v 5 --cluster yashandbgroup 1 execute Succeed

[yashan@ob1 install]$ yasboot election enable on -c yashandbgroup 1 execute Succeed

[yashan@ob1 install]$ yasboot election config show --cluster yashandbgroup 1

Protection Mode: MAXIMUM PROTECTION

Members:

[1-1:1] - Primary database

[1-2:2] - Physical standby database

Transport Lag: 0 seconds

Apply Lag: 0 seconds

Apply Rate: 2.73 MByte/s

Properties:

FailoverThreshold = 5

FailoverAutoReinstate = false

ZeroDataLossMode = true

Automatic Failover: Enabled in Zero Data Loss Mode

测试备机同步延迟 8ms
1 测试方案

主机创建一张表:create table ha_test (time_col timestamp),往该表插入一条数据。
获取本地时间戳,用本地时间戳 update 该表的数据,并提交。持续执行该操作。
在备机上查询该表的数据,通过执行查询该表的时间戳与查询到表中的数据的时间戳做差值,这个时间差就是主备同步的延迟。(表中只有一条数据,所以执行 update 和 select 操作的时间可以忽略不计)
2 测试步骤

首先准备 TPC-C 压力测试(如何使用 TPC-C 压力测试可以参考 YashanDB 的官网,有详细的介绍)。
TPC-C 配置为 300 仓 128 并发,在该配置下可以达到百万级别 tpmC 的压力测试,在这种压力业务场景下执行测试验证。
分别在主机和备机上执行测试脚本(总共做 100 次测试)。
根据脚本统计的数据,计算主备业务的时间差。
测试脚本:

!/bin/bash#主机执行update业务操作# 修改100次for ((i=1; i<=100; i++))do

获取当前时间并格式化为数据库可接受的格式

current_time=$(date +'%Y-%m-%d %H:%M:%S.%3N')

echo "Current time is: $current_time"

修改表ha_test的数据

yasql ha_test/123@192.168.7.10:1688 -c "UPDATE ha_test SET time_col='$current_time';"

sleep 0.1done

!/bin/bash

备机执行查询操作while truedo

获取当前时间

current_time=$(date +'%Y-%m-%d %H:%M:%S.%3N')

echo "Current time is: $current_time"

查询表ha_test的时间列数据

yasql ha_test/123@192.168.7.11:1688 -c "select time_col from ha_test;"done

‍3 测试结果

测试时的 redo 刷盘速度(查询 V$REDOSTAT 获知):235MB/s
备机查询延迟的平均值:8ms
从 100 次测试中选取 5 次数据如下:

image.png

‍ ‍

测试仲裁自动切换,RTO<8S
RTO 的计算方式:旧主机业务中断时间同新主机执行业务成功的时间差。
1 测试步骤

1.继续构造压力测试场景(使用 TPC-C 的压力测试),执行 10 分钟左右的压力业务。

2.检测主机业务的中断时间和新主机成功执行业务的时间。

3.分别在主机和备机上执行检测脚本。

4.kill 主机进程,使主机的业务中断。
测试脚本:

!/bin/bash# 无限循环while truedo

获取当前时间并格式化为数据库可接受的格式

current_time=$(date +'%Y-%m-%d %H:%M:%S.%3N')

打印当前时间

echo "Current time is: $current_time"

执行写操作

yasql ha_test/123@192.168.7.10:1688 -c "UPDATE ha_test SET time_col='$current_time';"done

2 测试结果
执行测试前集群的状态:

[yashan@ob1 install]$ yasboot cluster status --cluster yashandb --detail

hostid | node_type | nodeid | pid | instance_status | database_status | database_role | listen_address | data_path -------------------------------------------------------------------------------------------------------------------------------------------------

host0001 | db | 1-1:1 | 69010 | open | normal | primary | 192.168.7.10:1688 | /data1/yashan/yasdb_data/db-1-1 ----------+-----------+--------+-------+-----------------+-----------------+---------------+-------------------+---------------------------------

host0002 | db | 1-2:2 | 86135 | open | normal | standby | 192.168.7.11:1688 | /data1/yashan/yasdb_data/db-1-2 ----------+-----------+--------+-------+-----------------+-----------------+---------------+-------------------+---------------------------------

kill 主机之后,集群的状态(备机已经变成了主机)

[yashan@ob1 sync_test]$ yasboot cluster status --cluster yashandb --detail

hostid | node_type | nodeid | pid | instance_status | database_status | database_role | listen_address | data_path -------------------------------------------------------------------------------------------------------------------------------------------------

host0001 | db | 1-1:1 | off | - | - | - | 192.168.7.10:1688 | /data1/yashan/yasdb_data/db-1-1 ----------+-----------+--------+-------+-----------------+-----------------+---------------+-------------------+---------------------------------

host0002 | db | 1-2:2 | 86135 | open | normal | primary | 192.168.7.11:1688 | /data1/yashan/yasdb_data/db-1-2 ----------+-----------+--------+-------+-----------------+-----------------+---------------+-------------------+---------------------------------

旧主机业务中断的时间戳:

Current time is: 2024-03-19 15:45:38.464SQL> UPDATE ha_test SET time_col='2024-03-19 15:45:38.464';

1 row affected.

Current time is: 2024-03-19 15:45:38.476SQL> UPDATE ha_test SET time_col='2024-03-19 15:45:38.476';

YAS-00406 connection is closed

新主机执行业务成功的时间:

Current time is: 2024-03-19 15:45:46.204SQL> UPDATE ha_test SET time_col='2024-03-19 15:45:46.204';

YAS-06010 the database is not in readwrite mode

Current time is: 2024-03-19 15:45:46.211SQL> UPDATE ha_test SET time_col='2024-03-19 15:45:46.211';

1 row affected.

3 测试总结

心跳间隔配置:1s
检查超时时间配置:5s
当前的 redo 刷盘速度:237MB/s
业务中断时间:7.745s
故障转移时间:小于 3s
部署一主两备,在线增加备机
1.恢复环境并关闭仲裁自动切换,仲裁自动切换仅使用于一主一备的环境配置

[yashan@ob1 yasdb_home]$ yasboot election enable off -c yashandbgroup 1 execute Succeed

[yashan@ob1 yasdb_home]$ yasboot election config show --cluster yashandbgroup 1

Protection Mode: MAXIMUM PROTECTION

Members:

[1-2:2] - Primary database

[1-1:1] - Physical standby database

Transport Lag: 0 seconds

Apply Lag: 0 seconds

Apply Rate: 391.00 MByte/s

Properties:

FailoverThreshold = 5

FailoverAutoReinstate = false

ZeroDataLossMode = true

Automatic Failover: DISABLED

[yashan@ob1 yasdb_home]$ yasboot cluster status --cluster yashandb --detail

hostid | node_type | nodeid | pid | instance_status | database_status | database_role | listen_address | data_path -------------------------------------------------------------------------------------------------------------------------------------------------

host0001 | db | 1-1:1 | 14818 | open | normal | primary | 192.168.7.10:1688 | /data1/yashan/yasdb_data/db-1-1 ----------+-----------+--------+-------+-----------------+-----------------+---------------+-------------------+---------------------------------

host0002 | db | 1-2:2 | 86135 | open | normal | standby | 192.168.7.11:1688 | /data1/yashan/yasdb_data/db-1-2 ----------+-----------+--------+-------+-----------------+-----------------+---------------+-------------------+---------------------------------

2.生成配置文件:hosts_add.toml 和 yashandb_add.toml

[yashan@ob1 install]$ yasboot config node gen -c yashandb -u yashan -p yashan --ip 192.168.7.12 --port 22 --data-path /data1/yashan/yasdb_data --install-path /data1/yashan/yasdb_home -g 1 --node 1

hostid | group | node_type | node_name | listen_addr | replication_addr | data_path


host0003 | dbg1 | db | 1-3 | 192.168.7.12:1688 | 192.168.7.12:1689 | /data1/yashan/yasdb_data

----------+-------+-----------+-----------+-------------------+-------------------+--------------------------

Generate config success

3.执行安装:安装 YashanDB 的运行程序到新增节点的服务器,并且启动服务进程 yasagent

[yashan@ob1 install]$ yasboot host add -c yashandb -i yashandb-personal-23.1.1.100-linux-x86_64.tar.gz -t hosts_add.toml

type | uuid | name | hostid | index | status | return_code | progress | cost -------------------------------------------------------------------------------------------------

task | 63112e698b5689a0 | HostAdd | - | yashandb | SUCCESS | 0 | 100 | 8 ------+------------------+---------+--------+----------+---------+-------------+----------+------

task completed, status: SUCCESS

4.增加备机:任务显示成功并不代表着扩容任务成功,因为仍有后台任务在完成数据的同步等操作

[yashan@ob1 install]$ yasboot node add -c yashandb -t yashandb_add.toml

type | uuid | name | hostid | index | status | return_code | progress | cost -------------------------------------------------------------------------------------------------

task | 4618495ddc9c012c | NodeAdd | - | yashandb | SUCCESS | 0 | 100 | 10 ------+------------------+---------+--------+----------+---------+-------------+----------+------

task completed, status: SUCCESS

5.等待扩容任务完成

[yashan@ob1 install]$ yasboot task list -c yashandb --search type=NodeAdd

uuid | name | type | index | hostid | status | ret_code | progress | created_at | cost -------------------------------------------------------------------------------------------------------------------------------------------------

ecff3c2c4b452ce1 | AddDBAlterHA | NodeAdd | yashandb | - | SUCCESS | 0 | 100 | 2024-03-19 16:04:36 | 1 ------------------+-----------------------------+---------+--------------+----------+---------+----------+----------+---------------------+------

8d8146ab5fff3423 | BuildDatabaseToMultiAddress | NodeAdd | yashandb.1-1 | host0001 | SUCCESS | 0 | 100 | 2024-03-19 16:04:36 | 760 ------------------+-----------------------------+---------+--------------+----------+---------+----------+----------+---------------------+------

4618495ddc9c012c | NodeAdd | NodeAdd | yashandb | - | SUCCESS | 0 | 100 | 2024-03-19 16:04:36 | 10 ------------------+-----------------------------+---------+--------------+----------+---------+----------+----------+---------------------+------

‍6. 安装后检查:
检测集群的状态

[yashan@ob1 install]$ yasboot cluster status --cluster yashandb --detail

hostid | node_type | nodeid | pid | instance_status | database_status | database_role | listen_address | data_path -------------------------------------------------------------------------------------------------------------------------------------------------

host0001 | db | 1-1:1 | 14818 | open | normal | primary | 192.168.7.10:1688 | /data1/yashan/yasdb_data/db-1-1 ----------+-----------+--------+-------+-----------------+-----------------+---------------+-------------------+---------------------------------

host0002 | db | 1-2:2 | 86135 | open | normal | standby | 192.168.7.11:1688 | /data1/yashan/yasdb_data/db-1-2 ----------+-----------+--------+-------+-----------------+-----------------+---------------+-------------------+---------------------------------

host0003 | db | 1-3:3 | 14944 | open | normal | standby | 192.168.7.12:1688 | /data1/yashan/yasdb_data/db-1-3 ----------+-----------+--------+-------+-----------------+-----------------+---------------+-------------------+---------------------------------

主备连接状态检查

SQL> select DEST_ID, CONNECTION, PEER_ADDR, STATUS, DATABASE_MODE from v$archive_dest_status;

DEST_ID CONNECTION PEER_ADDR STATUS DATABASE_MODE ------- ----------------- ---------------------------------------------------------------- ----------------- -----------------

1 CONNECTED 192.168.7.11:1689 NORMAL OPEN

2 CONNECTED 192.168.7.12:1689 NORMAL OPEN

2 rows fetched.

开启 Raft 自动切换
[yashan@ob1 install]$ yasboot cluster config set -c yashandb -k HA_ELECTION_ENABLED -v true

type | uuid | name | hostid | index | status | return_code | progress | cost --------------------------------------------------------------------------------------------------------------

task | cc2a1364200f86e8 | YasdbConfigSetParent | - | yashandb | SUCCESS | 0 | 100 | 1 ------+------------------+----------------------+--------+----------+---------+-------------+----------+------

task completed, status: SUCCESS

可关注 YashanDB 视频号观看教程测试

Raft 的自动切换,RTO<8S
1 测试步骤
测试步骤跟仲裁切换是一致的,这里不再介绍。
2 测试结果
执行测试前集群的状态:

[yashan@ob1 install]$ yasboot cluster status --cluster yashandb --detail

hostid | node_type | nodeid | pid | instance_status | database_status | database_role | listen_address | data_path -------------------------------------------------------------------------------------------------------------------------------------------------

host0001 | db | 1-1:1 | 14818 | open | normal | primary | 192.168.7.10:1688 | /data1/yashan/yasdb_data/db-1-1 ----------+-----------+--------+-------+-----------------+-----------------+---------------+-------------------+---------------------------------

host0002 | db | 1-2:2 | 86135 | open | normal | standby | 192.168.7.11:1688 | /data1/yashan/yasdb_data/db-1-2 ----------+-----------+--------+-------+-----------------+-----------------+---------------+-------------------+---------------------------------

host0003 | db | 1-3:3 | 14944 | open | normal | standby | 192.168.7.12:1688 | /data1/yashan/yasdb_data/db-1-3 ----------+-----------+--------+-------+-----------------+-----------------+---------------+-------------------+---------------------------------

kill 主机之后,集群的状态(备机已经变成了主机)

[yashan@ob1 install]$ yasboot cluster status --cluster yashandb --detail

hostid | node_type | nodeid | pid | instance_status | database_status | database_role | listen_address | data_path -------------------------------------------------------------------------------------------------------------------------------------------------

host0001 | db | 1-1:1 | off | - | - | - | 192.168.7.10:1688 | /data1/yashan/yasdb_data/db-1-1 ----------+-----------+--------+-------+-----------------+-----------------+---------------+-------------------+---------------------------------

host0002 | db | 1-2:2 | 86135 | open | normal | primary | 192.168.7.11:1688 | /data1/yashan/yasdb_data/db-1-2 ----------+-----------+--------+-------+-----------------+-----------------+---------------+-------------------+---------------------------------

host0003 | db | 1-3:3 | 14944 | open | normal | standby | 192.168.7.12:1688 | /data1/yashan/yasdb_data/db-1-3 ----------+-----------+--------+-------+-----------------+-----------------+---------------+-------------------+---------------------------------

旧主机业务中断的时间戳:

Current time is: 2024-03-19 16:31:45.309SQL> UPDATE ha_test SET time_col='2024-03-19 16:31:45.309';

1 row affected.

Current time is: 2024-03-19 16:31:45.322SQL> UPDATE ha_test SET time_col='2024-03-19 16:31:45.322';

YAS-00406 connection is closed

新主机执行业务成功的时间:

Current time is: 2024-03-19 16:31:53.250SQL> UPDATE ha_test SET time_col='2024-03-19 16:31:53.250';

YAS-06010 the database is not in readwrite mode

Current time is: 2024-03-19 16:31:53.257SQL> UPDATE ha_test SET time_col='2024-03-19 16:31:53.257';

1 row affected.

3 测试总结

心跳间隔配置:1s
检查超时时间配置:5s
当前的 redo 刷盘速度:237MB/s
业务中断时间:7.935s
故障转移时间:小于 3s

相关文章
|
9月前
|
监控 数据库
【YashanDB 知识库】ycm 托管数据库时报错 OM host ip:127.0.0.1 is not support join to YCM
在托管数据库时,若 OM 的 IP 被设置为 127.0.0.1,将导致无法托管至 YCM,并使数据库失去监控。此问题源于安装时修改了 OM 的监听 IP。解决方法包括:将 OM 的 IP 修改为本机实际 IP 或 0.0.0.0,同时更新 env 文件及 yasom 后台数据库中的相关配置。经验总结指出,应避免非必要的后台 IP 修改,且数据库安装需遵循规范,不使用仅限本机访问的 IP(如 127.0.0.1)。
|
9月前
|
算法 Java Python
使用Python来绘制樱花树
本文以林徽因的《你是人间的四月天》为引,将春日意象与现代职场编程艺术结合,通过Python的Turtle模块绘制分形树和花瓣图案。文章详细解析了Turtle模块的使用方法、递归算法及随机性在图形生成中的应用,展示了如何用代码创造自然美感。核心代码包含tree函数(绘制分形树)和petal函数(绘制花瓣),最终生成一幅生动的春日画卷。项目不仅帮助读者掌握Turtle绘图技巧,更激发对编程艺术的兴趣,鼓励探索数字世界的无限可能。
301 5
|
12月前
|
存储 人工智能 Serverless
AI 短剧遇上函数计算,一键搭建内容创意平台
为了帮助更多内容创作者和企业快速实现 AI 短剧创作,函数计算 FC 联合百炼联合推出“AI 剧本生成与动画创作解决方案”,通过函数计算 FC 构建 Web 服务,结合百炼模型服务和 ComfyUI 生图平台,实现从故事剧本撰写、插图设计、声音合成和字幕添加到视频合成的一站式自动化流程。创作者只需通过简单操作,就能快速生成高质量的剧本,并一键转化为精美的动画。
889 109
|
10月前
|
机器学习/深度学习 人工智能 安全
一篇关于DeepSeek模型先进性的阅读理解
本文以DeepSeek模型为核心,探讨了其技术先进性、训练过程及行业影响。首先介绍DeepSeek的快速崛起及其对AI行业的颠覆作用。DeepSeek通过强化学习(RL)实现Time Scaling Law的新范式,突破了传统大模型依赖算力和数据的限制,展现了集成式创新的优势。文章还提到开源的重要性以及数据作为制胜法宝的关键地位,同时警示了业务发展中安全滞后的问题。
1382 176
一篇关于DeepSeek模型先进性的阅读理解
|
10月前
|
人工智能 JavaScript Java
在IDEA中借助满血版 DeepSeek 提高编码效率
通义灵码2.0引入了DeepSeek V3与R1模型,新增Qwen2.5-Max和QWQ模型,支持个性化服务切换。阿里云发布开源推理模型QwQ-32B,在数学、代码及通用能力上表现卓越,性能媲美DeepSeek-R1,且部署成本低。AI程序员功能涵盖表结构设计、前后端代码生成、单元测试与错误排查,大幅提升开发效率。跨语言编程示例中,成功集成DeepSeek-R1生成公告内容。相比1.0版本,2.0支持多款模型,丰富上下文类型,具备多文件修改能力。总结显示,AI程序员生成代码准确度高,但需参考现有工程风格以确保一致性,错误排查功能强大,适合明确问题描述场景。相关链接提供下载与原文参考。
1113 160
在IDEA中借助满血版 DeepSeek 提高编码效率
|
存储 Web App开发 JavaScript
你的object可能没别人的快/小
本文深入探讨了JavaScript对象在V8引擎中的内存管理和优化策略,特别是在处理大规模数据时可能出现的性能和内存问题。
468 56
|
10月前
|
存储 算法 C++
【c++丨STL】map/multimap的使用
本文详细介绍了STL关联式容器中的`map`和`multimap`的使用方法。`map`基于红黑树实现,内部元素按键自动升序排列,存储键值对,支持通过键访问或修改值;而`multimap`允许存在重复键。文章从构造函数、迭代器、容量接口、元素访问接口、增删操作到其他操作接口全面解析了`map`的功能,并通过实例演示了如何用`map`统计字符串数组中各元素的出现次数。最后对比了`map`与`set`的区别,强调了`map`在处理键值关系时的优势。
576 73
|
10月前
|
消息中间件 人工智能 Java
通义灵码2.0深度评测:AI原生研发时代的开发者革命
作为一名五年开发经验的程序员,我深刻感受到从手动编码到AI辅助编程的变革。通义灵码2.0基于Qwen2.5-Coder大模型,通过代码生成、多文件协同、单元测试和跨语言支持等功能,显著提升开发效率。它能生成完整工程代码,自动处理复杂业务逻辑与依赖关系;在系统升级和微服务改造中表现出色;自动生成高质量单元测试用例;还具备跨语言转换能力。尽管存在一些改进空间,但其高频迭代和功能优化展现了巨大潜力。通义灵码2.0正推动软件开发从“体力活”向“架构创造力”转型,是开发者不可错过的生产力工具。
通义灵码2.0深度评测:AI原生研发时代的开发者革命
|
10月前
|
安全 测试技术 PHP
[NPUCTF2020]ReadlezPHP1怎么回事?
NPUCTF2020的ReadlezPHP1题目展示了文件包含漏洞的利用和防御。通过对PHP代码的审计,可以发现并利用文件包含漏洞来读取敏感文件或执行恶意代码。然而,通过严格限制用户输入、使用绝对路径、禁用URL包含和避免动态包含,可以有效地防御文件包含漏洞,从而提高Web应用的安全性。在实际开发中,应时刻保持安全意识,定期进行代码审计和安全测试,以防范潜在的安全风险。
294 36