《一文讲透》第4期:KWDB 数据库运维(7)—— 集群规划

KWDB 数据库可高效处理海量且连续的数据流,但对于运维人员来说,根据业务需求进行硬件规划是确保系统稳定、高效运行的基础。本文将深入探讨 KWDB 集群规划,帮助运维人员从容应对数据增长和性能挑战,我们将从以下几个方面进行介绍:

  1. 拓扑结构:介绍 KWDB 数据库在延迟、弹性方面的考量。
  2. 硬件资源:介绍 KWDB 数据库在业务规模和性能角度,对 CPU、内存、存储和网络要求。
  3. 安全性:从安全方面,介绍 KWDB 集群规划时应该注意的事项。

拓扑结构

在计划部署时,应选择最能满足延迟和弹性要求的拓扑模式:

  • 为了提高可用性和降低数据丢失的风险,建议在一台服务器上只运行一个节点。由于 KWDB 跨节点复制,如果一台计算机运行多个节点,当计算机发生故障会增加数据丢失的可能性。
  • KWDB 集群模式下的数据副本数为3,为确保集群的稳定运行,需要保证集群中正常运行的节点数大于集群的副本数。
  • 为保证 KWDB 集群正常运行,需要保证每个数据库节点都可以互相访问。
  • KWDB 在面临节点故障时会自动进行数据迁移和补足,需要保证节点之间有足够的网络带宽。

综上,KWDB 建议每个节点都使用独立的服务器,在集群模式下至少有三个节点,各节点可以对等高速访问。

硬件资源

每个节点需要配备必要的 CPU、内存、网络和存储等资源。在部署集群前需要检查各个硬件设备。

下面列出了 KWDB 安装部署所需的硬件规格要求。在实际部署时,用户需要根据实际的业务规模和性能要求,进行硬件资源的规划。

CPU 和内存

单节点配置建议不低于4核8G。越高的 CPU 和内存意味着越好的数据读写、复杂工作负载、高并发和高性能场景表现。
同时,CPU 和内存应检查以下内容:

禁用 CPU 节能模式

在 X86 架构上,部分系统会模式使用 CPU 节能模式。为发挥最佳性能,需要配置为高性能模式来始终保持 CPU 在最高频率上工作。

检查系统 CPU 模式

cpupower frequency-info --policy

如果输出为The governor "powersave"则说明当前是节能模式,需要调整为性能模式 performance。

sudo nano /etc/systemd/system/cpupower.service

添加以下内容

[Unit]
Description=Set CPU performance governor
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/bin/cpupower frequency-set --governor performance
ExecStartPost=/bin/sleep 1
ExecStartPost=/usr/bin/cpupower frequency-set --governor performance
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

启用服务

sudo systemctl daemon-reload
sudo systemctl enable cpupower.service
sudo systemctl start cpupower.service

使用 64K PAGE_SIZE 内核

在 ARM 架构上,因为其 TLB 较小,在高性能计算和数据库场景中,应当使用 page size 为 64K 的 Linux 内核,从而获得更好的性能。

getconf PAGE_SIZE

如果您的系统使用小于64K的内核,应进行内核切换,可以参考>>
Choosing between the arm64 and arm64+largemem installer options | Ubuntu

绑定 CPU

在部分国产 CPU 上,往往 Non-Uniform Memory Access (NUMA) 之间带宽是 CPU 的主要瓶颈,需要主动绑定 CPU 来发挥全部性能。

除此之外,如果 KWDB 和应用部署在同一个服务器上,为避免发生 CPU 争抢引发性能衰退,也需要进行绑定 CPU 来优化性能。

建议使用 numactl 来查看 NUMA 信息和绑定 CPU。numactl 是一个用于管理 NUMA 系统的工具。它可以用于查看 NUMA 配置,并将进程绑定到特定的 NUMA 节点或 CPU 上,从而优化性能。

  • 查看 NUMA 节点的信息:
    使用 numactl --hardware 或 lscpu 命令查看系统中的 NUMA 节点及其关联的 CPU 和内存信息:
