知识卡片
Storm高性能设计的五条原则:优化的前提永远是测量,而不是主观臆测
内容
为了在Storm上达到高性能,设计和开发Topology时需要遵循几条原则:模块和模块之间要解耦、层次要清晰,每个模块能够独立扩展,并且符合流水线处理的原则;采用无状态设计、无锁设计、支持水平扩展;要认识到吞吐量和延迟之间存在根本性的取舍——为了达到更高的吞吐量,延迟往往会随之增大,反过来为了降低延迟,可能就要牺牲一部分吞吐量,两者需要根据业务实际需求找到合适的平衡点;性能的瓶颈永远出现在热点上(某个组件、某个环节因为负载分配不均而成为整个系统的短板),解决性能问题的关键就是识别并解决这些热点。这四条原则各自都有具体的应用场景,但最后一条原则的地位更加根本:”优化的前提是测量,而不是主观臆测。收集相关数据后再动手,事半功倍”——这条原则实际上是在为前面所有具体的调优手段(比如Worker数量、fieldsGrouping策略、Execute latency和Capacity这些指标)提供一个统一的方法论基础:任何一次性能优化行动,都应该先通过实际测量拿到具体、客观的数据,确认问题真正出在哪个环节、瓶颈的具体表现是什么,再针对性地采取行动;而不是凭经验或直觉猜测”这里可能有问题”就直接动手改代码、调参数。这个案例揭示了一条贯穿整个性能优化实践的元原则:无论掌握了多少具体的调优技巧和经验规律(比如”Worker数量不是越多越好”“不要在Spout里做耗时操作”),这些经验规律终究是从别人的具体场景里总结出来的,未必能直接套用到自己面临的具体问题上——真正可靠的优化路径永远是”先测量、后动手”,用测量得到的数据去验证问题的真实位置和性质,再决定该采用哪一条具体的经验规律去应对,而不是跳过测量这一步、直接套用某条听起来合理的经验规律。
参考来源
- 位置:《高可用架构(第1卷)》第6章《大数据与数据库》"6.2 实时计算在点评"节,"6.2.6 Storm使用经验分享"(源文件:_epub-src/OEBPS/Text/Chapter6_2_7.xhtml)
- 结论依据:原文列出"模块和模块之间解耦……无状态设计、无锁设计、水平扩展支持……为了达到高的吞吐量,延迟会加大……性能的瓶颈永远在热点,要解决热点问题。优化的前提是测量,而不是主观臆测。收集相关数据后再动手,事半功倍",直接支撑本卡片结论。
- 原始内容:性能的瓶颈永远在热点,要解决热点问题。优化的前提是测量,而不是主观臆测。收集相关数据后再动手,事半功倍。