企业级应用双模式部署架构设计:从单体到微服务的平滑演进
企业级应用双模式部署架构设计从单体到微服务的平滑演进基于点狮全业务管理平台点狮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项目结构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.xml2. 单体部署实现原理pointlion-server的依赖设计!-- pointlion-server/pom.xml --dependencies!-- 系统管理模块 --dependencygroupIdcom.pointlion.cloud/groupIdartifactIdpointlion-module-system-server/artifactIdversion${revision}/version/dependency!-- OA办公模块 --dependencygroupIdcom.pointlion.cloud/groupIdartifactIdpointlion-module-oa-server/artifactIdversion${revision}/version/dependency!-- HRM人力资源模块 --dependencygroupIdcom.pointlion.cloud/groupIdartifactIdpointlion-module-hrm-server/artifactIdversion${revision}/version/dependency!-- CRM客户关系管理模块 --dependencygroupIdcom.pointlion.cloud/groupIdartifactIdpointlion-module-crm-server/artifactIdversion${revision}/version/dependency!-- 其他业务模块... --/dependencies工作原理pointlion-server引入所有业务模块的-server依赖Spring Boot启动时自动扫描所有模块的RestController、Service等组件所有模块在同一个Spring容器中运行模块间通过Java方法调用依赖注入进行交互3. 微服务部署实现原理每个模块独立打包每个-server模块都可以独立打包成可执行jar!-- pointlion-module-oa-server/pom.xml --buildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactIdexecutionsexecutiongoalsgoalrepackage/goal/goals/execution/executions/plugin/plugins/build服务注册与发现# application.ymlspring:cloud:nacos:discovery:server-addr:127.0.0.1:8848config:server-addr:127.0.0.1:8848模块间通信// 通过Dubbo/Feign进行远程调用FeignClient(contextIdremoteUserService,valueModuleConstants.SYSTEM_MODULE)publicinterfaceRemoteUserService{GetMapping(/system/user/{id})RUserDTOgetUser(PathVariable(id)Longid);}4. Maven Profile智能打包核心配置!-- pointlion-cloud/pom.xml --properties!-- 打包跳过配置默认为 false不跳过所有模块都打包 --maven.jar.skipfalse/maven.jar.skip/propertiesprofiles!-- 单体运行打包模式跳过所有子模块的打包只打包 pointlion-server --profileidstandalone-package/idactivationactiveByDefaultfalse/activeByDefault/activationpropertiesmaven.jar.skiptrue/maven.jar.skip/properties/profile/profiles工作原理默认模式微服务maven.jar.skipfalse所有模块都打包单体模式maven.jar.skiptrue跳过子模块打包只打包pointlion-server 打包方式与命令方式一单体模式打包打包命令# 进入项目目录cdpointlion-cloud# 单体模式打包重要使用 -Pstandalone-package 参数mvn clean package-am-plpointlion-server\-Dmaven.test.skiptrue\-Pstandalone-package参数说明clean # 清理之前的构建结果 package # 打包成jar文件 -am # 同时构建所列模块的依赖模块 -pl pointlion-server # 只构建pointlion-server模块 -Dmaven.test.skiptrue # 跳过测试加快打包速度 -Pstandalone-package # 激活单体打包Profile产物pointlion-cloud/ ├── pointlion-server/ │ └── target/ │ ├── pointlion-server.jar # 可执行jar包含所有依赖 │ └── lib/ # 依赖库 │ ├── spring-boot-starter-web.jar │ ├── mybatis-plus-spring-boot-starter.jar │ └── ...部署命令# 启动单体应用java-jarpointlion-server.jar# 或者指定配置文件java-jarpointlion-server.jar--spring.profiles.activeprod方式二微服务模式打包打包命令# 进入项目目录cdpointlion-cloud# 微服务模式打包打包所有模块mvn clean package-Dmaven.test.skiptrue产物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包部署命令# 1. 启动Nacos需要先安装Nacoscdnacos/bin ./startup.sh-mstandalone# 2. 启动各个微服务java-jarpointlion-gateway.jarjava-jarpointlion-module-system-server.jarjava-jarpointlion-module-oa-server.jarjava-jarpointlion-module-hrm-server.jarjava-jarpointlion-module-crm-server.jar# ... 其他模块方式三单独模块打包开发调试用打包命令# 只打包某个特定模块mvn clean package-plpointlion-module-oa/pointlion-module-oa-server\-am-Dmaven.test.skiptrue 不同场景的选择建议中小型企业50-500人推荐部署模式单体模式理由✅ 部署简单只需1个jar包 ✅ 运维友好只需监控1个进程 ✅ 资源节省内存占用约512MB-1GB ✅ 启动快速约30-60秒启动完成 ✅ 故障排查日志集中问题定位快硬件要求CPU4核 内存8GB 磁盘100GB SSD 网络百兆网卡集团型企业1000人推荐部署模式微服务模式理由✅ 高可用可按模块集群部署 ✅ 弹性扩容高峰期只扩容核心模块 ✅ 故障隔离单个模块故障不影响全局 ✅ 团队协作多团队并行开发 ✅ 技术灵活不同模块可使用不同技术栈硬件要求CPU16核集群部署 内存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/ Giteehttps://gitee.com/glorylion/JFinalOA GitCodehttps://gitcode.com/Glory_Lion/pointlion-cloud