numactl --hardware

或者:

lscpu

这将输出类似以下的信息:

available: 2 nodes (0-1)     node 0 cpus: 0 1 2 3 4 5 6 7     node 0 size: 16384 MB     node 0 free: 12000 MB     node 1 cpus: 8 9 10 11 12 13 14 15     node 1 size: 16384 MB  node 1 free: 12000 MB    

这里显示了可用的 NUMA 节点,以及每个节点包含的 CPU 核心和内存信息。

  • 绑定进程到特定的 NUMA 节点:
    如果想将 KWDB 进程绑定到 NUMA 节点 0,可以使用以下命令:
numactl --cpunodebind=0 --membind=0 kwbase  <args>   
  • 绑定进程到特定的 CPU:
    如果想将 KWDB 进程绑定到特定的 CPU 核心(例如 CPU 0 和 CPU 1),可以使用以下命令:
numactl --physcpubind=0,1 kwbase <args> 

存储

建议使用 Ext4 文件系统。同时,存储应检查以下内容:

检测并关闭系统 swap

关闭 swap 可以提升 KWDB 的性能,但可能会损失部分稳定性。

swapon --show

如果没有输出,表示没有启用的 swap。如果存在 swap,可以通过以下方式永久禁用:
编辑 /etc/fstab 文件,注释掉包含 swap 的行:

/swapfile none swap sw 0 0

重启系统永久生效。

调整I/O调度器为 noop

内核的 I/O 调度会导致性能损失,调整调度器为 noop 后,可以将 I/O 直接下发给硬件,从而获得更好的性能。

cat /sys/block/sdX/queue/scheduler

将 sdX 修改为您的磁盘(如 sda、sdb 等),如果为 deadline,则需要调整。

  1. 创建一个新的 udev 规则文件,例如 /etc/udev/rules.d/60-io-scheduler.rules:
sudo nano /etc/udev/rules.d/60-io-scheduler.rules
  1. 添加规则:
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/scheduler}="noop"

这里,sd[a-z] 表示所有以 sd 开头的磁盘设备(如 sda、sdb 等)。您可以根据需要调整设备匹配模式。
3. 重新加载 udev 规则:

sudo udevadm control --reload-rules
  1. 应用新规则:
sudo udevadm trigger

磁盘容量

KWDB 推荐使用 SSD 或者 NVME 设备,尽量避免使用共享存储,确保至少 500 IOPS 和 30MB/s 处理效率。 KWDB 系统本身占用磁盘较小(<1GB),实际需求取决于业务量和开启的功能。

磁盘需求量可通过以下公式预估:

1、 压缩前空间:总存储空间=设备数量单台设备每天写入行数分区天数总分区数(行宽/1024/1024+15/64/分片可存储的最大数据行数/500/1000)/1024,单位为GB。

2、压缩后空间:总存储空间=设备数量单台设备每天写入行数分区天数总分区数(行宽/1024/1024/压缩比+15/64/分片可存储的最大数据行数/500/1000)/1024,单位为GB。

其中,分区天数取决于时序表的分区时间范围(PARTITION INTERVAL )设置。KWDB 默认每10天进行一次分区,分区天数的值即为10,如果建表时将分区时间范围设置为1mon, 则对应的分区天数为30。

总分区数取决于表的生命周期参数 RETENTIONS <keep_duration> 和分区时间范围(PARTITION INTERVAL )设置,例如,如果将表的生命周期设置为10天,分区天数使用默认值10天,则总分区数为1。如果没有设置生命周期参数和分区时间,则总分区数取决于业务周期。例如,如果需要存储一年的数据,总分区数将为37。

行宽为每行数据所有列占用空间的字节总数,各数据列所占用字节数如下:

数据类型占用字节数
第一列时间戳16字节
BOOL1字节
INT22字节
INT4、FLOAT44字节
DOUBLE、TIMESTAMP、INT88字节
CHAR、BYTESDDL中定义宽度 + 1
NCHARDDL中定义宽度*2 + 1
VARCHAR、VARBYTES8字节偏移宽度+平均内容宽度

