RockyLinux9最小可用的多阶段构建镜像
要一个 RockyLinux9 最小可用的多阶段构建镜像,能编译并运行 go-sqlite3因为 go-sqlite3 需要 sqlite-devel (编译阶段) + sqlite-libs (运行阶段),所以我们只要保证 builder 和 runtime 两个阶段分别装对依赖就行。
最小化的Dockerfile
1 | # ---------- builder 阶段 ---------- |
要一个 RockyLinux9 最小可用的多阶段构建镜像,能编译并运行 go-sqlite3因为 go-sqlite3 需要 sqlite-devel (编译阶段) + sqlite-libs (运行阶段),所以我们只要保证 builder 和 runtime 两个阶段分别装对依赖就行。
1 | # ---------- builder 阶段 ---------- |
Tomcat 与 Redis 结合做 Session 管理的本质,是让 Tomcat 把原本本地内存中的 StandardManager 替换为一个分布式的 RedisSessionManager,所有节点共享同一个 Redis,实现真正的横向扩展。
Tomcat 装 Session Manager 模块 → 修改 server.xml → 配置 Redis → 重启验证 → 多节点压测。
单节点环境可先跑 Redis(不过生产必须 Redis Cluster / Sentinel)。
业务上需要注意:Redis 配持久化 RDB+AOF 或至少 AOF appendfsync everysec,避免宕机丢会话。
1 clean
清理项目的 target/ 目录,确保构建从干净环境开始。
2 package
执行 Maven 的生命周期到 package 阶段,通常会生成 .jar 或 .war 包。
3 -Dmaven.test.skip=true
跳过测试用例的 执行 和 编译。
这是一个 JVM 系统属性,Maven 构建时会跳过 Surefire/Failsafe 测试任务。
4 -P pro
它表示 激活 Maven Profile:pro。
Profile 是 Maven 用来实现“不同环境构建”的机制,例如 dev、test、pre、pro 等。
pom.xml(最常见)
项目的 pom.xml 内部定义:
1 | <profiles> |
~/.m2/settings.xml(用户级别配置)
这里也可以定义 profile,例如仓库源、私服账号:
1 | <profiles> |
全局 settings.xml(Maven 安装目录 conf/settings.xml)
集群脑裂(Split-Brain)像是“同一个大脑被硬生生裂成两个”,两个节点或多个节点因为通信中断,各自误以为对方挂了,于是纷纷把自己当成“合法主节点”。
这会导致一个危险局面:出现多个主节点同时对外提供写入服务,数据就像被两个平行宇宙分别改写,最终回到现实世界只能引爆混乱(数据冲突、版本不一致、服务错乱)。
脑裂是分布式系统的天敌,它本质是对“共识”失败的暴露:节点失去彼此的视野,让一致性算法失去了基础。
典型诱因包括: