之前思考过一个问题,storm程序自己编写多个程序放在不同机器上通过负载均衡软件实现分布式对比 ==== 运维,部署简单 ==== * storm:编写好storm程序后提交任务,自动分发到各个节点 * 自己编写的程序:每个把jar发上传到每个节点,且依赖前端负载均衡软件 ==== 高度容错 ==== * storm:线程挂了可以自动重启 * 自己编写的程序:自己维护线程健康状态 ==== 可靠性好,无数据丢失 ==== * storm: 经典的ack机制,保证消息不丢失 * 自己编写的程序:可能需要其他逻辑去保证 ==== 易于扩展 ==== * storm:添加机器,部署storm即可,对跑在storm上的应用程序无影响 * 自己编写的程序:对每个程序都有影响 ==== 便于开发和调试 ==== * storm: 支持本地模式 * 自己编写的程序:不知道怎么处理 ==== 能运行超大任务 ==== * storm: 以整个集群为单位 * 自己编写的程序:以机器为单位,当负载均衡软件将任务分发过来后,就不会与其他机器交互了 ==== 资源利用率高,架构非常合理 ==== * storm: 对程序步骤抽象成bolt进行调度。调度非常灵活,消除瓶颈(某些步骤运行时间过长,影响整体性能),保证最大并发 * 如下图,有三个步骤,第一个步骤消耗1个时间单位,第2个步骤消耗3个时间单位,第三个步骤消耗1个时间单位 * 我们可以为第一个步骤分配1个线程,第二个步骤分配3个线程,第三个线程分配1个线程。 * 只要分配比例,步骤1:步骤2:步骤3 = 1:3:1 即可最大并行化 * 还可以监控每个步骤的实际运行状况,动态调整资源分配 * 自己编写的程序:要实现这些功能成本太高 {{:pasted:20160512-101311.png}}