基于raid10的Fastdfs HA搭建

news2024/9/20 16:56:02

1. Fastdfs HA原理

- Fastdfs引入Tracker以支持文件操作的负载均衡调度

- Fastdfs引入基于group分组的storage以支持类似raid10模式的高可靠高性能的存储

- Fastdfs引入fastdfs-nginx-module 可以重定向文件连接到文件上传时的源服务器取文件,避免客户端由于复制延迟导致的文件无法访问错误

2.集群规划

节点名称

节点角色

节点路径

Group

Tracker1

Tracker

/data/opt/fastdfs/tracker

/data/opt/fastdfs/tracker/logs

Tracker2

Tracker

/data/opt/fastdfs/tracker

/data/opt/fastdfs/tracker/logs

Nginx主

Storage集群的Nginx代理

/data/opt/nginx

/data/opt/nginx/log

Nginx备

Storage集群的Nginx代理

/data/opt/nginx

/data/opt/nginx/log

Storage1+nginx

(注:nginx需预编译fastdfs-nginx-module)

Storage

/data/opt/fastdfs/storage

/data/opt/fastdfs/storage/logs

/data/opt/fastdfs/nginx

/data/opt/fastdfs/nginx /logs

group1

Storage2+nginx

(注:nginx需预编译fastdfs-nginx-module)

Storage

/data/opt/fastdfs/storage

/data/opt/fastdfs/storage/logs

/data/opt/fastdfs/nginx

/data/opt/fastdfs/nginx /logs

group1

Storage3+nginx

(注:nginx需预编译fastdfs-nginx-module)

Storage

/data/opt/fastdfs/storage

/data/opt/fastdfs/storage/logs

/data/opt/fastdfs/nginx

/data/opt/fastdfs/nginx /logs

group2

Storage4+nginx

(注:nginx需预编译fastdfs-nginx-module)

Storage

/data/opt/fastdfs/storage

/data/opt/fastdfs/storage/logs

/data/opt/fastdfs/nginx

/data/opt/fastdfs/nginx /logs

group2

3.软件版本

操作系统:CentOS Linux release 7.9.2009 (Core)

Fastdfs版本:6.0.6

Fastdfs-nginx-module版本:1.22

Libfastcommon版本:1.0.43

Nginx版本:1.16.0

Keepalived版本: 1.3.5

4.Fastdfs集群搭建

4.1.安装软件准备

a.编译fastdfs

访问https://github.com/happyfish100/fastdfs,下载fastdfs-6.06.zip

然后执行如下命令

mkdir –p /data/opt/fastdfs

unzip fastdfs-6.06.zip

cd /data/opt/fastdfs/fastdfs-6.06

./make.sh

./make.sh install

成功标识为如下二进制文件编译成功、/usr/lib64/libfdfsclient.so编译成功以及/etc/fdfs生成client.conf.sample、storage.conf.sample、storage_ids.conf.sample、tracker.conf.sample

b.编译libfastcommon

访问https://github.com/happyfish100/libfastcommon,下载libfastcommon-1.0.43.zip

然后执行如下命令

mkdir –p /data/opt/fastdfs/libfastcommon

unzip libfastcommon-1.0.43.zip

cd /data/opt/fastdfs/libfastcommon/libfastcommon-1.0.43

./make.sh

./make.sh install

成功标识:/usr/lib64/libfastcommon.so编译成功

c.编译fastdfs-nginx-module

访问https://github.com/happyfish100/fastdfs-nginx-module/releases/tag/V1.22,下载fastdfs-nginx-module-1.22.zip

然后执行如下命令

mkdir –p /data/opt/fastdfs/fastdfs-nginx-module

unzip fastdfs-nginx-module-1.22.zip

#二次编译nginx模块

./configure --add-module=/data/opt/fastdfs/fastdfs-nginx-module/fastdfs-nginx-module-1.22/src # 追加之前编译的模块

make

成功标识: 会在objs目录下会生成nginx文件

4.2.Tracker集群配置

: 需在每个Tracker节点执行以下步骤

操作步骤如下

cd /etc/fdfs

mv tracker.conf.sample tracker.conf

mkdir -p /data/opt/fastdfs/tracker

修改配置

# the base path to store data and log files

base_path = /data/opt/fastdfs/tracker

Tracker启动和停止

启动: fdfs_trackerd /etc/fdfs/tracker.conf start

停止: fdfs_trackerd /etc/fdfs/tracker.conf stop

