一文详解docker swarm

文章目录

  • 1、简介
    • 1.1、涉及到哪些概念?
    • 1.2、需要注意什么?
  • 2、集群管理
    • 2.1、创建集群
    • 2.2、将节点加入集群
    • 2.3、查看集群状态。
    • 2.4、将节点从集群中移除
    • 2.5、更新集群
    • 2.6、锁定/解锁集群
  • 3、节点管理
  • 4、服务部署
    • 4.1、准备
    • 4.2、服务管理
      • 4.2.1、常用命令
      • 4.2.2、在集群上部署应用
      • 4.2.3、在集群上部署一个带更新策略和回滚策略的应用
      • 4.2.4、更新服务
      • 4.2.5、回滚服务
  • 5、结合docker-compose.yml部署
    • 5.1、部署应用
    • 5.2、语法说明

1、简介

Docker Swarm 是Docker官方的跨节点的容器编排工具。用户只需要在单一的管理节点上操作,即可管理集群下的所有节点和容器。

主要解决问题:

  1. 解决docker server的集群化管理和部署。
  2. Swarm通过对Docker宿主机上添加的标签信息来将宿主机资源进行细粒度分区,通过分区来帮助用户将容器部署到目标宿主机上,同样通过分区方式还能提供更多的资源调度策略扩展。

单对单的Docker宿主机使用方式:
在这里插入图片描述
单对多的Docker宿主机使用方式:
在这里插入图片描述
swarm能做什么:

  1. 管理节点高可用,原生支持管理节点高可用,采用raft共识算法来支撑管理节点高可用。
  2. 应用程序高可用,支持服务伸缩,滚动更新和应用回滚等部署策略。

1.1、涉及到哪些概念?

(1)docker的两种模式,单引擎模式和swarm集群模式。

  • 单引擎模式,docker server没有加入任何集群,且自身也没有加入初始化为swarm 节点,简单的说就是我们平时所操作的孤立的docker server。
  • swarm模式,当docker server 加入到任意swarm集群,或者通过docker swarm init初始化swarm集群时,docker server会自动切换到swarm 集群模式。

(2)swarm集群中节点分类,分为:manager(管理节点)、node(工作节点)

  • manager:是Swarm Daemon工作的节点,包含了调度器、路由、服务发现等功能,负责接收客户端的集群管理请求以及调度Node进行具体工作。manager 本身也是一个node节点。
  • Node:接受manager调度,对容器进行创建、扩容和销毁等具体操作。

(3)raft共识算法,是实现分布式共识的一种算法,主要用来管理日志复制的一致性。

  • 当Docker引擎在swarm模式下运行时,manager节点实现Raft一致性算法来管理全局集群状态。
  • Docker swarm模式之所以使用一致性算法,是为了确保集群中负责管理和调度任务的所有manager节点都存储相同的一致状态。
  • 在整个集群中具有相同的一致状态意味着,如果出现故障,任何管理器节点都可以拾取任务并将服务恢复到稳定状态。例如,如果负责在集群中调度任务的领导管理器意外死亡,则任何其他管理器都可以选择调度任务并重新平衡任务以匹配所需状态。
  • 使用一致性算法在分布式系统中复制日志的系统需要特别小心。它们通过要求大多数节点在值上达成一致,确保集群状态在出现故障时保持一致。
  • Raft最多可承受(N-1)/2次故障,需要(N/2)+1名成员的多数或法定人数才能就向集群提议的值达成一致。这意味着,在运行Raft的5个管理器集群中,如果3个节点不可用,系统将无法处理更多的请求来安排其他任务。现有任务保持运行,但如果管理器集不正常,调度程序无法重新平衡任务以应对故障。

(4)Swarm管理节点高可用。

  • Swarm管理节点内置有对HA的支持,即使有一个或多个节点发送故障,剩余管理节点也会继续保证Swarm运转。
  • Swarm实现了一种主从方式的多管理节点的HA,即使有多个管理节点也只有一个节点出于活动状态,处于活动状态的节点被称为主节点(leader),而主节点也是唯一一个会对Swarm发送控制命令的节点,如果一个备用管理节点接收到了Swarm命令,则它会将其转发给主节点。

(5)集群管理,集群创建和组织。
(6)节点管理,集群下节点角色信息变更,节点任务情况监控。
(7)服务管理,集群服务部署,服务管理等。

1.2、需要注意什么?

manager节点容错。
manager数量最好设置为奇数个,可以减少脑裂(Split-Brain)出现情况。在网络被划分成2个部分情况下,奇数个manager节点能够较高程度的保证有投票结果的可能性。

