【企业级分布式系统】Ceph集群

news2024/11/22 17:27:30

文章目录

  • 存储基础
    • 单机存储设备
    • 单机存储的问题
    • 商业存储解决方案
    • 分布式存储(SDS,软件定义的存储)
    • 分布式存储的类型
  • Ceph
    • Ceph的基本特点
      • Ceph的应用场景
    • Ceph的架构
    • Ceph的核心组件
    • OSD存储引擎
    • Ceph数据存储过程
    • Ceph集群部署
  • 基于 ceph-deploy 部署 Ceph 集群
    • Ceph 生产环境推荐配置
    • Ceph 环境规划
    • 环境准备
    • Ceph 集群部署
      • 1. 创建工作目录
      • 2. 安装 `ceph-deploy`
      • 3. 在管理节点为其它节点安装 Ceph 软件包
      • 4. 生成初始配置
      • 5. 初始化 mon 节点
      • 6. 部署管理节点(可选)
      • 7. 部署 osd 存储节点
      • 8. 部署 mgr 节点
      • 9. 开启监控模块
    • Ceph 资源池 Pool 管理
      • 创建资源池
      • 查看 Pool 信息
      • 查看资源池副本数量
      • 查看 PG 和 PGP 数量
      • 修改 PG 和 PGP 数量
      • 修改 Pool 副本数量
      • 修改默认副本数
      • 删除 Pool 资源池

存储基础

单机存储设备

  1. DAS(直接附加存储)
    • 定义:直接接到计算机的主板总线上去的存储。
    • 接口:IDE、SATA、SCSI、SAS、USB。
    • 特性:提供块级别的存储,即存储设备直接以块的形式向主机提供存储空间。
  2. NAS(网络附加存储)
    • 定义:通过网络附加到当前主机文件系统之上的存储。
    • 协议:NFS、CIFS、FTP。
    • 特性:文件系统级别的存储,客户端通过网络将远程存储上的文件系统挂载到本地,像使用本地文件系统一样使用远程存储。无法对NAS存储进行再次格式化创建新的文件系统。
  3. SAN(存储区域网络)
    • 定义:一种网络存储,通过专用网络将存储设备与服务器连接起来。
    • 协议与物理层:SCSI协议(仅用于数据传输)、FCSAN(物理层使用光纤)、iSCSI(物理层使用以太网)。
    • 特性:提供块级别的存储,客户端可以直接访问存储设备的块空间。

单机存储的问题

  1. 存储处理能力不足:传统磁盘的IO能力有限,无法满足大规模用户同时访问的需求。
  2. 存储空间能力不足:单块磁盘的容量有限,无法满足大规模数据存储的需求。
  3. 单点故障问题:单机存储存在单点故障风险,一旦存储设备故障,可能导致数据丢失。

商业存储解决方案

  • 品牌:EMC、NetAPP、IBM、DELL、华为、浪潮等。
  • 特点:提供高性能、高可用性的存储解决方案,通常具有冗余和备份机制,以降低单点故障风险。

分布式存储(SDS,软件定义的存储)

  • 定义:通过软件来定义和管理存储资源,实现存储资源的高扩展性、高性能和高可用性。
  • 常见系统:Ceph、TFS、FastDFS、MooseFS(MFS)、HDFS、GlusterFS(GFS)等。

分布式存储的类型

  1. 块存储
    • 定义:提供没有被组织过的存储空间,通常以裸设备的形式存在。
    • 适用场景:容器或虚拟机存储卷分配、日志存储、文件存储等。
    • 特性:底层以分块的方式来存储数据,每个块是一个独立的存储单元。
  2. 文件存储
    • 定义:建立在块存储结构之上,以文件形式来存储数据。
    • 适用场景:目录结构的存储、日志存储等。
    • 特性:文件的元数据和实际数据是分开存储的,可以通过网络被多个服务器同时挂载和使用。
  3. 对象存储
    • 定义:基于API接口提供的文件存储,每个文件都是一个对象。
    • 适用场景:图片存储、视频存储等。
    • 特性:文件的元数据和实际数据是存放在一起的,具有块存储的高速读写能力和文件存储的共享特性。每个对象都有唯一的标识符,可以通过API进行访问和管理。

Ceph是一个开源的分布式存储系统,具有高扩展性、高性能和高可靠性的优点,广泛应用于云计算和大数据领域。以下是对Ceph的详细介绍:

