微博亿级用户高可用架构体系建设
微博的业务场景和挑战
微博作为亿级用户的平台,面临的主要挑战包括:
- 海量数据处理:每日处理亿级评论、赞内容,新增关注订阅关系千万级,需要具备海量数据存储能力。
- 高并发性能:用户请求量大,性能要求高,热点峰值流量不可预测,高可用挑战大。
- 架构挑战:数据存储、请求处理、服务依赖、容灾等方面的问题。
架构挑战具体表现
- 容量问题:数据存储容量不足,请求容量无法支撑。
- 性能问题:服务响应慢,资源成本高。
- 依赖问题:个别非核心资源拖死整个服务。
- 容灾问题:机房、专线故障导致服务不可用。
构建高可用架构体系
针对上述挑战,微博构建了高可用架构体系,主要包括:
容量问题应对方案
- 海量数据存储架构:
- 容量预估:评估业务场景、数据规模和读写比例。
- 存储选型:关系型数据库 vs NoSQL 数据库(成本&效率)。
- 性能基准:建立读写安全指标,监控及报警阈值。
- 扩展预案:存储容量扩容预案,请求容量扩容预案。
- 应对数据累积:通过监控和预案解决数据存储问题。
性能问题应对方案
- 分布式缓存架构:
- 容量预估:评估业务场景、缓存时长及缓存数据规模。
- 缓存选型:本地缓存 vs 分布式缓存。
- 性能基准:建立读写安全指标,监控及报警阈值。
- 扩展预案:缓存容量扩容预案,请求容量扩容预案。
依赖问题应对方案
- 微服务架构:
- 优势:促进服务松耦合、高内聚,RPC调用方式提升效率。
- 微博开源的跨语言服务化框架 Motan:Motan GitHub。
- 问题:运维复杂度增加。
- Docker容器化:
- 混合云架构:结合容器化和混合云技术实现实时可伸缩的弹性系统,低成本应对突发热点峰值。
容灾问题应对方案
- 分布式系统的CAP理论:
- Consistency(一致性):更新操作成功后,所有节点数据保持一致。
- Availability(可用性):读和写操作一直成功。
- Partition tolerance(分区容忍性):网络故障时系统仍可用。
- 新浪微博多机房技术架构:
- 降低一致性到最终一致性。
- 用MC和WMB解决同步数据效率问题。
- 用MySQL主从同步保障数据最终一致性。
- 新浪微博多可用区部署架构:
- 可用区内形成资源和服务依赖闭环。
- 核心服务多可用区部署。
- 每个可用区可独立扩容。
- 建立流量调度机制及容灾切换预案,定期演练。
服务治理
- Service-Level-Agreement(SLA):
- 量化指标,明确职责。
- 确保上下游团队建立良好默契。
新的探索与展望