不要部署太多的manager节点(通常3到5个)。对于所有共识算法来说,更多的参与节点意味着需要花费更多的时间来达成共识,所以最好部署5个或三个节点。

Raft最多可承受(N-1)/2次故障,需要(N/2)+1名成员的多数或法定人数才能就向集群提议的值达成一致。
在这里插入图片描述

2、集群管理

2.1、创建集群

  1. 不包含在任何Swarm中的Docker节点,该Docker节点被称为运行于单引擎(Single-Engine)模式,一旦加入Swarm集群,则切换为Swarm模式。
  2. docker swarm init 会通知Docker来初始化一个新的Swarm,并且将自身设置为第一个管理节点。同时也会使该节点开启Swarm模式。
  3. –advertise-addr IP:2377 指定其他节点用来连接到当前管理节点的IP和端口,这一指令是可选的,当节点有多个IP时,可以指定其中一个。
  4. –listen-addr 指定用于承载Swarm流量的IP和端口,其设置通常与–advertise-addr相匹配,但是当节点上有多个IP的时候,可用于指定具体某个IP。
  5. –autolock 启用管理器自动锁定(需要解锁密钥才能启动已停止的管理器)。
  6. –force-new-cluster 强制从当前状态创建新群集。
docker swarm init

2.2、将节点加入集群

(1)生成join-token。

# 生成work节点 join-token
docker swarm join-token worker
# 生成manager节点 join-token
docker swarm join-token manager

示例:

fly@fly:~/wokspace$ docker swarm join-token worker 
To add a worker to this swarm, run the following command:docker swarm join --token SWMTKN-1-4zxv2c1ntyjoum1m3x8u6juej6kciexc05f30j9vsvr0hoieg4-19o9myylkb7bg1fb1jqcr1xcf 192.168.11.72:2377

(2)加入集群。

# 此命令为 join-token 命令执行结果,在相应的节点执行该结果即可加入到集群
docker swarm join --token SWMTKN-1-4zxv2c1ntyjoum1m3x8u6juej6kciexc05f30j9vsvr0hoieg4-19o9myylkb7bg1fb1jqcr1xcf 192.168.11.72:2377

2.3、查看集群状态。

docker info

在这里插入图片描述

2.4、将节点从集群中移除

(1)将节点从集群中移除 (只能移除worker节点)。

docker swarm leave

(2)将节点从集群中强制移除(包括manager节点)。

docker swarm leave -f

2.5、更新集群

更新集群的部分参数

docker swarm update --autolock=false

2.6、锁定/解锁集群

  • 重启一个旧的管理节点或者进行备份恢复可能对集群造成影响,一个旧的管理节点重新接入Swarm会自动解密并获得Raft数据库中长时间序列的访问权,这会带来安全隐患。进行备份恢复可能会抹掉最新的Swarm配置。
  • 为了规避上述问题,Docker提供自动锁机制来锁定Swarm,这会强制要求重启的管理节点在提供一个集群解锁码之后才有权重新接入集群(也可以防止原来的主节点宕机后重新接入集群,和当前主节点一起成为双主,双主也是一种脑裂问题)。

(1)设置为自动锁定集群。

# 设置为自动锁定集群
docker swarm update --autolock=true

(2)当集群设置为 --autolock后,可以通过该命令查询解锁集群的秘钥。

# 当集群设置为 --autolock后,可以通过该命令查询解锁集群的秘钥
# 该节点必须为集群有效的管理节点
docker swarm unlock-key

(3)重启管理节点,集群将被自动锁定。

# 重启管理节点,集群将被自动锁定
service docker restart

(4)重启后的管理节点必须提供解锁码后才能重新接入集群。

# 重启后的管理节点必须提供解锁码后才能重新接入集群
docker swarm unlock

3、节点管理

# 查看参数帮助
docker node -h
# 命令说明:
# 降级节点
demote Demote one or more nodes from manager in the swarm
# 查看节点详情
inspect Display detailed information on one or more nodes
# 查看所有节点
ls List nodes in the swarm
# 升级节点
promote Promote one or more nodes to manager in the swarm
# 查看节点上运行的任务,默认当前节点
ps List tasks running on one or more nodes, defaults to current node
# 删除节点
rm Remove one or more nodes from the swarm
# 更新节点
update Update a node
  • demote:降级节点。
  • inspect:查看节点详情。
  • ls:查看所有节点。
  • promote:升级节点。
  • ps:查看节点上运行的任务,默认当前节点。
  • rm:删除节点。
  • update:更新节点。