分片可存储的最大数据行数为实时参数ts.blocks_per_shard.max_limit和ts.rows_per_block.max_limit的乘积,默认值为1000000。

压缩比通常大于等于10,实际压缩比取决于用户数据重复度,重复度越高,压缩比越高,重复度越低,压缩比越低。

假设某项目有1000台设备,每台设备每天写入行数为1000行,分区天数采用默认值10,表的生命周期设置为30天,每行数据占用的总字节数为913,分片可存储的最大数据行数为5000,压缩比为58,则压缩前的空间预计为10001000103(913/1024/1024+15/64/1000/10)/1024≈26 GB,压缩后占用的空间预计为10001000103(913/1024/1024/58+15/64/1000/10)/1024≈1.1 GB。

以下假设列出了不同规模数据库推荐配置的参数值和预计占用的压缩分区空间和活跃未压缩分区空间的合计大小:

  • 表内有20个数据列;
  • 每行数据的总宽度为500字节;
  • 保存数据时间3年;
  • 部署方式为单节点部署,如果是集群部署,预估空间时应乘以集群副本数;
  • 压缩比为10:1。

√ 小型规模

设备数数据写入速率数据量推荐配置预估空间合计
1001条/分钟14.4万/天集群实时参数:
ts.entities_per_subgroup.max_limit: 100
ts.blocks_per_shard.max_limit: 1500
ts.rows_per_block.max_limit: 1000 时序表设置:
PARTITION INTERVAL:10d
ACTIVETIME:200d
20 GB
1001条/10秒86.4万/天集群实时参数:
ts.entities_per_subgroup.max_limit: 100
ts.blocks_per_shard.max_limit: 5000
ts.rows_per_block.max_limit: 1000 时序表设置:
PARTITION INTERVAL:5d
ACTIVETIME:30d
64 GB
1001条/秒864万/天集群实时参数:
ts.entities_per_subgroup.max_limit: 100
ts.blocks_per_shard.max_limit: 10000
ts.rows_per_block.max_limit: 1000
ts.mount.max_limit:1000 时序表设置:
PARTITION INTERVAL:1d
ACTIVETIME:10d
552 GB
5001条/分钟72万/天集群实时参数:
ts.entities_per_subgroup.max_limit: 500
ts.blocks_per_shard.max_limit: 8000
ts.rows_per_block.max_limit: 1000 - ts.mount.max_limit:1000 时序表设置:
PARTITION INTERVAL:10d
ACTIVETIME:60d
61 GB
5001条/10秒432万/天集群实时参数:
ts.entities_per_subgroup.max_limit: 500
ts.blocks_per_shard.max_limit: 25000
ts.rows_per_block.max_limit: 1000
ts.mount.max_limit:1000 时序表设置:
PARTITION INTERVAL:5d
ACTIVETIME:20d
297 GB
5001条/秒4320万/天集群实时参数:
ts.entities_per_subgroup.max_limit: 500
ts.blocks_per_shard.max_limit: 50000
ts.rows_per_block.max_limit: 1000
ts.mount.max_limit:1000 时序表设置:
PARTITION INTERVAL:1d
ACTIVETIME:5d
2.6 TB
10001条/分钟144万/天集群实时参数:
ts.entities_per_subgroup.max_limit: 500
ts.blocks_per_shard.max_limit: 8000
ts.rows_per_block.max_limit: 1000
ts.mount.max_limit:1000 时序表设置:
PARTITION INTERVAL:10d
ACTIVETIME:30d
102 GB
10001条/10秒864万/天集群实时参数:
ts.entities_per_subgroup.max_limit: 500
ts.blocks_per_shard.max_limit: 25000
ts.rows_per_block.max_limit: 1000
ts.mount.max_limit:2000 时序表设置:
PARTITION INTERVAL:5d
ACTIVETIME:10d
551 GB
10001条/秒8640万/天集群实时参数:
ts.entities_per_subgroup.max_limit: 500
ts.blocks_per_shard.max_limit: 50000
ts.rows_per_block.max_limit: 1000
ts.mount.max_limit:2000 时序表设置:
PARTITION INTERVAL:1d
ACTIVETIME:3d
5.2 TB

