前言

RuoYi-Cloud是基于Spring Cloud的微服务权限管理系统,采用前后端分离架构。本文介绍如何使用Nacos进行微服务管理,以及单机调试与微服务模式部署的方法。

技术栈

技术 说明
Spring Cloud 微服务框架
Spring Cloud Alibaba 阿里巴巴微服务组件
Nacos 服务注册与配置中心
Gateway 网关服务
Sentinel 流量控制
Seata 分布式事务
MySQL 数据库
Redis 缓存

项目结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
ruoyi-cloud/
├── ruoyi-api/ # API模块
│ ├── ruoyi-api-system/ # 系统API
│ └── ruoyi-api-file/ # 文件API
├── ruoyi-auth/ # 认证中心
├── ruoyi-common/ # 通用模块
│ ├── ruoyi-common-core/ # 核心模块
│ ├── ruoyi-common-redis/ # Redis模块
│ ├── ruoyi-common-security/ # 安全模块
│ └── ruoyi-common-swagger/ # Swagger模块
├── ruoyi-gateway/ # 网关服务
├── ruoyi-modules/ # 业务模块
│ ├── ruoyi-system/ # 系统模块
│ ├── ruoyi-gen/ # 代码生成
│ ├── ruoyi-job/ # 定时任务
│ └── ruoyi-file/ # 文件服务
├── ruoyi-visual/ # 可视化模块
│ └── ruoyi-monitor/ # 监控中心
└── ruoyi-ui/ # 前端项目

自定义模块结构

按照你提供的结构,创建自定义业务模块:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
${artifactId}/
├─ pom.xml # 根pom(带profiles)
├─ ${artifactId}-api/ # API聚合模块
│ ├─ ${artifactId}-local-api/ # 单机启动模块
│ │ ├─ pom.xml
│ │ └─ src/main/java/...
│ ├─ ${artifactId}-cloud-api/ # 微服务启动模块
│ │ ├─ pom.xml
│ │ └─ src/main/java/...
│ └─ pom.xml
├─ ${artifactId}-biz/ # 业务逻辑模块
│ ├─ pom.xml
│ └─ src/main/java/...
└─ ${artifactId}-start/ # 启动模块
├─ pom.xml
└─ src/main/java/...

Nacos配置

1. 安装Nacos

1
2
3
4
5
6
7
8
9
10
# 下载Nacos
wget https://github.com/alibaba/nacos/releases/download/2.2.0/nacos-server-2.2.0.tar.gz
tar -xvf nacos-server-2.2.0.tar.gz
cd nacos/bin

# 单机模式启动
./startup.sh -m standalone

# Windows
startup.cmd -m standalone

访问 http://localhost:8848/nacos,默认账号密码:nacos/nacos

2. 服务注册配置

1
2
3
4
5
6
7
8
9
10
11
12
13
# application.yml
spring:
application:
name: ruoyi-system
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
namespace: dev
config:
server-addr: 127.0.0.1:8848
namespace: dev
file-extension: yml

3. 配置中心使用

在Nacos控制台创建配置:

  • Data ID: ruoyi-system-dev.yml
  • Group: DEFAULT_GROUP
1
2
3
4
5
6
7
8
9
10
# Nacos配置内容
server:
port: 9201

spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/ry-cloud?useUnicode=true
username: root
password: password

单机调试模式

Profile配置

根pom.xml配置profiles:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<profiles>
<!-- 单机模式 -->
<profile>
<id>local</id>
<properties>
<profile.active>local</profile.active>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<!-- 微服务模式 -->
<profile>
<id>cloud</id>
<properties>
<profile.active>cloud</profile.active>
</properties>
</profile>
</profiles>

单机启动配置

application-local.yml:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
spring:
profiles:
active: local
cloud:
nacos:
discovery:
enabled: false # 禁用服务注册
config:
enabled: false # 禁用配置中心

# 直接配置数据源
spring:
datasource:
url: jdbc:mysql://localhost:3306/ry-cloud
username: root
password: password

单机启动命令

1
2
3
4
# 使用local profile启动
mvn spring-boot:run -Plocal

# 或者IDEA中设置Active Profiles为local

微服务模式部署

1. 启动顺序

1
2
3
4
5
6
1. Nacos (服务注册与配置中心)
2. MySQL + Redis
3. ruoyi-gateway (网关)
4. ruoyi-auth (认证中心)
5. ruoyi-system (系统服务)
6. 其他业务服务

2. Docker Compose部署

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
version: '3'
services:
nacos:
image: nacos/nacos-server:v2.2.0
environment:
- MODE=standalone
ports:
- "8848:8848"

mysql:
image: mysql:8.0
environment:
- MYSQL_ROOT_PASSWORD=root
ports:
- "3306:3306"

redis:
image: redis:6.0
ports:
- "6379:6379"

ruoyi-gateway:
build: ./ruoyi-gateway
ports:
- "8080:8080"
depends_on:
- nacos

ruoyi-auth:
build: ./ruoyi-auth
depends_on:
- nacos
- redis

ruoyi-system:
build: ./ruoyi-modules/ruoyi-system
depends_on:
- nacos
- mysql

3. 微服务启动命令

1
2
3
4
5
6
7
8
# 使用cloud profile启动
mvn spring-boot:run -Pcloud

# 打包
mvn clean package -Pcloud

# 运行jar
java -jar ruoyi-gateway.jar --spring.profiles.active=cloud

服务调用

Feign客户端定义

1
2
3
4
5
6
7
8
9
// ruoyi-api-system模块
@FeignClient(contextId = "remoteUserService",
value = "ruoyi-system",
fallbackFactory = RemoteUserFallbackFactory.class)
public interface RemoteUserService {

@GetMapping("/user/info/{username}")
R<LoginUser> getUserInfo(@PathVariable("username") String username);
}

服务调用

1
2
3
4
5
6
7
8
9
10
11
@Service
public class SysLoginService {

@Autowired
private RemoteUserService remoteUserService;

public LoginUser login(String username) {
R<LoginUser> result = remoteUserService.getUserInfo(username);
return result.getData();
}
}

常见问题

1. Nacos连接失败

检查Nacos是否启动,namespace是否正确配置

2. 服务注册不上

检查spring.application.name是否配置,网络是否通畅

3. 配置不生效

确认Data ID格式:${spring.application.name}-${profile}.${file-extension}

总结

RuoYi-Cloud通过Nacos实现了服务注册与配置管理,支持单机和微服务两种部署模式。开发时使用单机模式方便调试,生产环境使用微服务模式实现高可用。

参考资料

评论和共享

OKR绩效管理介绍与实践

发布在 管理

什么是OKR

OKR(Objectives and Key Results)即目标与关键结果法,是一套明确和跟踪目标及其完成情况的管理工具和方法。由Intel发明,后被Google、Facebook等公司广泛采用。

OKR的组成

  • O (Objective):目标,你想要达成什么
  • KR (Key Results):关键结果,如何衡量目标的达成

OKR vs KPI

维度 OKR KPI
目的 激励和方向引导 绩效考核
制定方式 自下而上+自上而下 自上而下
公开程度 全员公开透明 通常仅上下级可见
完成率 60-70%为佳 要求100%完成
调整频率 季度调整 年度调整
与薪酬关系 不直接挂钩 直接挂钩

OKR制定原则

1. Objective 目标原则

  • 鼓舞人心:目标应该能激励团队
  • 可达成但有挑战:不是轻易能完成的
  • 定性描述:用文字描述,不是数字
  • 时间限定:通常为一个季度

2. Key Results 关键结果原则

  • 可量化:必须是可衡量的数字
  • 有挑战性:完成60-70%算成功
  • 3-5个为宜:每个O对应3-5个KR
  • 结果导向:关注结果而非过程

OKR实践案例

案例一:技术团队OKR

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
【Q3 技术团队OKR】

O1: 提升系统稳定性,打造高可用服务
├── KR1: 系统可用性从99.5%提升到99.9%
├── KR2: P0故障数量从每月3次降低到0次
├── KR3: 平均故障恢复时间从30分钟降低到10分钟
└── KR4: 完成核心服务的容灾演练,覆盖率100%

O2: 提升研发效率,加速产品迭代
├── KR1: 需求平均交付周期从14天缩短到7天
├── KR2: 代码review覆盖率从60%提升到100%
├── KR3: 自动化测试覆盖率从40%提升到80%
└── KR4: 部署频率从每周1次提升到每天1次

O3: 建设技术影响力,打造学习型团队
├── KR1: 团队成员人均输出技术文章2篇
├── KR2: 组织内部技术分享会8次
└── KR3: 完成新人培训体系搭建,新人上手时间缩短50%

案例二:产品经理OKR

1
2
3
4
5
6
7
8
9
10
11
12
【Q3 产品经理OKR】

O1: 提升用户体验,打造极致产品
├── KR1: 用户满意度NPS从30提升到50
├── KR2: 核心功能用户留存率从40%提升到60%
├── KR3: 用户反馈处理率达到100%,平均响应时间<24小时
└── KR4: 完成3次用户调研,产出调研报告

O2: 驱动业务增长,实现商业价值
├── KR1: 付费转化率从2%提升到5%
├── KR2: 用户ARPU值从50元提升到80元
└── KR3: 新功能上线后DAU增长20%

案例三:个人OKR

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
【Q3 个人OKR - 后端开发工程师】

O1: 成为团队核心骨干,独当一面
├── KR1: 独立负责完成2个核心模块的设计与开发
├── KR2: 代码质量评分从B提升到A(bug率<1%)
└── KR3: 主导完成1次技术方案评审

O2: 提升技术深度,建立技术壁垒
├── KR1: 深入学习分布式系统,完成《DDIA》读书笔记
├── KR2: 输出2篇高质量技术博客
└── KR3: 获得1项云计算相关认证

O3: 提升软技能,增强团队协作
├── KR1: 主动帮助2名新同事完成onboarding
├── KR2: 参与跨团队项目协作,获得合作方好评
└── KR3: 完成1次团队内部技术分享

OKR实施流程

1. 制定阶段(季度初)

1
2
3
4
5
6
7
8
9
1周:
├── 公司层面确定年度/季度战略目标
├── 各部门负责人制定部门OKR
└── 团队成员制定个人OKR

2周:
├── OKR对齐会议,确保上下一致
├── 横向对齐,确保跨部门协作
└── 最终确认并公示所有OKR

2. 执行阶段(季度中)

1
2
3
4
5
6
7
8
9
每周:
├── 周会回顾OKR进展
├── 更新KR完成进度
└── 识别风险和阻碍

每月:
├── 月度OKR复盘会议
├── 调整策略和行动计划
└── 必要时调整KR(O一般不变)

3. 复盘阶段(季度末)

1
2
3
4
5
季度末:
├── 自评OKR完成情况(打分0-1
├── 团队OKR复盘会议
├── 总结经验教训
└── 为下季度OKR制定做准备

OKR评分标准

分数 含义 说明
1.0 完美达成 可能目标设定过于保守
0.7-0.9 优秀 理想的完成状态
0.4-0.6 一般 有进步但未达预期
0.0-0.3 失败 需要反思原因

注意:OKR评分不应直接与绩效考核挂钩,否则会导致目标设定保守。

常见问题与解决方案

问题1:OKR变成了任务清单

解决:KR应该是结果而非任务,问自己”完成这个能证明目标达成吗?”

问题2:目标设定过于保守

解决:鼓励挑战性目标,强调60-70%完成率是正常的

问题3:OKR与日常工作脱节

解决:每周回顾OKR,将日常工作与OKR关联

问题4:跨部门OKR不对齐

解决:建立OKR对齐机制,定期进行横向沟通

推荐工具

  • 飞书OKR:字节跳动出品,功能完善
  • Worktile:国产项目管理工具,支持OKR
  • Notion:灵活的文档工具,可自定义OKR模板
  • Weekdone:专业OKR管理工具

总结

OKR的核心价值:

  1. 聚焦:让团队专注于最重要的事
  2. 对齐:确保上下左右目标一致
  3. 透明:全员可见,促进协作
  4. 挑战:鼓励设定有野心的目标

成功实施OKR的关键:

  • 领导层的支持和参与
  • 持续的沟通和反馈
  • 与绩效考核适度分离
  • 建立学习和迭代的文化

参考资料

  • 《这就是OKR》- 约翰·杜尔
  • 《OKR工作法》- 克里斯蒂娜·沃特克
  • Google re:Work OKR指南

评论和共享

  • 第 1 页 共 1 页

Lional

author.bio


author.job