一、上云决策:从传统架构到云原生转型的必然性
百度知道作为国内首个知识问答社区,早期采用单体架构部署在物理服务器上。随着用户量突破亿级,系统面临三大核心挑战:
- 性能瓶颈:每日数千万次问答请求导致数据库连接池耗尽,单机QPS(每秒查询率)长期徘徊在3000左右,无法满足突发流量需求。
- 运维复杂度:应用依赖的中间件(如Redis、Kafka)分散部署在多台物理机,版本升级需停机维护,平均每月耗时8小时。
- 资源利用率低:非高峰时段服务器CPU使用率不足20%,但为应对峰值仍需保留3倍冗余资源。
2018年启动的上云项目,核心目标是通过云原生架构实现弹性伸缩、自动化运维和成本优化。技术团队选择百度智能云作为基础设施,主要基于三点考量:
- 兼容性:云平台提供与原有技术栈高度匹配的PaaS服务(如BOS对象存储、CDB数据库),迁移成本降低40%。
- 弹性能力:支持按秒计费的弹性计算实例,配合自动伸缩组(ASG)可将资源利用率提升至75%。
- 安全合规:通过等保2.0三级认证,满足知识社区对用户数据保护的严格要求。
二、架构演进:四阶段技术升级路径
阶段1:基础设施云化(2018-2019)
将原有物理机迁移至云服务器(CVM),重点解决两个问题:
- 存储分离:将问答内容从本地磁盘迁移至BOS对象存储,读写延迟从50ms降至5ms,存储成本下降65%。
- 数据库拆分:采用分库分表中间件(如ShardingSphere)将用户表拆分为16个逻辑库,单表数据量从1.2亿条降至800万条,查询响应时间从2.3秒降至320ms。
关键代码示例:
// ShardingSphere配置示例spring.shardingsphere.datasource.names=ds0,ds1spring.shardingsphere.sharding.tables.user.actual-data-nodes=ds$->{0..1}.user_$->{0..7}spring.shardingsphere.sharding.tables.user.table-strategy.inline.sharding-column=user_idspring.shardingsphere.sharding.tables.user.table-strategy.inline.algorithm-expression=user_$->{user_id % 8}
阶段2:应用容器化(2020)
引入Kubernetes(BKE)实现应用标准化部署,解决以下痛点:
- 环境一致性:通过Docker镜像将开发、测试、生产环境差异从12%降至2%。
- 发布效率:灰度发布周期从4小时缩短至15分钟,支持按流量比例(10%/30%/60%)逐步放量。
- 故障隔离:单个Pod崩溃时自动重启,业务可用性从99.9%提升至99.95%。
实施要点:
- 资源限制:为每个Pod设置CPU请求(0.5核)和内存限制(1GB),防止资源争抢。
- 健康检查:配置livenessProbe(/health接口,30秒间隔)和readinessProbe(/ready接口,10秒间隔)。
- 日志收集:通过Filebeat+ELK方案实现日志集中管理,问题定位时间从2小时降至10分钟。
阶段3:微服务化(2021)
将单体应用拆分为20+个微服务,采用Spring Cloud Alibaba生态构建服务治理体系:
- 服务注册:通过Nacos实现服务自动发现,注册中心宕机时业务不受影响(本地缓存维持30分钟)。
- 流量控制:Sentinel规则引擎支持QPS阈值(如问答服务5000/s)、并发线程数(100)等多维度限流。
- 链路追踪:SkyWalking APM实现全链路调用分析,平均排查时间从2小时降至8分钟。
典型场景:
当用户发布问答时,系统需调用内容审核、标签分类、推荐计算等6个服务。通过Sentinel的熔断机制,当审核服务响应时间超过500ms时,自动降级为异步审核,确保主流程不受阻。
阶段4:Serverless化(2022-至今)
针对低频高并发场景(如夜间问答审核),采用函数计算(FC)实现:
- 冷启动优化:通过预留实例(Pre-warm)将函数冷启动时间从2秒降至200ms。
- 按需计费:审核函数日均调用量12万次,成本较常驻ECS降低72%。
- 弹性扩缩:并发数从0自动扩展至500仅需38秒,完美承接突发流量。
三、实施效果与行业启示
量化收益
- 性能提升:系统整体QPS从3000提升至2.1万,99分位响应时间从1.8秒降至450ms。
- 成本优化:单位问答成本从0.032元降至0.011元,年节省IT支出超2000万元。
- 运维效率:MTTR(平均修复时间)从4.2小时降至18分钟,发布频率从每月1次提升至每周3次。
实践建议
- 渐进式改造:优先将无状态服务容器化,再逐步拆分有状态服务。
- 可观测性建设:部署Prometheus+Grafana监控体系,关键指标(如错误率、延迟)需保留90天历史数据。
- 混沌工程实践:定期注入网络延迟、实例终止等故障,验证系统容错能力。
百度知道的上云与架构演进,本质是通过技术杠杆实现业务敏捷性与资源效率的双重提升。对于日均请求量超千万的互联网应用,其分阶段改造路径(基础设施云化→容器化→微服务化→Serverless化)具有普适参考价值。技术团队应结合自身业务特点,在稳定性、性能、成本间找到最优平衡点。