目标:定义系统底层技术栈的选型、部署架构及核心组件配置标准,保障系统稳定性和扩展性。
层级 | 技术组件 | 版本要求 | 说明 |
---|---|---|---|
基础环境 | JDK | 1.8 | 统一 JDK 版本,避免因版本差异导致的兼容性问题 |
Spring Boot | 2.7.x | 遵循 LTS 版本,兼容 Spring Cloud Alibaba 2021.0.x 及以上 | |
Spring Cloud Alibaba | 2021.0.x | 与 Spring Boot 2.7.x 兼容,提供注册中心、配置中心等核心能力 | |
注册与配置 | Nacos | 2.2.x | 作为注册中心(服务发现)和配置中心(动态配置),需集群部署保证高可用 |
流量控制 | Sentinel | 1.8.x | 集成至 Spring Cloud Alibaba,提供流量熔断、降级、系统保护能力 |
链路追踪 | Sleuth + Zipkin | Sleuth 3.1.x + Zipkin 2.24.x | 基于 OpenTelemetry 标准,实现全链路调用链监控 |
内部通信 | Feign | Spring Cloud OpenFeign 3.1.x | 声明式 HTTP 客户端,简化服务间调用 |
数据存储 | Druid | 1.2.x | 数据库连接池,提供监控、慢 SQL 分析能力 |
ORM | MyBatis-Plus | 3.5.x | 基于 MyBatis 扩展,简化 CRUD 操作,禁止直接编写 XML(除非复杂查询) |
日志 | Logback | 1.2.x | 统一日志框架,输出结构化日志(JSON 格式) |
应用监控 | Micrometer + Prometheus + Actuator | Micrometer 1.9.x | 采集应用指标(如 QPS、RT、错误率),通过 Prometheus 存储,Grafana 展示 |
消息中间件 | RocketMQ/RabbitMQ | RocketMQ 5.0.x/RabbitMQ 3.9.x | 异步解耦,支持事务消息(RocketMQ 优先) |
数据库 | MySQL 8.x / 高斯数据库 | MySQL 8.0+ | 关系型数据库,主从复制保证高可用;高斯数据库用于大数据量分析场景 |
缓存 | Redis | 7.0.x | 分布式缓存,支持分布式锁、限流,集群模式部署(主从+哨兵) |
搜索引擎 | Elasticsearch | 8.6.x | 全文检索,支持日志分析、商品搜索等场景 |
目标:定义容器化部署、服务编排及网络通信标准,保障环境一致性和高可用。
仓库地址/服务名:版本号
(如 registry.example.com/order-service:v1.0.0
)。requests.cpu=500m, requests.memory=1Gi
;limits.cpu=1, limits.memory=2Gi
)。docker exec
执行 curl -f http://localhost:8080/actuator/health
验证服务存活。dev/test/prod
),服务名需包含环境标识(如 order-service-dev
)。requests.cpu=4, limits.cpu=8
),避免资源竞争。目标:规范代码编写、接口设计、依赖管理等开发行为,提升代码质量和可维护性。
严格遵循 MVC + 领域驱动设计(DDD) 分层,不建议跨层调用,层级职责明确:
层级 | 职责 | 技术约束 |
---|---|---|
controller | 接收外部请求,参数校验,调用 Service 层,返回响应 | 使用 @RestController ,参数通过 @Valid 校验(JSR-303) |
service | 业务逻辑处理,事务管理(@Transactional ),调用 Manager 或外部服务 |
禁止直接操作数据库,复杂逻辑封装至 Manager 层;事务范围最小化(避免长事务) |
manager | 核心业务逻辑封装,协调多个 DAO 或外部服务调用 | 纯 Java 逻辑,无 HTTP/DB 操作;可调用 Feign 客户端或 RocketMQ 生产者 |
dao | 数据库操作(MyBatis-Plus) | 使用 BaseMapper 扩展方法,禁止编写原生 SQL(复杂查询用 XML 或 QueryDSL) |
model | 数据实体(DO/DTO/VO) | DO 对应数据库表(@Data + @TableName );DTO 用于接口入参/出参;VO 用于前端展示 |
CommonRequest
和 CommonResponse
包装(示例见下文)。// 通用请求体(含链路追踪 ID)
public class CommonRequest {
private String traceId; // 由 Gateway 注入
private T data; // 业务数据
}
// 通用响应体(标准化错误码)
public class CommonResponse {
private int code; // 0=成功,非0=错误码(参考 ErrorCodeEnum)
private String message; // 错误信息
private T data; // 业务数据
}
GET /api/{service}/{resource}
(查询)、POST /api/{service}/{resource}
(新增)、PUT /api/{service}/{resource}/{id}
(修改)、DELETE /api/{service}/{resource}/{id}
(删除)。GET /api/order-service/orders/{orderId}
(查询订单详情)。@FeignClient
定义客户端,接口方法与远程服务接口一一对应。 @FeignClient(
name = "inventory-service",
contextId = "inventoryClient",
configuration = FeignConfig.class // 自定义配置(如超时、编解码器)
)
public interface InventoryFeignClient {
@PostMapping("/inventory/deduct")
CommonResponse deductInventory(@RequestBody DeductDTO deductDTO);
}
feign.client.config.default.connectTimeout=5000ms
(连接超时)、readTimeout=10000ms
(读取超时)。Spring Retry
(@Retryable(maxAttempts=3)
),避免无限重试。@FeignClient(fallback = InventoryFallback.class)
定义降级逻辑,返回预设的 CommonResponse
。baseMapper.insert()
(自动生成主键,需 @TableId(type = IdType.AUTO)
)。QueryWrapper
构造条件(禁止 SELECT *
,明确指定字段)。// 正确示例:查询有效订单(status=1)
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.eq("status", 1).orderByDesc("create_time");
List orders = orderMapper.selectList(queryWrapper);
Page
对象(IPage page = orderService.page(new Page<>(current, size), queryWrapper)
)。@Lazy
延迟加载或重构代码解决(如拆分公共模块)。spring-cloud-dependencies
管理(pom.xml
中不写死版本号)。 目标:定义核心功能(认证、熔断、追踪、日志等)的设计标准和实现方案,保障系统可靠性和可观测性。
auth-service/login
,验证账号密码后生成 JWT(包含 user_id
、role
、exp
)。Authorization: Bearer
。AuthFilter
拦截请求,调用 auth-service/verify
校验 JWT 有效性(缓存校验结果,降低 RPC 调用)。role
字段,结合 @PreAuthorize("hasRole('ADMIN')")
实现接口级权限控制。@SentinelResource
注解)。sentinel-flow-rules.json
),动态推送至服务。exceptionRatio=0.5
)时,触发熔断(降级返回)。exceptionCount=20
)时,触发熔断。// Feign 接口熔断示例
@FeignClient(
name = "payment-service",
fallback = PaymentFallback.class
)
public interface PaymentFeignClient {
@SentinelResource(
value = "pay",
fallback = "payFallback",
blockHandler = "payBlockHandler"
)
CommonResponse pay(@RequestBody PayDTO payDTO);
}
// 降级方法(返回预设值)
public CommonResponse payFallback(PayDTO payDTO, Throwable ex) {
return CommonResponse.error("PAY_001", "支付服务繁忙,请稍后再试");
}
traceId
和 spanId
。Tracer
手动添加标签。// 手动埋点示例
@Autowired
private Tracer tracer;
public void createOrder() {
Span currentSpan = tracer.currentSpan();
if (currentSpan != null) {
currentSpan.tag("orderId", "ORD_001"); // 添加业务标签
currentSpan.tag("userId", "123");
}
}
traceId
注入日志,确保跨服务日志可追踪。 // Gateway 拦截器注入 traceId
public class TraceFilter implements GlobalFilter {
@Override
public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) {
String traceId = exchange.getRequest().getHeaders().getFirst("X-Trace-Id");
if (traceId == null) {
traceId = UUID.randomUUID().toString();
}
MDC.put("traceId", traceId); // 注入 MDC
return chain.filter(exchange);
}
}
traceId
、service
、level
、message
等必填字段。 {
"traceId": "6b3b3a3c3d3e3f404142434445464748",
"service": "order-service",
"level": "INFO",
"logger": "com.example.order.controller.OrderController",
"message": "订单创建成功,orderId=ORD_001",
"timestamp": 1690000000000,
"userId": "123",
"orderId": "ORD_001"
}
traceId
、service
),最终存储至 Elasticsearch。traceId
跨服务查询完整链路日志。目标:定义监控、告警、部署、故障排查等运维行为,保障系统稳定运行。
http_server_requests_seconds_count
(请求量)、http_server_requests_seconds_max
(最大耗时)、jvm_memory_used_bytes
(JVM 内存)。order_success_rate
)、缓存命中率(如 redis_hit_rate
)。up == 0
)。mysql_global_status_uptime < 60
)。storeMessageCount
)。sum(rate(http_server_requests_seconds_count{status=~"5.."}[5m])) / sum(rate(http_server_requests_seconds_count[5m])) > 0.05
)。sum(rate(redis_keyspace_hits_total[5m])) / (sum(rate(redis_keyspace_hits_total[5m])) + sum(rate(redis_keyspace_misses_total[5m]))) < 0.8
)。dev
分支,触发单元测试(覆盖率 ≥ 80%)。release
分支,触发集成测试(验证服务间调用)。v1.0.0
),触发生产环境部署(K8s kubectl apply -f deployment.yaml
)。subset
实现流量逐步切量(如 10%→30%→100%)。http://sentinel-dashboard:8080
)、Pod 状态(kubectl get pods
)。目标:定义开发、测试、运维过程中使用的工具平台及其操作标准,提升效率。
mvn clean package -DskipTests
打包。mvn dependency:analyze
检查冗余依赖,移除未使用的库。OrderService.create()
),覆盖率报告提交至 SonarQube。Dockerfile
(多阶段构建减少体积),推送至私有仓库(Harbor)。kubectl
或 Helm 管理部署,禁止直接修改 Pod 配置(通过 YAML 声明式更新)。bootstrap.yml
)spring:
application:
name: order-service
cloud:
nacos:
discovery:
server-addr: nacos-server:8848 # 集群地址(nacos1:8848,nacos2:8848,nacos3:8848)
cluster-name: DEFAULT_CLUSTER
config:
server-addr: nacos-server:8848
file-extension: yaml
shared-configs:
- data-id: common.yml # 公共配置
group: DEFAULT_GROUP
refresh: true # 动态刷新
// sentinel-flow-rules.json(Nacos 配置)
[
{
"resource": "com.example.order.controller.OrderController.create",
"limitApp": "default",
"grade": 1, // QPS 阈值
"count": 100,
"strategy": 0, // 直接拒绝
"controlBehavior": 0
}
]
agent.config
)# skywalking-agent.conf
agent.service_name=order-service # 服务名(与 Nacos 一致)
collector.backend_service=oap-server:11800 # OAP 地址
本规范覆盖了微服务开发的全生命周期(架构设计→编码实现→测试部署→运维监控),结合 Spring Cloud Alibaba 技术栈的特性,明确了各层级的技术约束和最佳实践。实际落地时需根据业务场景调整细节(如调整 Sentinel 规则阈值、扩展日志字段),并通过持续监控和迭代优化保障系统稳定性。