√ 中型规模

设备数数据写入速率数据量推荐配置预估空间合计
1万1条/分钟1440万/天集群实时参数:
ts.entities_per_subgroup.max_limit: 500
ts.blocks_per_shard.max_limit: 230000
ts.rows_per_block.max_limit: 1000
ts.mount.max_limit:5000
时序表设置:
PARTITION INTERVAL:1d
ACTIVETIME:2d
886 GB
1万1条/10秒8640万/天集群实时参数:
ts.entities_per_subgroup.max_limit: 500
ts.blocks_per_shard.max_limit: 230000
ts.rows_per_block.max_limit: 1000
ts.mount.max_limit:5000
时序表设置:
PARTITION INTERVAL:1d
ACTIVETIME:2d
5.3 TB
1万1条/秒86400万/天集群实时参数:
ts.entities_per_subgroup.max_limit: 500
ts.blocks_per_shard.max_limit: 230000
ts.rows_per_block.max_limit: 1000
ts.mount.max_limit:5000
时序表设置:
PARTITION INTERVAL:1d
ACTIVETIME:2d
52 TB
10万1条/分钟1.44亿/天集群实时参数:
ts.entities_per_subgroup.max_limit: 500
ts.blocks_per_shard.max_limit: 230000
ts.rows_per_block.max_limit: 1000
ts.mount.max_limit:5000
时序表设置:
PARTITION INTERVAL:1d
ACTIVETIME:2d
8.5 TB
10万1条/10秒8.64亿/天集群实时参数:
ts.entities_per_subgroup.max_limit: 500
ts.blocks_per_shard.max_limit: 230000
ts.rows_per_block.max_limit: 1000
ts.mount.max_limit:5000
时序表设置:
PARTITION INTERVAL:1d
ACTIVETIME:2d
50.6 TB
10万1条/秒86.4亿/天集群实时参数:
ts.entities_per_subgroup.max_limit: 500
ts.blocks_per_shard.max_limit: 230000
ts.rows_per_block.max_limit: 1000
ts.mount.max_limit:5000
时序表设置:
PARTITION INTERVAL:1d
ACTIVETIME:2d
502 TB

√ 大型规模

设备数数据写入速率数据量推荐配置预估空间合计
50万1条/分钟7.2亿/天集群实时参数:
ts.entities_per_subgroup.max_limit: 500
ts.blocks_per_shard.max_limit: 230000
ts.rows_per_block.max_limit: 1000
ts.mount.max_limit:5000
时序表设置:
PARTITION INTERVAL:1d
ACTIVETIME:2d
75.3 TB
50万1条/10秒43.2亿/天集群实时参数:
ts.entities_per_subgroup.max_limit: 500
ts.blocks_per_shard.max_limit: 230000
ts.rows_per_block.max_limit: 1000
ts.mount.max_limit:5000
时序表设置:
PARTITION INTERVAL:1d
ACTIVETIME:2d
251 TB
50万1条/秒432亿/天集群实时参数:
ts.entities_per_subgroup.max_limit: 500
ts.blocks_per_shard.max_limit: 230000
ts.rows_per_block.max_limit: 1000
ts.mount.max_limit:5000
时序表设置:
PARTITION INTERVAL:1d
ACTIVETIME:2d
2510 TB
100万1条/分钟14.4亿/天集群实时参数:
ts.entities_per_subgroup.max_limit: 500
ts.blocks_per_shard.max_limit: 230000
ts.rows_per_block.max_limit: 1000
ts.mount.max_limit:5000
时序表设置:
PARTITION INTERVAL:1d
ACTIVETIME:2d
150 TB
100万1条/10秒86.4亿/天集群实时参数:
ts.entities_per_subgroup.max_limit: 500
ts.blocks_per_shard.max_limit: 230000
ts.rows_per_block.max_limit: 1000
ts.mount.max_limit:5000
时序表设置:
PARTITION INTERVAL:1d
ACTIVETIME:2d
502 TB
100万1条/秒864亿/天集群实时参数:
ts.entities_per_subgroup.max_limit: 500
ts.blocks_per_shard.max_limit: 230000
ts.rows_per_block.max_limit: 1000
ts.mount.max_limit:5000
时序表设置:
PARTITION INTERVAL:1d
ACTIVETIME:2d
5020 TB

