docker搭建redis三种集群模式

news2024/11/26 13:41:45

文章目录

  • 一、主从复制
    • 1、新建修改配置文件
    • 2、执行命令启动`redis`
    • 3、启动客户端测试
  • 二、哨兵模式Sentinel
    • 1、修改配置文件
    • 2、启动sentinel进程
    • 3、测试
  • 三、集群模式Cluster
    • 1、搭建集群
      • 1.1、创建集群挂载文件
      • 1.2、修改配置文件
      • 1.3、docker启动先六个redis实例
      • 1.4、构建集群
      • 1.5、查看集群状态
    • 2、容错测试
      • 2.1、数据存储
      • 2.2、关闭master节点,容错机制
    • 3、节点扩容
      • 3.1、启动6388,6389节点
      • 3.2、加入集群
      • 3.2、分配槽位
    • 4、节点缩容
      • 4.1、下线6389从节点
      • 4.2、分配6388节点的槽位
      • 4.3、删除6388节点
      • 4.5、关闭 6388和6389节点
    • 5、命令总结


一、主从复制

这儿采用docker进行安装redis,比较简单不过多解释了。

# 这儿安装的是7.0.5版本,也是最此时的新版
docker pull redis:7.0.5
#也可直接使用 
docker pull redis

1、新建修改配置文件

/user/local目录下新建文件夹,并再次文件夹下建了三个文件对应一主二从

cd /user/local
mkdir redis_replication
cd redis_replication
mkdir master
mkdir slave01
mkdir slave02

修改redis.conf配置文件

主节点 配置文件

1、修改bind或注释掉
bind 0.0.0.0
2、保护模式关闭,因为用docker否则无法访问
protected-mode no
3、设置密码
requirepass 设置密码
4、开启aof日志
appendonly yes

从节点 配置文件

在上述的主节点配置的基础上
1、修改自己的端口号(二从的端口号不要相同)
port 6380和6381
2、配置与主节点验证的密码
masterauth 设置密码
3、配置主节点的ip端口,认证主节点主从复制
replicaof 主机IP 主机端口

注意:

  • 主节点与从节点的密码要保持一致,方便后面的哨兵模式
  • daemonize 这个配置设置为no,因为要用docker -d命令,这两个有冲突,若不用docker的话可以开启。

将配置文件分别复制到一主二从的conf文件夹下。

2、执行命令启动redis

# 主节点
docker run -d --privileged=true -v /usr/local/redis_replication/master/data:/data -v /usr/local/redis_replication/master/conf:/etc/redis -p 6379:6379 --name redis_master  redis:7.0 redis-server /etc/redis/redis.conf
# 从节点01
docker run -d --privileged=true -v /usr/local/redis_replication/slave01/data:/data -v /usr/local/redis_replication/slave01/conf:/etc/redis -p 6380:6380 --name redis_slave01 redis:7.0 redis-server /etc/redis/redis.conf
# 从节点02
docker run -d --privileged=true -v /usr/local/redis_replication/slave02/data:/data -v /usr/local/redis_replication/slave02/conf:/etc/redis -p 6381:6381 --name redis_slave02 redis:7.0 redis-server /etc/redis/redis.conf

若出现报错

docker logs tail 200 容器id或名称

3、启动客户端测试

进入主从docker容器内:

docker exec -it 容器ID或名称 /bin/bash
# 运行客户端
redic_cli -p 6379 -a 密码
# 查看信息
info replication

# 展示如下信息
# Replication
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=6380,state=online,offset=1843834,lag=0
slave1:ip=127.0.0.1,port=6381,state=online,offset=1843414,lag=0
master_failover_state:no-failover
master_replid:9fc3d09efced8e02a2b9204358ad53d94a25de1a
master_replid2:99c68add0e6fa1f508ed43b2dce3f0348672ae5b
master_repl_offset:1843834
second_repl_offset:7845
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:782860
repl_backlog_histlen:1060975

在主节点 set k v,在从节点查看是否同步成功 get k

二、哨兵模式Sentinel

哨兵是一个独立的进程,作为进程,它会独立运行。其原理是哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例。

主要两步:

  • 启动redis主从复制(前面已经启动了)。
  • 配置sentinel并启动。

1、修改配置文件

sentinel.conf配置文件

