企业级应用双模式部署架构设计:从单体到微服务的平滑演进
基于点狮全业务管理平台(点狮OA)的实践,探讨如何通过一套代码同时支持单体和微服务两种部署模式,实现不同规模企业的灵活部署。
📊 企业痛点分析
痛点一:部署模式与规模不匹配
中小企业困境:
业务规模:50-500人
IT团队:1-3人,甚至无专职IT
服务器资源:1-2台普通服务器
运维能力:基础运维,缺乏微服务治理经验
微服务部署问题:
❌ 需要部署10+个独立服务,运维复杂度呈指数级增长
❌ 需要搭建Nacos、Sentinel、SkyWalking等完整微服务治理体系
❌ 服务器资源不足,难以支撑多服务架构
❌ 故障排查困难,缺乏专业监控工具
大型企业困境:
业务规模:1000+人
IT团队:20+人
服务器资源:集群化部署
业务特点:高并发、多地域、多组织
单体部署问题:
❌ 单点故障风险高
❌ 无法按需扩容,资源浪费
❌ 团队协作困难,代码冲突频繁
❌ 技术栈固化,创新受限
痛点二:厂商解决方案的两难选择
传统软件厂商面临的两难选择:
方案A:只提供单体应用
✅ 部署简单,客户容易上手
❌ 大客户看不上,认为不够"专业"
❌ 性能瓶颈明显,难以支撑大客户需求
方案B:只提供微服务应用
✅ 技术先进,符合大客户期望
❌ 小客户玩不转,售前成本高
❌ 实施周期长,客户满意度下降
🎯 解决方案:双模式部署架构
点狮全业务管理平台(包括点狮OA)通过独特的双模式部署架构,用一套代码同时支持单体和微服务两种部署模式,完美解决上述痛点。
核心设计理念
一套代码 → 两种打包方式 → 不同部署模式
单体模式:所有模块在一个进程中运行,通过依赖注入实现模块协作
微服务模式:每个模块独立部署,通过Nacos注册中心实现服务发现与调用
架构对比图
┌────────────────────────────────────────────────────────────┐
│ 单体部署模式 │
├────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────────────────────────────────┐ │
│ │ pointlion-server.jar │ │
│ │ ┌─────────────────────────────────┐ │ │
│ │ │ System Module │ │ │
│ │ ├─────────────────────────────────┤ │ │
│ │ │ OA Module │ │ │
│ │ ├─────────────────────────────────┤ │ │
│ │ │ HRM Module │ │ │
│ │ ├─────────────────────────────────┤ │ │
│ │ │ CRM Module │ │ │
│ │ ├─────────────────────────────────┤ │ │
│ │ │ ... 其他模块 │ │ │
│ │ └─────────────────────────────────┘ │ │
│ │ Spring Context │ │
│ └──────────────────────────────────────────┘ │
│ │
│ 数据库、Redis、MQ等外部资源 │
└────────────────────────────────────────────────────────────┘
┌────────────────────────────────────────────────────────────┐
│ 微服务部署模式 │
├────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ Gateway │ │ Nacos │ │ Nacos │ │
│ │ │ │Registry │ │ Config │ │
│ └────┬────┘ └─────────┘ └─────────┘ │
│ │ │
│ ┌────┴────────────────────────────────────────┐ │
│ │ │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
│ │ │ System │ │ OA │ │ HRM │ │ │
│ │ │ Module │ │ Module │ │ Module │ │ │
│ │ └──────────┘ └──────────┘ └──────────┘ │ │
│ │ │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
│ │ │ CRM │ │ ERP │ │ ... │ │ │
│ │ │ Module │ │ Module │ │ Module │ │ │
│ │ └──────────┘ └──────────┘ └──────────┘ │ │
│ └──────────────────────────────────────────────┘ │
│ │
│ 数据库、Redis、MQ等外部资源 │
└────────────────────────────────────────────────────────────┘
🔧 技术实现详解
1. Maven模块化设计
点狮全业务管理平台采用多模块Maven项目结构:
xml
pointlion-cloud/
├── pointlion-dependencies # 依赖管理BOM
├── pointlion-gateway # 服务网关
├── pointlion-framework # 框架层(安全、MyBatis、Redis等)
├── pointlion-server # 单体部署主程序
├── pointlion-module-system # 系统管理模块
├── pointlion-module-oa # OA办公模块
├── pointlion-module-hrm # 人力资源管理模块
├── pointlion-module-crm # 客户关系管理模块
├── pointlion-module-mes # 制造执行系统模块
├── pointlion-module-ams # 资产管理模块
├── pointlion-module-bpm # 工作流引擎模块
├── ... 其他业务模块
关键设计 :每个业务模块都有独立的-server和-api子模块
pointlion-module-oa/
├── pointlion-module-oa-api/ # API接口定义
│ └── pom.xml
├── pointlion-module-oa-server/ # 服务实现
│ └── pom.xml
└── pom.xml
2. 单体部署实现原理
pointlion-server的依赖设计:
xml
<!-- pointlion-server/pom.xml -->
<dependencies>
<!-- 系统管理模块 -->
<dependency>
<groupId>com.pointlion.cloud</groupId>
<artifactId>pointlion-module-system-server</artifactId>
<version>${revision}</version>
</dependency>
<!-- OA办公模块 -->
<dependency>
<groupId>com.pointlion.cloud</groupId>
<artifactId>pointlion-module-oa-server</artifactId>
<version>${revision}</version>
</dependency>
<!-- HRM人力资源模块 -->
<dependency>
<groupId>com.pointlion.cloud</groupId>
<artifactId>pointlion-module-hrm-server</artifactId>
<version>${revision}</version>
</dependency>
<!-- CRM客户关系管理模块 -->
<dependency>
<groupId>com.pointlion.cloud</groupId>
<artifactId>pointlion-module-crm-server</artifactId>
<version>${revision}</version>
</dependency>
<!-- 其他业务模块... -->
</dependencies>
工作原理:
pointlion-server引入所有业务模块的-server依赖- Spring Boot启动时自动扫描所有模块的
@RestController、@Service等组件 - 所有模块在同一个Spring容器中运行
- 模块间通过Java方法调用(依赖注入)进行交互
3. 微服务部署实现原理
每个模块独立打包:
每个-server模块都可以独立打包成可执行jar:
xml
<!-- pointlion-module-oa-server/pom.xml -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
服务注册与发现:
yaml
# application.yml
spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
config:
server-addr: 127.0.0.1:8848
模块间通信:
java
// 通过Dubbo/Feign进行远程调用
@FeignClient(contextId = "remoteUserService", value = ModuleConstants.SYSTEM_MODULE)
public interface RemoteUserService {
@GetMapping("/system/user/{id}")
R<UserDTO> getUser(@PathVariable("id") Long id);
}
4. Maven Profile智能打包
核心配置:
xml
<!-- pointlion-cloud/pom.xml -->
<properties>
<!-- 打包跳过配置,默认为 false(不跳过,所有模块都打包) -->
<maven.jar.skip>false</maven.jar.skip>
</properties>
<profiles>
<!-- 单体运行打包模式:跳过所有子模块的打包,只打包 pointlion-server -->
<profile>
<id>standalone-package</id>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
<properties>
<maven.jar.skip>true</maven.jar.skip>
</properties>
</profile>
</profiles>
工作原理:
- 默认模式(微服务):
maven.jar.skip=false,所有模块都打包 - 单体模式:
maven.jar.skip=true,跳过子模块打包,只打包pointlion-server
📦 打包方式与命令
方式一:单体模式打包
打包命令:
bash
# 进入项目目录
cd pointlion-cloud
# 单体模式打包(重要:使用 -Pstandalone-package 参数)
mvn clean package -am -pl pointlion-server \
-Dmaven.test.skip=true \
-Pstandalone-package
参数说明:
clean # 清理之前的构建结果
package # 打包成jar文件
-am # 同时构建所列模块的依赖模块
-pl pointlion-server # 只构建pointlion-server模块
-Dmaven.test.skip=true # 跳过测试,加快打包速度
-Pstandalone-package # 激活单体打包Profile
产物:
pointlion-cloud/
├── pointlion-server/
│ └── target/
│ ├── pointlion-server.jar # 可执行jar(包含所有依赖)
│ └── lib/ # 依赖库
│ ├── spring-boot-starter-web.jar
│ ├── mybatis-plus-spring-boot-starter.jar
│ └── ...
部署命令:
bash
# 启动单体应用
java -jar pointlion-server.jar
# 或者指定配置文件
java -jar pointlion-server.jar --spring.profiles.active=prod
方式二:微服务模式打包
打包命令:
bash
# 进入项目目录
cd pointlion-cloud
# 微服务模式打包(打包所有模块)
mvn clean package -Dmaven.test.skip=true
产物:
pointlion-cloud/
├── pointlion-gateway/target/pointlion-gateway.jar
├── pointlion-module-system/pointlion-module-system-server/target/pointlion-module-system-server.jar
├── pointlion-module-oa/pointlion-module-oa-server/target/pointlion-module-oa-server.jar
├── pointlion-module-hrm/pointlion-module-hrm-server/target/pointlion-module-hrm-server.jar
├── pointlion-module-crm/pointlion-module-crm-server/target/pointlion-module-crm-server.jar
├── ... 其他模块jar包
部署命令:
bash
# 1. 启动Nacos(需要先安装Nacos)
cd nacos/bin
./startup.sh -m standalone
# 2. 启动各个微服务
java -jar pointlion-gateway.jar
java -jar pointlion-module-system-server.jar
java -jar pointlion-module-oa-server.jar
java -jar pointlion-module-hrm-server.jar
java -jar pointlion-module-crm-server.jar
# ... 其他模块
方式三:单独模块打包(开发调试用)
打包命令:
bash
# 只打包某个特定模块
mvn clean package -pl pointlion-module-oa/pointlion-module-oa-server \
-am -Dmaven.test.skip=true
🎯 不同场景的选择建议
中小型企业(50-500人)
推荐部署模式:单体模式
理由:
✅ 部署简单:只需1个jar包
✅ 运维友好:只需监控1个进程
✅ 资源节省:内存占用约512MB-1GB
✅ 启动快速:约30-60秒启动完成
✅ 故障排查:日志集中,问题定位快
硬件要求:
CPU:4核
内存:8GB
磁盘:100GB SSD
网络:百兆网卡
集团型企业(1000+人)
推荐部署模式:微服务模式
理由:
✅ 高可用:可按模块集群部署
✅ 弹性扩容:高峰期只扩容核心模块
✅ 故障隔离:单个模块故障不影响全局
✅ 团队协作:多团队并行开发
✅ 技术灵活:不同模块可使用不同技术栈
硬件要求:
CPU:16核+(集群部署)
内存:32GB+(集群部署)
磁盘:1TB SSD(集群部署)
网络:千兆网卡
SaaS服务商
推荐部署模式:微服务模式
理由:
✅ 多租户隔离:租户数据物理隔离
✅ 独立扩容:按租户需求扩容
✅ 灰度发布:新功能先在小租户测试
✅ 成本优化:低峰期自动缩减资源
💡 技术亮点总结
1. 代码复用率100%
单体模式和微服务模式使用完全相同的业务代码
↓
降低维护成本
↓
加快迭代速度
2. 零业务代码改动
切换部署模式无需修改任何业务代码
↓
通过Maven配置和Spring配置自动适配
↓
降低切换风险
3. 灵活的模块组合
可以根据客户需求灵活组合模块
↓
中小企业:System + OA + HRM
↓
大型企业:全模块部署
4. 平滑演进路径
初期:单体模式快速上线
↓
增长期:核心模块微服务化
↓
成熟期:全面微服务架构
📈 应用实践
点狮OA的成功实践
点狮OA作为点狮全业务管理平台的核心模块,通过双模式部署架构实现了:
✅ 50人小企业:1台服务器,单体模式,5分钟完成部署
✅ 500人中型企业:2台服务器,微服务模式,30分钟完成部署
✅ 5000人集团企业:10台服务器集群,微服务模式,2小时完成部署
客户反馈
"以前试用过某知名OA系统,需要部署10多个服务,
我们的IT人员根本玩不转。点狮OA的单体模式
非常适合我们这种中小企业,一个jar包就搞定
了!"
------ 某制造业企业(200人)CIO
"点狮全业务管理平台的微服务模式帮我们实现
了真正的弹性扩容。双十一期间,我们只扩容
了订单和支付模块,成本节省了50%!"
------ 某电商企业(1000人)CTO
🎓 最佳实践建议
1. 开发阶段
建议使用单体模式进行开发
↓
理由:启动快,调试方便
↓
生产环境再切换到微服务模式
2. 测试阶段
单体模式:单元测试 + 集成测试
微服务模式:增加服务间通信测试
3. 生产环境
建议使用Docker容器化部署
↓
配合Kubernetes实现自动化运维
4. 监控告警
单体模式:监控进程健康度
微服务模式:监控每个服务健康度 + 服务间调用链
🔮 未来展望
点狮全业务管理平台的双模式部署架构为未来扩展奠定了基础:
✅ 云原生支持:正在开发Kubernetes部署方案
✅ Service Mesh:集成Istio实现更精细的服务治理
✅ Serverless:探索无服务器部署模式
✅ 边缘计算:支持边缘节点部署
📞 联系我们
相关链接:
- 🌐 官网:http://www.dianshixinxi.com/
- 📱 演示站:http://admin.dianshixinxi.com:90/
- 🎨 Gitee:https://gitee.com/glorylion/JFinalOA
- 💻 GitCode:https://gitcode.com/Glory_Lion/pointlion-cloud