网络与时钟

网络会影响 KWDB 的业务通信和时钟的表现。因此应检查以下内容:

网络带宽

KWDB 需要足够的网络带宽来满足节点间数据通信需求。当因带宽不足引发策略性丢包、通信过长时,会影响节点心跳、业务重试等问题,从而降低集群稳定性和性能。
建议集群内使用万兆网卡保证足够的网络带宽。

网络抖动

KWDB 在集群模式下依赖时钟保证数据一致性,在节点时钟波动超过500ms时会产生异常。因此必须安装对时服务,并通过低网络抖动(jitter)来降低时钟波动。
例如 ,如果使用 NTP 网络对时,为保证 NTP 在当前集群网络下的时钟波动不超过500ms,在保证本地网络抖动较低的基础上,还可以通过如下方式保证时钟准确性:

  1. 选择更合适的稳定的时钟源
  2. 根据各节点的网络状态和性能,调整 NTP 服务器的权重
  3. 选择较稳定或精度较高的的对时协议(如 NTP4 或 PTP)
  4. 提高时间同步频率,使用 iburst 和调整 imnpoll maxpoll 选项

网络时延

KWDB 在集群模式下如果多节点间延迟达到100ms以上会处于不可用状态,建议保证各节点延迟在20ms以下

TCP 参数

KWDB 在集群模式下需要全对称高速网络来保证数据迁移和数据广播。当前版本下,KWDB 会使用基于 tcp 的 grpc 协议进行数据传递。因此,必要情况下,集群内对系统 tcp 参数进行优化,都可以提高 KWDB 的性能与稳定性。例如,修改以下 Linux 内核 TCP 参数:

# TCP 缓冲区大小
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216

# TCP 窗口自动调谐
net.ipv4.tcp_window_scaling = 1

# TCP 内存设置
net.ipv4.tcp_mem = 50576 64768 98152

# TCP 高效传输
net.ipv4.tcp_moderate_rcvbuf = 1
net.core.netdev_max_backlog = 250000

# TCP 快速打开
net.ipv4.tcp_fastopen = 3

在使用4.9及以上版本的 Linux 内核时,应打开 BBR 来提高网络性能.

#网络队列调度
net.core.default_qdisc = fq

#TCP拥塞算法
net.ipv4.tcp_congestion_control = bbr

或者选用6.8及以上版本的 Linux 内核,通过内核默认集成的 TCP 并发连接优化,获得更好的 TCP 性能, 点击参阅

安全性

非安全模式的集群存在严重的安全风险:

  • 集群对所有客户端都是开放的,允许访问集群中任意节点的 IP 地址。
  • 所有用户都可以在无需密码的情况下访问集群。
  • 任何用户都可以以 root 用户身份访问集群,并对所有数据进行读写操作。
  • 缺乏网络加密和认证机制,使得数据传输容易受到威胁。

因此,KWDB 强烈建议在部署时采用安全模式,通过TLS加密技术验证节点和客户端的身份,并对节点与客户端之间的数据传输进行加密,以有效防范未经授权的访问和数据篡改。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/970097.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

给压缩文件加密码的5种方法(win/mac/手机/网页端)

把文件加密压缩&#xff0c;一方面能有效保护个人隐私与敏感信息&#xff0c;防止数据在传输或存储过程中被窃取、篡改。另一方面&#xff0c;压缩文件可减少存储空间占用&#xff0c;提升传输速度&#xff0c;方便数据的存储与分享。以下为你介绍5种常见的加密压缩方法。 一、…