(1) 查看集群节点列表。

fly@fly:~/wokspace$ docker node lsID                            HOSTNAME   STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
re12imh3gr7d1dudrw1gkm9f7 *   fly        Ready     Active         Leader           20.10.12

(2)升级或降级节点。

# 降级一个或多个节点
docker node demote <NODE>
# 通过修改单个节点的role属性,来降级节点
docker node update --role worker <NODE>
# 升级一个或多个节点
docker node promote <NODE>
# 通过修改单个节点的role属性,来升级节点
docker node update --role manager <NODE>

(3)更改节点状态。

# 更改节点状态
docker node update --availability active|pause|drain <NODE>
# active: 正常
# pause:挂起
# drain:排除
  1. 正常节点,可正常部署应用。
  2. 挂起节点,已经部署的应用不会发生变化,新应用将不会部署到该节点。
  3. 排除节点,已经部署在该节点的应用会被调度到其他节点。

(4)删除节点。

# 只能删除已关闭服务的工作节点
docker node rm <node>
# 只能强制删除工作节点
docker node rm -f <node>

注意:管理节点的删除只能先将管理节点降级为工作节点,再执行删除动作。

# 停止docker server
sudo service docker stop

4、服务部署

4.1、准备

(1)拉取代码,获取tag。

# 拉取代码
git clone https://gitee.com/long-xu/helloworld.git
# 进入代码目录
cd helloworld
# fetch
git fetch origin

(2)镜像制作。

# 切换到1.0.0 tag
git checkout 1.0.0
# 构建1.0.0镜像
docker build -f Dockerfile -t hello:1.0.0 .
# 切换到1.0.1 tag
git checkout 1.0.1
# 构建1.0.1镜像
docker build -f Dockerfile -t hello:1.0.1 .

(3)将镜像推送到仓库(这里使用公共仓库作为演示)。

# 登录注册中心
docker login

(4)为镜像重新打tag(格式:用户名/仓库名:tag)。

docker tag hello:1.0.0 long-xu/hello:1.0.0
docker push long-xu/hello:1.0.0
docker tag hello:1.0.1 long-xu/hello:1.0.1
docker push long-xu/hello:1.0.1

(5) 登录https://hub.docker.com/ 查看镜像情况。
在这里插入图片描述

4.2、服务管理

docker service -h

4.2.1、常用命令

# 创建一个服务
create 		Create a new service
# 查看服务详细信息
inspect 	Display detailed information on one or more services
# 查看服务日志
logs 		Fetch the logs of a service or task
# 列出所有服务
ls 			List services
# 列出一个或多个服务的任务列表
ps 			List the tasks of one or more services
# 删除一个或多个服务
rm 			Remove one or more services
# 回滚
rollback 	Revert changes to a service's configuration
# 弹性伸缩一个或多个服务
scale 		Scale one or multiple replicated services
# 更新服务
update 		Update a service

4.2.2、在集群上部署应用

(1)部署一个副本数量。

docker service create --name myhello --publish published=81,target=80 --replicas 3 long-xu/hello:1.0.0
# 若是采用私有注册中心请加上 --with-registry-auth 选项

(2)查看服务下的任务(容器)。

docker service ps myhello

(3) 查看节点下的任务(容器)

docker node ps <NODE>

(4)访问集群中任意节点(包括没有运行任务的节点)对应的端口号均能访问到应用程序,swarm为集群实现了负载均衡

curl http://localhost:81/ping

(5)查看service详细信息。

docker service inspect myhello

(6)查看service日志。

docker service logs myhello

(7)伸缩服务。

docker service scale myhello=5

(8) 修改节点状态,查看任务部署情况。

docker node update --availability active|pause|drain <NODE>

4.2.3、在集群上部署一个带更新策略和回滚策略的应用

(1)部署应用。

docker service create \
--name myhello1 \
--publish published=82,target=80 \
--replicas 20 \
--update-delay 5s \
--update-parallelism 2 \
--update-failure-action continue \
--rollback-parallelism 2 \
--rollback-monitor 10s \
--rollback-max-failure-ratio 0.2 \
long-xu/hello:1.0.0
# 若是采用私有注册中心请加上 --with-registry-auth 选项
#--update-delay 5s :每个容器依次更新,间隔5s
# --update-parallelism 2 : 每次允许两个服务一起更新
#--update-failure-action continue : 更新失败后的动作是继续
# --rollback-parallelism 2 : 回滚时允许两个一起
# --rollback-monitor 10s :回滚监控时间10s
# --rollback-max-failure-ratio 0.2 : 回滚失败率20%

