分布式文件存储系统Minio实战

news2024/11/27 2:37:50

分布式文件系统应用场景

  • 互联网海量非结构化数据的存储需求
  • 电商网站:海量商品图片
  • 视频网站:海量视频文件
  • 网盘 : 海量文件
  • 社交网站:海量图片

1. Minio介绍

  • MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。
  • MinIO是一个非常轻量的服务,可以很简单的和其他应用的结合,类似 NodeJS, Redis 或者 MySQL。

官网地址 中文官网地址

  • 对象存储服务(Object Storage Service,OSS)是一种海量、安全、低成本、高可靠的云存储服务,适合存放任意类型的文件。容量和处理能力弹性扩展,多种存储类型供选择,全面优化存储成本。

  • 对于中小型企业,如果不选择存储在云,那么 Minio 是个不错的选择,麻雀虽小,五脏俱全。当然Minio 除了直接作为对象存储使用,还可以作为云上对象存储服务的网关层,无缝对接到 Amazon S3、MicroSoft Azure。

  • 在中国:阿里巴巴、腾讯、百度、中国联通、华为、中国移动等等9000多家企业也都在使用MinIO产品。

2. Minio优点

  • 部署简单: 一个single二进制文件即是一切,还可支持各种平台。

  • minio支持海量存储,可按zone扩展(原zone不受任何影响),支持单个对象最大5TB;

  • 兼容Amazon S3接口,充分考虑开发人员的需求和体验;

  • 低冗余且磁盘损坏高容忍,标准且最高的数据冗余系数为2(即存储一个1M的数据对象,实际占用
    磁盘空间为2M)。但在任意n/2块disk损坏的情况下依然可以读出数据(n为一个纠删码集合(Erasure Coding Set)中的disk数量)。并且这种损坏恢复是基于单个对象的,而不是基于整个存储卷的。

  • 读写性能优异
    在这里插入图片描述

2. MiNiO的基础概念

  • Object:存储到 Minio 的基本对象,如文件、字节流,Anything…
  • Bucket:用来存储 Object 的逻辑空间。每个 Bucket 之间的数据是相互隔离的。对于客户端而言,就相当于一个存放文件的顶层文件夹
  • Drive:即存储数据的磁盘,在 MinIO 启动时,以参数的方式传入。Minio 中所有的对象数据都会存储在 Drive 里。
  • Set :即一组 Drive 的集合,分布式部署根据集群规模自动划分一个或多个 Set ,每个 Set 中的Drive 分布在不同位置。一个对象存储在一个 Set 上。(For example: {1…64} is divided into 4 sets each of size 16.)
  • 一个对象存储在一个Set上
  • 一个集群划分为多个Set
  • 一个Set包含的Drive数量是固定的,默认由系统根据集群规模自动计算得出
  • 一个SET中的Drive尽可能分布在不同的节点上

3. 纠删码EC(Erasure Code)

  • MinIO 使用纠删码机制来保证高可靠性,使用 highwayhash 来处理数据损坏( Bit Rot Protection )。
  • 关于纠删码,简单来说就是可以通过数学计算,把丢失的数据进行还原,它可以将n份原始数据,增加m份数据,并能通过n+m份中的任意n份数据,还原为原始数据。即如果有任意小于等于m份的数据失效,仍然能通过剩下的数据还原出来。

4. 存储形式:

  • 文件对象上传到 MinIO ,会在对应的数据存储磁盘中,以 Bucket 名称为目录,文件名称为下一级目录,文件名下是 part.1 和 xl.meta(老版本,最新版本如下图),前者是编码数据块及检验块,后者是元数据文件。
    在这里插入图片描述

5. 存储方案

在这里插入图片描述

Minio环境搭建

  • 官方文档
  • 中文文档(没有及时更新,容易被坑。)
  • minio支持多种server启动模式:
    在这里插入图片描述