# 修改端口不要重复,这儿26379 26380 26381
port 26379
# 设置日志存储位置
logfile "/data/sentinel.log"
# 监控主节点的配置 mymaster名字随便起;2因为是三台哨兵,所以大于等于半数票数2
sentinel monitor mymaster 主节点IP 主节点端口 2
# 配置主节点密码
sentinel auth-pass mymaster 密码

修改主节点的redis.conf配置文件,因为主节点也可能成为从节点。

所以前面要保持主从密码一直

masterauth 设置密码

将配置文件分别复制到一主二从的conf文件夹下。

注意: 配置密码时候看清是auth-pass,笔者错配成了auth-user耽误了并不少时间

2、启动sentinel进程

# 主节点sentinel
docker run -itd --privileged=true -v /usr/local/redis_replication/master/data:/data -v /usr/local/redis_replication/master/conf:/etc/redis -p 26379:26379 --name redis_sentinel redis:7.0 redis-sentinel /etc/redis/sentinel.conf
# 从节点01 sentinel
docker run -itd --privileged=true -v /usr/local/redis_replication/slave01/data:/data -v /usr/local/redis_replication/slave01/conf:/etc/redis -p 26380:26380 --name redis_sentinel01 redis:7.0 redis-sentinel /etc/redis/sentinel.conf
# 从节点02 sentinel
docker run -itd --privileged=true -v /usr/local/redis_replication/slave02/data:/data -v /usr/local/redis_replication/slave02/conf:/etc/redis -p 26381:26381 --name redis_sentinel02 redis:7.0 redis-sentinel /etc/redis/sentinel.conf

进入sentinel

docker exec -it redis_sentinel /bin/bash
# 运行客户端
redic_cli -p 26379
# 查看信息
info sentinel
# 展示如下信息
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_tilt_since_seconds:-1
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=127.0.0.1x:6379,slaves=2,sentinels=3

3、测试

  • 关闭master节点
docker stop redis_master
  • 观察sentinel.log信息

这儿有完整的从节点上位的过程

1:X 13 Dec 2022 02:54:17.611 # User requested shutdown...
1:X 13 Dec 2022 02:54:17.611 * Removing the pid file.
1:X 13 Dec 2022 02:54:17.611 # Sentinel is now ready to exit, bye bye...
1:X 13 Dec 2022 02:54:18.175 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
1:X 13 Dec 2022 02:54:18.175 # Redis version=7.0.5, bits=64, commit=00000000, modified=0, pid=1, just started
1:X 13 Dec 2022 02:54:18.175 # Configuration loaded
1:X 13 Dec 2022 02:54:18.175 * monotonic clock: POSIX clock_gettime
1:X 13 Dec 2022 02:54:18.177 * Running mode=sentinel, port=26379.
1:X 13 Dec 2022 02:54:18.177 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
1:X 13 Dec 2022 02:54:18.178 # Sentinel ID is 0489f75140810f172f63af196e845bd8584e520e
1:X 13 Dec 2022 02:54:18.178 # +monitor master mymaster 127.0.0.1 6379 quorum 2
1:X 13 Dec 2022 02:54:44.805 * +slave slave 127.0.0.1:6380 127.0.0.1 6380 @ mymaster 127.0.0.1 6379
1:X 13 Dec 2022 02:54:44.810 * Sentinel new configuration saved on disk
1:X 13 Dec 2022 02:54:44.810 * +convert-to-slave slave 127.0.0.1:6379 127.0.0.1 6379 @ mymaster 127.0.0.1 6379
1:X 13 Dec 2022 02:55:35.521 * Sentinel new configuration saved on disk
1:X 13 Dec 2022 02:55:35.521 # +new-epoch 21
1:X 13 Dec 2022 02:55:35.524 * Sentinel new configuration saved on disk
1:X 13 Dec 2022 02:55:35.525 # +vote-for-leader ed60d0f591b217fe3361a019b9dd6398f3b1d833 21
1:X 13 Dec 2022 02:55:35.931 # +config-update-from sentinel ed60d0f591b217fe3361a019b9dd6398f3b1d833 172.17.0.8 26380 @ mymaster 127.0.0.1 6379
1:X 13 Dec 2022 02:55:35.931 # +switch-master mymaster 127.0.0.1 6379 127.0.0.1 6381
1:X 13 Dec 2022 02:55:35.931 * +slave slave 127.0.0.1:6380 127.0.0.1 6380 @ mymaster 127.0.0.1 6381
1:X 13 Dec 2022 02:55:35.931 * +slave slave 127.0.0.1:6379 127.0.0.1 6379 @ mymaster 127.0.0.1 6381
1:X 13 Dec 2022 02:55:35.939 * Sentinel new configuration saved on disk
1:X 13 Dec 2022 02:56:05.973 # +sdown slave 127.0.0.1:6379 127.0.0.1 6379 @ mymaster 127.0.0.1 6381
1:X 13 Dec 2022 02:57:07.229 # -sdown slave 127.0.0.1:6379 127.0.0.1 6379 @ mymaster 127.0.0.1 6381
  • 查看 6381 端口的信息,发现成功上位成主节点。
  • 重启6379节点,发现该节点变成了从节点。

