对于这些问题,我们构建了比较完整的windowingmodol的实时计算模型:在hbase上存储细粒度的delta数据,这一部分的数据是实时更新的,每次更新时计算pipeline会通过kafka写入一个WAL,有一个Pusher组件会监听这个WAL,并可以根据自定义的策略对不同的数据表采用不同的window计算模型;在pusher层面,支持各种时间窗口淘汰策略,包括Fixedwindow,session window,slidingwindow,decay,last value win等, 问题4:高性能存储引擎 一点资讯在高峰期产生的2M+QPS的读请求,和200K+的更新量,因此对我们线上的分布式存储系统会有比较高的性能要求,市面上线程的分布式存储方案都不能解决我们面临的问题。 因此我们开发了自己的分布式存储系统NeoDB,底层基于Rocksdb,上层使用ThriftRPC,我们对系统层次做了很多的优化,,包括把一些部分计算可以推到最底下节点上、减少Compaction的层次,控制Compaction对于读请求的影响、控制写放大,优化缓存命中率等。 问题5:如何监控和维护整个系统 最后一个问题怎么样做监控和维护整个系统。这里面涉及到一些问题,主要包括怎么对数据流lag做监控报警。对流式计算如何做profiling,线上如何做负载均衡等。我们针对这些问题开发了两个系统,一个是监控我们做了YMetric的监控系统。客户端兼容codahale metrics库,会将metric汇总发送到Kafka中,并由我们统一的Storm Pipeline进行聚合计算,结果存储在openTSDB之中。我们的这套系统支持多Metric的自定义计算、报警、Trending预测等。 另外一个系统是ycluster服务,她有点像Apache Helix,但是我们做的更为简单易用,YCluster是一套基于Zookeeper的分布式负载均衡和机群管理系统,支持Multiple Service Namespace、Hash Sharding、Multiple Replica。同时我们基于YCluster做了Neo系统的Smart Client,通过这套Smart Client完成路由和负载均衡的工作,我们支持多种不同负载均衡的算法,包括简单的Random和Round-Robin、,同时我们做了一个叫做link Scheduler的负载均衡的算法,可以支持多数据中心中的本地优先调度,并支持相同副本的优先调度,从而大幅度提升了缓存命中率。 我们这套东西大概线上跑了一年多了不到两年,目前承担了一点资讯一直以来快速服务的增长,这里面就是今天我跟大家介绍的东西,j2直播,另外补充一点是说,我们也欢迎对一点资讯感兴趣的同学加入进来。 (责任编辑:本港台直播) |