1. 单机部署

  • minio serverstandalone模式,即要管理的磁盘都在host本地。该启动模式一般仅用于实验环境、测试环境的验证和学习使用。在standalone模式下,还可以分为non-erasure code mode和erasure code mode。
  1. non-erasure code mode
    在此启动模式下,对于每一份对象数据,minio直接在data下面存储这份数据,不会建立副本,也不会启用纠删码机制。因此,这种模式无论是服务实例还是磁盘都是“单点”,无任何高可用保障,磁盘损坏就表示数据丢失。
  2. erasure code mode
    此模式为minio server实例传入多个本地磁盘参数。一旦遇到多于一个磁盘参数,minio server会自动启用erasure code modeerasure code对磁盘的个数是有要求的,如不满足要求,实例启动将失败。erasure code启用后,要求传给minio serverendpoint(standalone模式下,即本地磁盘上的目录)至少为4个。
  • 基于centos7
操作系统CPU架构地址
GNU/Linux64-bit Intelhttp://dl.minio.org.cn/server/minio/release/linux-amd64/minio
cd  /usr/local/soft/
#下载minio二进制文件
wget  http://dl.minio.org.cn/server/minio/release/linux-amd64/minio
#添加执行权限
chmod +x minio
#启动minio server服务,指定数据存储目录/data/minio
mkdir -p /data/minio
./minio server /data/minio

在这里插入图片描述

1.1. 默认用户名密码minioadmin:minioadmin,修改默认用户名密码可以使用:

export MINIO_ROOT_USER=admin    ---指定用户名
export MINIO_ROOT_PASSWORD=admin1234    --指定用户名密码
#启动minio
./minio server /data/minio

在这里插入图片描述

1.2. 默认的配置目录是${HOME}/.minio,可以通过–config-dir命令自定义配置目录:

 ./minio server --config-dir /data/minio/config  /data/minio/

1.3. 修改api端口号和web端口号启动

./minio server --address ":7810"  --console-address ":7811"  /data/minio/
#如果想后台运行可以用下面命令:
nohup  ./minio server --address ":7810"  --console-address ":7811"  /data/minio/ > /data/minio/minio.log  &

--address    ----指定api端口号
--console-address   ----指定web端口号

在这里插入图片描述

1.4. 访问minio的web界面: http://192.168.2.10:7811

在这里插入图片描述

  • 登录进入如下:
    在这里插入图片描述

2. 基于docker部署minio

docker run -itd --name=minio -p 7810:7810 -p 7811:7811 \
-e "MINIO_ROOT_USER=admin" \
-e "MINIO_ROOT_PASSWORD=admin1234"  \
-v /data/minio:/data/  \
-v /data/minio/config:/root/.minio/  \
minio/minio:latest  server  --address ":7810"  --console-address ":7811" /data

#参数解释
docker run 命令中使用的各个参数的详细解释:

-itd:以交互式、终端和后台运行的方式启动容器。

--name=minio:给容器指定一个名称,这里将容器命名为 minio。

-p 7810:7810 -p 7811:7811:将容器的 78107811 端口映射到主机的同样端口,这样可以通过主机的这两个端口访问 MinIO。

-e "MINIO_ROOT_USER=admin":设置 MinIO 的根用户(管理员)的用户名为 admin。

-e "MINIO_ROOT_PASSWORD=admin1234":设置 MinIO 的根用户(管理员)的密码为 admin1234。

-v /data/minio:/data/:将主机的 /data/minio 目录挂载到容器内部的 /data 目录,用于持久化存储 MinIO 的数据。可以根据实际需求修改主机上的目录路径。

-v /data/minio/config:/root/.minio/:将主机的 /data/minio/config 目录挂载到容器内部的 /root/.minio/ 目录,用于持久化存储 MinIO 的配置文件。可以根据实际需求修改主机上的目录路径。

minio/minio:latest:指定要使用的 MinIO Docker 镜像

server --address ":7810" --console-address ":7811" /data:在容器启动后,运行 MinIO 的 server 模式,并将 /data 目录作为数据存储路径。--address 参数指定 MinIO API端口,这里使用的是主机的 7810 端口;--console-address 参数指定 MinIO的web端口,这里使用的是主机的 7811 端口

2.1. 访问测试:

在这里插入图片描述

2.2 minio纠删码模式

  • Minio使用纠删码 erasure code 和校验和 checksum 来保护数据免受硬件故障和无声数据损坏。 即便您丢失一半数量(N/2)的硬盘,您仍然可以恢复数据。
  • 纠删码是一种恢复丢失和损坏数据的数学算法, Minio采用Reed-Solomon code将对象拆分成N/2数据和N/2 奇偶校验块。
  • 这就意味着如果是12块盘,一个对象会被分成6个数据块、6个奇偶校验块,你可以丢失任意6块盘(不管其是存放的数据块还是奇偶校验块),你仍可以从剩下的盘中的数据进行恢复。

