1. 项目背景与需求分析
作为一名养宠人士兼Java开发者,我深刻理解宠物主人在出差或加班时面临的困扰。去年我出差一周,不得不将金毛犬寄养在宠物店,结果接回来时发现它出现了明显的应激反应,整整三天不吃不喝。这次经历促使我开发了这套同城上门喂遛宠物系统。
传统宠物寄养存在三大痛点:
- 环境陌生导致宠物焦虑(我的金毛就是典型案例)
- 收费高昂(一线城市日均费用可达200元)
- 服务不透明(无法实时了解宠物状况)
我们的系统通过技术手段解决这些问题:
- 地理位置匹配:基于高德API的3km半径精准匹配
- 服务过程可视化:要求服务者上传喂食/遛狗视频
- 动态定价策略:根据服务时长、宠物数量智能计价
2. 技术架构设计
2.1 整体架构方案
采用前后端分离架构,这是经过多次迭代验证的最优方案。早期版本尝试过JSP前后端混合模式,结果导致:
- 前端修改必须重新部署war包
- 移动端适配困难
- 接口文档维护成本高
当前技术栈组合:
code复制前端:Vue3 + Pinia + Vant UI(移动端优化)
后端:SpringBoot 2.7 + MyBatis-Plus 3.5
数据库:MySQL 8.0(AWS RDS托管)
中间件:Redis 6.2(阿里云版)
地图服务:高德地图JS API 2.0
2.2 关键技术选型原因
为什么选择Vue3而非React?
- 更小的包体积(gzip后约20KB)
- Composition API更适合复杂业务逻辑
- 国内生态更完善(高德地图有官方Vue组件)
MyBatis-Plus的实战优势:
- 自动分页插件省去手写分页逻辑
- 代码生成器可快速产出DTO/Entity
- Lambda查询避免SQL注入风险
示例代码:
java复制// 服务者距离排序查询
List<Provider> providers = providerMapper.selectList(
Wrappers.<Provider>query()
.select("*, ST_Distance(point(#{lng},#{lat}), location) as distance")
.orderByAsc("distance")
.last("LIMIT 10")
);
3. 核心功能实现
3.1 智能匹配算法
这是系统的核心竞争力,我们设计了多维度加权算法:
python复制# 伪代码示例
def calculate_match_score(user, provider):
base_score = 100
# 距离权重40%
distance_score = (1 - normalize_distance(km)) * 40
# 评价权重30%
rating_score = provider.avg_rating * 6
# 接单率权重20%
accept_rate = provider.accept_orders / provider.total_orders
# 响应时间权重10%
response_score = (1 - normalize_response_time(hours)) * 10
return base_score + sum(...)
数据库层面使用MySQL空间索引优化:
sql复制ALTER TABLE providers ADD SPATIAL INDEX(location);
SELECT *, ST_Distance(point(?,?), location) as distance
FROM providers
WHERE MBRContains(ST_Buffer(point(?,?), 0.03), location)
ORDER BY distance;
3.2 服务流程状态机
订单状态转换是业务核心,我们采用状态模式实现:
java复制public interface OrderState {
void confirm(Order order);
void startService(Order order);
void complete(Order order);
void cancel(Order order);
}
// 示例状态实现
public class PendingState implements OrderState {
@Override
public void confirm(Order order) {
order.setState(new ConfirmedState());
// 发送微信模板消息
wechatService.sendConfirmMsg(order);
}
// 其他方法抛出IllegalStateException
}
状态转换图:
code复制[待确认] → (确认) → [已预约]
→ (取消) → [已取消]
[已预约] → (开始) → [服务中]
→ (取消) → [已取消]
[服务中] → (完成) → [已完成]
4. 安全与性能优化
4.1 安全防护体系
-
认证方案:
- JWT采用HS512算法
- 刷新令牌机制(refresh_token有效期7天)
- 敏感操作强制二次验证(短信验证码)
-
数据安全:
- 密码使用BCrypt加密(cost=12)
- 敏感字段加密存储(手机号、地址)
- SQL防火墙拦截可疑请求
关键配置示例:
yaml复制# application-security.yml
jwt:
secret: ${RANDOM_UUID}
expiration: 3600 # 1小时
refresh-expiration: 604800 # 7天
encrypt:
key: ${AES_KEY}
iv: ${AES_IV}
4.2 性能优化实践
缓存策略三级设计:
- 热点数据:Redis缓存(如服务者列表)
- 本地缓存:Caffeine(如系统配置)
- 数据库缓存:MySQL查询缓存
实测性能对比:
| 方案 | QPS | 平均响应时间 |
|---|---|---|
| 无缓存 | 120 | 350ms |
| Redis缓存 | 2100 | 45ms |
| 本地+Redis | 5800 | 12ms |
SQL优化案例:
问题查询:
sql复制SELECT * FROM orders
WHERE user_id=? AND status IN (1,2,3)
ORDER BY create_time DESC
优化方案:
- 添加复合索引:(user_id, status, create_time)
- 改写为分页查询
- 使用覆盖索引
5. 部署与监控
5.1 容器化部署
采用Docker Compose编排方案:
dockerfile复制# 前端Dockerfile
FROM nginx:1.23
COPY dist/ /usr/share/nginx/html
COPY nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
yaml复制# docker-compose.yml
services:
frontend:
build: ./pet-fe
ports: ["80:80"]
backend:
build: ./pet-be
environment:
- SPRING_PROFILES_ACTIVE=prod
depends_on:
- redis
- mysql
5.2 监控方案
Prometheus + Grafana监控看板配置:
- JVM监控:Micrometer指标
- 业务指标:自定义计数器
- 告警规则:异常响应码>5%
关键监控指标:
- 接口成功率(99.9% SLA)
- 平均响应时间(<200ms)
- 并发用户数(峰值预警)
- 数据库连接池使用率
6. 踩坑经验分享
6.1 地理位置服务陷阱
初期直接使用MySQL计算距离,导致CPU飙升至90%:
sql复制-- 错误示范
SELECT * FROM providers
WHERE (6371 * acos(cos(...))) < 3
解决方案:
- 改用空间函数ST_Distance
- 添加空间索引
- 前置过滤城市区域
6.2 支付对接难题
微信支付遇到的证书问题:
- 开发环境用PKCS12格式证书
- 生产环境需要换成PEM格式
- 必须配置证书自动更新逻辑
解决方案代码:
java复制public WXPay initWXPay() {
InputStream certStream = getCertStream(); // 自动识别环境
return new WXPay(config, certStream, "商户号");
}
6.3 并发订单冲突
使用乐观锁解决库存竞争:
java复制@Transactional
public boolean bookService(Long serviceId, Integer quantity) {
Service service = serviceMapper.selectById(serviceId);
if (service.getAvailable() < quantity) {
return false;
}
int rows = serviceMapper.updateAvailable(
serviceId,
service.getVersion(),
service.getAvailable() - quantity
);
return rows > 0;
}
7. 扩展方向建议
-
智能合约扩展:
- 使用区块链存证服务过程
- 智能合约自动结算款项
- 宠物健康数据上链
-
IoT设备集成:
- 智能喂食器API对接
- 宠物摄像头实时监控
- 智能项圈运动数据同步
-
大数据分析:
- 服务热力图预测
- 宠物行为分析
- 动态定价模型优化
这套系统经过三个月的实际运营验证,目前已在本地宠物社区服务超过2000名用户。最大的收获是:技术方案必须服务于真实的业务需求,我们通过持续收集用户反馈,先后迭代了11个版本,才打磨出现在的产品形态。