4.3.Storage集群配置

: 需在每个Storage节点执行以下步骤,另外group名称需根据实际storage节点所属group修改

a.安装storage

操作步骤如下

cd /etc/fdfs

mv storage.conf.sample storager.conf

mkdir -p /data/opt/fastdfs/storage

修改配置

# the name of the group this storage server belongs to

#

# comment or remove this item for fetching from tracker server,

# in this case, use_storage_id must set to true in tracker.conf,

# and storage_ids.conf must be configured correctly.

group_name = group1

# the base path to store data and log files

# NOTE: the binlog files maybe are large, make sure

#       the base path has enough disk space,

#       eg. the disk free space should > 50GB

base_path = /data/opt/fastdfs/storage

# store path (disk or mount point) count, default value is 1

store_path_count = 1

# store_path#, based on 0, to configure the store paths to store files

# if store_path0 not exists, it's value is base_path (NOT recommended)

# the paths must be exist.

#

# IMPORTANT NOTE:

#       the store paths' order is very important, don't mess up!!!

#       the base_path should be independent (different) of the store paths

store_path0 = /data/opt/fastdfs/storage/files

# tracker_server can ocur more than once for multi tracker servers.

# the value format of tracker_server is "HOST:PORT",

#   the HOST can be hostname or ip address,

#   and the HOST can be dual IPs or hostnames seperated by comma,

#   the dual IPS must be an inner (intranet) IP and an outer (extranet) IP,

#   or two different types of inner (intranet) IPs.

#   for example: 192.168.2.100,122.244.141.46:22122

#   another eg.: 192.168.1.10,172.17.4.21:22122

tracker_server = tracker1:22122

tracker_server = tracker2:22122

Storage启动和停止

启动: fdfs_storaged /etc/fdfs/storage.conf start

停止: fdfs_storaged /etc/fdfs/storage.conf stop

b.安装编译了fastdfs-nginx-module的nginx

操作步骤如下

cd /data/opt/fastdfs/fastdfs-6.06-package/fastdfs-nginx-module-1.22/src

cp mod_fastdfs.conf /etc/fdfs

cd /data/opt/fastdfs/fastdfs-6.06/conf

cp http.conf /etc/fdfs

cp mime.types /etc/fdfs

修改mod_fastdfs.conf配置

# the base path to store log files

base_path=/data/opt/fastdfs/nginx-module

# FastDFS tracker_server can ocur more than once, and tracker_server format is

#  "host:port", host can be hostname or ip address

# valid only when load_fdfs_parameters_from_tracker is true

tracker_server = tracker1:22122

tracker_server = tracker2:22122

# the group name of the local storage server

group_name=group1

# if the url / uri including the group name

# set to false when uri like /M00/00/00/xxx

# set to true when uri like ${group_name}/M00/00/00/xxx, such as group1/M00/xxx

# default value is false

url_have_group_name = true

# path(disk or mount point) count, default value is 1

# must same as storage.conf

store_path_count=1

# store_path#, based 0, if store_path0 not exists, it's value is base_path

# the paths must be exist

# must same as storage.conf

store_path0=/data/opt/fastdfs/storage/files

修改nginx.conf配置

server {

    listen 8199;

    #拦截请求路径中包含 /group[1-9]/M0[0-9] 的请求

    location ~ /group1/M0[0-9] {

        ngx_fastdfs_module;

    }

  }

nginx启动和停止

启动: ./nginx

停止: kill -9 nginx进程

4.4.Storage代理集群配置

a.部署keepalived

修改keepalived.conf,注意根据角色修改标红配置项

vrrp_script check_nginx {

    script "/etc/keepalived/check_ngx.sh"

    interval 2

}

# VIP1

vrrp_instance VI_1 {

     state MASTER

     interface eth0

     virtual_router_id 51 #让master 和backup在同一个虚拟路由里,id 号必须相同

     priority 100 #优先级,谁的优先级高谁就是master

     advert_int 5 #心跳间隔时间

     authentication {

         auth_type  PASS

         auth_pass  1111

     }

     virtual_ipaddress {

        vip

     }

     track_script {

        check_nginx

    }

}

b.部署nginx

修改nginx.conf

upstream group1 {

    server storage1;

    server storage2;

  }

  upstream group2 {

    server storage3;

    server storage4;

  }

  server {

    listen 8095;

    location ~ /group1/M0[0-9] {

        proxy_pass http://group1;

}

location ~ /group2/M0[0-9] {

        proxy_pass http://group2;

}

}

