2017年-Talkingdata_【T112017-数据工程和技术分会场】高可用数据服务交易系统架构实践_19页_6mb
报告摘要
高可用数据服务交易系统架构实践总结
核心内容概述
本文档由TalkingData研发总监何坤主讲,围绕高可用数据服务交易系统的架构设计与演进展开,重点介绍了系统如何实现高可用性与高计量准确性的目标。系统通过多层架构设计、异步处理、服务降级与重算机制、分布式部署与资源限制等手段,构建了一个稳定、高效、可扩展的数据服务交易系统。
主要观点与关键信息
1. 服务调用与业务逻辑
- 系统通过Gateway进行服务调用,关键路径是服务调用流程。
- 服务调用需满足以下要求:
- 计量准确无误:确保数据计算结果的精确性。
- 交易-计量闭环:支持高并发下的实时计量。
- 容错性:系统需具备应对故障的能力。
2. 异步计量机制
- 异步计量用于降低系统耦合、缓解数据库压力、应对高并发场景,并易于扩展。
- 具体实现包括:
- 消息队列:用于处理异步任务。
- 调用日志:记录所有服务调用,便于追踪与分析。
- 批处理层:按天存储计量结果。
- 主数据集:日志存储于ElasticSearch。
- 速度层:实时数据存储于Redis。
- 服务层:按天进行预计算。
- 查询服务:Metering模块用于查询。
3. 架构演进
- 初始架构:实现基础功能,如服务调用与数据存储。
- 架构优化:通过拆分和合并功能模块,提高系统效率。
- Lambda架构:分为主数据集、批处理层、速度层和服务层,支持实时与离线数据处理。
4. 高可用性目标
- 系统需实现 99.9% 的可用性,即每年不可用时间不超过9小时,每月不超过1小时。
- 实现方式包括:
- 事前预防:通过架构设计和资源管理预防故障。
- 事中自动化故障转移:在故障发生时自动切换服务。
- 故障感知:实时监控系统状态,及时发现异常。
- 事后恢复:通过监控与报警机制实现快速恢复。
5. 分布式部署与无状态设计
- 所有服务通过Nginx调用,采用多upstream和轮询机制。
- 服务设计为无状态,状态保存于中央存储(如MySQL、Redis)。
- 所有调用需携带
trackid,便于问题定位与故障恢复。
6. 降低关键路径复杂性与负载
- 关键路径是通过Gateway的服务调用。
- 系统设计遵循“专注核心业务,减少复杂逻辑与数据依赖”的原则。
- 所有服务调用需设置超时,避免因外部服务故障影响整体系统。
7. 资源限制与容错机制
- 通过以下机制限制资源使用,防止故障或无效调用导致资源耗尽:
- 熔断机制:当服务调用失败率过高时,自动熔断,防止雪崩效应。
- 限制用户pending状态的请求数:防止用户请求堆积。
- 分服务SLA:为不同服务设置不同的服务等级协议。
- 独立适配器:确保各服务模块独立运行,互不影响。
8. 消息系统选择
- 选择支持以下特性的消息系统:
- 数据可持久化
- 支持订阅和队列两种方式
- 高性能
- 具有水平扩展性
9. 监控与报警
- 白盒监控:
- 所有服务上线前必须配置基本监控与报警。
- 监控基础组件与业务指标。
- 使用调用追踪系统进行问题定位。
- 黑盒监控:
- Nginx监控与报警。
- 探针和心跳监控。
- 外部可用性(端到端)监控与报警。
10. 灰度发布与故障减少
- 使用灰度系统减少更新带来的故障风险。
- 实现方式包括:
- 基于用户标识和Lua的Nginx分流。
- 配合SCM系统进行版本控制。
- 与探针结合使用,确保新版本稳定后再全面上线。
总结
该数据服务交易系统通过分层架构(Lambda架构)、异步处理、分布式部署、资源限制与监控报警等手段,实现了高可用性和高计量准确性的目标。系统设计强调模块化、容错性与可扩展性,以应对高并发和复杂业务场景,同时通过灰度发布机制减少更新带来的风险。整体架构在保证服务稳定性的前提下,提升了系统的灵活性与可维护性。
展开完整摘要
试读结束,高清完整版pdf/doc/ppt,请点下载