在这里插入图片描述

docker run -itd -p 7810:7810 -p 7811:7811 --name minio \
-e "MINIO_ROOT_USER=admin" \
-e "MINIO_ROOT_PASSWORD=admin1234"  \
-v /data/minio1:/data1 \
-v /data/minio2:/data2 \
-v /data/minio3:/data3 \
-v /data/minio4:/data4 \
-v /data/minio5:/data5 \
-v /data/minio6:/data6 \
-v /data/minio7:/data7 \
-v /data/minio8:/data8 \
minio/minio:latest server /data{1...8} --address ":7810" --console-address ":7811"

3. 分布式集群部署:

  • 分布式Minio可以让你将多块硬盘(甚至在不同的机器上)组成一个对象存储服务。由于硬盘分布在不同的节点上,分布式Minio避免了单点故障。

在这里插入图片描述

3.1. 分布式存储可靠性常用方法

  • 分布式存储,很关键的点在于数据的可靠性,即保证数据的完整,不丢失,不损坏。只有在可靠性实现的前提下,才有了追求一致性、高可用、高性能的基础。而对于在存储领域,一般对于保证数据可靠性的方法主要有两类,一类是冗余法,一类是校验法。

    1. 冗余:冗余法最简单直接,即对存储的数据进行副本备份,当数据出现丢失,损坏,即可使用备份内容进行恢复,而副本 备份的多少,决定了数据可靠性的高低。这其中会有成本的考量,副本数据越多,数据越可靠,但需要的设备就越多,成本就越高。可靠性是允许丢失其中一份数据。当前已有很多分布式系统是采用此种方式实现,如 Hadoop 的文件系统(3个副本),Redis 的集群,MySQL 的主备模式等。
    2. 校验:校验法即通过校验码的数学计算的方式,对出现丢失、损坏的数据进行校验、还原。注意,这里有两个作用,一个校验,通过对数据进行校验和( checksum )进行计算,可以检查数据是否完整,有无损坏或更改,在数据传输和保存时经常用到,如 TCP 协议;二是恢复还原,通过对数据结合校验码,通过数学计算,还原丢失或损坏的数据,可以在保证数据可靠的前提下,降低冗余,如单机硬盘存储中的 RAID技术,纠删码(Erasure Code)技术等。MinIO 采用的就是纠删码技术。

3.2. 分布式Minio优势

  • 数据保护
  • 分布式Minio采用 纠删码来防范多个节点宕机和位衰减 bit rot
  • 分布式Minio至少需要4个硬盘,使用分布式Minio自动引入了纠删码功能。
  • 高可用
  • 单机Minio服务存在单点故障,相反,如果是一个有N块硬盘的分布式Minio,只要有N/2硬盘在线,你的数据就是安全的。不过你需要至少有N/2+1个硬盘来创建新的对象。
  • 例如,一个16节点的Minio集群,每个节点16块硬盘,就算8台服務器宕机,这个集群仍然是可读的,不过你需要9台服務器才能写数据。
  • 一致性
  • Minio在分布式和单机模式下,所有读写操作都严格遵守read-after-write一致性模型。

3.3. 运行分布式Minio

  • 启动一个分布式Minio实例,你只需要把硬盘位置做为参数传给minio server命令即可,然后,你需要在所有其它节点运行同样的命令。

    1. 分布式Minio里所有的节点需要有同样的access秘钥和secret秘钥,这样这些节点才能建立联接。为了实现这个,你需要在执行minio server命令之前,先将access秘钥和secret秘钥export成环境变量。新版本使用MINIO_ROOT_USER&MINIO_ROOT_PASSWORD。
    2. 分布式Minio使用的磁盘里必须是干净的,里面没有数据。
    3. 在分布式部署中,建议最少使用4个节点,以确保数据的冗余性和可靠性
    4. 下面示例里的IP仅供示例参考,你需要改成你真实用到的IP和文件夹路径。
    5. 分布式Minio里的节点时间差不能超过3秒,你可以使用NTP 来保证时间一致。
    6. 在Windows下运行分布式Minio处于实验阶段,请悠着点使用。