(2) 检查部署后的应用设置项是否都有被成功设置。

# 查看并打印友好的详细信息
docker service inspect --pretty myhello1

注意:查看详细信息时,详细信息中时间单位为ns(纳秒)。友好格式下,时间单位为(s)。

(3)更新未设置成功的项。

docker service update --update-delay 5s --rollback-monitor 10s myhello1

(4)访问服务。

curl http://localhost:82/ping
curl http://localhost:82/ping/v1.0.1

4.2.4、更新服务

(1)启动更新。

docker service update --image long-xu/hello:1.0.1 myhello1
# 若是采用私有注册中心请加上 --with-registry-auth 选项

在这里插入图片描述
(2)访问服务。

curl http://localhost:82/ping
curl http://localhost:82/ping/v1.0.1

4.2.5、回滚服务

(1)启动回滚(策略是失败后回滚,目前没有失败的情况,我们手动回滚)。

docker service update --rollback myhello1

在这里插入图片描述

5、结合docker-compose.yml部署

5.1、部署应用

(1)常用命令:

# 部署或更新 stack
deploy 		Deploy a new stack or update an existing stack
# 查看 stack 列表
ls 			List stacks
# 查看 stack 的任务列表
ps 			List the tasks in the stack
# 删除 stack
rm 			Remove one or more stacks
# 查看stack 中的服务列表
services 	List the services in the stack

(2)docker-compose.yml 文件。

version: "3.7"services:myhello2:image: long-xu/hello:1.0.0ports:- "83:80"depends_on:- redisdeploy:mode: replicatedreplicas: 20endpoint_mode: viprollback_config:parallelism: 2delay: 10smonitor: 10smax_failure_ratio: 0.2update_config:parallelism: 2delay: 5sfailure_action: continueredis:image: redis:alpinedeploy:mode: replicatedreplicas: 6endpoint_mode: dnsrrlabels:description: "This redis service label"resources:limits:cpus: '0.50'memory: 50Mreservations:cpus: '0.25'memory: 20Mrestart_policy:condition: on-failuredelay: 5smax_attempts: 3window: 120s

(3)部署stack。

docker stack deploy -c docker-compose.yml mystack

(4)查看服务详情。

# 查看并打印友好的详细信息
docker service inspect --pretty mystack_myhello2
docker service inspect --pretty mystack_redis

5.2、语法说明

注意:仅支持 V3.4 及更高版本。

(1)endpoint_mode:访问集群服务的方式。

endpoint_mode: vip
# Docker 集群服务一个对外的虚拟 ip。所有的请求都会通过这个虚拟 ip 到达集群服务内部的机器。
endpoint_mode: dnsrr
# DNS 轮询(DNSRR)。所有的请求会自动轮询获取到集群 ip 列表中的一个 ip 地址。

(2)labels:在服务上设置标签。可以用容器上的 labels(跟 deploy 同级的配置) 覆盖 deploy 下的labels。

(3)mode:指定服务提供的模式。

  • replicated:复制服务,复制指定服务到集群的机器上。
  • global:全局服务,服务将部署至集群的每个节点。
  • replicas:mode 为 replicated 时,需要使用此参数配置具体运行的节点数量。

(4)resources:配置服务器资源使用的限制,例如上例子,配置 redis 集群运行需要的 cpu 的百分比 和 内存的占用。避免占用资源过高出现异常。

(5)restart_policy:配置如何在退出容器时重新启动容器。

  • condition:可选 none,on-failure 或者 any(默认值:any)。
  • delay:设置多久之后重启(默认值:0)。
  • max_attempts:尝试重新启动容器的次数,超出次数,则不再尝试(默认值:一直重试)。
  • window:设置容器重启超时时间(默认值:0)。

(6)rollback_config:配置在更新失败的情况下应如何回滚服务。

  • parallelism:一次要回滚的容器数。如果设置为0,则所有容器将同时回滚。
  • delay:每个容器组回滚之间等待的时间(默认为0s)
  • failure_action:如果回滚失败,该怎么办。其中一个 continue 或者 pause(默认pause)。
  • monitor:每个容器更新后,持续观察是否失败了的时间 (ns|us|ms|s|m|h)(默认为0s)。
  • max_failure_ratio:在回滚期间可以容忍的故障率(默认为0)。
  • order:回滚期间的操作顺序。其中一个 stop-first(串行回滚),或者 start-first(并行回滚),默认 stop-first 。