Ceph

Ceph的基本特点

  • 开源性:Ceph是一个开源项目,其源代码可以在GitHub等平台上获取,社区活跃,有大量的开发者和用户参与贡献和维护。
  • 自我修复和自我管理:Ceph具有自我修复和自我管理的能力,能够自动检测和处理故障,确保存储系统的稳定性和可靠性。
  • 多种存储类型支持:Ceph支持对象存储、块存储和文件系统等多种存储类型,可以满足不同应用场景的需求。

Ceph的应用场景

  • 云平台后端存储:Ceph可以作为云平台的后端存储,支持虚拟机镜像的存储和管理,提高云平台的性能和可靠性。
  • 大数据存储:Ceph支持大数据存储和处理,能够处理PB级的数据量,适用于分布式文件系统、数据仓库等场景。
  • 内容分发网络(CDN):Ceph的对象存储功能可以支持内容分发网络,提供高效的内容存储和分发服务。

Ceph的架构

Ceph的架构可以自下向上分为四个层次:

  • RADOS基础存储系统:RADOS是Ceph最底层的功能模块,是一个无限可扩容的对象存储服务。它将文件拆解成无数个对象(碎片)存放在硬盘中,提高了数据的稳定性。RADOS主要由OSD和Monitor两个组件组成,OSD负责数据的存储和复制,Monitor负责集群的状态监控和元数据管理。
  • LIBRADOS基础库:LIBRADOS提供了与RADOS进行交互的方式,并向上层应用提供Ceph服务的API接口。上层的RBD、RGW和CephFS都是通过LIBRADOS访问的。LIBRADOS支持多种编程语言,如PHP、Ruby、Java、Python、Go、C和C++等,方便开发者进行客户端应用开发。
  • 高层应用接口:包括对象存储接口RGW、块存储接口RBD和文件存储接口CephFS。RGW提供S3和Swift兼容的RESTful API接口,支持对象存储服务;RBD提供块设备接口,主要用于Host/VM;CephFS提供了一个符合POSIX标准的文件系统,支持分布式文件系统功能。
  • 应用层:基于高层接口或者基础库LIBRADOS开发出来的各种APP,或者Host、VM等诸多客户端。这些应用可以直接与Ceph存储系统进行交互,实现数据的存储、访问和管理。

Ceph的核心组件

  • OSD(Object Storage Daemon):负责物理存储的进程,一般配置成和磁盘一一对应。主要功能是存储数据、复制数据、平衡数据、恢复数据,以及与其它OSD间进行心跳检查等。通常至少需要3个OSD来实现冗余和高可用性。
  • PG(Placement Group):归置组是一个虚拟的概念,用于数据寻址。Ceph先将每个对象数据通过HASH算法映射到一个PG中,然后将PG通过CRUSH算法映射到OSD上。
  • Pool:存储对象的逻辑分区,起到namespace的作用。每个Pool包含一定数量的PG,并可以做故障隔离域。Pool中数据保存方式支持多副本和纠删码两种类型。
  • Monitor:用来保存OSD的元数据,并维护集群状态的映射视图(包括OSD Map、Monitor Map、PG Map和CRUSH Map等)。同时负责维护展示集群状态的各种图表,以及管理集群客户端认证与授权。一个Ceph集群通常至少需要3或5个(奇数个)Monitor节点来实现冗余和高可用性。
  • Manager:负责跟踪运行时指标和Ceph集群的当前状态,包括存储利用率、当前性能指标和系统负载等。为外部监视和管理系统提供额外的监视和接口。一个Ceph集群通常至少需要2个Manager节点实现高可用性。
  • MDS(Metadata Server):是CephFS服务依赖的元数据服务,负责保存文件系统的元数据和管理目录结构。对象存储和块设备存储不需要元数据服务;如果不使用CephFS可以不安装MDS。

OSD存储引擎