注意: 若重新启动sentinel记得修改配置文件监控为主节点。

sentinel monitor mymaster 主节点IP 主节点端口 2

三、集群模式Cluster

1、搭建集群

https://redis.io/docs/management/scaling/

1.1、创建集群挂载文件

/usr/local/redis_cluster 文件夹下 创建8个文件

mkdir master01
mkdir master02
mkdir master03
mkdir master04
mkdir slave01
mkdir slave02
mkdir slave03
mkdir slave04

并在对应的目录下创建conf文件,把redis.conf复制进conf文件夹下。

1.2、修改配置文件

新建八个配置文件依次放入conf文件夹下。

1、修改端口号,八个文件端口不要重复
port 6382
2、修改bind或注释掉
bind 0.0.0.0
3、保护模式关闭,因为用docker否则无法访问
protected-mode no
4、关闭后台运行
daemonize no
5、设置密码
requirepass 设置密码
6、开启aof日志
appendonly yes
7、开启集群模式
cluster-enabled yes 
8、根据你启用的节点来命名,最好和端口保持一致,这个是用来保存其他节点的名称,状态等信息的
cluster-config-file nodes_6379.conf 
9、超时时间
cluster-node-timeout 5000
10、配置与主节点验证的密码
masterauth 设置密码

1.3、docker启动先六个redis实例

docker run -d --net host  --privileged=true -v /usr/local/redis_cluster/master01/data:/data -v /usr/local/redis_cluster/master01/conf:/etc/redis -p 6382:6382 --name redis_cluster6382 redis:7.0 redis-server /etc/redis/redis.conf

docker run -d --net host  --privileged=true -v /usr/local/redis_cluster/master02/data:/data -v /usr/local/redis_cluster/master02/conf:/etc/redis -p 6383:6383 --name redis_cluster6383 redis:7.0 redis-server /etc/redis/redis.conf

docker run -d --net host  --privileged=true -v /usr/local/redis_cluster/master03/data:/data -v /usr/local/redis_cluster/master03/conf:/etc/redis -p 6384:6384 --name redis_cluster6384 redis:7.0 redis-server /etc/redis/redis.conf

docker run -d --net host  --privileged=true -v /usr/local/redis_cluster/slave01/data:/data -v /usr/local/redis_cluster/slave01/conf:/etc/redis -p 6385:6385 --name redis_cluster6385 redis:7.0 redis-server /etc/redis/redis.conf

docker run -d --net host  --privileged=true -v /usr/local/redis_cluster/slave02/data:/data -v /usr/local/redis_cluster/slave02/conf:/etc/redis -p 6386:6386 --name redis_cluster6386 redis:7.0 redis-server /etc/redis/redis.conf

docker run -d --net host  --privileged=true -v /usr/local/redis_cluster/slave03/data:/data -v /usr/local/redis_cluster/slave03/conf:/etc/redis -p 6387:6387 --name redis_cluster6387 redis:7.0 redis-server /etc/redis/redis.conf

1.4、构建集群

redis-cli -p 6382 --cluster create xx.xxx.xx.xxx:6382 xx.xxx.xx.xxx:6383 xx.xxx.xx.xxx:6384 xx.xxx.xx.xxx:6385 xx.xxx.xx.xxx:6386 xx.xxx.xx.xxx:6387 --cluster-replicas 1 -a 密码

--cluster-replicas 1 :为每一个主节点创建一个副本所以这儿 3主3从

展示如下信息

command截图