(7)update_config:配置应如何更新服务,对于配置滚动更新很有用。
同rollback_config。

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

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

相关文章

[C++]继承(续)

一、基类和派生类对象赋值转换 在public继承时&#xff0c;父类和子类是一个“is - a”的关系。 子类对象赋值给父类对象/父类指针/父类引用&#xff0c;我们认为是天然的&#xff0c;中间不产生临时对象&#xff0c;也叫作父子类赋值兼容规则&#xff08;切割/切片&#xff…

idea查看日志的辅助插件 --- Grep Console (高亮、取消高亮)

&#x1f680; 分享一款很有用的插件&#xff1a;Grep Console &#x1f680; 我们在查看日志的时候可能会有遗漏&#xff0c;使用这款插件可以让特定的关键词高亮&#xff0c;可以达到不遗漏的效果&#xff01; 如果你是一个开发者或者对日志文件分析感兴趣&#xff0c;不要…

记录一次使用ant design 中 ConfigProvider来修改样式导致样式改变的问题(Tabs嵌套Tabs)

一 说明 继之前的一篇文章&#xff1a;antd5 Tabs 标签头的文本颜色和背景颜色修改 后&#xff0c;发现在被修改后的Tab中继续嵌套Tabs组件&#xff0c;这个新的Tabs组件样式跟外层Tabs样式也是一致的&#xff0c;如下图所示&#xff1a; 二 原因 在修改外层tabs样式时&…

又涨又跌 近期现货黄金价格波动怎么看?

踏入2024年一月的下旬&#xff0c;现货黄金价格可以说没了之前火热的状态&#xff0c;盘面上是又涨又跌。面对这样的行情&#xff0c;很多投资者不知道如何看了。下面我们就来讨论一下怎么把握近期的行情。 先区分走势类型。在现货黄金市场中有两种主要的走势类型&#xff0c;一…

【SpringCloud】使用OpenFeign进行微服务化改造

目录 一、需求与背景二、OpenFeign 远程调用技术原理三、项目代码演示3.1 引入依赖3.2 实现OpenFeign注解修饰接口3.3 指定 OpenFeign 远程调用接口的扫描路径 四、OpenFeign 在日志中打印Request和Response五、OpenFeign 客户端超时配置六、使用 OpenFeign 实现服务降级6.1 实…

《区块链简易速速上手小册》第10章:区块链的未来与趋势(2024 最新版)

文章目录 10.1 区块链的未来展望10.1.1 基础知识10.1.2 主要案例&#xff1a;区块链在金融领域的发展10.1.3 拓展案例 1&#xff1a;区块链在供应链管理中的应用10.1.4 拓展案例 2&#xff1a;区块链在身份管理和隐私保护中的应用 10.2 新兴技术与区块链的融合10.2.1 基础知识1…

智能家居的网关新形态:Aqara 方舟智慧中枢 M3 体验

如果说在刚刚结束的 2023 年有哪些备受期待的智能家居产品&#xff0c;Aqara 方舟智慧中枢 M3 一定榜上有名&#xff0c;我的多位朋友也曾在装修过程中多次向我询问是否有这款产品的相关资讯&#xff1b;谁能想到自从在 2022 年 11 月首次亮相之后&#xff0c;这款产品一直等了…

vulhub靶机activemq环境下的CVE-2015-5254(ActiveMQ 反序列化漏洞)

影响范围 Apache ActiveMQ 5.x ~ Apache ActiveMQ 5.13.0 远程攻击者可以制作一个特殊的序列化 Java 消息服务 (JMS) ObjectMessage 对象&#xff0c;利用该漏洞执行任意代码。 漏洞搭建 没有特殊要求&#xff0c;请看 (3条消息) vulhub搭建方法_himobrinehacken的博客-CSD…

iOS图像处理----探索图片解压缩到渲染的全过程以及屏幕卡顿

一&#xff1a;图像成像过程 ①、将需要显示的图像&#xff0c;由CPU和GPU通过总线连接起来&#xff0c;在CPU中输出的位图经总线在合适的时机上传给GPU &#xff0c;GPU拿到位图做相应位图的图层渲染、纹理合成。 ②、将渲染后的结果&#xff0c;存储到帧缓存区&#xff0c;帧…

【脑电信号处理与特征提取】P7-贾会宾:基于EEG/MEG信号的大尺度脑功能网络分析