OSD存储引擎主要有两种方式:FileStore和BlueStore。

  1. FileStore
    • FileStore是Ceph中存储对象的一个遗留方法,它依赖于标准文件系统(如XFS)和一个键/值数据库(传统上是LevelDB,BlueStore引入后则为RocksDB的变种)来保存和管理元数据。
    • FileStore经过了良好的测试,在生产中得到了广泛应用,但由于其总体设计和对传统文件系统的依赖,性能上存在一些不足。
  2. BlueStore
    • 从Ceph 12.2.0(Luminous)版本开始,BlueStore被引入作为一种新的、高性能的OSD存储引擎,以替代旧的FileStore引擎。
    • BlueStore将对象直接存储在原始块设备上,免除了对文件系统层的需要,提高了读写操作速度。它直接操作底层块设备来管理数据,而不是通过传统的文件系统。
    • BlueStore提供了更快的响应时间和更高的数据吞吐量,同时具有更好的可靠性和稳定性。它可以直接与Solid State Drive(SSD)交互,并利用其快速读写速度。
    • BlueStore还具有可扩展性,可以处理数百万个物理盘和千亿个对象。它实现了动态负载平衡和自动恢复机制,以确保高可用性和数据可靠性。

Ceph数据存储过程

  1. 客户端从MON(Monitor)节点获取最新的Cluster Map,该地图包含了集群中所有OSD、MON和PG的状态信息。
  2. Ceph存储的数据会被切分成一到多个固定大小的对象(Object),对象大小可以由管理员调整,通常为2M或4M。每个对象都会有一个唯一的OID(Object ID),由ino(文件的FileID,用于在全局唯一标识每一个文件)和ono(分片的编号)组成。
  3. 通过对OID使用HASH算法,得到一个16进制的特征码。用该特征码与Pool中的PG总数取余,得到的序号则是PGID(Placement Group ID)。
  4. PG会根据设置的副本数量进行复制。通过对PGID使用CRUSH算法,可以算出PG中目标主和次OSD的ID,然后将数据(实际上是PG中的所有对象)存储到不同的OSD节点上。CRUSH是Ceph使用的数据分布算法,它类似于一致性哈希,可以确保数据被分配到预期的地方。

Ceph版本发行生命周期
Ceph从Nautilus版本(14.2.0)开始,每年都会有一个新的稳定版发行,预计是每年的3月份发布。每年的新版本都会起一个新的名称和一个主版本号。版本号的格式为x.y.z,其中x表示发布周期,y表示发布版本类型(0为开发版本,1为发布候选版本,2为稳定/错误修复版本),z表示具体的修订版本。

Ceph集群部署

  1. ceph-deploy
    • 一个集群自动化部署工具,使用较久且成熟稳定。
    • 被很多自动化工具所集成,可用于生产部署。
  2. cephadm
    • 从Octopus和较新的版本后开始使用cephadm来部署ceph集群。
    • 使用容器和systemd安装和管理Ceph集群。
    • 目前在某些场景下可能不建议用于生产环境(但这一情况可能随时间变化,请查阅最新文档或社区建议)。
  3. 二进制手动部署
    • 需要一步步手动部署Ceph集群,支持较多定制化和了解部署细节。
    • 安装难度较大,适合对Ceph有深入了解的用户。

基于 ceph-deploy 部署 Ceph 集群

Ceph 生产环境推荐配置

  1. 存储集群全采用万兆网络
  2. 集群网络与公共网络分离
    • 集群网络(cluster-network):用于集群内部通讯
    • 公共网络(public-network):用于外部访问Ceph集群
  3. mon、mds 与 osd 分离部署在不同主机上
    • 测试环境中可以让一台主机节点运行多个组件
  4. OSD 可使用 SATA 磁盘
  5. 根据容量规划集群
  6. 硬件要求
    • CPU:至强E5 2620 V3或以上
    • 内存:64GB或更高
  7. 集群主机分散部署
    • 避免机柜的电源或网络故障

Ceph 环境规划

主机名Public网络Cluster网络角色
admin192.168.80.10admin(管理节点)、client
node01192.168.80.11192.168.100.11mon、mgr、osd(/dev/sdb、/dev/sdc、/dev/sdd)
node02192.168.80.12192.168.100.12mon、mgr、osd(/dev/sdb、/dev/sdc、/dev/sdd)
node03192.168.80.13192.168.100.13mon、osd(/dev/sdb、/dev/sdc、/dev/sdd)
client192.168.80.14client

