共计 2049 个字符,预计需要花费 6 分钟才能阅读完成。
业务场景与挑战
现代技能交易平台 (Skill Marketplace) 需要处理复杂的实时交互场景。以家教平台为例:

- 即时匹配需求:学生发布需求后,系统需在 300ms 内返回符合条件的教师列表
- 双盲评价体系:服务完成后双方互评需保证评价不可篡改且延迟低于 1 秒
- 动态定价:钢琴陪练等稀缺技能需根据供需关系实时调整价格
架构选型
Monolith vs Microservices
- 单体架构痛点:
- 支付模块 CPU 密集型操作阻塞评价系统 IO 请求
- 技能检索功能无法单独扩展
-
发版时所有服务必须同时部署
-
微服务优势:
graph TD A[API Gateway] --> B[Skill Service] A --> C[Payment Service] A --> D[Rating Service] B --> E[Elasticsearch] C --> F[PostgreSQL]
核心实现
1. 技能搜索优化
// 自定义分词器配置
@Bean
public RestHighLevelClient elasticsearchClient() {
return new RestHighLevelClient(
RestClient.builder(new HttpHost("es-cluster", 9200, "http")
).setRequestConfigCallback(builder -> builder.setSocketTimeout(30000)
)
);
}
// 搜索示例:钢琴 + 即兴伴奏 +10km 内
SearchRequest request = new SearchRequest("skills");
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder()
.query(QueryBuilders.boolQuery()
.must(QueryBuilders.matchQuery("category", "钢琴"))
.must(QueryBuilders.matchQuery("tags", "即兴伴奏"))
.filter(QueryBuilders.geoDistanceQuery("location")
.distance("10km")
.point(39.9, 116.4)));
2. 分布式事务处理
// Saga 补偿示例
@SagaAction(compensationMethod = "cancelBooking")
public void reserveTimeSlot(BookingRequest request) {
// 预留时间段
bookingRepository.updateStatus(request.getBookingId(),
BookingStatus.RESERVED);
}
public void cancelBooking(BookingRequest request) {
// 超时后自动释放
bookingRepository.updateStatus(request.getBookingId(),
BookingStatus.AVAILABLE);
}
3. 混合鉴权方案
# application-security.yaml
security:
oauth2:
resourceserver:
jwt:
issuer-uri: https://auth.skill-market.com
audience: skill-service
client:
registration:
google:
client-id: ${OAUTH_GOOGLE_CLIENT}
scope: profile,email
性能优化
压测数据(AWS c5.2xlarge)
| 接口类型 | QPS | P99 延迟 | 错误率 |
|---|---|---|---|
| 技能搜索 | 12k | 210ms | 0.01% |
| 支付确认 | 8k | 150ms | 0% |
| 评价提交 | 5k | 90ms | 0.02% |
分片策略
-- 用户表按地理位置分片
CREATE TABLE users (
id BIGINT PRIMARY KEY,
region VARCHAR(4) NOT NULL,
...
) PARTITION BY LIST (region);
CREATE TABLE users_east PARTITION OF users
FOR VALUES IN ('CN-E', 'JP', 'KR');
安全合规
证书验证流程
- 用户上传 PDF 证书
- 提取数字指纹(SHA-256)
- 与发证机构 API 校验
- 结果写入区块链
PCI DSS 关键控制点
- 支付页面直接嵌入 PCI 认证的 iframe
- 敏感数据仅通过 token 引用
- 每季度执行 ASV 扫描
生产检查清单
缓存预热策略
- 启动时加载 Top 10% 热门技能
- 地理围栏数据预加载 Redis
- 支付限额配置预载入内存
异常订单排查
- 使用 ELK 收集全链路日志
- 设置自动告警规则:
- 同一技能 30 分钟内取消 >5 次
- 支付成功但状态未更新
- 评价内容包含敏感词
总结
构建 Skill Marketplace 需要平衡实时性与一致性,本文方案通过:
- 领域驱动划分服务边界
- 最终一致性保证核心流程
- 分层安全防护体系
实际运行中需持续监控匹配成功率与支付转化率,建议每季度进行架构评审以适应业务变化。
正文完
发表至: 技术架构
近一天内
