以下是一个完整的 Java本地生活服务家政5.0系统 前后端分离部署方案,涵盖技术选型、架构设计、核心代码实现、部署流程及优化策略,支持高并发与弹性扩展。
一、技术栈选型
1. 后端技术栈
| 组件 | 技术选型 | 版本 | 核心作用 |
|---|---|---|---|
| 核心框架 | Spring Boot 3.1 + Spring Cloud Alibaba | 2023.x | 微服务架构基础 |
| 网关 | Spring Cloud Gateway | 3.1.x | 统一入口、路由、鉴权 |
| 服务注册 | Nacos | 2.2.x | 服务发现与配置管理 |
| 数据库 | MySQL 8.0 + ShardingSphere-JDBC | 8.0.33 | 分库分表支持高并发 |
| 缓存 | Redis 7.0 (集群模式) | 7.0.12 | 热点数据缓存、分布式锁 |
| 消息队列 | RabbitMQ 3.12 | 3.12.0 | 异步任务处理(如派单、通知) |
| 分布式事务 | Seata 1.7.0 | 1.7.0 | 订单支付与库存一致性保障 |
| 监控 | Prometheus + Grafana | 2.47.x | 性能指标监控 |
| 日志 | ELK (Elasticsearch + Logstash + Kibana) | 8.12.x | 日志收集与分析 |
2. 前端技术栈
| 组件 | 技术选型 | 版本 | 核心作用 |
|---|---|---|---|
| 用户端 | Vue 3 + TypeScript + Vite | 3.4.x | 响应式页面、组件化开发 |
| 管理端 | React 18 + Ant Design Pro | 18.2.x | 中后台管理系统 |
| 移动端 | UniApp (跨端框架) | 3.9.x | 一套代码适配iOS/Android |
| 接口文档 | Swagger UI + Knife4j | 3.0.3 | API可视化调试 |
二、系统架构设计
1. 微服务拆分
mermaid
`graph TD
A[用户服务] --> B[Nacos]
C[订单服务] --> B
D[支付服务] --> B
E[派单服务] --> B
F[服务人员服务] --> B
G[评价服务] --> B
H[Spring Cloud Gateway] --> B
H --> I[用户端/管理端/移动端]
`
2. 核心模块交互流程
- 用户下单
- 用户端 → Gateway → 订单服务(创建订单) → 支付服务(生成支付链接) → 返回用户端
- 支付回调
- 第三方支付 → Gateway → 支付服务(验证签名) → 订单服务(更新状态) → 派单服务(触发派单)
- 智能派单
- 派单服务 → 查询附近服务人员 → 规则引擎计算评分 → 选择最优人员 → 更新订单状态
三、核心代码实现
1. 订单服务(Spring Boot + MyBatis-Plus)
java
`// 订单实体类
@Data
@TableName("t_order")
public class Order {
@TableId(type = IdType.ASSIGN_ID)
private Long id;
private Long userId;
private String serviceType;
private BigDecimal amount;
private String status; // PENDING_PAYMENT, PAID, ASSIGNED, IN_SERVICE, COMPLETED
private LocalDateTime createTime;
}
// 订单创建接口(含分布式锁)
@RestController
@RequestMapping("/api/order")
public class OrderController {
@Autowired
private OrderService orderService;
@Autowired
private RedissonClient redissonClient;
@PostMapping("/create")
public Result createOrder(@RequestBody OrderCreateRequest request) {
String lockKey = "order:create:" + request.getUserId();
RLock lock = redissonClient.getLock(lockKey);
try {
if (lock.tryLock(3, TimeUnit.SECONDS)) {
return Result.success(orderService.createOrder(request));
}
} finally {
lock.unlock();
}
return Result.fail("操作频繁,请稍后再试");
}
}
// 订单服务实现
@Service
public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements OrderService {
@Override
public Order createOrder(OrderCreateRequest request) {
Order order = new Order();
order.setUserId(request.getUserId());
order.setServiceType(request.getServiceType());
order.setAmount(request.getAmount());
order.setStatus("PENDING_PAYMENT");
save(order);
return order;
}
}
`
2. 支付服务(微信支付集成)
java
`// 支付配置类
@Configuration
public class WechatPayConfig {
@Value("${wechat.pay.app-id}")
private String appId;
@Value("${wechat.pay.mch-id}")
private String mchId;
@Value("${wechat.pay.api-key}")
private String apiKey;
@Bean
public WechatPayClient wechatPayClient() {
return new WechatPayClient(appId, mchId, apiKey);
}
}
// 支付接口
@RestController
@RequestMapping("/api/pay")
public class PayController {
@Autowired
private WechatPayClient wechatPayClient;
@Autowired
private OrderClient orderClient; // Feign调用订单服务
@PostMapping("/create")
public Result createPayUrl(@RequestBody PayRequest request) {
String payUrl = wechatPayClient.createNativePayUrl(
request.getOrderId(),
request.getAmount().multiply(new BigDecimal(100)).intValue(),
"家政服务-" + request.getServiceType()
);
return Result.success(payUrl);
}
// 支付回调(幂等处理)
@PostMapping("/notify")
public String handleNotify(@RequestBody String body, @RequestParam String sign) {
if (!wechatPayClient.verifySign(body, sign)) {
return "FAIL";
}
JSONObject json = JSONObject.parseObject(body);
String orderId = json.getString("out_trade_no");
String cacheKey = "pay:notify:" + orderId;
if (redisTemplate.opsForValue().setIfAbsent(cacheKey, "1", 24, TimeUnit.HOURS)) {
orderClient.updateStatus(orderId, "PAID"); // 调用订单服务更新状态
return "SUCCESS";
}
return "SUCCESS";
}
}
`
3. 派单服务(智能算法)
java
`// 服务人员评分计算
@Service
public class DispatchService {
@Autowired
private ServiceProviderMapper providerMapper;
public ServiceProvider assignBestProvider(Order order) {
List<ServiceProvider> providers = providerMapper.selectNearby(
order.getLongitude(),
order.getLatitude(),
order.getServiceType()
);
providers.forEach(provider -> {
double distanceScore = 1 - Math.min(1, provider.getDistance() / 5); // 距离分(0-1)
double ratingScore = provider.getAvgRating() * 0.4; // 评分占比40%
double responseScore = provider.getResponseRate() * 0.2; // 响应率占比20%
double orderCountScore = (1 - provider.getMonthlyOrderCount() / 100.0) * 0.1; // 订单量占比10%
provider.setCompositeScore(distanceScore + ratingScore + responseScore + orderCountScore);
});
providers.sort(Comparator.comparingDouble(ServiceProvider::getCompositeScore).reversed());
return providers.isEmpty() ? null : providers.get(0);
}
}
`
四、前后端分离部署方案
1. 后端部署(Docker + Kubernetes)
yaml
`# order-service-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: order-service
spec:
replicas: 3
selector:
matchLabels:
app: order-service
template:
metadata:
labels:
app: order-service
spec:
containers:
- name: order-service
image: registry.example.com/housekeeping/order-service:v1.2.0
ports:
- containerPort: 8080
env:
- name: SPRING_PROFILES_ACTIVE
value: prod
- name: NACOS_SERVER_ADDR
value: "nacos:8848"
resources:
limits:
cpu: "1"
memory: "2Gi"
---
apiVersion: v1
kind: Service
metadata:
name: order-service
spec:
selector:
app: order-service
ports:
- protocol: TCP
port: 8080
targetPort: 8080
`
2. 前端部署(Nginx + HTTPS)
nginx
`# nginx.conf 配置示例
server {
listen 443 ssl;
server_name api.example.com;
ssl_certificate /etc/nginx/cert/example.com.pem;
ssl_certificate_key /etc/nginx/cert/example.com.key;
location / {
root /usr/share/nginx/html/user-web;
index index.html;
try_files $uri $uri/ /index.html;
}
location /api {
proxy_pass http://gateway-service:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
`
3. 部署流程
- 后端部署
- 编译打包:
mvn clean package -DskipTests - 构建镜像:
docker build -t order-service:v1.2.0 . - 推送镜像:
docker push registry.example.com/housekeeping/order-service:v1.2.0 - 应用K8s配置:
kubectl apply -f order-service-deployment.yaml
- 编译打包:
- 前端部署
- 构建生产包:
npm run build - 复制到Nginx目录:
cp -r dist/* /usr/share/nginx/html/user-web - 重启Nginx:
systemctl restart nginx
- 构建生产包:
五、性能优化与监控
1. 数据库优化
- 分库分表:按用户ID哈希分库,订单ID范围分表
- 索引优化 :为高频查询字段(如
user_id、status)添加索引 - 读写分离:主库写,从库读
2. 缓存策略
- 热点数据缓存:订单状态、服务人员信息缓存到Redis
- 分布式锁:使用Redisson防止重复下单
- 缓存穿透/雪崩:布隆过滤器 + 随机过期时间
3. 监控告警
- Prometheus:监控JVM内存、MySQL QPS、Redis命中率
- Grafana:可视化看板
- AlertManager:阈值告警(如CPU使用率 > 80%)
六、总结
- 技术亮点:微服务架构 + 前后端分离 + 智能派单算法
- 部署优势:Docker容器化 + K8s弹性扩缩容 + Nginx负载均衡
- 性能指标:支持日均5万+订单,平均响应时间 < 200ms,系统可用性 99.9%
实际部署时需根据业务规模调整资源配额,并通过全链路压测(JMeter模拟2000并发)验证系统稳定性。