nginx启动和停止

启动: ./nginx

停止: kill -9 nginx进程

4.5.Fastdfs HA集群展示

[2023-06-29 09:44:34] DEBUG - base_path=/data/opt/fastdfs/storage, connect_timeout=5, network_timeout=60, tracker_server_count=2, anti_steal_token=0, anti_steal_secret_key length=0, use_connection_pool=1, g_connection_pool_max_idle_time=3600s, use_storage_id=0, storage server id count: 0

server_count=2, server_index=0

tracker server is 172.30.8.228:22122

group count: 2

Group 1:

group name = group1

disk total space = 50,164 MB

disk free space = 10,929 MB

trunk free space = 0 MB

storage server count = 2

active server count = 2

storage server port = 23000

storage HTTP port = 8888

store path count = 1

subdir count per path = 256

current write server index = 1

current trunk file id = 0

           Storage 1:

                     id = 172.30.8.228

                     ip_addr = 172.30.8.228  ACTIVE

                     http domain =

                     version = 6.06

                     join time = 2023-06-28 14:10:28

                     up time = 2023-06-28 17:18:11

                     total storage = 50,164 MB

                     free storage = 10,929 MB

                     upload priority = 10

                     store_path_count = 1

                     subdir_count_per_path = 256

                     storage_port = 23000

                     storage_http_port = 8888

                     current_write_path = 0

                     source storage id = 172.31.97.59

                     if_trunk_server = 0

                     connection.alloc_count = 256

                     connection.current_count = 1

                     connection.max_count = 3

                     total_upload_count = 137

                     success_upload_count = 137

                     total_append_count = 0

                     success_append_count = 0

                     total_modify_count = 0

                     success_modify_count = 0

                     total_truncate_count = 0

                     success_truncate_count = 0

                     total_set_meta_count = 123

                     success_set_meta_count = 123

                     total_delete_count = 0

                     success_delete_count = 0

                     total_download_count = 0

                     success_download_count = 0

                     total_get_meta_count = 0

                     success_get_meta_count = 0

                     total_create_link_count = 0

                     success_create_link_count = 0

                     total_delete_link_count = 0

                     success_delete_link_count = 0

                     total_upload_bytes = 3678

                     success_upload_bytes = 3678

                     total_append_bytes = 0

                     success_append_bytes = 0

                     total_modify_bytes = 0

                     success_modify_bytes = 0

                     stotal_download_bytes = 0

                     success_download_bytes = 0

                     total_sync_in_bytes = 8202

                     success_sync_in_bytes = 8202

                     total_sync_out_bytes = 0

                     success_sync_out_bytes = 0

                     total_file_open_count = 377

                     success_file_open_count = 377

                     total_file_read_count = 0

                     success_file_read_count = 0

                     total_file_write_count = 377

                     success_file_write_count = 377

                     last_heart_beat_time = 2023-06-29 09:44:13

                     last_source_update = 2023-06-29 09:41:35

                     last_sync_update = 2023-06-29 09:41:36

                     last_synced_timestamp = 2023-06-29 09:41:35 (0s delay)

           Storage 2:

                     id = 172.31.97.59

                     ip_addr = 172.31.97.59  ACTIVE

                     http domain =

                     version = 6.06

                     join time = 2023-06-24 22:43:03

                     up time = 2023-06-28 17:22:53

                     total storage = 900,707 MB

                     free storage = 251,526 MB

                     upload priority = 10

                     store_path_count = 1

                     subdir_count_per_path = 256

                     storage_port = 23000

                     storage_http_port = 8888

                     current_write_path = 0

                     source storage id =

                     if_trunk_server = 0

                     connection.alloc_count = 256

                     connection.current_count = 1

                      connection.max_count = 3

                     total_upload_count = 127

                     success_upload_count = 127

                     total_append_count = 0

                     success_append_count = 0

                     total_modify_count = 0

                     success_modify_count = 0

                     total_truncate_count = 0

                     success_truncate_count = 0

                     total_set_meta_count = 113

                     success_set_meta_count = 113

                     total_delete_count = 0

                     success_delete_count = 0

                     total_download_count = 0

                     success_download_count = 0

                     total_get_meta_count = 0

                     success_get_meta_count = 0

                     total_create_link_count = 0

                     success_create_link_count = 0

                     total_delete_link_count = 0

                     success_delete_link_count = 0

                     total_upload_bytes = 3090

                     success_upload_bytes = 3090

                     total_append_bytes = 0

                     success_append_bytes = 0

                     total_modify_bytes = 0

                     success_modify_bytes = 0

                     stotal_download_bytes = 0

                     success_download_bytes = 0

                     total_sync_in_bytes = 9110

                     success_sync_in_bytes = 9110

                     total_sync_out_bytes = 0

                     success_sync_out_bytes = 0

                     total_file_open_count = 387

                     success_file_open_count = 387

                     total_file_read_count = 0

                     success_file_read_count = 0

                     total_file_write_count = 387

                     success_file_write_count = 387

                     last_heart_beat_time = 2023-06-29 09:44:24

                     last_source_update = 2023-06-29 09:41:35

                     last_sync_update = 2023-06-29 09:41:35

                     last_synced_timestamp = 2023-06-29 09:41:35 (0s delay)