3.4. 8个节点,每节点1块盘

  • 启动分布式Minio实例,8个节点,每节点1块盘,需要在8个节点上都运行下面的命令:
export MINIO_ROOT_USER=admin
export MINIO_ROOT_PASSWORD=admin1234
minio server http://192.168.1.11/export1 http://192.168.1.12/export2 \
http://192.168.1.13/export3 http://192.168.1.14/export4 \
http://192.168.1.15/export5 http://192.168.1.16/export6 \
http://192.168.1.17/export7 http://192.168.1.18/export8

在这里插入图片描述

3.5. 4节点,每节点4块盘

  • 启动分布式Minio实例,4节点,每节点4块盘,需要在4个节点上都运行下面的命令
export MINIO_ROOT_USER=admin
export MINIO_ROOT_PASSWORD=admin1234
minio server http://192.168.1.11/export1 http://192.168.1.11/export2 \
http://192.168.1.11/export3 http://192.168.1.11/export4 \
http://192.168.1.12/export1 http://192.168.1.12/export2 \
http://192.168.1.12/export3 http://192.168.1.12/export4 \
http://192.168.1.13/export1 http://192.168.1.13/export2 \
http://192.168.1.13/export3 http://192.168.1.13/export4 \
http://192.168.1.14/export1 http://192.168.1.14/export2 \
http://192.168.1.14/export3 http://192.168.1.14/export4

在这里插入图片描述

3.6. 测试上传:

在这里插入图片描述

3.7. 存储结构

[root@localhost minio]# tree
.
└── yangshuang
    └── Notepad_downloader.8.5.3.exe
        ├── 973c3b87-ca52-4520-9bb1-f64db88308d2
        │   └── part.1
        └── xl.meta

Minio客户端使用

  • MinIO Client (mc)为ls,cat,cp,mirror,diff,find等UNIX命令提供了一种替代方案。它支持文件系统和兼容Amazon S3的云存储服务(AWS Signature v2和v4)。

1. 部署客户端mc

平台CPU架构URL
GNU/Linux64-bit Intelhttp://dl.minio.org.cn/client/mc/release/linux-amd64/mc
wget -P /usr/local/sbin/  http://dl.minio.org.cn/client/mc/release/linux-amd64/mc
#添加权限:
chmod +x /usr/local/sbin/mc

2. 配置mc

  • mc 将所有的配置信息都存储在 ~/.mc/config.json 文件中
#查询mc host配置
mc config host ls
#添加minio服务
mc config host add minio-server http://192.168.2.20:9000 admin admin1234
Added `minio-server` successfully.

# 删除host
mc config host remove minio-server

3. mc 命令使用

参数说明
ls列出存储桶和对象
mb创建存储桶
cat显示文件和对象内容。
pipe将一个STDIN重定向到一个对象或者文件或者STDOUT。
share生成用于共享的URL。
cp拷贝文件和对象。
mirror给存储桶和文件夹做镜像。
find基于参数查找文件。
diff对两个文件夹或者存储桶比较差异。
rm删除文件和对象。
events管理对象通知。
watch监视文件和对象的事件。
policy管理访问策略。
config管理mc配置文件。
update检查软件更新。
version输出版本信息。

3.1. 上传下载

# 查询minio服务上的所有buckets(文件和文件夹)
mc ls minio-server
# 下载文件
mc cp minio-server/tulingmall/fox/fox.jpg /tmp/
#删除文件
mc rm minio-server/tulingmall/fox/fox.jpg
#上传文件
mc cp zookeeper.out minio-server/tulingmall/

3.2. Bucket管理

# 创建bucket
mc mb minio-server/bucket01
# 删除bucket
mc rb minio-server/bucket02
# bucket不为空,可以强制删除 慎用
mc rb --force minio-server/bucket01

#查询bucket03磁盘使用情况
mc du minio-server/bucket03

4. mc admin使用

  • MinIO Client(mc)提供了“ admin”子命令来对您的MinIO部署执行管理任务。