如何通过AI轻松制作PPT?让PPT一键生成变得简单又高效

如何通过AI轻松制作PPT&#xff1f;让PPT一键生成变得简单又高效&#xff01;在这个信息化飞速发展的时代&#xff0c;PPT已经成为我们日常工作、学习和生活中不可或缺的一部分。无论是公司会议、学术报告&#xff0c;还是个人展示&#xff0c;PPT的作用都不容忽视。很多人对于…

Linux之【网络I/O】前世今生(二)

前文回顾 通过学习 Linux之【网络I/O】前世今生&#xff08;一&#xff09;&#xff0c;我们知道了I/O 请求可以分为两个阶段&#xff0c;分别为 I/O 调用和 I/O 执行&#xff1a; I/O 调用 即用户进程向内核发起系统调用(通过 0x80 中断)。 I/O 执行 内核等待 I/O 请求处理完…

Redis未授权访问漏洞导致getshell

一、漏洞信息 redis默认情况下会绑定在本地6379端口&#xff0c;如果没有进行采用相关的策略&#xff0c;就会将redis服务暴露到公网上&#xff0c;如果再没有设置密码认证(一般为空)的情况下&#xff0c;会导致任意用户可以访问到目标服务器的情况下未授权访问redis以及读取r…

伯克利 CS61A 课堂笔记 08 —— Strings and Dictionaries

本系列为加州伯克利大学著名 Python 基础课程 CS61A 的课堂笔记整理&#xff0c;全英文内容&#xff0c;文末附词汇解释。 目录 01 Strings 字符串 Ⅰ Strings are An Abstraction. Ⅱ Strings Literals have Three Forms Ⅲ String are Sequences 02 Dictionaries 字典 …

【Stable Diffusion模型测试】测试ControlNet,没有线稿图?

相信很多小伙伴跟我一样&#xff0c;在测试Stable Diffusion的Lora模型时&#xff0c;ControlNet没有可输入的线稿图&#xff0c;大家的第一反应就是百度搜&#xff0c;但是能从互联网上搜到的高质量线稿图&#xff0c;要么收费&#xff0c;要么质量很差。 现在都什么年代了&a…

智能手表表带圆孔同心度检测

在智能手表的制造工艺中&#xff0c;表带圆孔同心度检测是确保产品品质的关键环节。精准的同心度不仅关乎表带与表体的完美适配&#xff0c;更直接影响用户的佩戴舒适度和产品的整体美观度。稍有偏差&#xff0c;就可能导致表带安装困难、佩戴时出现晃动&#xff0c;甚至影响智…

基于SSM+uniapp的数学辅导小程序+LW示例参考

1.项目介绍 系统角色&#xff1a;管理员、普通用户功能模块&#xff1a;用户管理、学习中心、知识分类管理、学习周报管理、口算练习管理、试题管理、考试管理、错题本等技术选型&#xff1a;SSM&#xff0c;Vue&#xff08;后端管理web&#xff09;&#xff0c;uniapp等测试环…

基于 openEuler 构建 LVS-DR 群集

一、 对比 LVS 负载均衡群集的 NAT 模式和 DR 模式&#xff0c;比较其各自的优势 。 二、 基于 openEuler 构建 LVS-DR 群集。 一 NAT 模式 部署简单&#xff1a;NAT 模式下&#xff0c;所有的服务器节点只需要连接到同一个局域网内&#xff0c;通过负载均衡器进行网络地址转…

JS设计模式之单例原型

那么单例模式都有哪些应用场景呢&#xff1f;如何通过构造函数创建单例如何使用模块化的方式创建总结 各位老铁们&#xff0c;今天我们介绍一下JS中单例设计模式&#xff0c;它的特点是确保一个类只有一个实例&#xff0c;并提供一个全局访问点来获取该实例&#xff08;无论被创…

vue+springboot+webtrc+websocket实现双人音视频通话会议