Group 2:

group name = group2

disk total space = 50,164 MB

disk free space = 17,517 MB

trunk free space = 0 MB

storage server count = 2

active server count = 2

storage server port = 23000

storage HTTP port = 8888

store path count = 1

subdir count per path = 256

current write server index = 0

current trunk file id = 0

           Storage 1:

                     id = 172.30.8.97

                     ip_addr = 172.30.8.97  ACTIVE

                     http domain =

                     version = 6.06

                     join time = 2023-06-24 22:57:52

                     up time = 2023-06-28 17:25:20

                     total storage = 50,164 MB

                     free storage = 17,517 MB

                     upload priority = 10

                     store_path_count = 1

                     subdir_count_per_path = 256

                     storage_port = 23000

                     storage_http_port = 8888

                     current_write_path = 0

                     source storage id = 172.30.9.39

                     if_trunk_server = 0

                     connection.alloc_count = 256

                     connection.current_count = 1

                     connection.max_count = 3

                     total_upload_count = 198

                     success_upload_count = 198

                     total_append_count = 0

                     success_append_count = 0

                     total_modify_count = 0

                     success_modify_count = 0

                     total_truncate_count = 0

                     success_truncate_count = 0

                     total_set_meta_count = 185

                     success_set_meta_count = 185

                     total_delete_count = 0

                     success_delete_count = 0

                     total_download_count = 0

                     success_download_count = 0

                     total_get_meta_count = 0

                     success_get_meta_count = 0

                     total_create_link_count = 0

                     success_create_link_count = 0

                     total_delete_link_count = 0

                     success_delete_link_count = 0

                     total_upload_bytes = 4294059528

                     success_upload_bytes = 4294059528

                     total_append_bytes = 0

                     success_append_bytes = 0

                     total_modify_bytes = 0

                     success_modify_bytes = 0

                     stotal_download_bytes = 0

                     success_download_bytes = 0

                     total_sync_in_bytes = 6796083680

                     success_sync_in_bytes = 6796083680

                     total_sync_out_bytes = 0

                     success_sync_out_bytes = 0

                     total_file_open_count = 549

                     success_file_open_count = 549

                     total_file_read_count = 0

                     success_file_read_count = 0

                     total_file_write_count = 42853

                     success_file_write_count = 42853

                     last_heart_beat_time = 2023-06-29 09:44:21

                     last_source_update = 2023-06-29 09:41:35

                     last_sync_update = 2023-06-29 09:41:36

                     last_synced_timestamp = 2023-06-29 09:41:35 (0s delay)

           Storage 2:

                     id = 172.30.9.39

                     ip_addr = 172.30.9.39  ACTIVE

                     http domain =

                     version = 6.06

                     join time = 2023-06-24 22:45:25

                     up time = 2023-06-28 17:25:53

                     total storage = 50,164 MB

                     free storage = 30,213 MB

                     upload priority = 10

                     store_path_count = 1

                     subdir_count_per_path = 256

                     storage_port = 23000

                     storage_http_port = 8888

                     current_write_path = 0

                     source storage id =

                     if_trunk_server = 0

                     connection.alloc_count = 256

                     connection.current_count = 1

                     connection.max_count = 3

                     total_upload_count = 182

                     success_upload_count = 182

                     total_append_count = 0

                     success_append_count = 0

                     total_modify_count = 0

                     success_modify_count = 0

                     total_truncate_count = 0

                     success_truncate_count = 0

                     total_set_meta_count = 169

                     success_set_meta_count = 169

                     total_delete_count = 0

                     success_delete_count = 0

                     total_download_count = 0

                     success_download_count = 0

                     total_get_meta_count = 0

                     success_get_meta_count = 0

                     total_create_link_count = 0

                     success_create_link_count = 0

                     total_delete_link_count = 0

                     success_delete_link_count = 0

                     total_upload_bytes = 6796075484

                     success_upload_bytes = 6796075484

                     total_append_bytes = 0

                     success_append_bytes = 0

                     total_modify_bytes = 0

                     success_modify_bytes = 0

                     stotal_download_bytes = 0

                     success_download_bytes = 0

                     total_sync_in_bytes = 4294068338

                     success_sync_in_bytes = 4294068338

                     total_sync_out_bytes = 0

                     success_sync_out_bytes = 0

                     total_file_open_count = 565

                     success_file_open_count = 565

                     total_file_read_count = 0

                     success_file_read_count = 0

                     total_file_write_count = 42869

                     success_file_write_count = 42869

                     last_heart_beat_time = 2023-06-29 09:44:23

                     last_source_update = 2023-06-29 09:41:35

                     last_sync_update = 2023-06-29 09:41:35

                     last_synced_timestamp = 2023-06-29 09:41:35 (0s delay)