参数说明
service服务重启并停止所有MinIO服务器
update更新更新所有MinIO服务器
info信息显示MinIO服务器信息
user用户管理用户
group小组管理小组
policyMinIO服务器中定义的策略管理策略
config配置管理MinIO服务器配置
heal修复MinIO服务器上的磁盘,存储桶和对象
profile概要文件生成概要文件数据以进行调试
top顶部提供MinIO的顶部统计信息
trace跟踪显示MinIO服务器的http跟踪
console控制台显示MinIO服务器的控制台日志
prometheusPrometheus管理Prometheus配置
kmskms执行KMS管理操作

4.1. 用户管理

mc admin user --help
#新建用户
mc admin user add minio-server fox
mc admin user add minio-server fox02 12345678
#查看用户
mc admin user list minio-server
#禁用用户
mc admin user disable minio-server fox02
#启用用户
mc admin user disable minio-server fox02
#查看用户信息
mc admin user info minio-server fox
#删除用户
mc admin user remove minio-server fox02

4.2. 策略管理

  • policy命令,用于添加,删除,列出策略,获取有关策略的信息并为MinIO服务器上的用户设置策略。
mc admin policy --help
#列出MinIO上的所有固定策略
mc admin policy list minio-server
# 查看plicy信息
mc admin policy info minio-server readwrite

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

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

相关文章

解决二叉树遍历相关问题(过程中深入一下C++递归程序栈编译和执行)

解决二叉树遍历相关问题(过程中深入一下C递归程序栈编译和执行) 首先,事情是这样的:问题是求二叉树的根节点到某个节点的路径。 方法自然很多:树的后序遍历,图的BFS、DFS遍历等等。 这里,为了快…

CentOS 7 上编译和安装 SQLite 3.9.0

文章目录 可能报错分析详细安装过程 可能报错分析 报错如下: django.core.exceptions.ImproperlyConfigured: SQLite 3.9.0 or later is required (found 3.7.17). 原因:版本为3.7.太低了,需要升级到3.9.0至少 详细安装过程 1.安装所需的…

c语言:通讯录管理系统(增删查改)

前言:在大多数高校内,都是通过设计一个通讯录管理系统来作为c语言课程设计,通过一个具体的系统设计将我们学习过的结构体和函数等知识糅合起来,可以很好的锻炼学生的编程思维,本文旨在为通讯录管理系统的设计提供思路和…

【STM32基础 CubeMX】PWM输出

文章目录 前言一、PWM是什么?二、CubeMX配置PWM三、代码分析3.1 CubeMX生成代码3.2 PWM的几个库函数HAL_TIM_PWM_Start 3.3 PWM回调函数3.4 占空比占空比是什么__HAL_TIM_SET_COMPARE设置占空比 四、呼吸灯示例总结 前言 STM32微控制器是一系列功能强大的微控制器&…

unordered_map/unordered_set的学习[unordered系列]

文章目录 1.老生常谈_遍历2.性能测试3.OJ训练3.1存在重复元素3.2两个数组的交集Ⅱ3.3两句话中的不常见单词3.4两个数组的交集3.5在长度2N的数组中找出重复N次的元素 1.老生常谈_遍历 #pragma once #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <l…

红黑树(有图解)

目录 介绍 概念 性质 模拟实现 结点定义 插入 保证平衡的原因 一般情况 特殊情况(uncle为黑) uncle不存在 旋转方式 右旋 迭代器 -- 代码 介绍 概念 红黑树是一种自平衡的二叉搜索树 它是在每个节点上引入额外的颜色信息,通过对任何一条从根到叶子的路径…

项目管理之高效合作

序 一件事能不能做成&#xff0c;和你有什么关系&#xff1f;靠的是你的努力吗&#xff1f;还是说靠的只是一个运气&#xff1f; 就像买彩票一样&#xff0c;你觉得中奖和个人努力有没有关系&#xff1b;就像和高考一样&#xff0c;你觉得考上北大清华和个人努力有没有关系&…

IDEA git操作技巧大全,持续更新中

作者简介 目录 1.创建新项目 2.推拉代码 3.状态标识 5.cherry pick 6.revert 7.squash 8.版本回退 9.合并冲突 1.创建新项目 首先我们在GitHub上创建一个新的项目&#xff0c;然后将这个空项目拉到本地&#xff0c;在本地搭建起一个maven项目的骨架再推上去&#xff0…

两条链表相同位数相加[中等]

优质博文IT-BLOG-CN 一、题目 给你两个非空的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照逆序的方式存储的&#xff0c;并且每个节点只能存储一位数字。请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。你可以假设除了数字0之外&#xff0c;这…

