系统设计上考虑实时数据服务集群和历史数据服务集群. 实时数据服务集群采用 Zookeeper 集群管理技术, 搭建数据采集适配解析器 (控制转发器) 程序, 在线数据流处理 (Storm), 分布式消息队列(Kafka) 的集群应用; 采用 Redis-cluster 技术, 搭建内存数据库 (Redis) 的集群应用; 采用 MySQL Cluster 技术, 搭建关系型数据库 MySQL 的集群应用; 采用 Nginx 配置和管理 web 服务 (Tomcat) 的负载均衡应用; 历史数据服务集群采用 Zookeeper 集群管理技术, 搭建时间序列大数据库 OpenTSDB, 依靠自身的节点发现, 加入和恢复功能.
通过 Zookeeper 对至少 3 台台服务器上分布式消息队列 Kafka 构建集群, 至少 3 个 Kafka 作为消息代理, 其中运行着若干个 Partition, 由 Zookeeper 决定解析适配器的消息推送到哪个 Partition, 实现负载均衡, 同时保证无单点故障. 当任何一套服务出现故障, 将数据流立即切换到其他负载最小的服务上.
实时数据处理采用流式数据处理服务 Storm 完成. 通过 Zookeeper 对至少 3 台服务器上 Storm 构建集群, 无单点故障, 至少 3 个节点是平等的, 通过选举机制实现负载均衡, 集群控制单元会选择最适合的 Storm 服务处理进入的数据流. Storm 中的 Spouts 作为 Kafka 消费者, 通过 Bolts 和 Streams Groupings 对实时采集的监测, 状态和告警等消息进行过滤, 合并, 保存等处理, 处理结果保存至内存数据库 Redis 中.
实时数据存储采用 Key-Value 内存数据库 Redis 实现. 采用 Redis4.0 自带的集群能力构建集群, 主从节点读写分离, 高效运行, 无单点故障. Storm 将处理完的数据发送到 Redis 的内存中存储, Redis 之间通过集群同步数据. 每个 Redis 中缓存实时的告警数据, 状态变化数据和测量数据, 用作监测, 查询和实时汇总.
Web 服务层采用 tomcat 作为容器, 在至少 3 台服务器上部署 tomcat, 通过 Nginx 构建 WebSever 集群. 通过 Nginx 实现客户端浏览器请求的负载均衡, 保证客户端 Web 请求无单点故障, 同时能够实现不间断服务更新和扩展业务系统. 实时监测和展示所需要的实时数据将通过 Redis 内存 + WebSocket 方式推送到浏览器中, 秒级响应, 能够保证 50 万 / 秒峰值并发量, 保证客户端 3 秒之内的查询效率.
采用 Zookeeper 集群管理技术, 搭建时间序列大数据库 OpenTSDB 集群. 至少 3 台服务器构建集群, 保证无单点故障的前提.
来源: http://www.jianshu.com/p/617960760260