4.6.Fastdfs HA集群功能测试

4.6.1 测试Tracker支持集群

关闭一个tracker节点,客户端仍能上传

4.6.2 测试Tracker集群支持负载调度

客户端循环上传同一个文件,会自动调度到不同的group,java客户端测试结果如下

["group2","M00/00/01/rB4JJ2Sc4U-AJri5AAAAQvkVImY390.txt"]

["group1","M00/00/01/rB4I5GSc4U-AcNZSAAAAQvkVImY461.txt"]

["group2","M00/00/01/rB4IYWSc4U-ARJOMAAAAQvkVImY114.txt"]

["group1","M00/00/01/rB9hO2Sc4U-AEOyUAAAAQvkVImY037.txt"]

["group2","M00/00/01/rB4JJ2Sc4U-AfavaAAAAQvkVImY542.txt"]

["group1","M00/00/01/rB4I5GSc4U-AOFOaAAAAQvkVImY966.txt"]

["group2","M00/00/01/rB4IYWSc4U-AWnrGAAAAQvkVImY960.txt"]

["group1","M00/00/01/rB9hO2Sc4U-AbYPwAAAAQvkVImY168.txt"]

["group2","M00/00/01/rB4JJ2Sc4U-AHBc3AAAAQvkVImY951.txt"]

["group1","M00/00/01/rB4I5GSc4U-AAEP5AAAAQvkVImY312.txt"]

4.6.3 测试Storage集群支持raid1

客户端上传文件,查看是否能自动同步,如下为来自group2的storage1和storage2的文件列表结果。

Storage1文件列表

Storage2文件列表

4.6.4 测试Storage代理集群支持raid10访问

即nginx支持根据不同group路径,访问支持raid1的group1和group2

4.6.5 测试fast-nginx-module优先访问源节点

步骤一

上传一个新文件,此时通过两storage节点的nginx日志,只有源storage节点的nginx日志,会看到调用日志

步骤二

停掉同一个group某一个storage节点,上传一个新文件,此时通过备份的storage节点的nginx日志,会看到调用日志

5.Fastdfs客户端推荐

通过GitHub - happyfish100/fastdfs-client-java: FastDFS java client SDK地址,下载源代码,进行mvn编译,最终通过如下方式引入到项目中,客户端是可以支持多个tracker地址集群调用使用。

<dependency>
   <groupId>org.csource</groupId>
   <artifactId>fastdfs-client-java</artifactId>
   <version>1.30-SNAPSHOT</version>
</dependency>

6.常见问题

6.1 如何选择storage

新上传文件如何选择storage,默认是0

# which storage server to upload file

# 0: round robin (default)

# 1: the first server order by ip address

# 2: the first server order by priority (the minimal)

新下载文件如何选择storage,默认是0

# which storage server to download file

# 0: round robin (default)

# 1: the source storage server which the current file uploaded to

6.2 如何选择group

新上传文件如何选择group,默认是0

# the method for selecting group to upload files

# 0: round robin

# 1: specify group

# 2: load balance, select the max free space group to upload file

6.3 如何选择storage path