1.5、查看集群状态

# 查看集群状态以及节点关系
redis-cli -p 6382 -a 密码 --cluster check xx.xxx.xx.xxx 6382
# 进入redis-cli
redis-cli -p 6382 -a 密码 -c
# 查看cluster信息
cluster info
# 查看节点信息
cluster nodes

2、容错测试

2.1、数据存储

# 当设置不属于当前节点的槽位的key value时,发现会重定向到另一个槽位节点
set k1 v1
-> Redirected to slot [12706] located at xx.xxx.xx.xxx:6384
OK

2.2、关闭master节点,容错机制

  • 停止6384主节点,观察从节点是否上位
docker stop redis_cluster6384
  • 查看节点状态
redis-cli -p 6382 -a 密码 --cluster check xx.xxx.xx.xxx 6382
这儿就不再截图啦,会发现6387节点上位,成为主节点
  • 还原集群状态为原始状态

3、节点扩容

3.1、启动6388,6389节点

docker run -d --net host  --privileged=true -v /usr/local/redis_cluster/master04/data:/data -v /usr/local/redis_cluster/master04/conf:/etc/redis -p 6388:6388 --name redis_cluster6388 redis:7.0 redis-server /etc/redis/redis.conf

docker run -d --net host  --privileged=true -v /usr/local/redis_cluster/slave04/data:/data -v /usr/local/redis_cluster/slave04/conf:/etc/redis -p 6389:6389 --name redis_cluster6389 redis:7.0 redis-server /etc/redis/redis.conf

3.2、加入集群

  • 6388节点加入集群
# 添加节点到集群
redis-cli -a 密码 --cluster add-node xx.xxx.xx.xxx:6388 xx.xxx.xx.xxx:6382
  • 6389节点加入集群并绑定6388主节点
# 绑定从节点与主节点
redis-cli -a 密码 --cluster add-node xx.xxx.xx.xxx:6389 xx.xxx.xx.xxx:6388 --cluster-slave --cluster-master-id 204fbd5f8e9d71a865c75f34f4d48121e9d4cff2

--cluster-slave : 作为从节点。

--cluster-master-id: 指定关联的主节点,后面跟上 主节点 ID。

  • 观察节点状态
redis-cli -p 6382 -a 密码 --cluster check xx.xxx.xx.xxx 6382
# 展示如下
xx.xxx.xx.xxx:6382 (33b306d8...) -> 2 keys | 5461 slots | 1 slaves.-id 2a7494a93e
xx.xxx.xx.xxx:6383 (9a01058a...) -> 0 keys | 5462 slots | 1 slaves.
xx.xxx.xx.xxx:6384 (bb3b2354...) -> 1 keys | 5461 slots | 1 slaves.
xx.xxx.xx.xxx:6388 (2a7494a9...) -> 0 keys | 0 slots | 0 slaves.

还未对6388节点分配槽位。

3.2、分配槽位

redis-cli -a 密码 --cluster reshard xx.xxx.xx.xxx:6382
  • How many slots do you want to move (from 1 to 16384)?

这儿是说要分配给目标多少槽位 ? 4096 (16384/4=4096)

  • What is the receiving node ID?

分配给谁? 这儿填6388槽位的ID,2a7494a93ef14f755d2494afaefc4d91aae21f00

  • Type ‘all’ to use all the nodes as source nodes for the hash slots.
    Type ‘done’ once you entered all the source nodes IDs.

all :其他的所有节点的槽位会均匀分给6388节点

done:指定节点的槽位分给6388,需要先指定节点id,最后使用done

这儿选all 均匀分配。

  • 后面直接 yes

  • 再次检查集群状态。观察6388已经有4096个槽位了,并且取自领三个主节点。

4、节点缩容

将 6388和6389节点下线。

4.1、下线6389从节点

redis-cli -a 密码 --cluster del-node xx.xxx.xx.xxx:6382 204fbd5f8e9d71a865c75f34f4d48121e9d4cff2

后面是6389的 ID。

  • 检查集群状态

4.2、分配6388节点的槽位

redis-cli -a 密码 --cluster reshard xx.xxx.xx.xxx:6382

这儿原ID为6388的ID,接收者为6382的ID,然后done。意思是将所有的槽位分配给6382。

  • 检查集群状态

4.3、删除6388节点