环境准备

  1. 创建 Ceph 的管理用户
    创建一个专门用于管理 Ceph 的用户,并赋予其 root 权限。
    useradd cephadm
    passwd cephadm
    visudo
    cephadm ALL=(root) NOPASSWD:ALL
    
  2. 关闭 selinux 与防火墙
    实验环境中确保 Ceph 集群的网络通信不受限制。
    systemctl disable --now firewalld
    setenforce 0
    sed -i 's/enforcing/disabled/' /etc/selinux/config
    
  3. 根据规划设置主机名
    hostnamectl set-hostname admin
    hostnamectl set-hostname node01
    hostnamectl set-hostname node02
    hostnamectl set-hostname node03
    hostnamectl set-hostname client
    
  4. 配置 hosts 解析
    确保各节点之间可以通过主机名互相访问。
    cat >> /etc/hosts << EOF
    192.168.80.10 admin
    192.168.80.11 node01
    192.168.80.12 node02
    192.168.80.13 node03
    192.168.80.14 client
    EOF
    
5. **安装常用软件和依赖包**
   ```bash
   yum -y install epel-release
   yum -y install yum-plugin-priorities yum-utils ntpdate python-setuptools python-pip gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel zip unzip ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5-devel libidn libidn-devel openssl openssh openssl-devel nss_ldap openldap openldap-devel openldap-clients openldap-servers libxslt-devel libevent-devel ntp libtool-ltdl bison libtool vim-enhanced python wget lsof iptraf strace lrzsz kernel-devel kernel-headers pam-devel tcl tk cmake ncurses-devel bison setuptool popt-devel net-snmp screen perl-devel pcre-devel net-snmp screen tcpdump rsync sysstat man iptables sudo libconfig git bind-utils tmux elinks numactl iftop bwm-ng net-tools expect snappy leveldb gdisk python-argparse gperftools-libs conntrack ipset jq libseccomp socat chrony sshpass
  1. 在 admin 管理节点配置 ssh 免密登录所有节点
    简化集群节点间的操作,避免每次都需要输入密码。
    ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
    sshpass -p 'abc1234' ssh-copy-id -o StrictHostKeyChecking=no root@admin
    sshpass -p 'abc1234' ssh-copy-id -o StrictHostKeyChecking=no root@node01
    sshpass -p 'abc1234' ssh-copy-id -o StrictHostKeyChecking=no root@node02
    sshpass -p 'abc1234' ssh-copy-id -o StrictHostKeyChecking=no root@node03
    
  2. 配置时间同步
    确保集群内各节点的时间一致,避免因时间不同步导致的问题。
    systemctl enable --now chronyd
    timedatectl set-ntp true                    # 开启 NTP
    timedatectl set-timezone Asia/Shanghai      # 设置时区
    chronyc -a makestep                         # 强制同步下系统时钟
    timedatectl status                           # 查看时间同步状态
    chronyc sources -v                          # 查看 ntp 源服务器信息
    timedatectl set-local-rtc 0                 # 将当前的UTC时间写入硬件时钟
    
    # 重启依赖于系统时间的服务
    systemctl restart rsyslog 
    systemctl restart crond
    
    # 关闭无关服务
    systemctl disable --now postfix
    
  3. 配置 Ceph yum源
    添加 Ceph 的 yum 源以便于安装 Ceph 软件包。
    wget https://download.ceph.com/rpm-nautilus/el7/noarch/ceph-release-1-1.el7.noarch.rpm --no-check-certificate
    rpm -ivh ceph-release-1-1.el7.noarch.rpm --force
    
  4. 执行完上面所有的操作之后重启所有主机(可选)
    确保所有配置生效,重启后集群可以正常运行。
    sync
    reboot
    

Ceph 集群部署

1. 创建工作目录

mkdir -p /etc/ceph

2. 安装 ceph-deploy

cd /etc/ceph
yum install -y ceph-deploy
ceph-deploy --version

3. 在管理节点为其它节点安装 Ceph 软件包

ceph-deploy install --release nautilus node0{1..3} admin

或手动安装:

sed -i 's#download.ceph.com#mirrors.tuna.tsinghua.edu.cn/ceph#' /etc/yum.repos.d/ceph.repo
yum install -y ceph-mon ceph-radosgw ceph-mds ceph-mgr ceph-osd ceph-common ceph

4. 生成初始配置

ceph-deploy new --public-network 192.168.80.0/24 --cluster-network 192.168.100.0/24 node01 node02 node03

5. 初始化 mon 节点

ceph-deploy mon create node01 node02 node03
ceph-deploy --overwrite-conf mon create-initial
ceph-deploy gatherkeys node01

查看 mon 进程:

ps aux | grep ceph

查看集群状态:

ceph -s

查看 mon 集群选举情况:

ceph quorum_status --format json-pretty | grep leader

扩容 mon 节点:

ceph-deploy mon add <节点名称>

6. 部署管理节点(可选)

ceph-deploy --overwrite-conf config push node01 node02 node03
ceph-deploy admin node01 node02 node03

7. 部署 osd 存储节点

添加硬盘后直接使用:

lsblk

擦净磁盘(可选):

ceph-deploy disk zap node01 /dev/sdb

添加 osd 节点:

ceph-deploy --overwrite-conf osd create node01 --data /dev/sdb
ceph-deploy --overwrite-conf osd create node02 --data /dev/sdb
ceph-deploy --overwrite-conf osd create node03 --data /dev/sdb

查看集群状态:

ceph -s

查看 osd 状态:

ceph osd status
ceph osd tree
rados df
ssh root@node01 systemctl status ceph-osd@0

扩容 osd 节点:

ceph-deploy --overwrite-conf osd create node01 --data /dev/sdc
ceph-deploy --overwrite-conf osd create node02 --data /dev/sdc
ceph-deploy --overwrite-conf osd create node03 --data /dev/sdc
ceph-deploy --overwrite-conf osd create node01 --data /dev/sdd
ceph-deploy --overwrite-conf osd create node02 --data /dev/sdd
ceph-deploy --overwrite-conf osd create node03 --data /dev/sdd

8. 部署 mgr 节点

ceph-deploy mgr create node01 node02

查看集群状态:

ceph -s

解决 mons are allowing insecure global_id reclaim 问题:

ceph config set mon auth_allow_insecure_global_id_reclaim false

扩容 mgr 节点:

ceph-deploy mgr create <节点名称>

9. 开启监控模块

yum install -y ceph-mgr-dashboard
ceph mgr module ls | grep dashboard
ceph mgr module enable dashboard --force
ceph config set mgr mgr/dashboard/ssl false
ceph config set mgr mgr/dashboard/server_addr 0.0.0.0
ceph config set mgr mgr/dashboard/server_port 8000
ceph mgr module disable dashboard
ceph mgr module enable dashboard --force
ceph mgr services
echo "12345678" > dashboard_passwd.txt
ceph dashboard set-login-credentials admin -i dashboard_passwd.txt

访问 dashboard:

http://192.168.80.11:8000

账号密码为 admin/12345678

Ceph 资源池 Pool 管理

在 Ceph 集群中,资源池(Pool)是存储 Object 对象的逻辑分区。Pool 由多个 PG(Placement Group)组成,PG 通过 CRUSH 算法映射到不同的 OSD(Object Storage Daemon)上。Pool 可以设置副本大小,默认副本数量为 3。

创建资源池

cd /etc/ceph
ceph osd pool create mypool 64 64  # 创建名为 mypool 的 Pool,PGs 和 PGP 数量设置为 64

查看 Pool 信息

ceph osd pool ls                # 列出所有 Pool
rados lspools                   # 列出所有 Pool
ceph osd lspools                # 列出所有 Pool

查看资源池副本数量

ceph osd pool get mypool size   # 查看 mypool 的副本数量

查看 PG 和 PGP 数量

ceph osd pool get mypool pg_num # 查看 mypool 的 PG 数量
ceph osd pool get mypool pgp_num # 查看 mypool 的 PGP 数量

修改 PG 和 PGP 数量

ceph osd pool set mypool pg_num 128  # 修改 mypool 的 PG 数量为 128
ceph osd pool set mypool pgp_num 128  # 修改 mypool 的 PGP 数量为 128
ceph osd pool get mypool pg_num       # 确认修改
ceph osd pool get mypool pgp_num       # 确认修改

修改 Pool 副本数量

ceph osd pool set mypool size 2      # 修改 mypool 的副本数量为 2
ceph osd pool get mypool size        # 确认修改

修改默认副本数

vim ceph.conf                      # 编辑 ceph.conf 文件
......
osd_pool_default_size = 2          # 设置默认副本数为 2

ceph-deploy --overwrite-conf config push node01 node02 node03  # 推送配置文件给所有节点

删除 Pool 资源池

1) 编辑 ceph.conf 文件,开启删除 Pool 的支持
vim ceph.conf
......
[mon]
mon_allow_pool_delete = true       # 开启删除 Pool 的支持

2) 推送 ceph.conf 配置文件给所有 mon 节点
ceph-deploy --overwrite-conf config push node01 node02 node03

3) 重启所有 mon 节点的 ceph-mon 服务
systemctl restart ceph-mon.target   # 重启 mon 服务

4) 执行删除 Pool 命令
ceph osd pool rm mypool mypool --yes-i-really-really-mean-it  # 删除名为 mypool 的 Pool

注意

  • 修改 PG 和 PGP 数量会影响数据的分布和性能,需谨慎操作。
  • 删除 Pool 会导致数据丢失,务必确认无误后再执行删除操作。
  • 修改默认副本数会影响后续创建的 Pool,需全局考虑。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【SpringBoot】【log】 自定义logback日志配置

前言&#xff1a;默认情况下&#xff0c;SpringBoot内部使用logback作为系统日志实现的框架&#xff0c;将日志输出到控制台&#xff0c;不会写到日志文件。如果在application.properties或application.yml配置&#xff0c;这样只能配置简单的场景&#xff0c;保存路径、日志格…

【FPGA开发】AXI-Full总线接口介绍、FPGA搭建仿真平台

文章目录 协议解读接口介绍AW—写地址通道W—写数据通道B—写响应通道AR—读地址通道R—读数据通道 FPGA搭建仿真平台 本文主要介绍AXI-FULL的相关基础内容&#xff0c;AXI-Lite请移步&#xff1a; 【FPGA开发】AXI-Lite总线协议解读、Verilog逻辑开发与仿真、Alex Forencich代…

网络安全,文明上网(1)享科技,提素养

前言 在这个信息化飞速发展的时代&#xff0c;科技的快速进步极大地丰富了我们的生活&#xff0c;并为我们提供了无限的可能性。然而&#xff0c;随着网络世界的不断扩张&#xff0c;增强我们的网络素养成为了一个迫切需要解决的问题。 与科技同行&#xff0c;培育网络素养 技术…

springboot基于Spring Boot的古城景区管理系统的设计与实现docx

摘 要 古城景区管理系统是一个集景区导游功能于一体的综合管理平台&#xff0c;旨在提升游客的参观体验和提高管理效率。系统通过提供详尽的热门景点、客房类型、酒店信息、美食类型、特色美食、文创产品及导游服务&#xff0c;使游客能够深入了解古城的历史与文化。该系统集成…

安装JDK

1、JDK下载 Java Downloads | Oracle 中国 确保从Oracle的官网下载最新的稳定版JDK&#xff1a; 选择合适的操作系统与安装包&#xff0c;找到Java SE 23的下载链接Download&#xff0c;下载安装即可。Windows优先选x64 MSI Installer。 安装过程直接双击下一步即可&#xf…

掌握移动端性能测试利器:深入JMeter手机录制功能

引言 在当今移动互联网时代&#xff0c;应用程序的性能和用户体验至关重要。为了确保应用程序在不同设备和网络环境下都能稳定运行&#xff0c;性能测试成为了不可或缺的一环。Apache JMeter作为一款强大的开源性能测试工具&#xff0c;不仅支持传统的PC端性能测试&#xff0c…

初始ArkUI

一. 什么是ArkUI ArkUI基于方舟UI框架为应用的UI开发提供了完整的基础设施&#xff0c;UI语法更加简洁&#xff0c;丰富的UI功能&#xff08;组件、布局、动画以及交互事件&#xff09;&#xff0c;以及实现界面预览工具等&#xff0c;可以支持开发者进行可视化界面开发。 &a…

springboot基于数据挖掘的广州招聘可视化分析系统

摘 要 基于数据挖掘的广州招聘可视化分析系统是一个创新的在线平台&#xff0c;旨在通过深入分析大数据来优化和改善广州地区的招聘流程。系统利用Java语言、MySQL数据库&#xff0c;结合目前流行的 B/S架构&#xff0c;将广州招聘可视化分析管理的各个方面都集中到数据库中&a…

NuGet如何支持HTTP源

今天是2024年11月21号&#xff0c;最近更新了VisualStudio后发现HTTP的包源已经默认禁止使用了&#xff0c;生成时会直接报错。如下图&#xff1a; 官方也明确指出了要想使用HTTP包源的解决办法&#xff0c;这里就简单总结一下。 一、全局配置 1、全局NuGet包的配置文件路径在…

go 学习网站,go例子 go demo go学习视频

1. 代码例子&#xff1a; Go by Example 2. b站 视频&#xff1a; 尚硅谷视频&#xff1a; 004_尚硅谷_程序的基本概念_哔哩哔哩_bilibili 3. go技术文档&#xff1a; fmt Go语言中文文档

如何快速将Excel数据导入到SQL Server数据库

工作中&#xff0c;我们经常需要将Excel数据导入到数据库&#xff0c;但是对于数据库小白来说&#xff0c;这可能并非易事&#xff1b;对于数据库专家来说&#xff0c;这又可能非常繁琐。 这篇文章将介绍如何帮助您快速的将Excel数据导入到sql server数据库。 准备工作 这里&…

Spring Web入门练习

加法计算器 约定前后端交互接⼝ 约定 "前后端交互接⼝" 是进⾏ Web 开发中的关键环节. 接⼝⼜叫 API&#xff08;Application Programming Interface), 我们⼀般讲到接⼝或者 API&#xff0c;指的都是同⼀个东西. 是指应⽤程序对外提供的服务的描述, ⽤于交换信息…

day26作业

1使用多线程基于TCP协议的并发执行&#xff0c;一个服务器对应多个客户端实现通信实验 #include <myhead.h> //主线程负责监听客户端连接请求 //子线程负责数据收发 #define IP "192.168.60.77" #define PORT 5555 #define BACKLOG 10 typedef struct {struct…

【Vue3新工具】Pinia.js:提升开发效率,更轻量、更高效的状态管理方案!

大家好&#xff0c;欢迎来到程序视点&#xff01;我是小二哥&#xff01; 前言 在VUE项目开发中&#xff0c;一些数据常常被多个组件频繁使用&#xff0c;为了管理和维护这些数据&#xff0c;就出现了状态管理模式。 今天小二哥要给大家推荐的不是VueX&#xff0c;而是称为新…

【机器学习chp6】对数几率回归

推荐文章1&#xff0c;其中解释了负log似然损失等价于交叉熵损失。 【王木头从感知机到神经网络】-CSDN博客 推荐文章2&#xff0c;其中有牛顿法的介绍 【王木头梯度下降法优化】随机梯度下降、牛顿法、动量法、Nesterov、AdaGrad、RMSprop、Adam-CSDN博客 推荐文章3&#…

图像处理实验报告

实验一 图像处理的MATLAB基础 实验目的&#xff1a;熟悉数字图象处理的基本软件工具和操作 实验内容&#xff1a;Matlab应用复习&#xff0c;矩阵产生、操作&#xff1b;矩阵运算以及字符运算。 1.利用增量产生向量[0,2,4,6,8,10]。 2.利用magic(n)函数产生7维魔鬼矩阵A&am…

离散数学---概率, 期望

本文根据 MIT 计算机科学离散数学课程整理&#xff08;Lecture 22 ~ Lecture 24&#xff09;。 1 非负整数期望性质 用 N 表示非负整数集合&#xff0c;R 是 N 上的随机变量&#xff0c;则 R 的期望可以表示成&#xff1a; 证明&#xff1a; 换一个形式&#xff0c;把每一列…

GPU服务器厂家:科研服务器领域机遇与博弈,AMD 新UDNA 架构

科研服务器作为推动科学研究进步的核心基础设施&#xff0c;其性能与架构的创新对于整个科研生态有着极为关键的影响。AMD 全新推出的 UDNA 架构&#xff0c;引发了广泛的关注与讨论。 AMD UDNA 架构于科研服务器的产品数据与市场格局 AMD 在计算机硬件领域的影响力持续攀升&a…

STM32H7开发笔记(2)——H7外设之多路定时器中断

STM32H7开发笔记&#xff08;2&#xff09;——H7外设之多路定时器中断 文章目录 STM32H7开发笔记&#xff08;2&#xff09;——H7外设之多路定时器中断0.引言1.CubeMX配置2.软件编写 0.引言 本文PC端采用Win11STM32CubeMX4.1.0.0Keil5.24.2的配置&#xff0c;硬件使用STM32H…

【Linux】Linux入门实操——定时任务调度

一、crond调度 1. 概述 任务调度: 是指系统在某个时间执行的特定的命令或程序。任务调度分类 1. 系统工作 : 有些重要的工作必须周而复始地执行。如病毒扫描等 2. 用户工作 &#xff1a;用户可能希望执行某些程序&#xff0c;比如对mysql数据库的备份。 2. 基本语法 cron…