一文带你掌握 优先级队列

&#x1f388;个人主页:&#x1f388; :✨✨✨初阶牛✨✨✨ &#x1f43b;强烈推荐优质专栏: &#x1f354;&#x1f35f;&#x1f32f;C的世界(持续更新中) &#x1f43b;推荐专栏1: &#x1f354;&#x1f35f;&#x1f32f;C语言初阶 &#x1f43b;推荐专栏2: &#x1f354;…

Leetcode.965 单值二叉树

本专栏内容为&#xff1a;leetcode刷题专栏&#xff0c;记录了leetcode热门题目以及重难点题目的详细记录 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;八大排序汇总 &#x1f69a;代码仓库&#xff1a;小小unicorn的代码仓库&#x1f69a; &…

【算法练习Day9】用栈实现队列用队列实现栈

、​ ​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;练题 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 文章目录 用栈实现队列用队列实…

代码随想录算法训练营第五十一天 |309.最佳买卖股票时机含冷冻期、714.买卖股票的最佳时机含手续费、总结

一、309.最佳买卖股票时机含冷冻期 题目链接/文章讲解&#xff1a;代码随想录 视频讲解&#xff1a;动态规划来决定最佳时机&#xff0c;这次有冷冻期&#xff01;| LeetCode&#xff1a;309.买卖股票的最佳时机含冷冻期_哔哩哔哩_bilibili 思考&#xff1a; 1.确定dp数组&…

创建型设计模式 原型模式 建造者模式 创建者模式对比

创建型设计模式 单例 工厂模式 看这一篇就够了_软工菜鸡的博客-CSDN博客 4.3 原型模式 4.3.1 概述 用一个已经创建的实例作为原型&#xff0c;通过复制该原型对象来创建一个和原型对象相同的新对象。 4.3.2 结构 原型模式包含如下角色&#xff1a; 抽象原型类&#xff1a;规定了…

FFmpeg 命令:从入门到精通 | ffmpeg 命令视频录制

FFmpeg 命令&#xff1a;从入门到精通 | ffmpeg 命令视频录制 FFmpeg 命令&#xff1a;从入门到精通 | ffmpeg 命令视频录制安装软件&#xff1a;Screen Capturer Recorder查看可用设备名字音视频录制录制视频&#xff08;默认参数&#xff09;录制声音&#xff08;默认参数&am…

计算机竞赛 深度学习疲劳检测 驾驶行为检测 - python opencv cnn

文章目录 0 前言1 课题背景2 相关技术2.1 Dlib人脸识别库2.2 疲劳检测算法2.3 YOLOV5算法 3 效果展示3.1 眨眼3.2 打哈欠3.3 使用手机检测3.4 抽烟检测3.5 喝水检测 4 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习加…

AJAX--Express速成

一、基本概念 1、AJAX(Asynchronous JavaScript And XML)&#xff0c;即为异步的JavaScript 和 XML。 2、异步的JavaScript 它可以异步地向服务器发送请求&#xff0c;在等待响应的过程中&#xff0c;不会阻塞当前页面。浏览器可以做自己的事情。直到成功获取响应后&#xf…

1558. 得到目标数组的最少函数调用次数

1558. 得到目标数组的最少函数调用次数 原题链接&#xff1a;完成情况&#xff1a;解题思路&#xff1a;参考代码&#xff1a; 原题链接&#xff1a; 1558. 得到目标数组的最少函数调用次数 https://leetcode.cn/problems/minimum-numbers-of-function-calls-to-make-target…

毛玻璃用户卡交互

效果展示 页面结构组成 从效果展示可以看到&#xff0c;此效果都是比较常规的。主要的核心就是卡片的悬停效果。 CSS 知识点 backdrop-filter 回顾transitiontransform 页面基础布局实现 <section><div class"container"><div class"card&q…

Academic accumulation|社会创业研究:过去的成就和未来的承诺

文献来源&#xff1a;Saebi T, Foss N J, Linder S. Social entrepreneurship research: Past achievements and future promises[J]. Journal of management, 2019, 45(1): 70-95. 一、文章介绍 &#xff08;一&#xff09;文章主要包含什么&#xff1f; SE越来越受到学术界的…