redis-cli -a 密码 --cluster del-node xx.xxx.xx.xxx:6382 2a7494a93ef14f755d2494afaefc4d91aae21f00
  • 检查集群状态

4.5、关闭 6388和6389节点

docker stop redis_cluster6388 redis_cluster6389

5、命令总结

# 查看节点关系
redis-cli -p 6382 -a 密码 --cluster check xx.xxx.xx.xxx 6382

# 进入redis-cli
cluster info
cluster nodes

# 添加节点到集群
redis-cli -a 密码 --cluster add-node xx.xxx.xx.xxx:6388 xx.xxx.xx.xxx:6382

# 绑定从节点与主节点
redis-cli -a 密码 --cluster add-node xx.xxx.xx.xxx:6389 xx.xxx.xx.xxx:6388 --cluster-slave --cluster-master-id 2a7494a93ef14f755d2494afaefc4d91aae21f00

# 重新洗牌 槽位
redis-cli -a 密码 --cluster reshard xx.xxx.xx.xxx:6382

# 修复
redis-cli -a 密码 --cluster fix xx.xxx.xx.xxx:6382 --cluster-search-multiple-owners --cluster-fix-with-unreachable-masters

## 删除节点
redis-cli -a 密码 --cluster del-node xx.xxx.xx.xxx:6388 14cdb77543100a21791797a68a8e23229efe8c23

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

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

相关文章

【Canvas系列】基础入门(一)

📚 Canvas基础入门 🔥 收藏关注随时温习 💻 在线地址方便浏览 在线学习/演示地址 Canvas API 提供了一个通过JavaScript 和 HTML的元素来绘制图形的方式。它可以用于动画、游戏画面、数据可视化、图片编辑以及实时视频处理等方面 —— MDN 一…

shell-条件

条件可以用test或【命令 符号和被检查的条件之间要留有空格 : if [ -f filename *** ] if 和then用于同一行 if [ ]; then 字符串比较: if [ string1 string2 ] 两个字符串相等为真 if [ string1 ! string2 ] 两个字符串不相等为假 …

web自动化测试:Selenium+Python基础方法封装

推荐阅读: [内部资源] 想拿年薪30W的软件测试人员,这份资料必须领取~ Python自动化测试全栈性能测试全栈,挑战年薪40W 正文 01 目的 web自动化测试作为软件自动化测试领域中绕不过去的一个“香饽饽”,通常都会作为广大测试从…

Fiddler(4):在fiddler会话栏中添加IP列,设置抓HTTPS的请求证书安装

Fiddler(4):在fiddler会话栏中添加IP列 在fiddler会话栏中添加IP列 1、点击菜单栏rules——customize rules…或者在右侧响应栏中点击FiddlerScript栏;如下图: 2、ctrlf搜索“static function main” 3、在main函数里加入下面一行代码&…

Kafka极客 - 09 Kafka Java Consumer 多线程开发实例

文章目录1. Kafka Java Consumer 设计原理2. 多线程方案3. 代码实现4. 问题思考目前,计算机的硬件条件已经大大改善,即使是在普通的笔记本电脑上,多核都已经是标配了,更不用说专业的服务器了。如果跑在强劲服务器机器上的应用程序…

对称美学 华为OD真题 100