前言 最近一些时间我有研究&#xff0c;如何实现一个视频会议功能&#xff0c;但是找了好多资料都不太理想&#xff0c;最终参考了一个文章 WebRTC实现双端音视频聊天&#xff08;Vue3 SpringBoot&#xff09; 只不过&#xff0c;它的实现效果里面只会播放本地的mp4视频文件&…

Linux 基础IO——重定向和缓冲区

目录 一、重定向 1、重定向的本质 2、使用 dup2 系统调用 &#xff08;1&#xff09;输出重定向 &#xff08;2&#xff09;追加重定向 (3) 输入重定向 ​ 二、缓冲区 1.理解缓冲区 2.缓冲区刷新问题 3.为什么要有缓冲区&#xff1f; 4.这个缓冲区在哪里&#xff…

14、deepseek视觉大模型Janus Pro本地部署及实战

1、简介 2025.01.27&#xff1a; Janus-Pro发布&#xff0c;Janus的高级版本&#xff0c;显著提高了多模态理解和视觉生成。 Janus-Pro 是 Janus 的高级版本。具体来说&#xff0c; Janus-Pro 包括以下改进&#xff1a;优化的训练策略、 扩展的训练数据以及更大规模的模型。通…

【第3章:卷积神经网络(CNN)——3.1 CNN的基本结构与工作原理】

嘿,小伙伴们,今天咱们来聊聊深度学习里的一大明星——卷积神经网络(CNN)。这东西在图像识别、视频处理等领域简直不要太火,甚至人脸识别、物体检测这些高大上的应用,都离不开它的身影。废话不多说,咱们这就开聊! 一、CNN是什么东东? 在人工智能领域,卷积神经网络(…

VMware Workstate 的 Ubuntu18 安装 vmware tools(不安装没法共享)

在共享主机路径后&#xff0c;可以在&#xff1a; /mnt/hgfs/下方找到共享的文件。但没有安装vmware tool时是没法共享的。 如何安装vmware tool&#xff0c;网上版本很多。这里记录一下&#xff1a; VMware Workstation 17 Pro&#xff0c;版本&#xff1a;17.6.0 虚拟机系统…

高效开发!使用Chrome对MoonBit生成的Wasm进行性能分析!

在 [我们前一篇博客][call-wasm-from-js] 中&#xff0c;我们介绍了如何在前端 JavaScript 中使用 MoonBit 驱动的 Wasm 库 [Cmark]。在本文中&#xff0c;我们将探索如何直接从 Chrome 浏览器中对该库进行性能分析。希望这篇教程能对你在使用 MoonBit 在类似的场景中进行开发时…

《安富莱嵌入式周报》第350期:Google开源Pebble智能手表,开源模块化机器人平台,开源万用表,支持10GHz HRTIM的单片机,开源CNC控制器

周报汇总地址&#xff1a;嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 视频版&#xff1a; https://www.bilibili.com/video/BV1YPKEeyEeM/ 《安富莱嵌入式周报》第350期&#xff1a;Google开…

2.【BUUCTF】bestphp‘s revenge

进入题目页面如下 进行代码审计 <?php // 1. 高亮显示当前PHP文件的源代码&#xff0c;方便开发者查看代码内容&#xff0c;在生产环境中不应使用此函数&#xff0c;可能会导致代码泄露。 highlight_file(__FILE__);// 2. 定义变量 $b &#xff0c;其值为字符串 implode &…

HarmonyOS:使用List实现分组列表(包含粘性标题)

一、支持分组列表 在列表中支持数据的分组展示&#xff0c;可以使列表显示结构清晰&#xff0c;查找方便&#xff0c;从而提高使用效率。分组列表在实际应用中十分常见&#xff0c;如下图所示联系人列表。 联系人分组列表 在List组件中使用ListItemGroup对项目进行分组&#…

【vue3】入门基础知识点

Vue3核心语法 组合式API【vue3】与选项式API【vue2】 setup setup和data、methods同级别, 可与data等共存&#xff0c;data里面可以读取使用setup中声明的变量&#xff0c;而setup不能使用data中声明的变量&#xff08;setup加载时间早于beforeCreated&#xff09;setup中的…