基于EEG/MEG信号的大尺度脑功能网络分析 Q: 什么是基于EEG/MEG信号的大尺度脑功能网络分析&#xff1f; A: 基于脑电图&#xff08;EEG&#xff09;或脑磁图&#xff08;MEG&#xff09;信号的大尺度脑功能网络分析是一种研究大脑活动的方法&#xff0c;旨在探索脑区之间的功能…

【JavaSE篇】——继承

目录 &#x1f393;继承 ✅为什么需要继承 ✅继承概念 ✅继承的语法 ✅父类成员访问 &#x1f6a9;子类中访问父类的成员变量 1. 子类和父类不存在同名成员变量的情况 2. 子类和父类成员变量同名 &#x1f6a9;子类中访问父类的成员方法 1. 成员方法名字不同 2. 成员…

SAM:基于 prompt 的通用图像分割模型

Paper: Kirillov A, Mintun E, Ravi N, et al. Segment anything[J]. arXiv preprint arXiv:2304.02643, 2023. Introduction: https://segment-anything.com/ Code: https://github.com/facebookresearch/segment-anything SAM 是 Meta AI 开发的一款基于 prompt 的通用视觉大…

100%涨点!2024最新卷积块创新方案盘点(附模块和代码)

在写论文时&#xff0c;设计高效、创新的卷积块可以显著提升模型的性能&#xff0c;保障工作的有效性和先进性。另外&#xff0c;合理利用卷积块还可以帮助我们提升实验结果、拓展研究的视野和应用场景&#xff0c;增加论文的创新点。因此&#xff0c;对于论文er来说&#xff0…

BSV区块链将凭借Teranode的创新在2024年大放异彩

​​发表时间&#xff1a;2024年1月15日 2024年1月15日&#xff0c;瑞士楚格 – BSV区块链协会研发团队今日官宣了Teranode的突破性功能&#xff0c;这些功能将显著提升BSV区块链网络的效率和速度。在不久的将来&#xff0c;BSV区块链的交易处理能力将达到每秒100万笔交易。 T…

粒子群优化算法

PSO算法 粒子群算法&#xff08;Particle,Swarm Optimization,PSO&#xff09;由Kennedy和Eberhart于1995年提出&#xff0c;算法模仿鸟群觅食行为对优化问题进行求解。 粒子群算法中每个粒子包含位置和速度两个属性&#xff0c;其中&#xff0c;位置代表了待求问题的一个候选…

安装GPU版本Pytorch(全网最详细过程)

目录 一、前言 二、安装CUDA 三、安装cuDNN 四、安装Anacanda 五、安装pytorch 六、总结 一、前言 最近因为需要安装GPU版本的Pytorch&#xff0c;所以自己在安装过程中也是想着写一篇博客&#xff0c;把整个过程记录下来&#xff0c;在整个过程中也遇到了不少的问题&a…

【开源】基于JAVA+Vue+SpringBoot的用户画像活动推荐系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 兴趣标签模块2.3 活动档案模块2.4 活动报名模块2.5 活动留言模块 三、系统设计3.1 用例设计3.2 业务流程设计3.3 数据流程设计3.4 E-R图设计 四、系统展示五、核心代码5.1 查询兴趣标签5.2 查询活动推荐…

状态压缩 笔记

棋盘式的f[i][j]中表示状态的j可以是状态本身也可以是在合法状态state中的下标 用状态本身比较方便&#xff0c;用下标比较省空间 用下标的话可以开id[M]数组记录一下 蒙德里安的梦想 求把 NM的棋盘分割成若干个 12的长方形&#xff0c;有多少种方案。 例如当 N2&#xff0…

【Redis】一文搞懂redis的所有知识点

目录 1. 什么是Redis&#xff1f;它主要用来什么的&#xff1f; 2.说说Redis的基本数据结构类型 2.1 Redis 的五种基本数据类型​编辑 2.2 Redis 的三种特殊数据类型 3. Redis为什么这么快&#xff1f;​编辑 3.1 基于内存存储实现 3.2 高效的数据结构 3.3 合理的数据编…

新火种AI|哄哄大模型的火爆,给了普通人AI创业破局的关键

作者&#xff1a;一号 编辑&#xff1a;美美 人们似乎更喜欢把AI当做玩具&#xff0c;而非工具。 近日&#xff0c;一款名为哄哄模拟器的AI原生应用火了&#xff0c;一天之内就吸引了60万用户。 哄哄模拟器设置了多种情侣吵架场景&#xff0c;无论你是男是女&#xff0c;都…