import java.util.Scanner; import java.util.*; import java.util.stream.Collectors; import java.math.BigInteger;class Main {public static void main(String[] args) {// 处理输入Scanner in new Scanner(System.in);int t in.nextInt();long[][] cases new long[t][…

Python学习笔记-模块

目录 一、模块的概念 二、自定义模块 1.创建模块 2.使用import语句导入模块 3.使用from...import 语句导入模块 4.模块搜索目录 4.1模块默认搜索目录 4.2临时添加目录 4.3增加.pth文件 4.4 在PYTHONPATH环境变量中添加 三、以主程序的形式执行 四、python中的包&am…

计算机毕业设计php_thinkphp_vue的家乡石泉网站-乡村家乡旅游信息网站

运行环境 开发语言:PHP 数据库:MYSQL数据库 应用服务:apache服务器 使用框架:ThinkPHP:vue 开发工具:VScode/Dreamweaver/PhpStorm等均可 项目简介 目前家乡石泉市是一个有不同民族“大杂居,小聚居”的地方,所以对于发展家乡特色业还是比较有优势…

C++初阶 priority_queue(优先级队列)的使用和模拟实现

作者:小萌新 专栏:C初阶 作者简介:大二学生 希望能和大家一起进步! 本篇博客简介:介绍优先级队列的使用和模拟实现 优先级队列的使用和模拟实现priority_queue的使用priority_queue的介绍priority_queue的定义priority…

Solid.js前端新秀框架 力压 web3.js 框架

SolidJS 是什么?SolidJS是一个声明式、高效且灵活用于构建用户界面的 JavaScript 库。 Solid 号称拥有 JSX 语法,类似于 React hook 的语法,你可以用现代化的开发方式,获得性能最快的代码。 框架本身只有7 KB大小,无需…

【在SpringBoot项目中删除相册数据--Controller层】

在AlbumController中添加处理请求的方法: 请求路径:/album/delete请求方式:POST请求参数:Long id响应结果:JsonResult >>> state:20000 具体代码为: // http://localhost:9080/album/delete ApiO…

常用Assignment写作句型怎么积累?

Assignment是留学生在国外留学期间常见的写作内容。很多留学生在最初接触Assignment时往往会感到无从下手,更不知道该怎么去表达自己想要表达的内容。其实,Assignment写作并没有想象中那么难,在Assignment写作中有很多句型是经常用到的&#…

Windows win10 win11 多屏幻灯片放映壁纸 多屏设置不同的壁纸 多屏不同幻灯片壁纸

背景:windows 可以右键为不同的显示器设置不同的壁纸(需要先关闭虚拟桌面)。但是 slideshow 的不支持多个屏幕。 目前看这个问题是没有官方的方案的,理论上有一个收费软件可以解决,或者用*版,但是不想给钱…

React Fiber树的构建和替换过程

文章の目录前言mount 过程update 过程写在最后前言 React Fiber树的创建和替换过程运用了双缓存技术,即先在内存中创建 fiber 树,待 fiber 树创建完成以后,直接将旧的 fiber 树替换成新的 fiber 树,这样做的好处是省去了直接在页…

datax之channel学习

一般来说datax只需要我们设置reader和writer,但是是什么连接了reader和writer呢? 就是channel! 这个有什么用? 慢慢学习。 core.json [devusercdp-node12 /data/DATA_DIR/share/dataingestion/conf]$ cat core.json { &quo…

应急物资仓库可视化管理系统-智慧应急物资装备管理系统

1. 项目概述 应急物资仓库可视化系统(智慧物资管理系统 DW-S300)是一套成熟系统,依托互 3D 技术、云计算、大数据、RFID 技术、数据库技术、AI、视频分析技术对 RFID 智能仓库进行统管理、分析的信息化、智能化、规范化的系统。 应急物资,是每当灾害发…

Cyanine7 NHS|CY7-N-羟基琥珀酰亚胺|CY7-NHS ester

Cyanine7 NHS|CY7-N-羟基琥珀酰亚胺|CY7-NHS ester 中文名称:CY7-N-羟基琥珀酰亚胺 英文名称:Cyanine7 NHS 性 状:深绿色粉末 分子量:827.94 Abs/Em Maxima:675/694nm 分子式:C41H46N3NaO10S2 溶解性…

【网站架构】项目越迭代越难、严重延期?那是没处理好变化

大家好,欢迎来到停止重构的频道。 本期,我们讨论网站系统的扩展性。 扩展性指的是网站系统应该如何更好地处理需求变化、版本迭代。 对于有几个项目经验的人来说,可能对这样的问题不以为然,毕竟devops、CI/CD、git、敏捷开发、…

Pytest测试框架(一):Pytest介绍与安装,Pytest编写规则及pytest.main()的参数

Pytest测试框架(1):Pytest介绍与安装 pytest简介: pytest是python的第三方单元测试框架,比自带的unittest更简洁和高效,同时兼容unittest框架。 它还有如下优点: 1、简单灵活,容易上手,文档丰…

计算机毕业设计django基于python精品课程在线学习系统

项目介绍 在各学校的教学过程中,租房系统是一项非常重要的事情。随着计算机多媒体技术的发展和网络的普及。采用当前流行的B/S模式以及3层架构的设计思想通过Python技术来开发此系统的目的是建立一个配合网络环境的精品课程系统的平台,这样可以有效地解决课程学习系统混乱的局…