新上传文件如何选择storage path,默认是0

# which path (means disk or mount point) of the storage server to upload file

# 0: round robin

# 2: load balance, select the max free space path to upload file

6.4 保留存储空间阈值

# reserved storage space for system or other applications.

# if the free(available) space of any stoarge server in

# a group <= reserved_storage_space, no file can be uploaded to this group.

# bytes unit can be one of follows:

### G or g for gigabyte(GB)

### M or m for megabyte(MB)

### K or k for kilobyte(KB)

### no unit for byte(B)

### XX.XX% as ratio such as: reserved_storage_space = 10%

reserved_storage_space = 10%

6.5 文件索引信息说明

group1  group名称

M01    storage名称

  1. 一级目录,上限256
  1. 二级目录,上限256

file     文件名称

最终文件访问地址示例为:

http://vip/group1/M01/00/00/rB9hO2SQGwaAEQv2ZUT0AKIa460992.tar

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

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

相关文章

揭秘线性代数秩的奥秘:从理论到机器学习的跨越

一、线性代数中的秩&#xff1a;定义与性质 1.1 定义 在线性代数中&#xff0c;秩是一个核心概念&#xff0c;用于描述矩阵或向量组的复杂性和独立性。具体而言&#xff0c;一个矩阵的秩定义为该矩阵中非零子式的最高阶数&#xff0c;而一个向量组的秩则是其最大无关组所含的…

图像分割与图像(目标)监测

图像分割与图像&#xff08;目标&#xff09;监测 图片来自于1.语义分割与实例分割概述_哔哩哔哩_bilibili 图像监测与图像分割是计算机视觉领域的两个重要应用&#xff0c;它们在众多领域如医疗影像分析、遥感图像处理、自动驾驶车辆等都扮演着关键角色。 下面将详细介绍这两…

字符设备驱动开发基础—静态/动态注册设备号,使用cdev注册驱动

文章目录 主次设备号介绍主设备号 (Major Number)次设备号 (Minor Number)设备号的表示与注册设备号的获取设备号的注册 设备文件的创建实际应用中的主次设备号 cdev 结构体介绍cdev 结构体主要字段 使用 cdev 结构体的步骤file_operations 结构体 静态注册设备号示例代码&…

商业银行国际结算规模创新高,合合信息AI助力金融行业智能处理多版式文档

随着我国外贸新业态的快速增长&#xff0c;银行国际结算业务在服务实体经济发展、促进贸易投资便利化进程中发挥了越来越重要的作用。根据中国银行业协会近日发布的《中国贸易金融行业发展报告&#xff08;2023—2024&#xff09;》&#xff0c;2023年我国主要商业银行国际结算…

【征求意见】同济大学--城镇给水厂碳排放核算与评价方法

城镇给水厂保障城镇居民正常生活&#xff0c;是社会经济良性发展的重要基础性设施&#xff0c;对于我国双碳战略目标的实现至关重要。 随着城镇化的发展&#xff0c;城镇供水量不断升高&#xff0c;加上 水资源与生态环境问题不断涌现&#xff0c;人们对水的安全和品质的需求日…

关于在局域网如何避免内网IP被占用的问题

目录 前言 1.使用ipconfig命令 2.排查IP是否被占用&#xff0c;使用ping命令。 3.ip地址冲突&#xff0c;无法访问网站怎么办&#xff1f; 4.怎么避免重启再次出现IP冲突问题&#xff1f; 前言 在一些小型的公司&#xff0c;IP地址没有被规划好&#xff0c;每个人都是通过动…

基于 Rough.js 的 Vue 散点图绘制

本文由ScriptEcho平台提供技术支持 项目地址&#xff1a;传送门 基于 Rough.js 的 Vue 散点图绘制 应用场景 本代码展示了如何使用 Rough.js 库在 Vue 应用程序中绘制散点图。Rough.js 是一个轻量级 JavaScript 库&#xff0c;用于创建具有手绘风格的可视化效果。散点图是一…

c++学习笔记—内存概念

c学习笔记 Bit含义用途特点 字节含义用途特点注意事项 c内存基本概念1. 栈&#xff08;Stack&#xff09;2. 堆&#xff08;Heap&#xff09;3. 全局/静态存储区4. 常量存储区5. 内存管理关键字和函数6. 内存泄漏7. 指针和引用8. 虚拟内存9. 内存对齐10. 构造和析构 c中基本数据…

用神经网络求解方案

在处理密集、计算量大的数学问题时&#xff0c;计算机系统一直是人类最好的朋友。从计算器上的简单计算到 R 中的大型统计运算&#xff0c;这一技术前沿使我们很多人的生活变得更加轻松。 然而&#xff0c;即使是计算机&#xff0c;当数字变成字母并开始涉及代数时&#xff0c…

微信公众号使用介绍

写在前面&#xff0c;楼下有个医生小姐姐想做个公众号&#xff0c;整理了一份文档入门用 一 订阅号和服务号区别 1.1 关于功能上的差异 订阅号&#xff08;Subscription Account&#xff09; 定位&#xff1a;主要用于提供信息传播和互动&#xff0c;适合媒体、个人博主、机…

一文全面了解HPC高性能计算平台是什么、怎么选型?高性能计算平台CHPC 都能做什么?

一. 概述 随着技术的发展和数据量的爆炸性增长&#xff0c;企业面临的挑战日益复杂&#xff0c;对计算能力的需求也在不断增加。这些问题的解决超出了传统计算方法的能力范围&#xff0c;高性能计算&#xff08;HPC&#xff09;正是为解决这类问题而生。 高性能计算&#xff…

【Linux】Linux下的日志(日常级)

日志是日后工作中非常重要的一部分&#xff0c;现在写一份简单的日志项目可以帮助我们熟悉并理解原理。 目录 设计思路&#xff1a;一些实现细节&#xff1a;代码&#xff1a;日志的使用方法&#xff1a; 设计思路&#xff1a; 图示是我们的最终目的。 设计一个类&#xff0…

是否掌握数据结构对于IT职业发展至关重要?

算法跟代码实现有时候是两回事&#xff0c;在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「数据结构的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#…

Cesium 限高分析

Cesium 限高分析 原理&#xff1a;ClassificationPrimitive贴模型的运用 效果图

兼容性最好的模拟器,主要为高端平板设计

一、简介 1、蓝叠安卓模拟器是BlueStacks公司推出的全球知名Android模拟器。它可能是兼容性最好的模拟器&#xff0c;主要为高端平板设计&#xff0c;加入了图形硬件加速&#xff0c;并与AMD合作。 二、下载 1、文末有下载链接,不明白可以私聊我哈&#xff08;麻烦咚咚咚&#…

新迪天工CAD,国际水平的国产三维CAD软件

新迪数字 定位&#xff1a;国际领先的三维CAD软件厂商 使命&#xff1a;掌握核心技术&#xff0c;推动中国创造 愿景&#xff1a;让每个工程师使用中国CAD 上海新迪数字技术有限公司是一家拥有国际先进水平三维CAD核心技术的国产工业软件厂商&#xff0c;由国际工业软件领域知…

今日头条爬虫(zhanzhang.toutiao.com)IP及UA,真实采集数据

​ 一、数据来源&#xff1a; 1、这批今日头条爬虫(zhanzhang.toutiao.com)IP来源于尚贤达猎头网站采集数据&#xff1b; ​ 2、数据采集时间段&#xff1a;2023年10月-2024年7月&#xff1b; 3、判断标准&#xff1a;主要根据用户代理是否包含“zhanzhang.toutiao.com”和…

职场进阶还是智商税?一文看六西格玛绿带培训的真面目

随着企业对精细化管理需求的日益增长&#xff0c;六西格玛绿带培训逐渐成为职场人士争相追逐的热门课程。它不仅能够帮助学员掌握先进的质量管理工具&#xff0c;还能培养逻辑思维、数据分析能力以及团队合作精神&#xff0c;这些都是现代职场不可或缺的软实力。 职场助力or智商…

小程序商品图片有什么要求

在当今信息化的社会中&#xff0c;无论是组织活动、培训课程还是社交聚会&#xff0c;高效、准确地收集报名信息并进行有效匹配显得尤为重要。为此&#xff0c;我们开发了一款全新的报名匹配工具&#xff0c;旨在帮助活动组织者轻松管理报名流程&#xff0c;同时确保参与者能够…

机器学习 第8章-集成学习

机器学习 第8章-集成学习 8.1 个体与集成 集成学习(ensemble learning)通过构建并结合多个学习器来完成学习任务&#xff0c;有时也被称为多分类器系统(multi-classifersystem)、基于委员会的学习(committee-based learning)等。 图8.1显示出集成学习的一般结构:先产生一组“…